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.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/package.json +10 -10
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadHTTPServer.js +1 -1
- package/utility/scripts/restartHdb.js +1 -1
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
`,hA={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},TA=["*","%"],fA="unauthorized_access",mA="func_val",AA={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},RA={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},gA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},NA={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},pA={HTTP:"http"},OA={STOPPED:"stopped",ONLINE:"online"},IA="3.x.x";sc.exports={LOCAL_HARPERDB_OPERATIONS:F,HDB_SUPPORT_ADDRESS:W_,HDB_SUPPORT_URL:J_,HDB_PRICING_URL:zf,SUPPORT_HELP_MSG:jf,LICENSE_HELP_MSG:X_,HDB_PROC_NAME:$_,HDB_PROC_DESCRIPTOR:ga,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ws,CLUSTERING_HUB_PROC_DESCRIPTOR:Ks,SYSTEM_SCHEMA_NAME:mm,HASH_FOLDER_NAME:Am,HDB_HOME_DIR_NAME:Rm,UPDATE_FILE_NAME:Om,LICENSE_KEY_DIR_NAME:Nm,BOOT_PROPS_FILE_NAME:pm,JOB_TYPE_ENUM:jm,JOB_STATUS_ENUM:$m,SYSTEM_TABLE_NAMES:Fm,SYSTEM_TABLE_HASH_ATTRIBUTES:qm,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:Km,S3_BUCKET_AUTH_KEYS:Wm,VALID_SQL_OPS_ENUM:Qm,GEO_CONVERSION_ENUM:Xm,HDB_SETTINGS_NAMES:j_,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Zm,SERVICE_ACTIONS_ENUM:Jm,CLUSTER_MESSAGE_TYPE_ENUM:eA,CLUSTER_CONNECTION_DIRECTION_ENUM:tA,CLUSTER_EVENTS_DEFS_ENUM:iA,PERIOD_REGEX:am,DOUBLE_PERIOD_REGEX:om,UNICODE_PERIOD:_m,FORWARD_SLASH_REGEX:cm,UNICODE_FORWARD_SLASH:um,ESCAPED_FORWARD_SLASH_REGEX:Em,ESCAPED_PERIOD_REGEX:lm,ESCAPED_DOUBLE_PERIOD_REGEX:dm,REG_KEY_FILE_NAME:km,RESTART_TIMEOUT_MS:bm,HDB_FILE_PERMISSIONS:Lm,SCHEMA_DIR_NAME:wm,TRANSACTIONS_DIR_NAME:Mm,LIMIT_COUNT_NAME:Dm,ID_ATTRIBUTE_STRING:Pm,INSERT_MODULE_ENUM:Gm,UPGRADE_JSON_FIELD_NAMES_ENUM:vm,RESTART_CODE:Im,RESTART_CODE_NUM:Cm,CLUSTER_OPERATIONS:Br,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Vm,HDB_INTERNAL_SC_CHANNEL_PREFIX:ge,INTERNAL_SC_CHANNELS:xm,CLUSTERING_MESSAGE_TYPES:lA,HDB_FILE_SUFFIX:gm,BLOB_FOLDER_NAME:ym,HDB_TRASH_DIR:Um,ORIGINATOR_SET_VALUE:dA,LICENSE_VALUES:sA,RAM_ALLOCATION_ENUM:nA,STORAGE_TYPES_ENUM:rA,TIME_STAMP_NAMES_ENUM:tc,TIME_STAMP_NAMES:cA,PERMS_UPDATE_RELEASE_TIMESTAMP:uA,SEARCH_NOT_FOUND_MESSAGE:em,SEARCH_ATTRIBUTE_NOT_FOUND:tm,LICENSE_ROLE_DENIED_RESPONSE:rm,LICENSE_MAX_CONNS_REACHED:sm,BASIC_LICENSE_MAX_NON_CU_ROLES:Q_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Zf,VALUE_SEARCH_COMPARATORS:rc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:EA,LICENSE_FILE_NAME:Ym,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:aA,NEW_LINE:SA,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:im,MOMENT_DAYS_TAG:Sm,API_TURNOVER_SEC:hm,LOOPBACK:nm,CODE_EXTENSION:$s,WILDCARD_SEARCH_VALUE:Tm,NODE_ERROR_CODES:oA,JAVASCRIPT_EXTENSION:Y_,PERMS_CRUD_ENUM:hA,UNAUTHORIZED_PERMISSION_NAME:fA,SEARCH_WILDCARDS:TA,FUNC_VAL:mA,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:AA,JWT_ENUM:RA,CLUSTERING_FLAG:_A,ITC_EVENT_TYPES:gA,CUSTOM_FUNCTION_PROC_NAME:K_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ys,SERVICES:NA,THREAD_TYPES:pA,MEM_SETTING_KEY:fm,HDB_RESTART_SCRIPT:Gf,PROCESS_DESCRIPTORS:Vf,SERVICE_SERVERS:Wf,SERVICE_SERVERS_CWD:Ra,PROCESS_DESCRIPTORS_VALIDATE:$f,LAUNCH_SERVICE_SCRIPTS:Qf,LOG_LEVELS:Yf,PROCESS_NAME_ENV_PROP:Hm,LOG_NAMES:kf,PM2_PROCESS_STATUSES:OA,CONFIG_PARAM_MAP:ec,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Pf,HDB_DEFAULT_CONFIG_FILE:Hf,ROLE_TYPES_ENUM:Jf,BOOT_PROP_PARAMS:Z_,INSTALL_PROMPTS:Bm,HDB_ROOT_DIR_NAME:Bf,CLUSTERING_PROCESSES:Kf,FOREGROUND_PID_FILE:qf,PACKAGE_ROOT:At,PRE_4_0_0_VERSION:IA,SCHEMAS_PARAM_CONFIG:zm,HDB_PID_FILE:xf}});var oc=h((uP,ac)=>{"use strict";var nc=require("minimist");ac.exports=CA;function CA(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ic(process.env),s=ic(nc(process.argv))):(r=process.env,s=nc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(CA,"assignCMDENVVariables");function ic(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ic,"objKeysToLowerCase")});var O=h((lP,Ac)=>{"use strict";var _r=require("fs-extra"),{workerData:bA,threadId:LA}=require("worker_threads"),Rt=require("path"),uc=require("yaml"),Ec=require("properties-reader"),j=f(),_c=oc(),yA=require("os"),{PACKAGE_ROOT:pa}=f(),lc={};for(let e in console)lc[e]=console[e];var le={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},dc={STDOUT:"stdOut",STDERR:"stdErr"},UA=Rt.join(pa,"logs"),wA=Rt.join(pa,"config/yaml/",j.HDB_DEFAULT_CONFIG_FILE),MA=1e4,rt,st,Ee,Qs,Js,Xs,vr,Gr;Gr===void 0&&Sc();Ac.exports={notify:fc,fatal:mc,error:Fr,warn:ba,info:Zs,debug:Ca,trace:Ia,setLogLevel:FA,log_level:Ee,loggerWithTag:DA,suppressLogging:PA,initLogSettings:Sc,setupConsoleLogging:hc,logCustomLevel:GA,closeLogFile:Oa,getLogFilePath:()=>Xs,OUTPUTS:dc};function Sc(e=!1){try{if(Gr===void 0||e){Oa();let t=vA();Gr=Ec(t);let r=_c(["ROOTPATH"]);({level:Ee,config_log_path:Js,to_file:rt,to_stream:st}=qA(r.ROOTPATH?Rt.join(r.ROOTPATH,j.HDB_CONFIG_FILE):Gr.get("settings_path"))),Qs=j.LOG_NAMES.HDB,Xs=Rt.join(Js,Qs)}}catch(t){if(Gr=void 0,t.code===j.NODE_ERROR_CODES.ENOENT){let r=_c(Object.keys(j.CONFIG_PARAM_MAP),!0);for(let o in r){let _=j.CONFIG_PARAM_MAP[o];_&&_.toLowerCase();let c=r[o];if(_===j.CONFIG_PARAMS.LOGGING_LEVEL){Ee=c;continue}if(_===j.CONFIG_PARAMS.LOGGING_STDSTREAMS){st=c;continue}_===j.CONFIG_PARAMS.LOGGING_FILE&&(rt=_)}let{default_level:s,default_to_file:n,default_to_stream:i}=xA();rt=rt===void 0?n:rt,rt=cc(rt),st=st===void 0?i:st,st=cc(st),Ee=Ee===void 0?s:Ee,Js=UA,Qs=j.LOG_NAMES.INSTALL,Xs=Rt.join(Js,Qs);return}throw Fr("Error initializing log settings"),Fr(t),t}hc()}a(Sc,"initLogSettings");var Na=!0;function hc(){or("error",Fr),or("warn",ba),or("log",Zs),or("info",Zs),or("debug",Ca),or("trace",Ia)}a(hc,"setupConsoleLogging");function or(e,t){console[e]=function(...r){if(Na&&t(...r),!/PM2 log:|App \[/.test(r[0]))return lc[e](...r)}}a(or,"logConsole");function DA(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(fc),fatal:r(mc),error:r(Fr),warn:r(ba),info:r(Zs),debug:r(Ca),trace:r(Ia)};function r(s){return function(...n){return s(t,...n)}}}a(DA,"loggerWithTag");function PA(e){try{Na=!1,e()}finally{Na=!0}}a(PA,"suppressLogging");var HA=bA?.name?.replace(/ /g,"-")||"main";function nt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],_=0,c;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),_++):t[0]?.serviceName&&(c=t[0]?.serviceName,_++)),o.unshift(c||HA+"/"+LA);_<n;_++){let u=t[_];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,_<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
3
|
`}a(nt,"createLogRecord");function qr(e){rt&&Tc(e),st&&process.stdout.write(e)}a(qr,"logStdOut");function zs(e){rt&&Tc(e),st&&process.stderr.write(e)}a(zs,"logStdErr");function Tc(e){BA(),_r.appendFileSync(vr,e)}a(Tc,"logToFile");function Oa(){try{_r.closeSync(vr)}catch{}vr=null}a(Oa,"closeLogFile");function BA(){vr||(vr=_r.openSync(Xs,"a"),setTimeout(()=>{Oa()},MA).unref())}a(BA,"openLogFile");function Zs(...e){le[Ee]<=le.info&&qr(nt("info",e))}a(Zs,"info");function Ia(...e){le[Ee]<=le.trace&&qr(nt("trace",e))}a(Ia,"trace");function Fr(...e){le[Ee]<=le.error&&zs(nt("error",e))}a(Fr,"error");function Ca(...e){le[Ee]<=le.debug&&qr(nt("debug",e))}a(Ca,"debug");function fc(...e){le[Ee]<=le.notify&&qr(nt("notify",e))}a(fc,"notify");function mc(...e){le[Ee]<=le.fatal&&zs(nt("fatal",e))}a(mc,"fatal");function ba(...e){le[Ee]<=le.warn&&zs(nt("warn",e))}a(ba,"warn");function GA(e,t,...r){t===dc.STDERR?zs(nt(e,r)):qr(nt(e,r))}a(GA,"logCustomLevel");function vA(){let e;try{e=yA.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Rt.join(e,j.HDB_HOME_DIR_NAME,j.BOOT_PROPS_FILE_NAME);return _r.existsSync(t)||(t=Rt.join(pa,"utility/hdb_boot_properties.file")),t}a(vA,"getPropsFilePath");function FA(e){Ee=e}a(FA,"setLogLevel");function cc(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(cc,"autoCastBoolean");function qA(e){try{if(e.includes("config/settings.js")){let o=Ec(e);return{level:o.get(j.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Rt.dirname(o.get(j.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=uc.parseDocument(_r.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===j.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(qA,"getLogConfig");function xA(){try{let e=uc.parseDocument(_r.readFileSync(wA,"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(xA,"getDefaultConfig")});var gc=h((SP,Rc)=>{"use strict";var VA=require("util"),kA=require("path"),YA=require("child_process"),$A=VA.promisify(YA.execFile),KA=1e3*1e3*10;Rc.exports={findPs:WA};async function WA(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await $A("ps",["wwxo",`pid,${r}`],{maxBuffer:KA});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:kA.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(WA,"findPs")});var ne=h((TP,pc)=>{"use strict";var QA="__dbis__",JA="__environment_name__",XA="__dbi_defintion__",ZA={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"},zA=["__createdtime__","__updatedtime__"],jA="\uFFFF",Nc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},eR=Object.values(Nc);pc.exports={INTERNAL_DBIS_NAME:QA,DBI_DEFINITION_NAME:XA,SEARCH_TYPES:ZA,TIMESTAMP_NAMES:zA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:JA,TRANSACTIONS_DBI_NAMES_ENUM:Nc,TRANSACTIONS_DBIS:eR,OVERFLOW_MARKER:jA}});var Me=h((fP,Mc)=>{"use strict";var Oc=f(),Ic=ne(),Cc={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},bc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Lc={500:bc("There was an error processing your request."),400:"Invalid request"},tR=Lc[Cc.INTERNAL_SERVER_ERROR],rR={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.`},sR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},nR={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"},iR={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 ${Ic.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ic.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"},aR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Oc.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 ${Oc.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"},yc={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"},oR={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."},_R={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`},cR={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"},uR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ER={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`},Uc={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.`},wc={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}`},lR={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."},dR={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},SR={...yc,...nR,...rR,...oR,..._R,...cR,...uR,...ER,...aR,...Uc,...wc,...lR,...dR,...sR};Mc.exports={CHECK_LOGS_WRAPPER:bc,HDB_ERROR_MSGS:SR,DEFAULT_ERROR_MSGS:Lc,DEFAULT_ERROR_RESP:tR,HTTP_STATUS_CODES:Cc,LMDB_ERRORS_ENUM:iR,AUTHENTICATION_ERROR_MSGS:yc,VALIDATION_ERROR_MSGS:Uc,ITC_ERRORS:wc}});var Q=h((AP,Hc)=>{"use strict";var cr=Me(),hR=O(),TR=f(),xr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Dc),this.http_resp_code=s||cr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(cr.DEFAULT_ERROR_MSGS[s]?cr.DEFAULT_ERROR_MSGS[s]:cr.DEFAULT_ERROR_MSGS[cr.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&&hR[n](i)}};a(xr,"HdbError");function Dc(e,t,r,s=TR.LOG_LEVELS.ERROR,n=null,i=!1){if(Pc(e))return e;let o=new xr(e,t,r,s,n);return i&&delete o.stack,o}a(Dc,"handleHDBError");function Pc(e){return e.__proto__.constructor.name===xr.name}a(Pc,"isHDBError");Hc.exports={isHDBError:Pc,handleHDBError:Dc,hdb_errors:cr}});var p=h((NP,Jc)=>{"use strict";var qt=require("path"),fR=require("fs-extra"),ae=O(),Bc=require("fs-extra"),Vr=require("os"),mR=require("net"),AR=require("recursive-iterator"),ie=f(),qc=gc(),Gc=require("papaparse"),js=require("moment"),{inspect:RR}=require("util"),vc=require("is-number"),gP=require("lodash"),{hdb_errors:en}=Q(),xc=require("util").promisify(setTimeout),gR=100,NR=5,pR="",OR=4,Fc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Jc.exports={isEmpty:Ne,isEmptyOrZeroLength:We,arrayHasEmptyValues:bR,arrayHasEmptyOrZeroLengthValues:LR,buildFolderPath:yR,isBoolean:Vc,errorizeMessage:IR,stripFileExtension:wR,autoCast:MR,autoCastJSON:kc,autoCastJSONDeep:La,removeDir:DR,compareVersions:PR,isCompatibleDataVersion:HR,escapeRawValue:BR,unescapeValue:GR,stringifyProps:vR,timeoutPromise:qR,isClusterOperation:VR,getClusterUser:YR,checkGlobalSchemaTable:kR,getHomeDir:$c,getPropsFilePath:FR,promisifyPapaParse:$R,removeBOM:Kc,createEventPromise:KR,checkProcessRunning:WR,checkSchemaTableExist:QR,checkSchemaExists:Wc,checkTableExists:Qc,getStartOfTomorrowInSeconds:JR,getLimitKey:XR,isObject:UR,isNotEmptyAndHasValue:CR,autoCasterIsNumberCheck:Yc,backtickASTSchemaItems:ZR,isPortTaken:xR,stopProcess:zR,createForkArgs:jR,autoCastBoolean:eg,async_set_timeout:xc,getTableHashAttribute:tg,doesSchemaExist:rg,doesTableExist:sg,stringifyObj:ng,ms_to_time:ig,changeExtension:ag,PACKAGE_ROOT:ie.PACKAGE_ROOT};function IR(e){return e instanceof Error?e:new Error(e)}a(IR,"errorizeMessage");function Ne(e){return e==null}a(Ne,"isEmpty");function CR(e){return!Ne(e)&&(e||e===0||e===""||Vc(e))}a(CR,"isNotEmptyAndHasValue");function We(e){return Ne(e)||e.length===0||e.size===0}a(We,"isEmptyOrZeroLength");function bR(e){if(Ne(e))return!0;for(let t=0;t<e.length;t++)if(Ne(e[t]))return!0;return!1}a(bR,"arrayHasEmptyValues");function LR(e){if(We(e))return!0;for(let t=0;t<e.length;t++)if(We(e[t]))return!0;return!1}a(LR,"arrayHasEmptyOrZeroLengthValues");function yR(...e){try{return e.join(qt.sep)}catch{console.error(e)}}a(yR,"buildFolderPath");function Vc(e){return Ne(e)?!1:e===!0||e===!1}a(Vc,"isBoolean");function UR(e){return Ne(e)?!1:typeof e=="object"}a(UR,"isObject");function wR(e){return We(e)?pR:e.slice(0,-OR)}a(wR,"stripFileExtension");function MR(e){return Ne(e)||e===""||typeof e!="string"?e:Fc[e]!==void 0?Fc[e]:Yc(e)===!0?Number(e):e}a(MR,"autoCast");function kc(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(kc,"autoCastJSON");function La(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=La(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=La(r);s!==r&&(e[t]=s)}return e}else return kc(e)}a(La,"autoCastJSONDeep");function Yc(e){if(e.startsWith("0.")&&vc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vc(e))}a(Yc,"autoCasterIsNumberCheck");async function DR(e){if(We(e))throw new Error(`Directory path: ${e} does not exist`);try{await Bc.emptyDir(e),await Bc.remove(e)}catch(t){throw ae.error(`Error removing files in ${e} -- ${t}`),t}}a(DR,"removeDir");function PR(e,t){if(We(e)){ae.info("Invalid current version sent as parameter.");return}if(We(t)){ae.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(PR,"compareVersions");function HR(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(HR,"isCompatibleDataVersion");function BR(e){if(Ne(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(BR,"escapeRawValue");function GR(e){if(Ne(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(GR,"unescapeValue");function vR(e,t){if(Ne(e))return ae.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+Vr.EOL}!We(s)&&s[0]===";"?r+=" "+s+n+Vr.EOL:We(s)||(r+=s+"="+n+Vr.EOL)}catch{ae.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(vR,"stringifyProps");function $c(){let e;try{e=Vr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a($c,"getHomeDir");function FR(){let e=qt.join($c(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return fR.existsSync(e)||(e=qt.join(__dirname,"../","hdb_boot_properties.file")),e}a(FR,"getPropsFilePath");function qR(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(qR,"timeoutPromise");async function xR(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=mR.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xR,"isPortTaken");function VR(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ae.error(`Error checking operation against cluster ops ${t}`)}return!1}a(VR,"isClusterOperation");function kR(e,t){if(!global.hdb_schema[e])return en.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return en.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kR,"checkGlobalSchemaTable");function YR(e,t){if(Ne(t)){ae.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ne(e)||We(e)){ae.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){ae.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ae.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(YR,"getClusterUser");function $R(){Gc.parsePromise=function(e,t){return new Promise(function(r,s){Gc.parse(e,{header:!0,transformHeader:Kc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a($R,"promisifyPapaParse");function Kc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Kc,"removeBOM");function KR(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ae.info(`Got cluster status event response: ${RR(n)}`);try{i.cancel()}catch{ae.error("Error trying to cancel timeout.")}s(n)})})}a(KR,"createEventPromise");async function WR(e){let t=!0,r=0;do await xc(gR*r++),(await qc.findPs(e)).length>0&&(t=!1);while(t&&r<NR);if(t)throw new Error(`process ${e} was not started`)}a(WR,"checkProcessRunning");function QR(e,t){let r=Wc(e);if(r)return r;let s=Qc(e,t);if(s)return s}a(QR,"checkSchemaTableExist");function Wc(e){if(!global.hdb_schema[e])return en.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Wc,"checkSchemaExists");function Qc(e,t){if(!global.hdb_schema[e][t])return en.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qc,"checkTableExists");function JR(){let e=js().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=js().utc().unix();return e-t}a(JR,"getStartOfTomorrowInSeconds");function XR(){return js().utc().format("DD-MM-YYYY")}a(XR,"getLimitKey");function ZR(e){try{let t=new AR(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){ae.error("Got an error back ticking items."),ae.error(t)}}a(ZR,"backtickASTSchemaItems");async function zR(e){let t=Vr.userInfo();(await qc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ae.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(zR,"stopProcess");function jR(e){return[e]}a(jR,"createForkArgs");function eg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(eg,"autoCastBoolean");function tg(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(tg,"getTableHashAttribute");function rg(e){return global?.hdb_schema?.[e]!==void 0}a(rg,"doesSchemaExist");function sg(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(sg,"doesTableExist");function ng(e){try{return JSON.stringify(e)}catch{return e}}a(ng,"stringifyObj");function ig(e){let t=js.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(ig,"ms_to_time");function ag(e,t){let r=qt.basename(e,qt.extname(e));return qt.join(qt.dirname(e),r+t)}a(ag,"changeExtension")});var it=h((IP,Zc)=>{"use strict";var{platform:OP}=require("os"),og="nats-server.zip",ya="nats-server",_g=process.platform==="win32"?`${ya}.exe`:ya,Ua="HDB",cg=/^[^\s.,*>]+$/,Xc="__request__",ug=a(e=>`${e}.${Xc}`,"REQUEST_SUBJECT"),Eg={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},lg={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},dg={HUB:"hub.pid",LEAF:"leaf.pid"},Sg={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},hg={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Ua,deliver_subject:"__HDB__.WORKQUEUE"},Tg={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Ua,deliver_subject:"HDB.SCHEMAQUEUE"},fg={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Ua,deliver_subject:"HDB.USERQUEUE"},mg={SUCCESS:"success",ERROR:"error"},Ag={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Rg={TXN:"txn",MSGID:"msgid"},ur={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},gg={[ur.ERR]:1,[ur.WRN]:2,[ur.INF]:3,[ur.DBG]:4,[ur.TRC]:5},Ng={debug:"-D",trace:"-DVV"};Zc.exports={NATS_SERVER_ZIP:og,NATS_SERVER_NAME:ya,NATS_BINARY_NAME:_g,PID_FILES:dg,NATS_CONFIG_FILES:lg,SERVER_SUFFIX:Sg,WORK_QUEUE_CONSUMER_NAMES:hg,SCHEMA_QUEUE_CONSUMER_NAMES:Tg,USER_QUEUE_CONSUMER_NAMES:fg,NATS_TERM_CONSTRAINTS_RX:cg,REQUEST_SUFFIX:Xc,UPDATE_REMOTE_RESPONSE_STATUSES:mg,CLUSTER_STATUS_STATUSES:Ag,REQUEST_SUBJECT:ug,SUBJECT_PREFIXES:Rg,MSG_HEADERS:Eg,LOG_LEVELS:ur,LOG_LEVEL_FLAGS:Ng,LOG_LEVEL_HIERARCHY:gg}});var jc=h((bP,zc)=>{"use strict";var pg=it(),tn=class{constructor(t,r,s,n,i,o,_,c,u,E,l,S,d,A){this.port=t,o===null&&(o=void 0),this.server_name=r+pg.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:_,verify:c},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:E,port:l,routes:S,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_,verify:c}},this.accounts={SYS:{users:d},HDB:{users:A}},this.system_account="SYS"}};a(tn,"HubConfigObject");zc.exports=tn});var ru=h((yP,tu)=>{"use strict";var eu=it(),rn=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+eu.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+eu.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(rn,"LeafConfigObject");tu.exports=rn});var nu=h((wP,su)=>{"use strict";var sn=class{constructor(t,r){this.user=t,this.password=r}};a(sn,"HdbUserObject");su.exports=sn});var au=h((DP,iu)=>{"use strict";var Og=it(),nn=class{constructor(t,r){this.user=t+Og.SERVER_SUFFIX.ADMIN,this.password=r}};a(nn,"SysUserObject");iu.exports=nn});var Er=h((HP,cu)=>{"use strict";var _u=p(),ou=f(),on=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,wa=require("joi"),an={schema_format:{pattern:on,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ig=wa.alternatives(wa.string().min(1).max(an.schema_length.maximum).pattern(on).messages({"string.pattern.base":"{:#label} "+an.schema_format.message}),wa.number()).required();function Cg(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>an.schema_length.maximum?`'${e}' maximum of 250 characters`:on.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Cg,"checkValidTable");function bg(e,t){return _u.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(bg,"validateSchemaExists");function Lg(e,t){let r=t.state.ancestors[0].schema;return _u.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Lg,"validateTableExists");function yg(e,t){return e.toLowerCase()===ou.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${ou.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(yg,"validateSchemaName");cu.exports={common_validators:an,schema_regex:on,hdb_schema_table:Ig,validateSchemaExists:bg,validateTableExists:Lg,validateSchemaName:yg,checkValidTable:Cg}});var at=h((GP,uu)=>{"use strict";var de=require("validate.js");de.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||de.validators.type.checks[t](e)?null:` must be a '${t}' value`};de.validators.type.checks={Object:function(e){return de.isObject(e)&&!de.isArray(e)},Array:de.isArray,Integer:de.isInteger,Number:de.isNumber,String:de.isString,Date:de.isDate,Boolean:function(e){return typeof e=="boolean"}};de.validators.hasValidFileExt=function(e,t){return de.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};uu.exports={validateObject:Ug,validateObjectAsync:wg,validateBySchema:Mg};function Ug(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=de(e,t,{format:"flat"});return r?new Error(r):null}a(Ug,"validateObject");async function wg(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await de.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(wg,"validateObjectAsync");function Mg(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Mg,"validateBySchema")});var Da=h((FP,lu)=>{var{hdb_schema_table:Eu}=Er(),Dg=at(),Ma=require("joi"),Pg={undefined:"undefined",null:"null"},Hg=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||Pg[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"),Bg=Ma.object({schema:Eu,table:Eu,records:Ma.array().items(Ma.object().custom(Hg)).required()});lu.exports=function(e){return Dg.validateBySchema(e,Bg)}});var Pa=h((xP,du)=>{"use strict";var _n=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(_n,"BridgeMethods");du.exports=_n});var xt=h(($P,Au)=>{"use strict";var Su=Me().LMDB_ERRORS_ENUM,kP=require("lmdb"),Gg=ne(),YP=require("buffer").Buffer,{OVERFLOW_MARKER:hu,MAX_SEARCH_KEY_LENGTH:cn}=Gg,Tu=["number","string","symbol","boolean","bigint"];function vg(e){if(e=e?.database||e,!e)throw new Error(Su.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Su.INVALID_ENVIRONMENT)}a(vg,"validateEnv");function Fg(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(Fg,"stringifyData");function qg(e){return e instanceof Date?e.valueOf():e}a(qg,"convertKeyValueToWrite");function xg(e){if(e==null)return;if(Tu.includes(typeof e))return e.length>cn?[e.slice(0,cn)+hu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Tu.includes(typeof n)&&(n.length>cn?t.push(n.slice(0,cn)+hu):t.push(n))}}return t}a(xg,"getIndexedValues");var un=0,fu=0;function mu(){fu=Date.now()-performance.now()}a(mu,"adjustStartTime");mu();var Vg=6e4;setInterval(mu,Vg).unref();function kg(){let e=performance.now()+fu;return e>un?(un=e,e):(un+=488e-6,un)}a(kg,"getNextMonotonicTime");Au.exports={validateEnv:vg,stringifyData:Fg,convertKeyValueToWrite:qg,getNextMonotonicTime:kg,getIndexedValues:xg}});var gu=h((WP,Ru)=>{"use strict";var En=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(En,"DBIDefinition");Ru.exports=En});var pu=h((JP,Nu)=>{"use strict";var Yg={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))},$g="certificate.pem",Kg="privateKey.pem",Wg="ca.pem";Nu.exports={CERTIFICATE_VALUES:Yg,CERTIFICATE_PEM_NAME:$g,PRIVATEKEY_PEM_NAME:Kg,CA_PEM_NAME:Wg}});var Lu=h((ZP,bu)=>{"use strict";var Qg=require("fs-extra"),b=require("joi"),Jg=require("os"),{boolean:K,string:ot,number:qe,array:Ha}=b.types(),{totalmem:Ou}=require("os"),kr=require("path"),Xg=O(),dn=p(),XP=pu(),Zg=f(),zg=at(),Iu="log",jg="custom_functions",eN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",tN="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",rN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",sN="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",nN="rootPath config parameter is undefined",iN="clustering.enabled config parameter is undefined",Vt=qe.min(0).required(),Sn=Ha.items({host:ot.required(),port:Vt}).empty(null),gt;bu.exports={configValidator:aN,routesValidator:lN,route_constraints:Sn};function aN(e){if(gt=e.rootPath,dn.isEmpty(gt))throw nN;let t=K.required(),r=b.valid("production","development").required(),s=qe.min(1).max(1e3).empty(null).default(EN),n=ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ln),i=b.custom(oN).messages({"any.custom":"{:#label} {:#error}"}),o=ot.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=b.string().empty(null).default(ln),c=b.custom(_N).empty(null).default(ln),u=e.clustering?.enabled;if(dn.isEmpty(u))throw iN;let E;return u===!0?E=b.object({enabled:t,hubServer:b.object({cluster:b.object({name:b.required().empty(null),network:b.object({port:Vt,routes:Sn}).required()}).required(),leafNodes:b.object({network:b.object({port:Vt}).required()}).required(),network:b.object({port:Vt}).required()}).required(),leafServer:b.object({network:b.object({port:Vt,routes:Sn}).required(),streams:b.object({maxAge:qe.min(120).allow(null).optional(),maxBytes:qe.min(1).allow(null).optional(),maxMsgs:qe.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:b.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:K.optional(),tls:b.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:K.required(),verify:K.optional()}),user:ot.optional().empty(null)}).required():E=b.object({enabled:t,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:K.required()})}).required(),b.object({clustering:E,customFunctions:b.object({enabled:t,network:b.object({cors:K.required(),corsAccessList:Ha.required(),headersTimeout:qe.min(1).required(),https:K.required(),keepAliveTimeout:qe.min(1).required(),port:Vt,timeout:qe.min(1).required()}),nodeEnv:r,root:n,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:b.object({enabled:t}).required(),logging:b.object({file:K.required(),level:b.valid("notify","fatal","error","warn","info","debug","trace"),rotation:b.object({enabled:K.optional(),compress:K.optional(),interval:ot.custom(uN).optional().empty(null),maxSize:ot.custom(cN).optional().empty(null),path:ot.optional().empty(null).default(ln)}).required(),root:n,stdStreams:K.required(),auditLog:K.required()}).required(),operationsApi:b.object({authentication:b.object({operationTokenTimeout:b.required(),refreshTokenTimeout:b.required()}).required(),foreground:K.required(),network:b.object({cors:K.required(),corsAccessList:Ha.required(),headersTimeout:qe.min(1).required(),https:K.required(),keepAliveTimeout:qe.min(1).required(),port:Vt,timeout:qe.min(1).required()}).required(),nodeEnv:r,tls:b.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:b.object({threads:s}).required(),storage:b.object({writeAsync:K.required(),overlappingSync:K.optional(),caching:K.optional(),compression:K.optional(),noReadAhead:K.optional(),path:c,prefetchWrites:K.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(aN,"configValidator");function Cu(e){return Qg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Cu,"doesPathExist");function oN(e,t){if(e===null)return;let r=Cu(e);return r?t.message(r):e}a(oN,"validatePemFile");function _N(e,t){b.assert(e,ot.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Cu(e);if(r)return t.message(r)}a(_N,"validatePath");function cN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(eN);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(rN):e}a(cN,"validateRotationMaxSize");function uN(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(tN);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(sN):e}a(uN,"validateRotationInterval");function EN(e,t){let r=t.state.path.join("."),s=Jg.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Ou();return i=Math.round(Math.min(i,Ou())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Xg.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(EN,"setDefaultThreads");function ln(e,t){if(!dn.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(dn.isEmpty(gt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return kr.join(gt,jg);case"logging.root":return kr.join(gt,Iu);case"clustering.leafServer.streams.path":return kr.join(gt,"clustering","leaf");case"storage.path":return kr.join(gt,Zg.SCHEMA_DIR_NAME);case"logging.rotation.path":return kr.join(gt,Iu);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ln,"setDefaultRoot");function lN(e){let t=b.object({routes:Sn});return zg.validateBySchema({routes:e},t)}a(lN,"routesValidator")});var $r=h((jP,vu)=>{"use strict";var Pe=f(),pe=p(),z=O(),{configValidator:dN,routesValidator:yu}=Lu(),De=require("fs-extra"),SN=require("yaml"),Qe=require("path"),hN=require("is-number"),wu=require("properties-reader"),TN=require("lodash"),{handleHDBError:fN}=Q(),{HTTP_STATUS_CODES:mN,HDB_ERROR_MSGS:hn}=Me(),AN=require("minimist"),{SCHEMAS_PARAM_CONFIG:Yr,CONFIG_PARAMS:Nt,CONFIG_PARAM_MAP:_t}=Pe,RN="Unable to get config value because config is uninitialized",gN="Config successfully initialized",NN="Error backing up config file",pN="Empty parameter sent to getConfigValue",Mu=Qe.join(Pe.PACKAGE_ROOT,"config","yaml",Pe.HDB_DEFAULT_CONFIG_FILE),ON="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Uu={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"},Tn,te;vu.exports={createConfigFile:IN,getDefaultConfig:CN,getConfigValue:Pu,initConfig:Hu,flattenConfig:kt,updateConfigValue:Bu,updateConfigObject:LN,getConfiguration:wN,setConfiguration:MN,readConfigFile:Fa,getClusteringRoutes:DN,initOldConfig:Gu,getConfigFromFile:PN};function IN(e){let t=lr(Mu);Tn=kt(t.toJSON());let r;for(let o in e){let _=_t[o.toLowerCase()];if(_===Nt.SCHEMAS){r=e[o];continue}if(_!==void 0){let c=_.split("_"),u=Ba(_,e[o]);try{t.setIn([...c],u)}catch(E){z.error(E)}}}r&&Du(t,r),va(t);let s=t.toJSON();te=kt(s);let n=t.getIn(["rootPath"]),i=Qe.join(n,Pe.HDB_CONFIG_FILE);De.createFileSync(i),De.writeFileSync(i,String(t)),z.trace(`Config file written to ${i}`)}a(IN,"createConfigFile");function Du(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Yr.TABLES))for(let i in s[n][Yr.TABLES])for(let o in s[n][Yr.TABLES][i]){let _=s[n][Yr.TABLES][i][o],c=[Nt.SCHEMAS,n,Yr.TABLES,i,o];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let o=s[n][i],_=[Nt.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,o):e.addIn(_,o)}}}catch(s){z.error("Error parsing schemas CLI/env config arguments",s)}}a(Du,"setSchemasConfig");function CN(e){if(Tn===void 0){let r=lr(Mu);Tn=kt(r.toJSON())}let t=_t[e.toLowerCase()];if(t!==void 0)return Tn[t.toLowerCase()]}a(CN,"getDefaultConfig");function Pu(e){if(pe.isEmpty(e)){z.error(pN);return}if(te===void 0){z.trace(RN);return}let t=_t[e.toLowerCase()];if(t!==void 0)return te[t.toLowerCase()]}a(Pu,"getConfigValue");function Ga(e){let t=AN(process.argv);return t.ROOTPATH?Qe.join(t.ROOTPATH,Pe.HDB_CONFIG_FILE):wu(e).get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ga,"getConfigFilePath");function Hu(e=!1){if(te===void 0||e){let t=pe.getPropsFilePath();try{De.accessSync(t,De.constants.F_OK|De.constants.R_OK)}catch(i){throw z.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Ga(t),s;if(r.includes("config/settings.js"))try{Gu(r);return}catch(i){if(i.code!==Pe.NODE_ERROR_CODES.ENOENT)throw i}try{s=lr(r)}catch(i){if(i.code===Pe.NODE_ERROR_CODES.ENOENT){z.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 z.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bN(s,r),va(s);let n=s.toJSON();if(te=kt(n),te.logging_rotation_rotate)for(let i in Uu)te[i]&&z.error(`Config ${Uu[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);z.trace(gN)}}a(Hu,"initConfig");function bN(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qe.join(r,Pe.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Qe.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qe.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(z.trace("Updating config file with missing config params"),De.writeFileSync(t,String(e)))}a(bN,"checkForUpdatedConfig");function va(e){let t=e.toJSON(),r=dN(t);if(r.error)throw hn.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(va,"validateConfig");function LN(e,t){te===void 0&&(te={});let r=_t[e.toLowerCase()];if(r===void 0){z.trace(`Unable to update config object because config param '${e}' does not exist`);return}te[r.toLowerCase()]=t}a(LN,"updateConfigObject");function Bu(e,t,r=void 0,s=!1,n=!1){te===void 0&&Hu();let i=Pu(_t.hdb_root),o=Qe.join(i,Pe.HDB_CONFIG_FILE),_=lr(o),c;if(r===void 0&&e.toLowerCase()===Nt.SCHEMAS)c=t;else if(r===void 0){let l=_t[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let S=l.split("_"),d=Ba(l,t);_.setIn([...S],d)}else for(let l in r){let S=_t[l.toLowerCase()];if(S===Nt.SCHEMAS){c=r[l];continue}if(S!==void 0){let d=S.split("_"),A=Ba(S,r[l]);try{_.setIn([...d],A)}catch(g){z.error(g)}}}c&&Du(_,c),va(_);let u=_.getIn(["rootPath"]),E=Qe.join(u,Pe.HDB_CONFIG_FILE);s===!0&&yN(o,u),De.writeFileSync(E,String(_)),n&&(te=kt(_.toJSON())),z.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Bu,"updateConfigValue");function yN(e,t){try{let r=Qe.join(t,"backup",`${Pe.HDB_CONFIG_FILE}.bak`);De.copySync(e,r),z.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){z.error(NN),z.error(r)}}a(yN,"backupConfigFile");var UN=["schemas"];function kt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!UN.includes(r)){let s=kt(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(kt,"flattenConfig");function Ba(e,t){if(e===Nt.CLUSTERING_NODENAME||e===Nt.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(hN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pe.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 pe.autoCast(t)}a(Ba,"castConfigValue");function wN(){let e=pe.getPropsFilePath(),t=Ga(e);return lr(t).toJSON()}a(wN,"getConfiguration");async function MN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Bu(void 0,void 0,n,!0),ON}catch(i){throw typeof i=="string"||i instanceof String?fN(i,i,mN.BAD_REQUEST,void 0,void 0,!0):i}}a(MN,"setConfiguration");function Fa(){let e=pe.getPropsFilePath();try{De.accessSync(e,De.constants.F_OK|De.constants.R_OK)}catch(s){throw z.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ga(e);return lr(t).toJSON()}a(Fa,"readConfigFile");function lr(e){return SN.parseDocument(De.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function DN(){let e=Fa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pe.isEmptyOrZeroLength(t)?[]:t;let r=yu(t);if(r)throw hn.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pe.isEmptyOrZeroLength(s)?[]:s;let n=yu(s);if(n)throw hn.CONFIG_VALIDATION(n.message);if(!pe.isEmptyOrZeroLength(s)&&!pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hn.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(DN,"getClusteringRoutes");function Gu(e){let t=wu(e);te={};for(let r in _t){let s=t.get(r.toUpperCase());if(pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_t[r].toLowerCase();n===Nt.LOGGING_ROOT?te[n]=Qe.dirname(s):te[n]=s}return te}a(Gu,"initOldConfig");function PN(e){let t=Fa();return TN.get(t,e.replaceAll("_","."))}a(PN,"getConfigFromFile")});var J=h((tH,qu)=>{"use strict";var qa=require("fs-extra"),Je=require("path"),HN=require("os"),BN=require("properties-reader"),Kr=O(),dr=p(),N=f(),fn=$r(),GN="Error initializing environment manager",mn="BOOT_PROPS_FILE_PATH",Fu=!1,vN={[N.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ct={};qu.exports={BOOT_PROPS_FILE_PATH:mn,getHdbBasePath:FN,setHdbBasePath:qN,get:xN,initSync:kN,setProperty:D,initTestEnvironment:YN};function FN(){return ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(FN,"getHdbBasePath");function qN(e){ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(qN,"setHdbBasePath");function xN(e){let t=fn.getConfigValue(e);return t===void 0?ct[e]:t}a(xN,"get");function D(e,t){vN[e]&&(ct[e]=t),fn.updateConfigObject(e,t)}a(D,"setProperty");function VN(){let e;try{e=dr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),Fu=!0;let t=BN(e);return ct[N.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(N.HDB_SETTINGS_NAMES.INSTALL_USER),ct[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ct[mn]=e,!0}catch{return Kr.trace(`Environment manager found no properties file at ${e}`),!1}}a(VN,"doesPropFileExist");function kN(e=!1){try{(Fu||VN())&&(fn.initConfig(e),ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=fn.getConfigValue(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Kr.error(GN),Kr.error(t),console.error(t),process.exit(1)}}a(kN,"initSync");function YN(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=Je.join(__dirname,"../../","unitTests");ct[mn]=Je.join(c,"hdb_boot_properties.file"),D(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Je.join(c,"settings.test")),D(N.HDB_SETTINGS_NAMES.INSTALL_USER,HN.userInfo().username),D(N.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.HDB_SETTINGS_NAMES.CERT_KEY,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),D(N.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Je.join(c,"envDir","log")),D(N.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),D(N.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),D(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Je.join(c,"envDir")),D(N.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),D(N.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),D(N.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),D(N.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),D(N.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Je.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),D(N.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(D("CORS_ACCESSLIST",o),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(D(N.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(D(N.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(D(N.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${mn}. Please check your boot props and settings files`;Kr.fatal(r),Kr.error(t)}}a(YN,"initTestEnvironment")});var ku=h((sH,Vu)=>{"use strict";var xa=J(),xu=f();xa.initSync();var $N=xa.get(xu.CONFIG_PARAMS.STORAGE_COMPRESSION),KN=xa.get(xu.CONFIG_PARAMS.STORAGE_CACHING)!==!1,An=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=$N&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=KN&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(An,"OpenDBIObject");Vu.exports=An});var Ku=h((iH,$u)=>{"use strict";var Sr=J(),Wr=f();Sr.initSync();var WN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Yu=Sr.get(Wr.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),QN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Rn=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=WN,Yu!==void 0&&(this.overlappingSync=Yu),this.noReadAhead=QN}};a(Rn,"OpenEnvironmentObject");$u.exports=Rn});var q=h((oH,ju)=>{"use strict";var Va=require("lmdb"),He=require("fs-extra"),xe=require("path"),Nn=xt(),Wu=O(),re=Me().LMDB_ERRORS_ENUM,pn=gu(),ka=ku(),Qu=Ku(),pt=ne(),Ve=pt.INTERNAL_DBIS_NAME,Ju=pt.DBI_DEFINITION_NAME,JN="data.mdb",XN="lock.mdb",Qr=".mdb",ZN="-lock",gn=class{constructor(t,r,s=!1){this.dbi=Be(t,r),this.key_type=this.dbi[pt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[pt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(gn,"TransactionCursor");function Ya(e,t){if(e===void 0)throw new Error(re.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(re.ENV_NAME_REQUIRED)}a(Ya,"pathEnvNameValidation");async function $a(e,t,r=!0){try{await He.access(e)}catch(s){throw s.code==="ENOENT"?new Error(re.INVALID_BASE_PATH):s}try{let s=xe.join(e,t+Qr);return await He.access(s,He.constants.R_OK|He.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await He.access(xe.join(e,t,JN),He.constants.R_OK|He.constants.F_OK),xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(re.INVALID_ENVIRONMENT)}else throw new Error(re.INVALID_ENVIRONMENT);throw s}}a($a,"validateEnvironmentPath");function On(e,t){if(Nn.validateEnv(e),t===void 0)throw new Error(re.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function zN(e,t,r=!1,s=!1){Ya(e,t),t=t.toString();try{return await $a(e,t,s),Ka(e,t,r)}catch(n){if(n.message===re.INVALID_ENVIRONMENT){let i=xe.join(e,t);await He.mkdirp(s?i:e);let o=new Qu(s?i:i+Qr,!1),_=Va.open(o);_.dbis=Object.create(null);let c=new ka(!1);_.openDB(Ve,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Wa(e,t,r);return _[pt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(zN,"createEnvironment");async function jN(e,t,r,s=!0){let n=await Ka(e,t);if(r===void 0)throw new Error(re.DESTINATION_PATH_REQUIRED);try{await He.access(xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(re.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(jN,"copyEnvironment");async function Ka(e,t,r=!1){Ya(e,t),t=t.toString();let s=Wa(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await $a(e,t),i=xe.join(e,t+Qr),o=n!=i,_=new Qu(n,o),c=Va.open(_);c.dbis=Object.create(null);let u=Zu(c);for(let E=0;E<u.length;E++)Be(c,u[E]);return c[pt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ka,"openEnvironment");async function ep(e,t,r=!1){Ya(e,t),t=t.toString();let s=xe.join(e,t+Qr),n=await $a(e,t);if(global.lmdb_map!==void 0){let i=Wa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Xu(o),delete global.lmdb_map[i]}}await He.remove(n),await He.remove(n===s?n+ZN:xe.join(xe.dirname(n),XN))}a(ep,"deleteEnvironment");async function Xu(e){Nn.validateEnv(e);let t=e[pt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Xu,"closeEnvironment");function Wa(e,t,r=!1){let n=`${xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Wa,"getCachedEnvironmentName");function tp(e){Nn.validateEnv(e);let t=Object.create(null),r=Be(e,Ve);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ve)try{t[s]=Object.assign(new pn,n)}catch{Wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(tp,"listDBIDefinitions");function Zu(e){Nn.validateEnv(e);let t=[],r=Be(e,Ve);for(let{key:s}of r.getRange({start:!1}))s!==Ve&&t.push(s);return t}a(Zu,"listDBIs");function rp(e,t){let s=Be(e,Ve).getEntry(t),n=new pn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(rp,"getDBIDefinition");function zu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Be(e,t)}catch(n){if(n.message===re.DBI_DOES_NOT_EXIST){let i=new ka(r,s===!0),o=e.openDB(t,i),_=new pn(r===!0,s);return o[Ju]=_,Be(e,Ve).putSync(t,_),e.dbis[t]=o,o}throw n}}a(zu,"createDBI");function Be(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ve?r=rp(e,t):r=new pn,r===void 0)throw new Error(re.DBI_DOES_NOT_EXIST);let s;try{let n=new ka(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(re.DBI_DOES_NOT_EXIST):n}return s[Ju]=r,e.dbis[t]=s,s}a(Be,"openDBI");function sp(e,t){On(e,t),t=t.toString();let r=Be(e,t),s=r.getStats();return r[pt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(sp,"statDBI");async function np(e,t){try{let r=xe.join(e,t+Qr);return(await He.stat(r)).size}catch{throw new Error(re.INVALID_ENVIRONMENT)}}a(np,"environmentDataSize");function ip(e,t){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_DROP_INTERNAL_DBIS_NAME);Be(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Be(e,Ve).removeSync(t)}a(ip,"dropDBI");function ap(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Be(e,n)}catch(i){if(i.message===re.DBI_DOES_NOT_EXIST)zu(e,n,n!==t,n===t);else throw i}}}a(ap,"initializeDBIs");ju.exports={openDBI:Be,openEnvironment:Ka,createEnvironment:zN,listDBIs:Zu,listDBIDefinitions:tp,createDBI:zu,dropDBI:ip,statDBI:sp,deleteEnvironment:ep,initializeDBIs:ap,TransactionCursor:gn,environmentDataSize:np,copyEnvironment:jN,closeEnvironment:Xu}});var tE=h((cH,eE)=>{"use strict";var In=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(In,"InsertRecordsResponseObject");eE.exports=In});var sE=h((EH,rE)=>{"use strict";var Cn=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(Cn,"UpdateRecordsResponseObject");rE.exports=Cn});var iE=h((dH,nE)=>{"use strict";var bn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(bn,"UpsertRecordsResponseObject");nE.exports=bn});var hr=h((mH,_E)=>{"use strict";var op=q(),_p=tE(),cp=sE(),up=iE(),Xe=xt(),Jr=Me().LMDB_ERRORS_ENUM,Ep=ne(),ut=f(),lp=p(),dp=require("uuid"),hH=require("lmdb"),{handleHDBError:Sp,hdb_errors:hp}=Q(),{OVERFLOW_MARKER:TH,MAX_SEARCH_KEY_LENGTH:fH}=Ep,aE=J();aE.initSync();var Ln=aE.get(ut.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Qa=ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yt=ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Tp(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new _p,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];oE(u,!0,n);let E=fp(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Xa(o,_,s,i,n)}a(Tp,"insertRecords");function fp(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let E=_([[{}]]);Array.isArray(E)&&(_=E[0][ut.FUNC_VAL],s[o]=_)}let c=Xe.getIndexedValues(_),u=e.dbis[o];if(c){Ln&&u.prefetch(c.map(E=>({key:E,value:n})),yn);for(let E=0,l=c.length;E<l;E++)u.put(c[E],n)}}Ln&&e.dbis[t].prefetch([n],yn),e.dbis[t].put(n,s,s[Yt])})}a(fp,"insertRecord");function mp(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(mp,"removeSkippedRecords");function oE(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yt]))&&(e[Yt]=r||(r=Xe.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Qa]))&&(e[Qa]=r||Xe.getNextMonotonicTime()):delete e[Qa]}a(oE,"setTimestamps");function Ja(e,t,r){r.indexOf(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),op.initializeDBIs(e,t,r)}a(Ja,"initializeTransaction");async function Ap(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new cp,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],S;try{S=Za(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(S),c.push(l)}return Xa(_,c,s,i,n,o)}a(Ap,"updateRecords");async function Rp(e,t,r,s,n=Xe.getNextMonotonicTime()){try{za(e,t,r,s)}catch(c){throw Sp(c,c.message,hp.HTTP_STATUS_CODES.BAD_REQUEST)}Ja(e,t,r);let i=new up,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;lp.isEmpty(u[t])?(E=dp.v4(),u[t]=E):E=u[t];let l=Za(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Xa(o,_,s,i,n)}a(Rp,"upsertRecords");async function Xa(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||Xe.getNextMonotonicTime(),mp(r,i),s}a(Xa,"finalizeWrite");function Za(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(oE(r,!E,o),Number.isInteger(r[Yt])&&u[Yt]>r[Yt])return!1;E&&n.original_records.push(u);let l,S=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let g=r[A],y=e.dbis[A];if(y===void 0)continue;let $=u[A];if(typeof g=="function"){let v=g([[u]]);Array.isArray(v)&&(g=v[0][ut.FUNC_VAL],r[A]=g)}if(g===$)continue;let x=Xe.getIndexedValues($);if(x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.remove(x[v],s)}if(x=Xe.getIndexedValues(g),x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.put(x[v],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Yt])},"do_put");return c?l=_.ifVersion(s,c.version,S):l=_.ifNoExists(s,S),l.then(d=>d?!0:Za(e,t,r,s,n,i,o))}a(Za,"updateUpsertRecord");function gp(e,t,r){if(Xe.validateEnv(e),t===void 0)throw new Error(Jr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jr.WRITE_ATTRIBUTES_REQUIRED):new Error(Jr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(gp,"validateBasic");function za(e,t,r,s){if(gp(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Jr.RECORDS_REQUIRED):new Error(Jr.RECORDS_MUST_BE_ARRAY)}a(za,"validateWrite");function yn(){}a(yn,"noop");_E.exports={insertRecords:Tp,updateRecords:Ap,upsertRecords:Rp}});var Y=h((RH,SE)=>{"use strict";var es=f(),Np=p(),Se=J(),ts=require("path"),pp=require("minimist"),cE=require("fs-extra"),uE=require("lodash");Se.initSync();var{CONFIG_PARAMS:Ot,SCHEMAS_PARAM_CONFIG:Xr,SYSTEM_SCHEMA_NAME:Un}=es,Zr,zr,jr;function EE(){if(Zr!==void 0)return Zr;if(Se.getHdbBasePath()!==void 0)return Zr=Se.get(Ot.STORAGE_PATH)||ts.join(Se.getHdbBasePath(),es.SCHEMA_DIR_NAME),Zr}a(EE,"getBaseSchemaPath");function lE(){if(zr!==void 0)return zr;if(Se.getHdbBasePath()!==void 0)return zr=dE(Un),zr}a(lE,"getSystemSchemaPath");function Op(){if(jr!==void 0)return jr;if(Se.getHdbBasePath()!==void 0)return jr=Se.get(es.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ts.join(Se.getHdbBasePath(),es.TRANSACTIONS_DIR_NAME),jr}a(Op,"getTransactionAuditStoreBasePath");function Ip(e,t){let r=Se.get(Ot.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ts.join(Op(),e.toString())}a(Ip,"getTransactionAuditStorePath");function dE(e,t){e=e.toString(),t=t&&t.toString();let r=Se.get(es.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ts.join(EE(),e)}a(dE,"getSchemaPath");function Cp(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,pp(process.argv));let s=r[Ot.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Np.isObject(s))throw o;i=s}for(let o of i){let _=o[Un];if(!_)continue;let c=Se.get(Ot.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Xr.PATH];if(u)return uE.set(c,[Un,Xr.TABLES,t,Xr.PATH],u),Se.setProperty(Ot.SCHEMAS,c),u;let E=_?.[Xr.PATH];if(E)return uE.set(c,[Un,Xr.PATH],E),Se.setProperty(Ot.SCHEMAS,c),E}}let n=r[Ot.STORAGE_PATH.toUpperCase()];if(n){if(!cE.pathExistsSync(n))throw new Error(n+" does not exist");let i=ts.join(n,e);return cE.mkdirsSync(i),Se.setProperty(Ot.STORAGE_PATH,n),i}return lE()}a(Cp,"initSystemSchemaPaths");function bp(){Zr=void 0,zr=void 0,jr=void 0}a(bp,"resetPaths");SE.exports={getBaseSchemaPath:EE,getSystemSchemaPath:lE,getTransactionAuditStorePath:Ip,getSchemaPath:dE,initSystemSchemaPaths:Cp,resetPaths:bp}});var $t=h((NH,Lp)=>{Lp.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 ja=h((pH,hE)=>{var{common_validators:It}=Er(),rs=at(),ke="is required",V={schema:{presence:!0,format:It.schema_format,length:It.schema_length},table:{presence:!0,format:It.schema_format,length:It.schema_length},attribute:{presence:!0,format:It.schema_format,length:It.schema_length},hash_attribute:{presence:!0,format:It.schema_format,length:It.schema_length}};function ss(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ss,"makeAttributesStrings");function yp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence=!1,V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(yp,"schema_object");function Up(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Up,"table_object");function wp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence={message:ke},rs.validateObject(e,V)}a(wp,"create_table_object");function Mp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence={message:ke},V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Mp,"attribute_object");function Dp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Dp,"describe_table");function Pp(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(Pp,"validateTableResidence");hE.exports={schema_object:yp,create_table_object:wp,table_object:Up,attribute_object:Mp,describe_table:Dp,validateTableResidence:Pp}});var fE=h((IH,TE)=>{"use strict";var Hp=require("uuid"),wn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Hp.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(wn,"CreateAttributeObject");TE.exports=wn});var Dn=h((bH,mE)=>{"use strict";var Bp=fE(),Mn=class extends Bp{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Mn,"LMDBCreateAttributeObject");mE.exports=Mn});var RE=h((yH,AE)=>{"use strict";AE.exports=vp;var Gp="inserted";function vp(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Gp?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(vp,"returnObject")});var Pn=h((wH,IE)=>{"use strict";var Fp=f(),eo=q(),qp=hr(),{getSystemSchemaPath:xp,getSchemaPath:Vp}=Y(),kp=$t(),Yp=ja(),$p=Dn(),Kp=RE(),{handleHDBError:gE,hdb_errors:pE}=Q(),NE=p(),{HTTP_STATUS_CODES:Wp}=pE,to=kp.hdb_attribute,OE=[];for(let e=0;e<to.attributes.length;e++)OE.push(to.attributes[e].attribute);var Qp="inserted";IE.exports=Jp;async function Jp(e){let t=Yp.attribute_object(e);if(t)throw gE(new Error,t.message,pE.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&NE.checkGlobalSchemaTable(e.schema,e.table);if(r)throw gE(new Error,r,Wp.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NE.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 $p(e.schema,e.table,e.attribute,e.id);try{let i=await eo.openEnvironment(Vp(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}`);eo.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eo.openEnvironment(xp(),Fp.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await qp.insertRecords(o,to.hash_attribute,OE,[n]);return Kp(Qp,_,{records:[n]},c)}catch(i){throw i}}a(Jp,"lmdbCreateAttribute")});var Hn=h((PH,bE)=>{"use strict";var Et=p(),CE=O(),DH=Da();bE.exports=Xp;function Xp(e){if(Et.isEmpty(e))throw new Error("invalid update parameters defined.");if(Et.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Et.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(Et.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&&Et.isEmptyOrZeroLength(o[r]))throw CE.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(!Et.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CE.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`);!Et.isEmpty(o[r])&&o[r]!==""&&s.has(Et.autoCast(o[r]))&&(o.skip=!0),s.add(Et.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Xp,"insertUpdateValidate")});var Gn=h((BH,LE)=>{"use strict";var Zp=f().OPERATIONS_ENUM,Bn=class{constructor(t,r,s,n,i=void 0){this.operation=Zp.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Bn,"InsertObject");LE.exports=Bn});var Fn=h((FH,yE)=>{"use strict";var vH=Gn(),vn=f(),so=p(),ro=O(),zp=require("uuid"),{handleHDBError:ns,hdb_errors:jp}=Q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=jp;yE.exports=eO;function eO(e,t,r){for(let n=0;n<t.length;n++)tO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];rO(i,r,e.operation)}}a(eO,"processRows");function tO(e){if(Buffer.byteLength(String(e))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(so.isEmptyOrZeroLength(e)||so.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(tO,"validateAttribute");function rO(e,t,r){if(!e.hasOwnProperty(t)||so.isEmptyOrZeroLength(e[t])){if(r===vn.OPERATIONS_ENUM.INSERT||r===vn.OPERATIONS_ENUM.UPSERT){e[t]=zp.v4();return}throw ro.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ro.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ro.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(rO,"validateHash")});var wE=h((xH,UE)=>{"use strict";var qn=class{constructor(t,r){this.type=t,this.message=r}};a(qn,"ITCEventObject");UE.exports=qn});var xn=h((kH,PE)=>{var sO=require("crypto"),ME=9;function nO(e){let t=aO(ME),r=DE(e+t);return t+r}a(nO,"createHash");function iO(e,t){let r=e.substr(0,ME),s=r+DE(t+r);return e===s}a(iO,"validateHash");function aO(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(aO,"generateSalt");function DE(e){return sO.createHash("md5").update(e).digest("hex")}a(DE,"md5");PE.exports={hash:nO,validate:iO}});var BE=h(($H,HE)=>{"use strict";var Ct=f(),os=class{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.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(os,"BaseLicense");var Vn=class extends os{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Vn,"ExtendedLicense");HE.exports={BaseLicense:os,ExtendedLicense:Vn}});var kn=h((WH,VE)=>{"use strict";var fr=require("fs-extra"),GE=xn(),vE=require("crypto"),oO=require("moment"),_O=require("uuid").v4,oe=O(),io=require("path"),cO=p(),Oe=f(),uO=BE().ExtendedLicense,Tr="invalid license key format",EO="061183",lO="mofi25",dO="aes-256-cbc",SO=16,hO=32,FE=J();FE.initSync();var no;VE.exports={validateLicense:qE,generateFingerPrint:fO,licenseSearch:xE,getLicense:RO};function ao(){return io.join(FE.getHdbBasePath(),Oe.LICENSE_KEY_DIR_NAME,Oe.LICENSE_FILE_NAME)}a(ao,"getLicenseDirPath");function TO(){let e=ao();return io.join(e,Oe.LICENSE_FILE_NAME)}a(TO,"getLicenseFilePath");function oo(){let e=ao();return io.join(e,Oe.REG_KEY_FILE_NAME)}a(oo,"getFingerPrintFilePath");async function fO(){let e=oo();try{return await fr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await mO();throw oe.error(`Error writing fingerprint file to ${e}`),oe.error(t),new Error("There was an error generating the fingerprint")}}a(fO,"generateFingerPrint");async function mO(){let e=_O(),t=GE.hash(e),r=oo();try{await fr.mkdirp(ao()),await fr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw oe.error(`Error writing fingerprint file to ${r}`),oe.error(s),new Error("There was an error generating the fingerprint")}return t}a(mO,"writeFingerprint");function qE(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Oe.STORAGE_TYPES_ENUM.LMDB,api_call:Oe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Oe.RAM_ALLOCATION_ENUM.DEFAULT,version:Oe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return oe.error("empty license key passed to validate."),r;let s=oo(),n=!1;try{n=fr.statSync(s)}catch(i){oe.error(i)}if(n){let i;try{i=fr.readFileSync(s,"utf8")}catch{oe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(lO),_=o[1];_=Buffer.concat([Buffer.from(_)],SO);let c=Buffer.concat([Buffer.from(i)],hO),u=vE.createDecipheriv(dO,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let d=AO(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tr),oe.error(Tr),new Error(Tr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Tr),oe.error(Tr),new Error(Tr)}else r.exp_date=E;r.exp_date<oO().valueOf()&&(r.valid_date=!1),GE.validate(o[1],`${EO}${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||oe.error("Invalid licence"),r}a(qE,"validateLicense");function AO(e,t){try{let r=vE.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{oe.warn("Check old license failed")}}a(AO,"checkOldLicense");function xE(){let e=new uO;e.api_call=0;let t=[];try{t=fr.readFileSync(TO(),"utf-8").split(Oe.NEW_LINE)}catch(r){r.code==="ENOENT"?oe.info("no license file found"):oe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(cO.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qE(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){oe.error("There was an error parsing the license string."),oe.error(n),e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Oe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Oe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT),no=e,e}a(xE,"licenseSearch");async function RO(){return no||await xE(),no}a(RO,"getLicense")});var Kn=h((JH,So)=>{"use strict";var{Worker:gO,MessageChannel:NO,parentPort:lt,isMainThread:$E,threadId:pO,workerData:OO}=require("worker_threads"),{PACKAGE_ROOT:IO}=f(),{join:CO,isAbsolute:bO,extname:LO}=require("path"),{totalmem:kE}=require("os"),Eo=f(),KE=J(),yO=kn(),Yn=O(),UO=f();KE.initSync();var wO=KE.get(Eo.CONFIG_PARAMS.HTTP_THREADS)||1,MO=1024*1024,bt=[],Kt=[],DO=50,WE=1e4,QE="restart",JE="request_thread_info",XE="resource_report",ZE="thread_info",zE="added-port",_o;So.exports={startWorker:co,restartWorkers:lo,shutdownWorkers:HO,workers:bt,setMonitorListener:qO,onMessageFromWorkers:BO,broadcast:GO};function co(e,t={}){let s=yO.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||kE();n=Math.min(n,kE());let i=Math.min(Math.max(Math.floor(n/MO/(1+wO/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of Kt){let{port1:E,port2:l}=new NO;u.postMessage({type:zE,port:E},[E]),_.push(l)}LO(e)||(e+=".js");let c=new gO(bO(e)?e:CO(IO,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return $n(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{co(e,t)},c.on("error",u=>{console.error("Worker error:",u),Yn.error("Worker error:",u)}),c.on("exit",u=>{bt.splice(bt.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<DO?(t.unexpectedRestarts=c.unexpectedRestarts+1,co(e,t)):Yn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===QE&&lo(u.workerType),u.type===JE&&vO(c),u.type===XE&&FO(c,u)}),bt.push(c),VO(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(co,"startWorker");var PO=[Eo.THREAD_TYPES.HTTP];async function lo(e=null,t=2,r=!0){if($E){t<1&&(t=t*bt.length);let s=[];for(let n of bt.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Eo.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=PO.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),WE*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else lt.postMessage({type:QE,workerType:e})}a(lo,"restartWorkers");function HO(e){return lo(e,1/0,!1)}a(HO,"shutdownWorkers");var jE=[];function BO(e){jE.push(e)}a(BO,"onMessageFromWorkers");function GO(e){for(let t of Kt)try{t.postMessage(e)}catch(r){Yn.error("Unable to send message to worker",r)}}a(GO,"broadcast");function vO(e){e.postMessage({type:ZE,workers:el()})}a(vO,"sendThreadInfo");function el(){let e=Date.now();return bt.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(el,"getChildWorkerInfo");function FO(e,t){e.resources=t,e.resources.updated=Date.now()}a(FO,"recordResourceReport");var uo;function qO(e){uo=e}a(qO,"setMonitorListener");var xO=1e3,YE=!1;function VO(){YE||(YE=!0,setInterval(()=>{for(let e of bt){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}uo&&uo()},xO).unref())}a(VO,"startMonitoring");var kO=1e3;if(lt){$n(lt);for(let e of OO.addPorts)$n(e);setInterval(()=>{let e=process.memoryUsage();lt.postMessage({type:XE,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},kO).unref(),_o=a(()=>new Promise((e,t)=>{lt.on("message",r),lt.postMessage({type:JE});function r(s){s.type===ZE&&(lt.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else _o=el;So.exports.getThreadInfo=_o;function $n(e,t){Kt.push(e),e.on("message",r=>{if(r.type===zE)$n(r.port);else for(let s of jE)s(r)}).on("close",()=>{Kt.splice(Kt.indexOf(e),1)}).on("exit",()=>{Kt.splice(Kt.indexOf(e),1)}),t||e.unref()}a($n,"addPort");$E||lt.on("message",async e=>{let{type:t}=e;t===UO.ITC_EVENT_TYPES.SHUTDOWN&&(lt.unref(),setTimeout(()=>{Yn.warn("Thread did not voluntarily terminate",pO),process.exit(0)},WE).unref())})});var sl=h((ZH,rl)=>{"use strict";var ho=q(),YO=O(),tl=Me().LMDB_ERRORS_ENUM;rl.exports=$O;async function $O(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 ho.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==tl.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ho.closeEnvironment(global.lmdb_map[s]),await ho.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tl.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){YO.error(t)}}a($O,"cleanLMDBMap")});var Tl=h((eB,hl)=>{"use strict";var To=require("recursive-iterator"),KO=require("alasql"),fo=require("clone"),nl=p(),{handleHDBError:il,hdb_errors:WO}=Q(),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:ol}=WO,QO=["DISTINCT_ARRAY"],_l=Symbol("validateTables"),mo=Symbol("validateTable"),jH=Symbol("getAllColumns"),cl=Symbol("validateAllColumns"),Wn=Symbol("findColumn"),ul=Symbol("validateOrderBy"),_s=Symbol("validateSegment"),Ao=Symbol("validateColumn"),El=Symbol("setColumnsForTable"),ll=Symbol("checkColumnsForAsterisk"),dl=Symbol("validateGroupBy"),Sl=Symbol("hasColumns"),Qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_l](),this[ll](),this[cl]()}[_l](){if(this[Sl]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mo](t.table)})}}[Sl](){let t=!1,r=new To(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw il(new Error,al.SCHEMA_NOT_FOUND(t.databaseid),ol.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw il(new Error,al.TABLE_NOT_FOUND(t.databaseid,t.tableid),ol.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=fo(s);n.table=fo(t),this.attributes.push(n)})}[Wn](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)}[ll](){let t=new To(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[El](r.tableid)}[El](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new KO.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[cl](){this[_s](this.statement.columns,!1),this[_s](this.statement.joins,!1),this[_s](this.statement.where,!1),this[dl](this.statement.group,!1),this[_s](this.statement.order,!0)}[_s](t,r){if(!t)return;let s=new To(t),n=[];for(let{node:i,path:o}of s)!nl.isEmpty(i)&&!nl.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ul](i):n.push(this[Ao](i)));return n}[dl](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&QO.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=fo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Wn](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[Wn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ul](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[Ao](t)}[Ao](t){let r=this[Wn](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Qn,"SelectValidator");hl.exports=Qn});var Rl=h((rB,Al)=>{"use strict";var fl=require("lodash"),cs=require("mathjs"),JO=require("jsonata"),ml=p();Al.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?fl.uniqWith(e,fl.isEqual):e,searchJSON:XO,mad:us.bind(null,cs.mad),mean:us.bind(null,cs.mean),mode:us.bind(null,cs.mode),prod:us.bind(null,cs.prod),median:us.bind(null,cs.median)};function us(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(us,"aggregateFunction");function XO(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(ml.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ml.isEmpty(this.__ala__.res[r])){let s=JO(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XO,"searchJSON")});var Nl=h((nB,gl)=>{"use strict";var X=require("moment"),Ro="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;gl.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(Ro),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(Ro),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(Ro)}});var Cl=h((iB,Il)=>{"use strict";var ZO=require("@turf/area"),zO=require("@turf/length"),jO=require("@turf/circle"),eI=require("@turf/difference"),tI=require("@turf/distance"),rI=require("@turf/boolean-contains"),sI=require("@turf/boolean-equal"),nI=require("@turf/boolean-disjoint"),iI=require("@turf/helpers"),pl=f(),U=p();Il.exports={geoArea:aI,geoLength:oI,geoCircle:_I,geoDifference:cI,geoDistance:Ol,geoNear:uI,geoContains:EI,geoEqual:lI,geoCrosses:dI,geoConvert:SI};var go="geo1 is required",No="geo2 is required";function aI(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),ZO.default(e)}a(aI,"geoArea");function oI(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),zO.default(e,{units:t||"kilometers"})}a(oI,"geoLength");function _I(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),jO.default(e,t,{units:r||"kilometers"})}a(_I,"geoCircle");function cI(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),eI(e,t)}a(cI,"geoDifference");function Ol(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),tI.default(e,t,{units:r||"kilometers"})}a(Ol,"geoDistance");function uI(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ol(e,t,s)<=r}a(uI,"geoNear");function EI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),rI.default(e,t)}a(EI,"geoContains");function lI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),sI.default(e,t)}a(lI,"geoEqual");function dI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!nI.default(e,t)}a(dI,"geoCrosses");function SI(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(pl.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pl.GEO_CONVERSION_ENUM).join(",")}`);return iI[t](e,r)}a(SI,"geoConvert")});var Ll=h((oB,bl)=>{var Wt=Rl(),Ie=Nl(),Ze=Cl();bl.exports=e=>{e.aggr.mad=e.aggr.MAD=Wt.mad,e.aggr.mean=e.aggr.MEAN=Wt.mean,e.aggr.mode=e.aggr.MODE=Wt.mode,e.aggr.prod=e.aggr.PROD=Wt.prod,e.aggr.median=e.aggr.MEDIAN=Wt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Wt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Wt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ie.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ie.current_time,e.fn.extract=e.fn.EXTRACT=Ie.extract,e.fn.date=e.fn.DATE=Ie.date,e.fn.date_format=e.fn.DATE_FORMAT=Ie.date_format,e.fn.date_add=e.fn.DATE_ADD=Ie.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ie.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ie.date_diff,e.fn.now=e.fn.NOW=Ie.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ie.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ie.get_server_time,e.fn.getdate=e.fn.GETDATE=Ie.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ie.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ze.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ze.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ze.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ze.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ze.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ze.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ze.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ze.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ze.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ze.geoNear}});var wl=h((_B,Ul)=>{"use strict";var Es=require("lodash"),se=require("alasql");se.options.cache=!1;var hI=Ll(),yl=require("clone"),Jn=require("recursive-iterator"),I=O(),L=p(),mr=Qt(),TI=f(),{hdb_errors:fI}=Q(),mI="IS NULL",Ye="There was a problem performing this search. Please check the logs and try again.";hI(se);var Xn=class{constructor(t,r){if(L.isEmpty(t))throw I.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),L.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!L.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(Ye)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(Ye)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(Ye)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(Ye)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(Ye)}}_getColumns(){let t=new Jn(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(yl(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Es.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(L.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Jn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!L.isEmpty(r)&&r.right)if(L.isNotEmptyAndHasValue(r.right.value)){let s=L.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new se.yy.LogicValue({value:s}):r.right instanceof se.yy.StringValue&&!L.isEmpty(s)&&L.autoCasterIsNumberCheck(s.toString())&&(r.right=new se.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=L.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new se.yy.LogicValue({value:i}):s instanceof se.yy.StringValue&&L.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new se.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Jn(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(!L.isEmpty(TI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(L.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(L.isEmptyOrZeroLength(r.left.columnid)||L.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(L.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!L.isEmpty(r.right.value)||!L.isEmpty(r.left.value)?s.add(L.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from)&&L.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&&Es.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(L.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);L.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(L.isEmptyOrZeroLength(this.all_table_attributes)&&!L.isEmptyOrZeroLength(this.columns.columns))return t;if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await se.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(yl(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(L.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(mI)>-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=Es.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!L.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await mr.getDataByHash(_);for(let l of _.hash_values)E.get(l)&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let S=await mr.getDataByValue(l);for(let[d,A]of S)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(d)))}))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else if(!L.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,S=E.length;l<S;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await mr.getDataByValue(_,d.operation);if(c)for(let[g]of A)this.data[i].__merged_data[g]||(this.data[i].__merged_data[g]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(g)));else for(let[g,y]of A)this.data[i].__merged_data[g]?this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]):(this.data[i].__merged_data[g]=[...s[i]],this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(g)))}}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await mr.getDataByValue(_);if(c)for(let[l]of E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(l)));else for(let[l,S]of E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(l)))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(E),new Error(Ye)}}}_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 se.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 se.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new se.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 se.yy.FuncValue:new se.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,g=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${g}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${g}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);S=await se.promise(A,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let d=0,A=S.length;d<A;d++){let g=S[d];o.forEach(y=>{g[y.key]!==null&&g[y.key]!==void 0&&y.keys.add(g[y.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),g=Es.difference(A,[...d.keys].map(y=>y.toString()));for(let y=0,$=g.length;y<$;y++){let x=g[y];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Jn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Es.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(Ye)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await mr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let S=o[E],d=c.get(S);for(let A=0;A<u;A++){let g=n.columns[A],y=d[g]===void 0?null:d[g];this.data[s].__merged_data[S].push(y)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await se.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return I.error(fI.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await mr.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(Ye)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Xn,"SQLSearch");Ul.exports=Xn});var Zn=h((uB,Dl)=>{"use strict";var AI=Tl();Dl.exports={searchByConditions:pI,searchByHash:OI,searchByValue:II,search:CI};var po=Qt(),Ml=require("util"),RI=Ml.callbackify(po.searchByHash),gI=Ml.callbackify(po.searchByValue),NI=wl();async function pI(e){return po.searchByConditions(e)}a(pI,"searchByConditions");function OI(e,t){try{RI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(OI,"searchByHash");function II(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),gI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(II,"searchByValue");function CI(e,t){try{let r=new AI(e);r.validate(),new NI(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(CI,"search")});var ds=h((lB,Gl)=>{"use strict";var ls=require("crypto"),Hl="aes-256-cbc",bI=32,LI=16,Oo=64,Bl=32,yI=Oo+Bl,Pl=new Map;Gl.exports={encrypt:UI,decrypt:wI,createNatsTableStreamName:MI};function UI(e){let t=ls.randomBytes(bI),r=ls.randomBytes(LI),s=ls.createCipheriv(Hl,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(UI,"encrypt");function wI(e){let t=e.substr(0,Oo),r=e.substr(Oo,Bl),s=e.substr(yI,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ls.createDecipheriv(Hl,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wI,"decrypt");function MI(e,t){let r=`${e}.${t}`,s=Pl.get(r);return s||(s=ls.createHash("md5").update(`${e}.${t}`).digest("hex"),Pl.set(r,s)),s}a(MI,"createNatsTableStreamName")});var Co=h((hB,vl)=>{"use strict";var DI=f(),SB=xt();function Io(e,t){let r=Object.create(null);if(t.length===1&&DI.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Io,"parseRow");function PI(e,t,r,s){let n=Io(r,e);s.push(n)}a(PI,"searchAll");function HI(e,t,r,s){let n=Io(r,e);s[t]=n}a(HI,"searchAllToMap");function BI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(BI,"iterateDBI");function Jt(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(Jt,"pushResults");function GI(e,t,r,s,n,i){t.toString().endsWith(e)&&Jt(t,r,s,n,i)}a(GI,"endsWith");function vI(e,t,r,s,n,i){t.toString().includes(e)&&Jt(t,r,s,n,i)}a(vI,"contains");function FI(e,t,r,s,n,i){t>e&&Jt(t,r,s,n,i)}a(FI,"greaterThanCompare");function qI(e,t,r,s,n,i){t>=e&&Jt(t,r,s,n,i)}a(qI,"greaterThanEqualCompare");function xI(e,t,r,s,n,i){t<e&&Jt(t,r,s,n,i)}a(xI,"lessThanCompare");function VI(e,t,r,s,n,i){t<=e&&Jt(t,r,s,n,i)}a(VI,"lessThanEqualCompare");vl.exports={parseRow:Io,searchAll:PI,searchAllToMap:HI,iterateDBI:BI,endsWith:GI,contains:vI,greaterThanCompare:FI,greaterThanEqualCompare:qI,lessThanCompare:xI,lessThanEqualCompare:VI,pushResults:Jt}});var Zt=h((RB,$l)=>{"use strict";var Lt=q(),fB=O(),Ce=xt(),zn=ne(),W=Me().LMDB_ERRORS_ENUM,mB=p(),kI=f(),jn=Co(),{parseRow:YI}=jn,AB=require("lmdb"),{OVERFLOW_MARKER:Fl,MAX_SEARCH_KEY_LENGTH:$I}=zn;function ql(e,t,r,s=!1,n=void 0,i=void 0){return Xt(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ql,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return Xt(e,t,r,(E,l,S,d)=>{let x={transaction:E,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,l.getRange(x).map(v=>({value:v}))):l.getRange(x)})}a(Ss,"iterateRangeBetween");function Xt(e,t,r,s){let n=e.database||e,i=Lt.openDBI(n,r);i[zn.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Lt.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(Xt,"setupTransaction");function xl(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(Fl)){if(!n)if(r)n=Lt.openDBI(e,r);else{let c=Lt.listDBIs(e);for(let u=0,E=c.length;u<E&&(n=Lt.openDBI(e,c[u]),!n[zn.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(xl,"getOverflowCheck");function KI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Xt(e,t,t,(o,_,c)=>(ei(r),r=hs(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>YI(u.value,r))))}a(KI,"searchAll");function WI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);ei(r),r=hs(e.database||e,r);let o=new Map;for(let{key:_,value:c}of ql(e,t,t,s,n,i))o.set(_,jn.parseRow(c,r));return o}a(WI,"searchAllToMap");function QI(e,t,r=!1,s=void 0,n=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ql(e,void 0,t,r,s,n),_=o.transaction,c=xl(_.database,_,void 0,t);for(let{key:u,value:E}of o){let l=c(u,E);i[l]===void 0&&(i[l]=[]),i[l].push(E)}return i}a(QI,"iterateDBI");function JI(e,t){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(JI,"countAll");function XI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Xt(e,t,r,(_,c,u,E)=>(s=Ce.convertKeyValueToWrite(s),E===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(l=>({key:s,value:l}))))}a(XI,"equals");function ZI(e,t,r){return yt(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(ZI,"count");function zI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Xt(e,null,r,(_,c)=>{s=Ce.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let E;if(n===!0){let l;for(let S of c.getKeys({transaction:_,start:s}))if(!S.startsWith(s)){l=S;break}return l!==void 0&&(Number.isInteger(o)?o++:i++),E=c.getRange({transaction:_,start:l,end:void 0,reverse:n,limit:i,offset:o}).map(S=>{let{key:d}=S;if(d!==l){if(d.toString().startsWith(s))return S;if(u===!0)return E.DONE}}),E.filter(S=>S)}else return E=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(l=>{if(l.key.toString().startsWith(s))return l;if(u===!0)return E.DONE}),u?E:E.filter(l=>l)})}a(zI,"startsWith");function jI(e,t,r,s,n=!1,i=void 0,o=void 0){return Vl(e,t,r,s,n,i,o,!0)}a(jI,"endsWith");function Vl(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return yt(e,r,s),Xt(e,null,r,(c,u,E,l)=>{let S=xl(E,c,l,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let A=d.toString();return A.endsWith(Fl)?u.getValues(d,{transaction:c}).map(g=>{let y=S(d,g);if(_?y.endsWith(s):y.includes(s))return{key:y,value:g}}).filter(g=>g):(_?A.endsWith(s):A.includes(s))?u[zn.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(g=>({key:d,value:g})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Vl,"contains");function eC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(eC,"greaterThan");function tC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(tC,"greaterThanEqual");function rC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(rC,"lessThan");function sC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(sC,"lessThanEqual");function nC(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Ce.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=Ce.convertKeyValueToWrite(s),n=Ce.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(nC,"between");function iC(e,t,r,s){Ce.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),r=hs(n,r),s===void 0)throw new Error(W.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=jn.parseRow(_,r)),o}a(iC,"searchByHash");function aC(e,t,r){Ce.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(aC,"checkHashExists");function oC(e,t,r,s,n=[]){return Yl(e,t,r,s,n),kl(e,t,r,s,n).map(i=>i[1])}a(oC,"batchSearchByHash");function _C(e,t,r,s,n=[]){Yl(e,t,r,s,n);let i=new Map;for(let[o,_]of kl(e,t,r,s,n))i.set(o,_);return i}a(_C,"batchSearchByHashToMap");function kl(e,t,r,s,n=[]){return Xt(e,t,t,(i,o,_)=>{r=hs(_,r);let c=r.length<3;return s.map(u=>{let E=_.dbis[t].get(u,{transaction:i,lazy:c});if(E)return[u,jn.parseRow(E,r)];n.push(u)}).filter(u=>u)})}a(kl,"batchHashSearch");function Yl(e,t,r,s,n){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),s==null)throw new Error(W.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(W.IDS_MUST_BE_ITERABLE)}a(Yl,"initializeBatchSearchByHash");function ei(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ei,"validateFetchAttributes");function yt(e,t,r){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>$I)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&kI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");$l.exports={searchAll:KI,searchAllToMap:WI,count:ZI,countAll:JI,equals:XI,startsWith:zI,endsWith:jI,contains:Vl,searchByHash:iC,setGetWholeRowAttributes:hs,batchSearchByHash:oC,batchSearchByHashToMap:_C,checkHashExists:aC,iterateDBI:QI,greaterThan:eC,greaterThanEqual:tC,lessThan:rC,lessThanEqual:sC,between:nC}});var ni=h((NB,jl)=>{"use strict";var Wl=Zn(),Ut=O(),Ql=ja(),cC=require("lodash"),uC=ds(),Jl=p(),{promisify:Xl}=require("util"),k=f(),{handleHDBError:ti,hdb_errors:EC}=Q(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:Zl}=EC,lC=J();lC.initSync();var Kl=q(),dC=Zt(),{getSchemaPath:SC}=Y(),Ts=Xl(Wl.searchByValue),hC=Xl(Wl.searchByHash),Ar="name",zl="hash_attribute",bo="schema",TC="schema_table",fC="attribute";jl.exports={describeAll:mC,describeTable:si,describeSchema:RC};async function mC(e){try{let t=Jl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ar,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Ar]},i=await Ts(n),o={},_={};for(let S of i)o[S.name]=!0,!t&&!s&&(_[S.name]=r[S.name].describe);let c={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:k.ID_ATTRIBUTE_STRING,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},u=await Ts(c),E=[];for(let S of u)try{let d;if(t||s)d=await si({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let A=r[S.schema].tables[S.name].attribute_permissions;d=await si({schema:S.schema,table:S.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let S in E)t||s?(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]):_[E[S].schema]&&(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]);for(let S in o)t||s?l[S]={}:_[S]&&(l[S]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),ti(new Error,ri.DESCRIBE_ALL_ERR)}}a(mC,"describeAll");async function si(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Ql.describe_table(e);if(o)throw o;if(r===k.SYSTEM_SCHEMA_NAME)return global.hdb_schema[k.SYSTEM_SCHEMA_NAME][s];let _={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ar,search_value:s,hash_values:[],get_attributes:[k.WILDCARD_SEARCH_VALUE]},c=Array.from(await Ts(_));if(!c||c.length===0)throw ti(new Error,ri.TABLE_NOT_FOUND(e.schema,e.table),Zl.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw ti(new Error,ri.INVALID_TABLE_ERR(i));let E={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:TC,search_value:r+"."+s,get_attributes:[fC]},l=Array.from(await Ts(E));l=cC.uniqBy(l,S=>S.attribute),n&&n.length>0&&(l=AC(n)),i.attributes=l,i.clustering_stream_name=uC.createNatsTableStreamName(u.schema,u.name);try{let S=SC(i.schema,i.name),d=await Kl.openEnvironment(S,i.name),A=Kl.statDBI(d,i.hash_attribute);i.record_count=A.entryCount;for(let{key:g}of dC.lessThan(d,i.hash_attribute,k.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=g}catch(S){Ut.warn(`unable to stat table dbi due to ${S}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(si,"descTable");function AC(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(AC,"getAttrsByPerms");async function RC(e){let t=Ql.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:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:bo,search_value:s,hash_values:[],get_attributes:[zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},i=Array.from(await Ts(n));if(i&&i.length<1){let o={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ar]},_=Array.from(await hC(o));if(_&&_.length<1)throw ti(new Error,ri.SCHEMA_NOT_FOUND(e.schema),Zl.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Jl.isEmpty(c)||c.describe){let u=await si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(RC,"describeSchema")});var ii=h((OB,nd)=>{var Rr=$t(),{callbackify:rd,promisify:gC}=require("util");nd.exports={setSchemaDataToGlobal:ed,getTableSchema:OC,getSystemSchema:CC,setSchemaDataToGlobalAsync:gC(ed)};var sd=ni(),NC=rd(sd.describeAll),pC=rd(sd.describeTable);function ed(e){NC(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Rr),global.hdb_schema=r,e(null,null)})}a(ed,"setSchemaDataToGlobal");function td(e,t){return e==="system"?Rr[t]:global.hdb_schema[e][t]}a(td,"returnSchema");function OC(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?IC(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,td(e,t))}):r(null,td(e,t))}a(OC,"getTableSchema");function IC(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Rr:global.hdb_schema={system:Rr},r();return}pC(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Rr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(IC,"setTableDataToGlobal");function CC(){return Rr}a(CC,"getSystemSchema")});var ai=h((CB,_d)=>{"use strict";var zt=O(),be=f(),bC=sl(),id=ii(),LC=ni(),yC=Nr(),{validateEvent:od}=gr(),fs=Qt(),UC=require("process"),wC={[be.ITC_EVENT_TYPES.SCHEMA]:MC,[be.ITC_EVENT_TYPES.USER]:PC};async function MC(e){let t=od(e);if(t){zt.error(t);return}zt.trace("ITC schemaHandler received schema event:",e),await bC(e.message),await DC(e.message)}a(MC,"schemaHandler");async function DC(e){try{if(fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.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 LC.describeTable({schema:e.schema,table:e.table});break;default:id.setSchemaDataToGlobal(ad);break}else id.setSchemaDataToGlobal(ad)}catch(t){zt.error(t)}}a(DC,"syncSchemaMetadata");function ad(e){e&&zt.error(e)}a(ad,"handleErrorCallback");async function PC(e){try{fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=od(e);if(t){zt.error(t);return}zt.trace(`ITC userHandler ${be.HDB_ITC_CLIENT_PREFIX}${UC.pid} received user event:`,e),await yC.setUsersToGlobal()}catch(t){zt.error(t)}}a(PC,"userHandler");_d.exports=wC});var gr=h((wB,ud)=>{"use strict";var LB=O(),Lo=p(),HC=f(),{ITC_ERRORS:ms}=Me(),{parentPort:yB,threadId:BC,isMainThread:GC,workerData:UB}=require("worker_threads"),{onMessageFromWorkers:vC,broadcast:FC}=Kn();ud.exports={sendItcEvent:qC,validateEvent:cd,SchemaEventMsg:xC,UserEventMsg:VC};var oi;vC(e=>{oi=oi||ai(),cd(e),oi[e.type]&&oi[e.type](e)});function qC(e){!GC&&e.message&&(e.message.originator=BC),FC(e)}a(qC,"sendItcEvent");function cd(e){if(typeof e!="object")return ms.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Lo.isEmpty(e.type))return ms.MISSING_TYPE;if(!e.hasOwnProperty("message")||Lo.isEmpty(e.message))return ms.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Lo.isEmpty(e.message.originator))return ms.MISSING_ORIGIN;if(HC.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ms.INVALID_EVENT(e.type)}a(cd,"validateEvent");function xC(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(xC,"SchemaEventMsg");function VC(e){this.originator=e}a(VC,"UserEventMsg")});var ci=h((PB,Sd)=>{"use strict";var Ed=f(),DB=p(),_i=O(),ld=wE(),pr,{sendItcEvent:dd}=gr();function kC(e){try{_i.trace("signalSchemaChange called with message:",e),pr=pr||ai();let t=new ld(Ed.ITC_EVENT_TYPES.SCHEMA,e);pr.schema(t),dd(t)}catch(t){_i.error(t)}}a(kC,"signalSchemaChange");function YC(e){try{_i.trace("signalUserChange called with message:",e),pr=pr||ai();let t=new ld(Ed.ITC_EVENT_TYPES.USER,e);pr.user(t),dd(t)}catch(t){_i.error(t)}}a(YC,"signalUserChange");Sd.exports={signalSchemaChange:kC,signalUserChange:YC}});var ui=h((BB,Td)=>{"use strict";var hd=p(),$C=f(),KC=O(),WC=Pn(),QC=Dn(),JC=ci(),{SchemaEventMsg:XC}=gr(),ZC="already exists in";Td.exports=zC;async function zC(e,t,r){if(hd.isEmptyOrZeroLength(r))return r;let s=[];hd.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 jC(e,t.schema,t.name,i)})),n}a(zC,"lmdbCheckForNewAttributes");async function jC(e,t,r,s){let n=new QC(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await eb(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZC))KC.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(jC,"createNewAttribute");async function eb(e){let t;return t=await WC(e),JC.signalSchemaChange(new XC(process.pid,$C.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(eb,"createAttribute")});var Or=h((vB,fd)=>{"use strict";var Ei=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(Ei,"LMDBTransactionObject");fd.exports=Ei});var Ad=h((qB,md)=>{"use strict";var tb=Or(),rb=f().OPERATIONS_ENUM,li=class extends tb{constructor(t,r,s,n,i=void 0){super(rb.INSERT,r,s,n,i),this.records=t}};a(li,"LMDBInsertTransactionObject");md.exports=li});var gd=h((VB,Rd)=>{"use strict";var sb=Or(),nb=f().OPERATIONS_ENUM,di=class extends sb{constructor(t,r,s,n,i,o=void 0){super(nb.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(di,"LMDBUpdateTransactionObject");Rd.exports=di});var pd=h((YB,Nd)=>{"use strict";var ib=Or(),ab=f().OPERATIONS_ENUM,Si=class extends ib{constructor(t,r,s,n,i,o=void 0){super(ab.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Si,"LMDBUpsertTransactionObject");Nd.exports=Si});var Id=h((KB,Od)=>{"use strict";var ob=Or(),_b=f().OPERATIONS_ENUM,hi=class extends ob{constructor(t,r,s,n,i=void 0){super(_b.DELETE,s,n,t,i),this.original_records=r}};a(hi,"LMDBDeleteTransactionObject");Od.exports=hi});var As=h((JB,yd)=>{"use strict";var QB=require("path"),Cd=q(),cb=Ad(),ub=gd(),Eb=pd(),lb=Id(),Ir=ne(),bd=p(),{CONFIG_PARAMS:db}=f(),Ld=J();Ld.initSync();var Ti=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Sb}=Y();yd.exports=hb;async function hb(e,t){if(Ld.get(db.LOGGING_AUDITLOG)===!1)return;let r=Sb(e.schema,e.table),s=await Cd.openEnvironment(r,e.table,!0),n=Tb(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Cd.initializeDBIs(s,Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ir.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),bd.isEmpty(n.user_name)||s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(hb,"writeTransaction");function Tb(e,t){let r=bd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Ti.INSERT)return new cb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPDATE)return new ub(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPSERT)return new Eb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.DELETE)return new lb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Tb,"createTransactionObject")});var yo=h((zB,Ud)=>{"use strict";var fb=Hn(),ZB=Gn(),Rs=f(),mb=Fn(),Ab=hr().insertRecords,Rb=q(),gb=O(),Nb=ui(),{getSchemaPath:pb}=Y(),Ob=As();Ud.exports=Ib;async function Ib(e){try{let{schema_table:t,attributes:r}=fb(e);mb(e,r,t.hash_attribute),e.schema!==Rs.SYSTEM_SCHEMA_NAME&&(r.includes(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nb(e.hdb_auth_header,t,r),n=pb(e.schema,e.table),i=await Rb.openEnvironment(n,e.table),o=await Ab(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ob(e,o)}catch(_){gb.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ib,"lmdbCreateRecords")});var Dd=h((eG,Md)=>{"use strict";var wd=f(),Cb=yo(),bb=Gn(),Lb=require("fs-extra"),{getSchemaPath:yb}=Y();Md.exports=Ub;async function Ub(e){let t=[{name:e.schema,createddate:Date.now()}],r=new bb(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Cb(r),await Lb.mkdirp(yb(e.schema))}a(Ub,"lmdbCreateSchema")});var Hd=h((rG,Pd)=>{"use strict";var fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(fi,"DeleteRecordsResponseObject");Pd.exports=fi});var Mo=h((oG,vd)=>{"use strict";var Bd=q(),Uo=xt(),wo=Me().LMDB_ERRORS_ENUM,wb=ne(),Gd=O(),nG=p(),Mb=require("lmdb"),Db=Hd(),Pb=f(),{OVERFLOW_MARKER:iG,MAX_SEARCH_KEY_LENGTH:aG}=wb,Hb=Pb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Bb(e,t,r,s){if(Uo.validateEnv(e),t===void 0)throw new Error(wo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wo.IDS_REQUIRED):new Error(wo.IDS_MUST_BE_ITERABLE);try{let n=Bd.listDBIs(e);Bd.initializeDBIs(e,t,n);let i=new Db,o,_=[],c=[];for(let S=0,d=r.length;S<d;S++)try{o=r[S];let A=e.dbis[t].get(o);if(!A||s&&A[Hb]>s){i.skipped.push(o);continue}let g=e.dbis[t].ifVersion(o,Mb.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let y=0;y<n.length;y++){let $=n[y];if(!A.hasOwnProperty($)||$===t)continue;let x=e.dbis[$],v=A[$];if(v!=null)try{let we=Uo.getIndexedValues(v);if(we)for(let Ft=0,ir=we.length;Ft<ir;Ft++)x.remove(we[Ft],o)}catch{Gd.warn(`cannot delete from attribute: ${$}, ${v}:${o}`)}}});_.push(g),c.push(o),i.original_records.push(A)}catch(A){Gd.warn(A),i.skipped.push(o)}let u=[],E=await Promise.all(_);for(let S=0,d=E.length;S<d;S++)E[S]===!0?i.deleted.push(c[S]):(i.skipped.push(c[S]),u.push(S));let l=0;for(let S=0;S<u.length;S++){let d=u[S];i.original_records.splice(d-l,1),l++}return i.txn_time=Uo.getNextMonotonicTime(),i}catch(n){throw n}}a(Bb,"deleteRecords");vd.exports={deleteRecords:Bb}});var gs=h((cG,qd)=>{"use strict";var Cr=p(),Gb=Mo(),vb=q(),{getSchemaPath:Fb}=Y(),qb=As(),xb=O();qd.exports=Vb;async function Vb(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cr.isEmptyOrZeroLength(e.hash_values)&&!Cr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cr.isEmpty(c)||e.hash_values.push(c)}}if(Cr.isEmptyOrZeroLength(e.hash_values))return Fd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Fb(e.schema,e.table),i=await vb.openEnvironment(n,e.table),o=await Gb.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qb(e,o)}catch(_){xb.error(`unable to write transaction due to ${_.message}`)}return Fd(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Vb,"lmdbDeleteRecords");function Fd(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(Fd,"createDeleteResponse")});var Ns=h((lG,Yd)=>{var xd=require("lodash"),Vd=at(),B=require("joi"),kb=p(),{hdb_schema_table:$e,checkValidTable:kd}=Er(),{handleHDBError:Yb,hdb_errors:$b}=Q(),{HTTP_STATUS_CODES:Kb}=$b,EG=B.object({schema:$e,table:$e,hash_values:B.array().min(0).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items($e).required()}),Wb=B.object({schema:$e,table:$e,search_attribute:$e,search_value:B.any().required(),get_attributes:B.array().min(1).items($e).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),Qb=B.object({schema:$e,table:$e,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items($e).required(),conditions:B.array().min(1).items(B.object({search_attribute:$e,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});Yd.exports=function(e,t){let r=null;switch(t){case"value":r=Vd.validateBySchema(e,Wb);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(kd("schema",e.schema)),i(kd("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=Vd.validateBySchema(e,Qb);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=kb.checkGlobalSchemaTable(e.schema,e.table);if(n)return Yb(new Error,n,Kb.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=xd.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!xd.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Do=h((SG,$d)=>{"use strict";var Jb=q(),Xb=Ns(),{getSchemaPath:Zb}=Y();$d.exports=zb;function zb(e){let t=Xb(e,"hashes");if(t)throw t;let r=Zb(e.schema,e.table);return Jb.openEnvironment(r,e.table)}a(zb,"initialize")});var Po=h((TG,Kd)=>{"use strict";var jb=Zt(),eL=Do();Kd.exports=tL;async function tL(e){let t=await eL(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jb.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(tL,"lmdbGetDataByHash")});var Ai=h((mG,Wd)=>{"use strict";var mi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(mi,"SearchByHashObject");Wd.exports=mi});var Jd=h((gG,Qd)=>{"use strict";var RG=Ai(),rL=Zt(),sL=Do();Qd.exports=nL;async function nL(e){let t=await sL(e),r=global.hdb_schema[e.schema][e.table];return rL.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(nL,"lmdbSearchByHash")});var dt=h((pG,Xd)=>{"use strict";var Ri=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Ri,"SearchObject");Xd.exports=Ri});var gi=h((IG,rS)=>{"use strict";var _e=Zt(),iL=q(),aL=p(),R=ne(),jt=f(),oL=$t(),Zd=Me().LMDB_ERRORS_ENUM,{compareKeys:br}=require("ordered-binary"),{getSchemaPath:_L}=Y(),St=jt.SEARCH_WILDCARDS;async function cL(e,t,r){let s;e.schema===jt.SYSTEM_SCHEMA_NAME?s=oL[e.table]:s=global.hdb_schema[e.schema][e.table];let n=tS(e,s.hash_attribute,r,t);return jd(e,n,s.hash_attribute,r)}a(cL,"prepSearch");async function jd(e,t,r,s){let n=_L(e.schema,e.table),i=await iL.openEnvironment(n,e.table),o=eS(i,e,t,r),_=o.transaction||i;if([R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,R.SEARCH_TYPES.SEARCH_ALL,R.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(EL(e,r)===!1){let E=e.search_attribute;if(E===r)return s?zd(o,()=>!0):o.map(S=>({[r]:S.key}));let l=a(S=>({[r]:S.value,[E]:S.key}),"toObject");return s?zd(o,l):o.map(l)}let u=e.search_attribute===r?o.map(E=>E.key):o.map(E=>E.value);return s===!0?_e.batchSearchByHashToMap(_,r,e.get_attributes,u):_e.batchSearchByHash(_,r,e.get_attributes,u)}a(jd,"executeSearch");function eS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case R.SEARCH_TYPES.EQUALS:n=_e.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.CONTAINS:n=_e.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:n=_e.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:n=_e.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _e.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _e.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.SEARCH_ALL:return _e.searchAll(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _e.searchAllToMap(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.BETWEEN:n=_e.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:n=_e.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:n=_e.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:n=_e.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:n=_e.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(eS,"searchByType");function uL(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case R.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case R.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case R.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return br(i,s[0])>=0&&br(i,s[1])<=0};case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:return n=>br(n[r],s)>0;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>br(n[r],s)>=0;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:return n=>br(n[r],s)<0;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>br(n[r],s)<=0;default:return Object.create(null)}}a(uL,"filterByType");function zd(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(zd,"createMapFromIterable");function EL(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(EL,"checkToFetchMore");function tS(e,t,r,s){if(aL.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),St.indexOf(n)>-1)return r===!0?R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:R.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:R.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),R.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),R.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),R.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return R.SEARCH_TYPES.EQUALS;throw new Error(Zd.UNKNOWN_SEARCH_TYPE)}else switch(s){case jt.VALUE_SEARCH_COMPARATORS.BETWEEN:return R.SEARCH_TYPES.BETWEEN;case jt.VALUE_SEARCH_COMPARATORS.GREATER:return R.SEARCH_TYPES.GREATER_THAN;case jt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return R.SEARCH_TYPES.GREATER_THAN_EQUAL;case jt.VALUE_SEARCH_COMPARATORS.LESS:return R.SEARCH_TYPES.LESS_THAN;case jt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return R.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Zd.UNKNOWN_SEARCH_TYPE)}}a(tS,"createSearchTypeFromSearchObject");rS.exports={executeSearch:jd,createSearchTypeFromSearchObject:tS,prepSearch:cL,searchByType:eS,filterByType:uL}});var nS=h((LG,sS)=>{"use strict";var bG=dt(),lL=Ns(),dL=p(),SL=f(),hL=gi();sS.exports=TL;function TL(e,t){if(!dL.isEmpty(t)&&SL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lL(e,"value");if(s)throw s;let n=!0;return hL.prepSearch(e,t,n)}a(TL,"lmdbGetDataByValue")});var Lr=h((wG,iS)=>{"use strict";var UG=dt(),fL=Ns(),mL=p(),AL=f(),RL=gi();iS.exports=gL;async function gL(e,t){if(!mL.isEmpty(t)&&AL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=fL(e,"value");if(s)throw s;return RL.prepSearch(e,t,!1)}a(gL,"lmdbSearchByValue")});var oS=h((PG,aS)=>{"use strict";var DG=ne(),Ni=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Ni,"SearchByConditionsObject");var pi=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(pi,"SearchCondition");var Oi=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oi,"SortAttribute");aS.exports={SearchByConditionsObject:Ni,SearchCondition:pi,SortAttribute:Oi}});var lS=h((GG,ES)=>{"use strict";var BG=oS().SearchByConditionsObject,NL=dt(),pL=Ns(),Ho=Zt(),Ii=ne(),uS=gi(),OL=Co(),IL=require("lodash"),{getSchemaPath:CL}=Y(),_S=q(),{handleHDBError:bL,hdb_errors:LL}=Q(),{HTTP_STATUS_CODES:yL}=LL,UL=1e8;ES.exports=wL;async function wL(e){let t=pL(e,"conditions");if(t)throw bL(t,t.message,yL.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=CL(e.schema,e.table),s=await _S.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_S.openDBI(s,u.search_attribute);let i=IL.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let E=u.search_type;E===Ii.SEARCH_TYPES.EQUALS?u.estimated_count=Ho.count(s,u.search_attribute,u.search_value):E===Ii.SEARCH_TYPES.CONTAINS||E===Ii.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=UL}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await cS(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],E=i.slice(1).map(uS.filterByType),l=E.length,S=Ho.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),l>0&&(c=c.filter(d=>{for(let A=0;A<l;A++)if(!E[A](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>OL.parseRow(d,S))}else{for(let l=1;l<i.length;l++){let S=i[l],d=await cS(o,e,S,n.hash_attribute);_=_.concat(d)}let u=new Set,E=e.offset||0;_=_.filter(l=>u.has(l)?!1:(u.add(l),!0)).slice(E,e.limit&&e.limit+E),c=Ho.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(wL,"lmdbSearchByConditions");async function cS(e,t,r,s){let n=new NL(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ii.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,uS.searchByType(e,n,i,s).map(o=>o.value)}a(cS,"executeConditionSearch")});var bi=h((FG,dS)=>{"use strict";var ML=f().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=ML.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ci,"DeleteObject");dS.exports=Ci});var Bo=h((xG,gS)=>{"use strict";var fS=dt(),mS=bi(),AS=Lr(),RS=gs(),he=f(),SS=p(),hS=q(),{getTransactionAuditStorePath:DL,getSchemaPath:PL}=Y(),TS=O();gS.exports=HL;async function HL(e){try{if(SS.isEmpty(global.hdb_schema[e.schema])||SS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await BL(e),await GL(e);let t=PL(e.schema,e.table);try{await hS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")TS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=DL(e.schema,e.table);await hS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")TS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(HL,"lmdbDropTable");async function BL(e){let t=new fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await AS(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 mS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await RS(n)}a(BL,"deleteAttributesFromSystem");async function GL(e){let t=new fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await AS(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 mS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await RS(n)}catch(i){throw i}}a(GL,"dropTableFromSystem")});var pS=h((kG,NS)=>{"use strict";var vL=require("fs-extra"),FL=dt(),qL=Ai(),xL=bi(),VL=Bo(),kL=gs(),YL=Po(),$L=Lr(),ht=f(),{getSchemaPath:KL}=Y(),{handleHDBError:WL,hdb_errors:QL}=Q(),{HDB_ERROR_MSGS:JL,HTTP_STATUS_CODES:XL}=QL;NS.exports=ZL;async function ZL(e){let t;try{t=await zL(e.schema);let r=new FL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await $L(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await VL(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new xL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kL(n);let i=KL(t);await vL.remove(i)}catch(r){throw r}}a(ZL,"lmdbDropSchema");async function zL(e){let t=new qL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await YL(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw WL(new Error,JL.SCHEMA_NOT_FOUND(e),XL.NOT_FOUND,void 0,void 0,!0);return s}a(zL,"validateDropSchema")});var IS=h(($G,OS)=>{"use strict";var Li=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Li,"CreateTableObject");OS.exports=Li});var bS=h((QG,CS)=>{"use strict";var jL=require("fs-extra"),yi=q(),{getTransactionAuditStorePath:ey}=Y(),Go=ne(),WG=IS();CS.exports=ty;async function ty(e){let t;try{let r=ey(e.schema,e.table);await jL.mkdirp(r),t=await yi.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{yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ty,"createTransactionsAuditEnvironment")});var wS=h((XG,US)=>{"use strict";var vo=f(),LS=q(),ry=hr(),{getSystemSchemaPath:sy,getSchemaPath:ny}=Y(),iy=$t(),ay=Pn(),Fo=Dn(),oy=O(),_y=bS(),xo=iy.hdb_table,yS=[];for(let e=0;e<xo.attributes.length;e++)yS.push(xo.attributes[e].attribute);US.exports=cy;async function cy(e,t){let r=ny(t.schema,t.table),s=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await LS.createEnvironment(r,t.table),e!==void 0){let o=await LS.openEnvironment(sy(),vo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ry.insertRecords(o,xo.hash_attribute,yS,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await qo(s),await qo(n),await qo(i)}await _y(t)}catch(o){throw o}}a(cy,"lmdbCreateTable");async function qo(e){try{await ay(e)}catch(t){oy.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(qo,"createAttribute")});var DS=h((zG,MS)=>{"use strict";var uy=Hn(),Ey=Fn(),ly=ui(),ps=f(),dy=hr().updateRecords,Sy=q(),{getSchemaPath:hy}=Y(),Ty=As(),fy=O();MS.exports=my;async function my(e){try{let{schema_table:t,attributes:r}=uy(e);Ey(e,r,t.hash_attribute),e.schema!==ps.SYSTEM_SCHEMA_NAME&&(r.includes(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ly(e.hdb_auth_header,t,r),n=hy(e.schema,e.table),i=await Sy.openEnvironment(n,e.table),o=await dy(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ty(e,o)}catch(_){fy.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(my,"lmdbUpdateRecords")});var HS=h((ev,PS)=>{"use strict";var Ay=f().OPERATIONS_ENUM,Ui=class{constructor(t,r,s,n=void 0){this.operation=Ay.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ui,"UpsertObject");PS.exports=Ui});var GS=h((sv,BS)=>{"use strict";var rv=HS(),Ry=Hn(),gy=Fn(),Ny=ui(),Os=f(),py=hr().upsertRecords,Oy=q(),{getSchemaPath:Iy}=Y(),Cy=As(),by=O(),{handleHDBError:Ly,hdb_errors:yy}=Q();BS.exports=Uy;async function Uy(e){let t;try{t=Ry(e)}catch(c){throw Ly(c,c.message,yy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;gy(e,s,r.hash_attribute),e.schema!==Os.SYSTEM_SCHEMA_NAME&&(s.includes(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ny(e.hdb_auth_header,r,s),i=Iy(e.schema,e.table),o=await Oy.openEnvironment(i,e.table),_=await py(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Cy(e,_)}catch(c){by.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Uy,"lmdbUpsertRecords")});var kS=h((iv,VS)=>{"use strict";var wy=dt(),vS=p(),FS=O(),My=Lr(),qS=f(),Dy=Mo().deleteRecords,Py=q(),{getSchemaPath:Hy}=Y(),{promisify:By}=require("util"),Gy=By(setTimeout),xS=1e4,vy=10;VS.exports=Fy;async function Fy(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(vS.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 wy(e.schema,e.table,qS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await My(n,qS.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw FS.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return vS.isEmptyOrZeroLength(s)?(FS.trace("No records found to delete"),{message:"No records found to delete"}):await qy(e,s,t)}a(Fy,"lmdbDeleteRecordsBefore");async function qy(e,t,r){let s=Hy(e.schema,e.table),n=await Py.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=xS){let c=t.slice(o,o+xS),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Dy(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await Gy(vy)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(qy,"chunkDeletes")});var $S=h((ov,YS)=>{"use strict";var wi=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(wi,"DeleteBeforeObject");YS.exports=wi});var WS=h((cv,KS)=>{"use strict";var Mi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Mi,"DeleteAuditLogsBeforeResults");KS.exports=Mi});var XS=h((lv,JS)=>{"use strict";var Vo=q(),{getTransactionAuditStorePath:xy}=Y(),Ev=$S(),Is=ne(),Vy=p(),QS=WS(),ky=require("util").promisify,Yy=ky(setTimeout),$y=1e4,Ky=100;JS.exports=Wy;async function Wy(e){let t=xy(e.schema,e.table),r=await Vo.openEnvironment(t,e.table,!0),s=Vo.listDBIs(r);Vo.initializeDBIs(r,Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new QS;do n=await Qy(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 Yy(Ky);while(n.transactions_deleted>0);return i}a(Wy,"deleteAuditLogsBefore");async function Qy(e,t){let r=new QS;try{let s=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Vy.isEmpty(_)||(n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$y)break}return await n,r}catch(s){throw s}}a(Qy,"deleteTransactions")});var zS=h((Sv,ZS)=>{"use strict";var Di=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Di,"DropAttributeObject");ZS.exports=Di});var eh=h((fv,jS)=>{"use strict";var Jy=dt(),Xy=bi(),Tv=zS(),ze=f(),Zy=p(),ko=q(),zy=$t(),jy=Lr(),eU=gs(),{getSchemaPath:tU}=Y();jS.exports=rU;async function rU(e,t=!0){let r;e.schema===ze.SYSTEM_SCHEMA_NAME?r=zy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nU(e),n=tU(e.schema,e.table),i=await ko.openEnvironment(n,e.table);return t===!0&&await sU(e,i,r.hash_attribute),ko.dropDBI(i,e.attribute),s}a(rU,"lmdbDropAttribute");async function sU(e,t,r){let s=ko.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(sU,"removeAttributeFromAllObjects");async function nU(e){let t=new Jy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await jy(t)).filter(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Zy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Xy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return eU(i)}a(nU,"dropAttributeFromSystem")});var ah=h((Rv,ih)=>{"use strict";var Yo=q(),yr=ne(),Av=xt(),$o=f(),th=p(),{getTransactionAuditStorePath:iU}=Y(),aU=Zt(),Pi=Or(),oU=O();ih.exports=_U;async function _U(e){let t=iU(e.schema,e.table),r=await Yo.openEnvironment(t,e.table,!0),s=Yo.listDBIs(r);Yo.initializeDBIs(r,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rh(r,e.search_values);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,uU(r,e.search_values,n);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cU(r,e.search_values);default:return rh(r)}}a(_U,"readAuditLog");function rh(e,t=[0,Date.now()]){th.isEmpty(t[0])&&(t[0]=0),th.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yr.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 Pi,n))}a(rh,"searchTransactionsByTimestamp");function cU(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[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,nh(e,i))}return Object.fromEntries(r)}a(cU,"searchTransactionsByUsername");function uU(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=aU.equals(e,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:l}of E){let S=Number(l);s.has(S)?s.get(S).push(u.toString()):s.set(S,[u.toString()])}}let n=Array.from(s.keys()),i=nh(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);sh(c,"records",r,E,o),sh(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(uU,"searchTransactionsByHashValues");function sh(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Pi(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Pi(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(sh,"loopRecords");function nh(e,t){let r=[];try{let s=e.dbis[yr.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 Pi,i);r.push(o)}}catch(i){oU.warn(i)}return r}catch(s){throw s}}a(nh,"batchSearchTransactions")});var _h=h((Nv,oh)=>{"use strict";var{getSchemaPath:EU}=Y(),lU=q();oh.exports={writeTransaction:dU};async function dU(e,t,r){let s=EU(e,t);return(await lU.openEnvironment(s,t)).transaction(r)}a(dU,"writeTransaction")});var lh=h((Ov,Eh)=>{"use strict";var{getSchemaPath:ch}=Y(),uh=q();Eh.exports={flush:SU,resetReadTxn:hU};async function SU(e,t){return(await uh.openEnvironment(ch(e,t),t.toString())).flushed}a(SU,"flush");async function hU(e,t){try{(await uh.openEnvironment(ch(e,t),t.toString())).resetReadTxn()}catch{}}a(hU,"resetReadTxn")});var hh=h((Cv,Sh)=>{"use strict";var TU=O(),{handleHDBError:fU}=Q(),mU=Pa(),AU=Pn(),RU=yo(),gU=Dd(),NU=gs(),pU=Po(),OU=Jd(),IU=nS(),CU=Lr(),bU=lS(),LU=pS(),yU=wS(),UU=DS(),wU=GS(),MU=kS(),DU=XS(),PU=Bo(),HU=eh(),BU=ah(),GU=_h(),dh=lh(),Hi=class extends mU{async searchByConditions(t){return bU(t)}async getDataByHash(t){return await pU(t)}async searchByHash(t){return await OU(t)}async getDataByValue(t,r){return await IU(t,r)}async searchByValue(t){return await CU(t)}async createSchema(t){return await gU(t)}async dropSchema(t){return await LU(t)}async createTable(t,r){return await yU(t,r)}async dropTable(t){return await PU(t)}async createAttribute(t){return await AU(t)}async createRecords(t){return await RU(t)}async updateRecords(t){return await UU(t)}async upsertRecords(t){try{return await wU(t)}catch(r){throw fU(r,null,null,TU.ERR,r)}}async deleteRecords(t){return await NU(t)}async deleteRecordsBefore(t){return await MU(t)}async dropAttribute(t){return await HU(t)}async deleteAuditLogsBefore(t){return await DU(t)}async readAuditLog(t){return await BU(t)}writeTransaction(t,r,s){return GU.writeTransaction(t,r,s)}flush(t,r){return dh.flush(t,r)}resetReadTxn(t,r){return dh.resetReadTxn(t,r)}};a(Hi,"LMDBBridge");Sh.exports=Hi});var Qt=h((Lv,fh)=>{"use strict";var vU=hh(),FU=Pa(),qU=J();qU.initSync();var Th;function xU(){return Th instanceof FU?Th:new vU}a(xU,"getBridge");fh.exports=xU()});var Fi=h((Uv,Rh)=>{"use strict";var Gi=Da(),Ge=p(),VU=require("util"),vi=Qt(),kU=ii(),Ko=O(),{handleHDBError:wt,hdb_errors:YU}=Q(),{HTTP_STATUS_CODES:er}=YU,$U=VU.promisify(kU.getTableSchema),KU="updated",mh="inserted",Ah="upserted";Rh.exports={insert:QU,update:JU,upsert:XU,validation:WU,flush:ZU};async function WU(e){if(Ge.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ge.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ge.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await $U(e.schema,e.table),r=Gi(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Ge.isEmptyOrZeroLength(_[s]))throw Ko.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Ge.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ko.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Ge.isEmpty(_[s])&&_[s]!==""&&n.has(Ge.autoCast(_[s]))&&(_.skip=!0),n.add(Ge.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(WU,"validation");async function QU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);let s=await vi.createRecords(e);return Bi(mh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(QU,"insertData");async function JU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);let s=await vi.updateRecords(e);return Ge.isEmpty(s.existing_rows)?Bi(KU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Bi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(JU,"updateData");async function XU(e){if(e.operation!=="upsert")throw wt(new Error,"invalid operation, must be upsert",er.INTERNAL_SERVER_ERROR);let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);try{let s=await vi.upsertRecords(e);return Bi(Ah,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw wt(s,null,null,Ko.ERR,n)}}a(XU,"upsertData");function Bi(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===mh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Ah?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Bi,"returnObject");function ZU(e){return vi.flush(e.schema,e.table)}a(ZU,"flush")});var Oh=h((Mv,ph)=>{var zU=at(),Wo=require("joi"),{hdb_schema_table:gh}=Er(),Nh={schema:gh,table:gh},jU={date:Wo.date().iso().required()},ew={timestamp:Wo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ph.exports=function(e,t){let r=t==="timestamp"?{...Nh,...ew}:{...Nh,...jU},s=Wo.object(r);return zU.validateBySchema(e,s)}});var Lh=h((Dv,bh)=>{var tw=at(),Ih=require("joi"),{hdb_schema_table:Ch}=Er(),rw=Ih.object({schema:Ch,table:Ch,hash_values:Ih.array().required()});bh.exports=function(e){return tw.validateBySchema(e,rw)}});var Uh=h((Pv,yh)=>{"use strict";var qi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(qi,"InsertObject");var xi=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(xi,"NoSQLSeachObject");var Vi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vi,"DeleteResponseObject");yh.exports={InsertObject:qi,NoSQLSeachObject:xi,DeleteResponseObject:Vi}});var Bh=h((Bv,Hh)=>{"use strict";var Mh=Oh(),sw=Lh(),ki=p(),wh=require("moment"),Dh=O(),{promisify:nw,callbackify:iw}=require("util"),tr=f(),aw=ii(),Qo=nw(aw.getTableSchema),Jo=Qt(),{DeleteResponseObject:ow}=Uh(),{handleHDBError:Mt,hdb_errors:_w}=Q(),{HDB_ERROR_MSGS:Yi,HTTP_STATUS_CODES:Dt}=_w,cw="records successfully deleted",uw=iw(Ph);Hh.exports={delete:uw,deleteRecord:Ph,deleteFilesBefore:Ew,deleteAuditLogsBefore:lw};async function Ew(e){let t=Mh(e,"date");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(!wh(e.date,wh.ISO_8601).isValid())throw Mt(new Error,Yi.INVALID_DATE,Dt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,Yi.INVALID_DATE,!0);let s=ki.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,s,!0);let n=await Jo.deleteRecordsBefore(e);if(await Qo(e.schema,e.table),Dh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ew,"deleteFilesBefore");async function lw(e){let t=Mh(e,"timestamp");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Yi.INVALID_VALUE("Timestamp"),Dt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,Yi.INVALID_VALUE("Timestamp"),!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);let s=await Jo.deleteAuditLogsBefore(e);return await Qo(e.schema,e.table),Dh.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(lw,"deleteAuditLogsBefore");async function Ph(e){let t=sw(e);if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);try{await Qo(e.schema,e.table);let s=await Jo.deleteRecords(e);return ki.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${cw}`),s}catch(s){if(s.message===tr.SEARCH_NOT_FOUND_MESSAGE){let n=new ow;return n.message=tr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Ph,"deleteRecord")});var vh=h((vv,Gh)=>{var Xo=at(),ce={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 dw(e){return ce.password.presence=!0,ce.username.presence=!0,ce.role.presence=!0,ce.active.presence=!0,Xo.validateObject(e,ce)}a(dw,"addUserValidation");function Sw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(Sw,"alterUserValidation");function hw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(hw,"dropUserValidation");Gh.exports={addUserValidation:dw,alterUserValidation:Sw,dropUserValidation:hw}});var Nr=h((xv,jh)=>{"use strict";var kh="username is required",Yh="nothing to update, must supply active, role or password to update",$h="password cannot be an empty string",Kh="If role is specified, it cannot be empty.",Wh="active must be true or false";jh.exports={addUser:pw,alterUser:Ow,dropUser:Cw,userInfo:bw,listUsers:Ki,listUsersExternal:Lw,setUsersToGlobal:Cs,findAndValidateUser:ww,getClusterUser:Mw,USERNAME_REQUIRED:kh,ALTERUSER_NOTHING_TO_UPDATE:Yh,EMPTY_PASSWORD:$h,EMPTY_ROLE:Kh,ACTIVE_BOOLEAN:Wh};var Qh=Fi(),Tw=Bh(),zo=xn(),Jh=vh(),Xh=Zn(),jo=ci(),Le=p(),Zh=require("validate.js"),C=O(),{promisify:e_}=require("util"),t_=ds(),Fh=f(),qh=it(),fw=$r(),qv=J(),mw=kn(),Aw=$t(),{handleHDBError:je,hdb_errors:Rw}=Q(),{HTTP_STATUS_CODES:et,AUTHENTICATION_ERROR_MSGS:Zo,HDB_ERROR_MSGS:Ur}=Rw,{UserEventMsg:r_}=gr(),xh=require("lodash"),zh={username:!0,active:!0,role:!0,password:!0},Vh=new Map,$i=e_(Xh.searchByValue),gw=e_(Xh.searchByHash),Nw=e_(Tw.delete);async function pw(e){let t=Zh.cleanAttributes(e,zh),r=Jh.addUserValidation(t);if(r)throw je(new Error,r.message,et.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 $i(s),n=n&&Array.from(n)}catch(c){throw C.error("There was an error searching for a role in add user"),C.error(c),c}if(!n||n.length<1)throw je(new Error,Ur.ROLE_NAME_NOT_FOUND(t.role),et.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw je(new Error,Ur.DUP_ROLES_FOUND(t.role),et.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Qh.insert(i)}catch(c){throw C.error("There was an error searching for a user."),C.error(c),c}C.debug(o);try{await Cs()}catch(c){throw C.error("Got an error setting users to global"),C.error(c),c}if(o.skipped_hashes.length===1)throw je(new Error,Ur.USER_ALREADY_EXISTS(t.username),et.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],jo.signalUserChange(new r_(process.pid)),`${_.username} successfully added`}a(pw,"addUser");async function Ow(e){let t=Zh.cleanAttributes(e,zh);if(Le.isEmptyOrZeroLength(t.username))throw new Error(kh);if(Le.isEmptyOrZeroLength(t.password)&&Le.isEmptyOrZeroLength(t.role)&&Le.isEmptyOrZeroLength(t.active))throw new Error(Yh);if(!Le.isEmpty(t.password)&&Le.isEmptyOrZeroLength(t.password.trim()))throw new Error($h);if(!Le.isEmpty(t.active)&&!Le.isBoolean(t.active))throw new Error(Wh);let r=Iw(t.username);if(!Le.isEmpty(t.password)&&!Le.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password)),t.role==="")throw new Error(Kh);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 $i(i)||[])}catch(_){throw C.error("Got an error searching for a role."),C.error(_),_}if(!o||o.length===0){let _=Ur.ALTER_USER_ROLE_NOT_FOUND(t.role);throw C.error(_),je(new Error,_,et.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=Ur.ALTER_USER_DUP_ROLES(t.role);throw C.error(_),je(new Error,_,et.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 Qh.update(s)}catch(i){throw C.error("Error during update."),C.error(i),i}try{await Cs()}catch(i){throw C.error("Got an error setting users to global"),C.error(i),i}return jo.signalUserChange(new r_(process.pid)),n}a(Ow,"alterUser");function Iw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Iw,"isClusterUser");async function Cw(e){try{let t=Jh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Le.isEmpty(global.hdb_users.get(e.username)))throw je(new Error,Ur.USER_NOT_EXIST(e.username),et.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Nw(r)}catch(n){throw C.error("Got an error deleting a user."),C.error(n),n}C.debug(s);try{await Cs()}catch(n){throw C.error("Got an error setting users to global."),C.error(n),n}return jo.signalUserChange(new r_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Cw,"dropUser");async function bw(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 gw(r)}catch(n){throw C.error("Got an error searching for a role."),C.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw C.error(r),r}return t}a(bw,"userInfo");async function Lw(){let e;try{e=await Ki()}catch(t){throw C.error("Got an error listing users."),C.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(Lw,"listUsersExternal");async function Ki(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $i(e)}catch(o){throw C.error("Got an error searching for roles."),C.error(o),o}let r={};for(let o of t)r[o.id]=xh.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 $i(s)}catch(o){throw C.error("Got an error searching for users."),C.error(o),o}let i=new Map;for(let o of n)o=xh.cloneDeep(o),o.role=r[o.role],yw(o.role),i.set(o.username,o);return(await mw.getLicense()).enterprise?i:Uw(Array.from(i.values()))}catch(e){throw C.error("got an error listing users"),C.error(e),Le.errorizeMessage(e)}return null}a(Ki,"listUsers");function yw(e){try{if(!e){C.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(Aw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){C.error("Got an error trying to set system permissions."),C.error(t)}}a(yw,"appendSystemTablesToRole");function Uw(e){try{if(C.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?(C.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return C.error("error filtering users."),C.error(t),new Map}}a(Uw,"nonEnterpriseFilter");async function Cs(){try{let e=await Ki();global.hdb_users=e}catch(e){throw C.error(e),e}}a(Cs,"setUsersToGlobal");async function ww(e,t,r=!0){global.hdb_users||await Cs();let s=global.hdb_users.get(e);if(!s)throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw je(new Error,Zo.USER_INACTIVE,et.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(Vh.get(t)===s.password)return n;if(zo.validate(s.password,t))Vh.set(t,s.password);else throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ww,"findAndValidateUser");async function Mw(){let e=await Ki(),t=fw.getConfigFromFile(Fh.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Le.isEmpty(r)&&r?.role?.role===Fh.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=t_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+qh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+qh.SERVER_SUFFIX.ADMIN,r}a(Mw,"getClusterUser")});var tT=h((kv,eT)=>{"use strict";var Dw=Qt();eT.exports={writeTransaction:Pw};function Pw(e,t,r){return Dw.writeTransaction(e,t,r)}a(Pw,"writeTransaction")});var s_=h(($v,Hw)=>{Hw.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 h_=h((eF,AT)=>{"use strict";var ee=J();ee.initSync();var Bw=require("fs-extra"),Gw=require("semver"),ws=require("path"),{monotonicFactory:vw}=require("ulidx"),__=vw(),Fw=require("util"),sT=require("child_process"),qw=Fw.promisify(sT.exec),xw=sT.spawn,M=it(),G=f(),Wi=p(),Pt=O(),Qi=ds(),Vw=tT(),bs=$r(),{encode:a_,decode:c_}=require("msgpackr"),{isEmpty:rr}=Wi,nT=Nr(),iT=12e10,{connect:kw,StorageType:aT,RetentionPolicy:oT,AckPolicy:u_,DeliverPolicy:Ms,DiscardPolicy:Yw,NatsConnection:Kv,JetStreamManager:Wv,JetStreamClient:Qv,StringCodec:Jv,JSONCodec:$w,createInbox:E_,StreamSource:Xv,headers:Kw,toJsMsg:_T,nuid:Zv,JetStreamOptions:zv,ErrorCode:rT,nanos:jv}=require("nats"),{PACKAGE_ROOT:Ww}=f(),Qw=s_(),cT=$w(),Jw="clustering",Xw=Qw.engines[M.NATS_SERVER_NAME],Zw=ws.join(Ww,"dependencies"),o_=ws.join(Zw,`${process.platform}-${process.arch}`,M.NATS_BINARY_NAME),n_,i_,Ls,ys,Us,Ke;AT.exports={runCommand:uT,checkNATSServerInstalled:zw,createConnection:l_,getConnection:Ji,getJetStreamManager:Ds,getJetStream:ET,getNATSReferences:ye,getServerList:eM,createLocalStream:d_,listStreams:lT,deleteLocalStream:tM,getServerConfig:Ps,listRemoteStreams:rM,viewStream:sM,viewStreamIterator:nM,publishToStream:iM,createWorkQueueStream:aM,addSourceToWorkStream:ST,request:oM,removeSourceFromWorkStream:TT,reloadNATS:S_,reloadNATSHub:_M,reloadNATSLeaf:cM,extractServerName:hT,requestErrorHandler:uM,updateWorkStream:EM,createLocalTableStream:fT,createTableStreams:lM,purgeTableStream:mT,purgeSchemaTableStreams:dM,getStreamInfo:SM,updateLocalStreams:TM,closeConnection:jw,getJsmServerName:Hs,addNatsMsgHeader:dT};async function uT(e,t=void 0){let{stdout:r,stderr:s}=await qw(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 z.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bN(s,r),va(s);let n=s.toJSON();if(te=kt(n),te.logging_rotation_rotate)for(let i in Uu)te[i]&&z.error(`Config ${Uu[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);z.trace(gN)}}a(Hu,"initConfig");function bN(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qe.join(r,Pe.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Qe.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qe.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(z.trace("Updating config file with missing config params"),De.writeFileSync(t,String(e)))}a(bN,"checkForUpdatedConfig");function va(e){let t=e.toJSON(),r=dN(t);if(r.error)throw hn.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(va,"validateConfig");function LN(e,t){te===void 0&&(te={});let r=_t[e.toLowerCase()];if(r===void 0){z.trace(`Unable to update config object because config param '${e}' does not exist`);return}te[r.toLowerCase()]=t}a(LN,"updateConfigObject");function Bu(e,t,r=void 0,s=!1,n=!1){te===void 0&&Hu();let i=Pu(_t.hdb_root),o=Qe.join(i,Pe.HDB_CONFIG_FILE),_=lr(o),c;if(r===void 0&&e.toLowerCase()===Nt.SCHEMAS)c=t;else if(r===void 0){let l=_t[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let S=l.split("_"),d=Ba(l,t);_.setIn([...S],d)}else for(let l in r){let S=_t[l.toLowerCase()];if(S===Nt.SCHEMAS){c=r[l];continue}if(S!==void 0){let d=S.split("_"),A=Ba(S,r[l]);try{_.setIn([...d],A)}catch(g){z.error(g)}}}c&&Du(_,c),va(_);let u=_.getIn(["rootPath"]),E=Qe.join(u,Pe.HDB_CONFIG_FILE);s===!0&&yN(o,u),De.writeFileSync(E,String(_)),n&&(te=kt(_.toJSON())),z.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Bu,"updateConfigValue");function yN(e,t){try{let r=Qe.join(t,"backup",`${Pe.HDB_CONFIG_FILE}.bak`);De.copySync(e,r),z.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){z.error(NN),z.error(r)}}a(yN,"backupConfigFile");var UN=["schemas"];function kt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!UN.includes(r)){let s=kt(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(kt,"flattenConfig");function Ba(e,t){if(e===Nt.CLUSTERING_NODENAME||e===Nt.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(hN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pe.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 pe.autoCast(t)}a(Ba,"castConfigValue");function wN(){let e=pe.getPropsFilePath(),t=Ga(e);return lr(t).toJSON()}a(wN,"getConfiguration");async function MN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Bu(void 0,void 0,n,!0),ON}catch(i){throw typeof i=="string"||i instanceof String?fN(i,i,mN.BAD_REQUEST,void 0,void 0,!0):i}}a(MN,"setConfiguration");function Fa(){let e=pe.getPropsFilePath();try{De.accessSync(e,De.constants.F_OK|De.constants.R_OK)}catch(s){throw z.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ga(e);return lr(t).toJSON()}a(Fa,"readConfigFile");function lr(e){return SN.parseDocument(De.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function DN(){let e=Fa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pe.isEmptyOrZeroLength(t)?[]:t;let r=yu(t);if(r)throw hn.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pe.isEmptyOrZeroLength(s)?[]:s;let n=yu(s);if(n)throw hn.CONFIG_VALIDATION(n.message);if(!pe.isEmptyOrZeroLength(s)&&!pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hn.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(DN,"getClusteringRoutes");function Gu(e){let t=wu(e);te={};for(let r in _t){let s=t.get(r.toUpperCase());if(pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_t[r].toLowerCase();n===Nt.LOGGING_ROOT?te[n]=Qe.dirname(s):te[n]=s}return te}a(Gu,"initOldConfig");function PN(e){let t=Fa();return TN.get(t,e.replaceAll("_","."))}a(PN,"getConfigFromFile")});var J=h((tH,qu)=>{"use strict";var qa=require("fs-extra"),Je=require("path"),HN=require("os"),BN=require("properties-reader"),Kr=O(),dr=p(),N=f(),fn=$r(),GN="Error initializing environment manager",mn="BOOT_PROPS_FILE_PATH",Fu=!1,vN={[N.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ct={};qu.exports={BOOT_PROPS_FILE_PATH:mn,getHdbBasePath:FN,setHdbBasePath:qN,get:xN,initSync:kN,setProperty:D,initTestEnvironment:YN};function FN(){return ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(FN,"getHdbBasePath");function qN(e){ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(qN,"setHdbBasePath");function xN(e){let t=fn.getConfigValue(e);return t===void 0?ct[e]:t}a(xN,"get");function D(e,t){vN[e]&&(ct[e]=t),fn.updateConfigObject(e,t)}a(D,"setProperty");function VN(){let e;try{e=dr.getPropsFilePath(),qa.accessSync(e,qa.constants.F_OK|qa.constants.R_OK),Fu=!0;let t=BN(e);return ct[N.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(N.HDB_SETTINGS_NAMES.INSTALL_USER),ct[N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ct[mn]=e,!0}catch{return Kr.trace(`Environment manager found no properties file at ${e}`),!1}}a(VN,"doesPropFileExist");function kN(e=!1){try{(Fu||VN())&&(fn.initConfig(e),ct[N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=fn.getConfigValue(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Kr.error(GN),Kr.error(t),console.error(t),process.exit(1)}}a(kN,"initSync");function YN(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=Je.join(__dirname,"../../","unitTests");ct[mn]=Je.join(c,"hdb_boot_properties.file"),D(N.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Je.join(c,"settings.test")),D(N.HDB_SETTINGS_NAMES.INSTALL_USER,HN.userInfo().username),D(N.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.HDB_SETTINGS_NAMES.CERT_KEY,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Je.join(c,"envDir","utility","keys","privateKey.pem")),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Je.join(c,"envDir","utility","keys","certificate.pem")),D(N.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),D(N.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Je.join(c,"envDir","log")),D(N.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),D(N.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),D(N.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Je.join(c,"envDir")),D(N.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),D(N.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),D(N.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),D(N.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),D(N.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),D(N.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Je.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),D(N.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(D("CORS_ACCESSLIST",o),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(D(N.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(D(N.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(D(N.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),D(N.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${mn}. Please check your boot props and settings files`;Kr.fatal(r),Kr.error(t)}}a(YN,"initTestEnvironment")});var ku=h((sH,Vu)=>{"use strict";var xa=J(),xu=f();xa.initSync();var $N=xa.get(xu.CONFIG_PARAMS.STORAGE_COMPRESSION),KN=xa.get(xu.CONFIG_PARAMS.STORAGE_CACHING)!==!1,An=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=$N&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=KN&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(An,"OpenDBIObject");Vu.exports=An});var Ku=h((iH,$u)=>{"use strict";var Sr=J(),Wr=f();Sr.initSync();var WN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Sr.get(Wr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Yu=Sr.get(Wr.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),QN=Sr.get(Wr.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Rn=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=WN,Yu!==void 0&&(this.overlappingSync=Yu),this.noReadAhead=QN}};a(Rn,"OpenEnvironmentObject");$u.exports=Rn});var q=h((oH,ju)=>{"use strict";var Va=require("lmdb"),He=require("fs-extra"),xe=require("path"),Nn=xt(),Wu=O(),re=Me().LMDB_ERRORS_ENUM,pn=gu(),ka=ku(),Qu=Ku(),pt=ne(),Ve=pt.INTERNAL_DBIS_NAME,Ju=pt.DBI_DEFINITION_NAME,JN="data.mdb",XN="lock.mdb",Qr=".mdb",ZN="-lock",gn=class{constructor(t,r,s=!1){this.dbi=Be(t,r),this.key_type=this.dbi[pt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[pt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(gn,"TransactionCursor");function Ya(e,t){if(e===void 0)throw new Error(re.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(re.ENV_NAME_REQUIRED)}a(Ya,"pathEnvNameValidation");async function $a(e,t,r=!0){try{await He.access(e)}catch(s){throw s.code==="ENOENT"?new Error(re.INVALID_BASE_PATH):s}try{let s=xe.join(e,t+Qr);return await He.access(s,He.constants.R_OK|He.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await He.access(xe.join(e,t,JN),He.constants.R_OK|He.constants.F_OK),xe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(re.INVALID_ENVIRONMENT)}else throw new Error(re.INVALID_ENVIRONMENT);throw s}}a($a,"validateEnvironmentPath");function On(e,t){if(Nn.validateEnv(e),t===void 0)throw new Error(re.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function zN(e,t,r=!1,s=!1){Ya(e,t),t=t.toString();try{return await $a(e,t,s),Ka(e,t,r)}catch(n){if(n.message===re.INVALID_ENVIRONMENT){let i=xe.join(e,t);await He.mkdirp(s?i:e);let o=new Qu(s?i:i+Qr,!1),_=Va.open(o);_.dbis=Object.create(null);let c=new ka(!1);_.openDB(Ve,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Wa(e,t,r);return _[pt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(zN,"createEnvironment");async function jN(e,t,r,s=!0){let n=await Ka(e,t);if(r===void 0)throw new Error(re.DESTINATION_PATH_REQUIRED);try{await He.access(xe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(re.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(jN,"copyEnvironment");async function Ka(e,t,r=!1){Ya(e,t),t=t.toString();let s=Wa(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await $a(e,t),i=xe.join(e,t+Qr),o=n!=i,_=new Qu(n,o),c=Va.open(_);c.dbis=Object.create(null);let u=Zu(c);for(let E=0;E<u.length;E++)Be(c,u[E]);return c[pt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ka,"openEnvironment");async function ep(e,t,r=!1){Ya(e,t),t=t.toString();let s=xe.join(e,t+Qr),n=await $a(e,t);if(global.lmdb_map!==void 0){let i=Wa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Xu(o),delete global.lmdb_map[i]}}await He.remove(n),await He.remove(n===s?n+ZN:xe.join(xe.dirname(n),XN))}a(ep,"deleteEnvironment");async function Xu(e){Nn.validateEnv(e);let t=e[pt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Xu,"closeEnvironment");function Wa(e,t,r=!1){let n=`${xe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Wa,"getCachedEnvironmentName");function tp(e){Nn.validateEnv(e);let t=Object.create(null),r=Be(e,Ve);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ve)try{t[s]=Object.assign(new pn,n)}catch{Wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(tp,"listDBIDefinitions");function Zu(e){Nn.validateEnv(e);let t=[],r=Be(e,Ve);for(let{key:s}of r.getRange({start:!1}))s!==Ve&&t.push(s);return t}a(Zu,"listDBIs");function rp(e,t){let s=Be(e,Ve).getEntry(t),n=new pn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(rp,"getDBIDefinition");function zu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Be(e,t)}catch(n){if(n.message===re.DBI_DOES_NOT_EXIST){let i=new ka(r,s===!0),o=e.openDB(t,i),_=new pn(r===!0,s);return o[Ju]=_,Be(e,Ve).putSync(t,_),e.dbis[t]=o,o}throw n}}a(zu,"createDBI");function Be(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ve?r=rp(e,t):r=new pn,r===void 0)throw new Error(re.DBI_DOES_NOT_EXIST);let s;try{let n=new ka(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(re.DBI_DOES_NOT_EXIST):n}return s[Ju]=r,e.dbis[t]=s,s}a(Be,"openDBI");function sp(e,t){On(e,t),t=t.toString();let r=Be(e,t),s=r.getStats();return r[pt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(sp,"statDBI");async function np(e,t){try{let r=xe.join(e,t+Qr);return(await He.stat(r)).size}catch{throw new Error(re.INVALID_ENVIRONMENT)}}a(np,"environmentDataSize");function ip(e,t){if(On(e,t),t=t.toString(),t===Ve)throw new Error(re.CANNOT_DROP_INTERNAL_DBIS_NAME);Be(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Be(e,Ve).removeSync(t)}a(ip,"dropDBI");function ap(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Be(e,n)}catch(i){if(i.message===re.DBI_DOES_NOT_EXIST)zu(e,n,n!==t,n===t);else throw i}}}a(ap,"initializeDBIs");ju.exports={openDBI:Be,openEnvironment:Ka,createEnvironment:zN,listDBIs:Zu,listDBIDefinitions:tp,createDBI:zu,dropDBI:ip,statDBI:sp,deleteEnvironment:ep,initializeDBIs:ap,TransactionCursor:gn,environmentDataSize:np,copyEnvironment:jN,closeEnvironment:Xu}});var tE=h((cH,eE)=>{"use strict";var In=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(In,"InsertRecordsResponseObject");eE.exports=In});var sE=h((EH,rE)=>{"use strict";var Cn=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(Cn,"UpdateRecordsResponseObject");rE.exports=Cn});var iE=h((dH,nE)=>{"use strict";var bn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(bn,"UpsertRecordsResponseObject");nE.exports=bn});var hr=h((mH,_E)=>{"use strict";var op=q(),_p=tE(),cp=sE(),up=iE(),Xe=xt(),Jr=Me().LMDB_ERRORS_ENUM,Ep=ne(),ut=f(),lp=p(),dp=require("uuid"),hH=require("lmdb"),{handleHDBError:Sp,hdb_errors:hp}=Q(),{OVERFLOW_MARKER:TH,MAX_SEARCH_KEY_LENGTH:fH}=Ep,aE=J();aE.initSync();var Ln=aE.get(ut.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Qa=ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yt=ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Tp(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new _p,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];oE(u,!0,n);let E=fp(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Xa(o,_,s,i,n)}a(Tp,"insertRecords");function fp(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let E=_([[{}]]);Array.isArray(E)&&(_=E[0][ut.FUNC_VAL],s[o]=_)}let c=Xe.getIndexedValues(_),u=e.dbis[o];if(c){Ln&&u.prefetch(c.map(E=>({key:E,value:n})),yn);for(let E=0,l=c.length;E<l;E++)u.put(c[E],n)}}Ln&&e.dbis[t].prefetch([n],yn),e.dbis[t].put(n,s,s[Yt])})}a(fp,"insertRecord");function mp(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(mp,"removeSkippedRecords");function oE(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yt]))&&(e[Yt]=r||(r=Xe.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Qa]))&&(e[Qa]=r||Xe.getNextMonotonicTime()):delete e[Qa]}a(oE,"setTimestamps");function Ja(e,t,r){r.indexOf(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ut.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),op.initializeDBIs(e,t,r)}a(Ja,"initializeTransaction");async function Ap(e,t,r,s,n=Xe.getNextMonotonicTime()){za(e,t,r,s),Ja(e,t,r);let i=new cp,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],S;try{S=Za(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(S),c.push(l)}return Xa(_,c,s,i,n,o)}a(Ap,"updateRecords");async function Rp(e,t,r,s,n=Xe.getNextMonotonicTime()){try{za(e,t,r,s)}catch(c){throw Sp(c,c.message,hp.HTTP_STATUS_CODES.BAD_REQUEST)}Ja(e,t,r);let i=new up,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;lp.isEmpty(u[t])?(E=dp.v4(),u[t]=E):E=u[t];let l=Za(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Xa(o,_,s,i,n)}a(Rp,"upsertRecords");async function Xa(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||Xe.getNextMonotonicTime(),mp(r,i),s}a(Xa,"finalizeWrite");function Za(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(oE(r,!E,o),Number.isInteger(r[Yt])&&u[Yt]>r[Yt])return!1;E&&n.original_records.push(u);let l,S=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let g=r[A],y=e.dbis[A];if(y===void 0)continue;let $=u[A];if(typeof g=="function"){let v=g([[u]]);Array.isArray(v)&&(g=v[0][ut.FUNC_VAL],r[A]=g)}if(g===$)continue;let x=Xe.getIndexedValues($);if(x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.remove(x[v],s)}if(x=Xe.getIndexedValues(g),x){Ln&&y.prefetch(x.map(v=>({key:v,value:s})),yn);for(let v=0,we=x.length;v<we;v++)y.put(x[v],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Yt])},"do_put");return c?l=_.ifVersion(s,c.version,S):l=_.ifNoExists(s,S),l.then(d=>d?!0:Za(e,t,r,s,n,i,o))}a(Za,"updateUpsertRecord");function gp(e,t,r){if(Xe.validateEnv(e),t===void 0)throw new Error(Jr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jr.WRITE_ATTRIBUTES_REQUIRED):new Error(Jr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(gp,"validateBasic");function za(e,t,r,s){if(gp(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Jr.RECORDS_REQUIRED):new Error(Jr.RECORDS_MUST_BE_ARRAY)}a(za,"validateWrite");function yn(){}a(yn,"noop");_E.exports={insertRecords:Tp,updateRecords:Ap,upsertRecords:Rp}});var Y=h((RH,SE)=>{"use strict";var es=f(),Np=p(),Se=J(),ts=require("path"),pp=require("minimist"),cE=require("fs-extra"),uE=require("lodash");Se.initSync();var{CONFIG_PARAMS:Ot,SCHEMAS_PARAM_CONFIG:Xr,SYSTEM_SCHEMA_NAME:Un}=es,Zr,zr,jr;function EE(){if(Zr!==void 0)return Zr;if(Se.getHdbBasePath()!==void 0)return Zr=Se.get(Ot.STORAGE_PATH)||ts.join(Se.getHdbBasePath(),es.SCHEMA_DIR_NAME),Zr}a(EE,"getBaseSchemaPath");function lE(){if(zr!==void 0)return zr;if(Se.getHdbBasePath()!==void 0)return zr=dE(Un),zr}a(lE,"getSystemSchemaPath");function Op(){if(jr!==void 0)return jr;if(Se.getHdbBasePath()!==void 0)return jr=Se.get(es.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ts.join(Se.getHdbBasePath(),es.TRANSACTIONS_DIR_NAME),jr}a(Op,"getTransactionAuditStoreBasePath");function Ip(e,t){let r=Se.get(Ot.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ts.join(Op(),e.toString())}a(Ip,"getTransactionAuditStorePath");function dE(e,t){e=e.toString(),t=t&&t.toString();let r=Se.get(es.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ts.join(EE(),e)}a(dE,"getSchemaPath");function Cp(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,pp(process.argv));let s=r[Ot.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Np.isObject(s))throw o;i=s}for(let o of i){let _=o[Un];if(!_)continue;let c=Se.get(Ot.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Xr.PATH];if(u)return uE.set(c,[Un,Xr.TABLES,t,Xr.PATH],u),Se.setProperty(Ot.SCHEMAS,c),u;let E=_?.[Xr.PATH];if(E)return uE.set(c,[Un,Xr.PATH],E),Se.setProperty(Ot.SCHEMAS,c),E}}let n=r[Ot.STORAGE_PATH.toUpperCase()];if(n){if(!cE.pathExistsSync(n))throw new Error(n+" does not exist");let i=ts.join(n,e);return cE.mkdirsSync(i),Se.setProperty(Ot.STORAGE_PATH,n),i}return lE()}a(Cp,"initSystemSchemaPaths");function bp(){Zr=void 0,zr=void 0,jr=void 0}a(bp,"resetPaths");SE.exports={getBaseSchemaPath:EE,getSystemSchemaPath:lE,getTransactionAuditStorePath:Ip,getSchemaPath:dE,initSystemSchemaPaths:Cp,resetPaths:bp}});var $t=h((NH,Lp)=>{Lp.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 ja=h((pH,hE)=>{var{common_validators:It}=Er(),rs=at(),ke="is required",V={schema:{presence:!0,format:It.schema_format,length:It.schema_length},table:{presence:!0,format:It.schema_format,length:It.schema_length},attribute:{presence:!0,format:It.schema_format,length:It.schema_length},hash_attribute:{presence:!0,format:It.schema_format,length:It.schema_length}};function ss(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ss,"makeAttributesStrings");function yp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence=!1,V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(yp,"schema_object");function Up(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Up,"table_object");function wp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence={message:ke},rs.validateObject(e,V)}a(wp,"create_table_object");function Mp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence={message:ke},V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Mp,"attribute_object");function Dp(e){return e=ss(e),V.schema.presence={message:ke},V.table.presence={message:ke},V.attribute.presence=!1,V.hash_attribute.presence=!1,rs.validateObject(e,V)}a(Dp,"describe_table");function Pp(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(Pp,"validateTableResidence");hE.exports={schema_object:yp,create_table_object:wp,table_object:Up,attribute_object:Mp,describe_table:Dp,validateTableResidence:Pp}});var fE=h((IH,TE)=>{"use strict";var Hp=require("uuid"),wn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Hp.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(wn,"CreateAttributeObject");TE.exports=wn});var Dn=h((bH,mE)=>{"use strict";var Bp=fE(),Mn=class extends Bp{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Mn,"LMDBCreateAttributeObject");mE.exports=Mn});var RE=h((yH,AE)=>{"use strict";AE.exports=vp;var Gp="inserted";function vp(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Gp?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(vp,"returnObject")});var Pn=h((wH,IE)=>{"use strict";var Fp=f(),eo=q(),qp=hr(),{getSystemSchemaPath:xp,getSchemaPath:Vp}=Y(),kp=$t(),Yp=ja(),$p=Dn(),Kp=RE(),{handleHDBError:gE,hdb_errors:pE}=Q(),NE=p(),{HTTP_STATUS_CODES:Wp}=pE,to=kp.hdb_attribute,OE=[];for(let e=0;e<to.attributes.length;e++)OE.push(to.attributes[e].attribute);var Qp="inserted";IE.exports=Jp;async function Jp(e){let t=Yp.attribute_object(e);if(t)throw gE(new Error,t.message,pE.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&NE.checkGlobalSchemaTable(e.schema,e.table);if(r)throw gE(new Error,r,Wp.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NE.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 $p(e.schema,e.table,e.attribute,e.id);try{let i=await eo.openEnvironment(Vp(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}`);eo.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eo.openEnvironment(xp(),Fp.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await qp.insertRecords(o,to.hash_attribute,OE,[n]);return Kp(Qp,_,{records:[n]},c)}catch(i){throw i}}a(Jp,"lmdbCreateAttribute")});var Hn=h((PH,bE)=>{"use strict";var Et=p(),CE=O(),DH=Da();bE.exports=Xp;function Xp(e){if(Et.isEmpty(e))throw new Error("invalid update parameters defined.");if(Et.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Et.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(Et.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&&Et.isEmptyOrZeroLength(o[r]))throw CE.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(!Et.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CE.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`);!Et.isEmpty(o[r])&&o[r]!==""&&s.has(Et.autoCast(o[r]))&&(o.skip=!0),s.add(Et.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Xp,"insertUpdateValidate")});var Gn=h((BH,LE)=>{"use strict";var Zp=f().OPERATIONS_ENUM,Bn=class{constructor(t,r,s,n,i=void 0){this.operation=Zp.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Bn,"InsertObject");LE.exports=Bn});var Fn=h((FH,yE)=>{"use strict";var vH=Gn(),vn=f(),so=p(),ro=O(),zp=require("uuid"),{handleHDBError:ns,hdb_errors:jp}=Q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=jp;yE.exports=eO;function eO(e,t,r){for(let n=0;n<t.length;n++)tO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];rO(i,r,e.operation)}}a(eO,"processRows");function tO(e){if(Buffer.byteLength(String(e))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(so.isEmptyOrZeroLength(e)||so.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(tO,"validateAttribute");function rO(e,t,r){if(!e.hasOwnProperty(t)||so.isEmptyOrZeroLength(e[t])){if(r===vn.OPERATIONS_ENUM.INSERT||r===vn.OPERATIONS_ENUM.UPSERT){e[t]=zp.v4();return}throw ro.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>vn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ro.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ro.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(rO,"validateHash")});var wE=h((xH,UE)=>{"use strict";var qn=class{constructor(t,r){this.type=t,this.message=r}};a(qn,"ITCEventObject");UE.exports=qn});var xn=h((kH,PE)=>{var sO=require("crypto"),ME=9;function nO(e){let t=aO(ME),r=DE(e+t);return t+r}a(nO,"createHash");function iO(e,t){let r=e.substr(0,ME),s=r+DE(t+r);return e===s}a(iO,"validateHash");function aO(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(aO,"generateSalt");function DE(e){return sO.createHash("md5").update(e).digest("hex")}a(DE,"md5");PE.exports={hash:nO,validate:iO}});var BE=h(($H,HE)=>{"use strict";var Ct=f(),os=class{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.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(os,"BaseLicense");var Vn=class extends os{constructor(t=0,r=Ct.STORAGE_TYPES_ENUM.LMDB,s=Ct.LICENSE_VALUES.API_CALL_DEFAULT,n=Ct.RAM_ALLOCATION_ENUM.DEFAULT,i=Ct.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Vn,"ExtendedLicense");HE.exports={BaseLicense:os,ExtendedLicense:Vn}});var kn=h((WH,VE)=>{"use strict";var fr=require("fs-extra"),GE=xn(),vE=require("crypto"),oO=require("moment"),_O=require("uuid").v4,oe=O(),io=require("path"),cO=p(),Oe=f(),uO=BE().ExtendedLicense,Tr="invalid license key format",EO="061183",lO="mofi25",dO="aes-256-cbc",SO=16,hO=32,FE=J();FE.initSync();var no;VE.exports={validateLicense:qE,generateFingerPrint:fO,licenseSearch:xE,getLicense:RO};function ao(){return io.join(FE.getHdbBasePath(),Oe.LICENSE_KEY_DIR_NAME,Oe.LICENSE_FILE_NAME)}a(ao,"getLicenseDirPath");function TO(){let e=ao();return io.join(e,Oe.LICENSE_FILE_NAME)}a(TO,"getLicenseFilePath");function oo(){let e=ao();return io.join(e,Oe.REG_KEY_FILE_NAME)}a(oo,"getFingerPrintFilePath");async function fO(){let e=oo();try{return await fr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await mO();throw oe.error(`Error writing fingerprint file to ${e}`),oe.error(t),new Error("There was an error generating the fingerprint")}}a(fO,"generateFingerPrint");async function mO(){let e=_O(),t=GE.hash(e),r=oo();try{await fr.mkdirp(ao()),await fr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw oe.error(`Error writing fingerprint file to ${r}`),oe.error(s),new Error("There was an error generating the fingerprint")}return t}a(mO,"writeFingerprint");function qE(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Oe.STORAGE_TYPES_ENUM.LMDB,api_call:Oe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Oe.RAM_ALLOCATION_ENUM.DEFAULT,version:Oe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return oe.error("empty license key passed to validate."),r;let s=oo(),n=!1;try{n=fr.statSync(s)}catch(i){oe.error(i)}if(n){let i;try{i=fr.readFileSync(s,"utf8")}catch{oe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(lO),_=o[1];_=Buffer.concat([Buffer.from(_)],SO);let c=Buffer.concat([Buffer.from(i)],hO),u=vE.createDecipheriv(dO,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let d=AO(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tr),oe.error(Tr),new Error(Tr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Tr),oe.error(Tr),new Error(Tr)}else r.exp_date=E;r.exp_date<oO().valueOf()&&(r.valid_date=!1),GE.validate(o[1],`${EO}${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||oe.error("Invalid licence"),r}a(qE,"validateLicense");function AO(e,t){try{let r=vE.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{oe.warn("Check old license failed")}}a(AO,"checkOldLicense");function xE(){let e=new uO;e.api_call=0;let t=[];try{t=fr.readFileSync(TO(),"utf-8").split(Oe.NEW_LINE)}catch(r){r.code==="ENOENT"?oe.info("no license file found"):oe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(cO.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qE(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){oe.error("There was an error parsing the license string."),oe.error(n),e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Oe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Oe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Oe.LICENSE_VALUES.API_CALL_DEFAULT),no=e,e}a(xE,"licenseSearch");async function RO(){return no||await xE(),no}a(RO,"getLicense")});var Kn=h((JH,So)=>{"use strict";var{Worker:gO,MessageChannel:NO,parentPort:lt,isMainThread:$E,threadId:pO,workerData:OO}=require("worker_threads"),{PACKAGE_ROOT:IO}=f(),{join:CO,isAbsolute:bO,extname:LO}=require("path"),{totalmem:kE}=require("os"),Eo=f(),KE=J(),yO=kn(),Yn=O(),UO=f();KE.initSync();var wO=KE.get(Eo.CONFIG_PARAMS.HTTP_THREADS)||1,MO=1024*1024,bt=[],Kt=[],DO=50,WE=1e4,QE="restart",JE="request_thread_info",XE="resource_report",ZE="thread_info",zE="added-port",_o;So.exports={startWorker:co,restartWorkers:lo,shutdownWorkers:HO,workers:bt,setMonitorListener:qO,onMessageFromWorkers:BO,broadcast:GO};function co(e,t={}){let s=yO.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||kE();n=Math.min(n,kE());let i=Math.min(Math.max(Math.floor(n/MO/(1+wO/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of Kt){let{port1:E,port2:l}=new NO;u.postMessage({type:zE,port:E},[E]),_.push(l)}LO(e)||(e+=".js");let c=new gO(bO(e)?e:CO(IO,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return $n(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{co(e,t)},c.on("error",u=>{console.error("Worker error:",u),Yn.error("Worker error:",u)}),c.on("exit",u=>{bt.splice(bt.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<DO?(t.unexpectedRestarts=c.unexpectedRestarts+1,co(e,t)):Yn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===QE&&lo(u.workerType),u.type===JE&&vO(c),u.type===XE&&FO(c,u)}),bt.push(c),VO(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(co,"startWorker");var PO=[Eo.THREAD_TYPES.HTTP];async function lo(e=null,t=2,r=!0){if($E){t<1&&(t=t*bt.length);let s=[];for(let n of bt.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Eo.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=PO.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),WE*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else lt.postMessage({type:QE,workerType:e})}a(lo,"restartWorkers");function HO(e){return lo(e,1/0,!1)}a(HO,"shutdownWorkers");var jE=[];function BO(e){jE.push(e)}a(BO,"onMessageFromWorkers");function GO(e){for(let t of Kt)try{t.postMessage(e)}catch(r){Yn.error("Unable to send message to worker",r)}}a(GO,"broadcast");function vO(e){e.postMessage({type:ZE,workers:el()})}a(vO,"sendThreadInfo");function el(){let e=Date.now();return bt.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(el,"getChildWorkerInfo");function FO(e,t){e.resources=t,e.resources.updated=Date.now()}a(FO,"recordResourceReport");var uo;function qO(e){uo=e}a(qO,"setMonitorListener");var xO=1e3,YE=!1;function VO(){YE||(YE=!0,setInterval(()=>{for(let e of bt){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}uo&&uo()},xO).unref())}a(VO,"startMonitoring");var kO=1e3;if(lt){$n(lt);for(let e of OO.addPorts)$n(e);setInterval(()=>{let e=process.memoryUsage();lt.postMessage({type:XE,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},kO).unref(),_o=a(()=>new Promise((e,t)=>{lt.on("message",r),lt.postMessage({type:JE});function r(s){s.type===ZE&&(lt.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else _o=el;So.exports.getThreadInfo=_o;function $n(e,t){Kt.push(e),e.on("message",r=>{if(r.type===zE)$n(r.port);else for(let s of jE)s(r)}).on("close",()=>{Kt.splice(Kt.indexOf(e),1)}).on("exit",()=>{Kt.splice(Kt.indexOf(e),1)}),t||e.unref()}a($n,"addPort");$E||lt.on("message",async e=>{let{type:t}=e;t===UO.ITC_EVENT_TYPES.SHUTDOWN&&(lt.unref(),setTimeout(()=>{Yn.warn("Thread did not voluntarily terminate",pO),process.exit(0)},WE).unref())})});var sl=h((ZH,rl)=>{"use strict";var ho=q(),YO=O(),tl=Me().LMDB_ERRORS_ENUM;rl.exports=$O;async function $O(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 ho.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==tl.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ho.closeEnvironment(global.lmdb_map[s]),await ho.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tl.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){YO.error(t)}}a($O,"cleanLMDBMap")});var Tl=h((eB,hl)=>{"use strict";var To=require("recursive-iterator"),KO=require("alasql"),fo=require("clone"),nl=p(),{handleHDBError:il,hdb_errors:WO}=Q(),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:ol}=WO,QO=["DISTINCT_ARRAY"],_l=Symbol("validateTables"),mo=Symbol("validateTable"),jH=Symbol("getAllColumns"),cl=Symbol("validateAllColumns"),Wn=Symbol("findColumn"),ul=Symbol("validateOrderBy"),_s=Symbol("validateSegment"),Ao=Symbol("validateColumn"),El=Symbol("setColumnsForTable"),ll=Symbol("checkColumnsForAsterisk"),dl=Symbol("validateGroupBy"),Sl=Symbol("hasColumns"),Qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_l](),this[ll](),this[cl]()}[_l](){if(this[Sl]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mo](t.table)})}}[Sl](){let t=!1,r=new To(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw il(new Error,al.SCHEMA_NOT_FOUND(t.databaseid),ol.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw il(new Error,al.TABLE_NOT_FOUND(t.databaseid,t.tableid),ol.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=fo(s);n.table=fo(t),this.attributes.push(n)})}[Wn](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)}[ll](){let t=new To(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[El](r.tableid)}[El](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new KO.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[cl](){this[_s](this.statement.columns,!1),this[_s](this.statement.joins,!1),this[_s](this.statement.where,!1),this[dl](this.statement.group,!1),this[_s](this.statement.order,!0)}[_s](t,r){if(!t)return;let s=new To(t),n=[];for(let{node:i,path:o}of s)!nl.isEmpty(i)&&!nl.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ul](i):n.push(this[Ao](i)));return n}[dl](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&QO.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=fo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Wn](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[Wn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ul](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[Ao](t)}[Ao](t){let r=this[Wn](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Qn,"SelectValidator");hl.exports=Qn});var Rl=h((rB,Al)=>{"use strict";var fl=require("lodash"),cs=require("mathjs"),JO=require("jsonata"),ml=p();Al.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?fl.uniqWith(e,fl.isEqual):e,searchJSON:XO,mad:us.bind(null,cs.mad),mean:us.bind(null,cs.mean),mode:us.bind(null,cs.mode),prod:us.bind(null,cs.prod),median:us.bind(null,cs.median)};function us(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(us,"aggregateFunction");function XO(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(ml.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ml.isEmpty(this.__ala__.res[r])){let s=JO(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XO,"searchJSON")});var Nl=h((nB,gl)=>{"use strict";var X=require("moment"),Ro="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;gl.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(Ro),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(Ro),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(Ro)}});var Cl=h((iB,Il)=>{"use strict";var ZO=require("@turf/area"),zO=require("@turf/length"),jO=require("@turf/circle"),eI=require("@turf/difference"),tI=require("@turf/distance"),rI=require("@turf/boolean-contains"),sI=require("@turf/boolean-equal"),nI=require("@turf/boolean-disjoint"),iI=require("@turf/helpers"),pl=f(),U=p();Il.exports={geoArea:aI,geoLength:oI,geoCircle:_I,geoDifference:cI,geoDistance:Ol,geoNear:uI,geoContains:EI,geoEqual:lI,geoCrosses:dI,geoConvert:SI};var go="geo1 is required",No="geo2 is required";function aI(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),ZO.default(e)}a(aI,"geoArea");function oI(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),zO.default(e,{units:t||"kilometers"})}a(oI,"geoLength");function _I(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),jO.default(e,t,{units:r||"kilometers"})}a(_I,"geoCircle");function cI(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),eI(e,t)}a(cI,"geoDifference");function Ol(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),tI.default(e,t,{units:r||"kilometers"})}a(Ol,"geoDistance");function uI(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ol(e,t,s)<=r}a(uI,"geoNear");function EI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),rI.default(e,t)}a(EI,"geoContains");function lI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),sI.default(e,t)}a(lI,"geoEqual");function dI(e,t){if(U.isEmpty(e))throw new Error(go);if(U.isEmpty(e))throw new Error(No);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!nI.default(e,t)}a(dI,"geoCrosses");function SI(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(pl.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pl.GEO_CONVERSION_ENUM).join(",")}`);return iI[t](e,r)}a(SI,"geoConvert")});var Ll=h((oB,bl)=>{var Wt=Rl(),Ie=Nl(),Ze=Cl();bl.exports=e=>{e.aggr.mad=e.aggr.MAD=Wt.mad,e.aggr.mean=e.aggr.MEAN=Wt.mean,e.aggr.mode=e.aggr.MODE=Wt.mode,e.aggr.prod=e.aggr.PROD=Wt.prod,e.aggr.median=e.aggr.MEDIAN=Wt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Wt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Wt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ie.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ie.current_time,e.fn.extract=e.fn.EXTRACT=Ie.extract,e.fn.date=e.fn.DATE=Ie.date,e.fn.date_format=e.fn.DATE_FORMAT=Ie.date_format,e.fn.date_add=e.fn.DATE_ADD=Ie.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ie.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ie.date_diff,e.fn.now=e.fn.NOW=Ie.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ie.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ie.get_server_time,e.fn.getdate=e.fn.GETDATE=Ie.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ie.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ze.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ze.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ze.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ze.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ze.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ze.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ze.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ze.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ze.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ze.geoNear}});var wl=h((_B,Ul)=>{"use strict";var Es=require("lodash"),se=require("alasql");se.options.cache=!1;var hI=Ll(),yl=require("clone"),Jn=require("recursive-iterator"),I=O(),L=p(),mr=Qt(),TI=f(),{hdb_errors:fI}=Q(),mI="IS NULL",Ye="There was a problem performing this search. Please check the logs and try again.";hI(se);var Xn=class{constructor(t,r){if(L.isEmpty(t))throw I.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),L.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!L.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(Ye)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(Ye)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(Ye)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(Ye)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(Ye)}}_getColumns(){let t=new Jn(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(yl(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Es.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(L.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Jn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!L.isEmpty(r)&&r.right)if(L.isNotEmptyAndHasValue(r.right.value)){let s=L.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new se.yy.LogicValue({value:s}):r.right instanceof se.yy.StringValue&&!L.isEmpty(s)&&L.autoCasterIsNumberCheck(s.toString())&&(r.right=new se.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=L.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new se.yy.LogicValue({value:i}):s instanceof se.yy.StringValue&&L.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new se.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Jn(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(!L.isEmpty(TI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(L.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(L.isEmptyOrZeroLength(r.left.columnid)||L.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(L.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!L.isEmpty(r.right.value)||!L.isEmpty(r.left.value)?s.add(L.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from)&&L.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&&Es.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(L.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);L.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(L.isEmptyOrZeroLength(this.all_table_attributes)&&!L.isEmptyOrZeroLength(this.columns.columns))return t;if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await se.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(yl(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(L.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(mI)>-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=Es.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!L.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await mr.getDataByHash(_);for(let l of _.hash_values)E.get(l)&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let S=await mr.getDataByValue(l);for(let[d,A]of S)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(d)))}))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(E),new Error(Ye)}else if(!L.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,S=E.length;l<S;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await mr.getDataByValue(_,d.operation);if(c)for(let[g]of A)this.data[i].__merged_data[g]||(this.data[i].__merged_data[g]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(g)));else for(let[g,y]of A)this.data[i].__merged_data[g]?this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]):(this.data[i].__merged_data[g]=[...s[i]],this._updateMergedAttribute(i,g,n.attribute,y[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(g)))}}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(E),new Error(Ye)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await mr.getDataByValue(_);if(c)for(let[l]of E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(l)));else for(let[l,S]of E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(l)))}catch(E){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(E),new Error(Ye)}}}_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 se.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 se.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new se.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 se.yy.FuncValue:new se.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,g=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${g}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${g}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);S=await se.promise(A,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let d=0,A=S.length;d<A;d++){let g=S[d];o.forEach(y=>{g[y.key]!==null&&g[y.key]!==void 0&&y.keys.add(g[y.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),g=Es.difference(A,[...d.keys].map(y=>y.toString()));for(let y=0,$=g.length;y<$;y++){let x=g[y];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Jn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Es.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(Ye)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await mr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let S=o[E],d=c.get(S);for(let A=0;A<u;A++){let g=n.columns[A],y=d[g]===void 0?null:d[g];this.data[s].__merged_data[S].push(y)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await se.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return I.error(fI.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await mr.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(Ye)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Xn,"SQLSearch");Ul.exports=Xn});var Zn=h((uB,Dl)=>{"use strict";var AI=Tl();Dl.exports={searchByConditions:pI,searchByHash:OI,searchByValue:II,search:CI};var po=Qt(),Ml=require("util"),RI=Ml.callbackify(po.searchByHash),gI=Ml.callbackify(po.searchByValue),NI=wl();async function pI(e){return po.searchByConditions(e)}a(pI,"searchByConditions");function OI(e,t){try{RI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(OI,"searchByHash");function II(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),gI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(II,"searchByValue");function CI(e,t){try{let r=new AI(e);r.validate(),new NI(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(CI,"search")});var ds=h((lB,Gl)=>{"use strict";var ls=require("crypto"),Hl="aes-256-cbc",bI=32,LI=16,Oo=64,Bl=32,yI=Oo+Bl,Pl=new Map;Gl.exports={encrypt:UI,decrypt:wI,createNatsTableStreamName:MI};function UI(e){let t=ls.randomBytes(bI),r=ls.randomBytes(LI),s=ls.createCipheriv(Hl,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(UI,"encrypt");function wI(e){let t=e.substr(0,Oo),r=e.substr(Oo,Bl),s=e.substr(yI,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ls.createDecipheriv(Hl,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wI,"decrypt");function MI(e,t){let r=`${e}.${t}`,s=Pl.get(r);return s||(s=ls.createHash("md5").update(`${e}.${t}`).digest("hex"),Pl.set(r,s)),s}a(MI,"createNatsTableStreamName")});var Co=h((hB,vl)=>{"use strict";var DI=f(),SB=xt();function Io(e,t){let r=Object.create(null);if(t.length===1&&DI.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Io,"parseRow");function PI(e,t,r,s){let n=Io(r,e);s.push(n)}a(PI,"searchAll");function HI(e,t,r,s){let n=Io(r,e);s[t]=n}a(HI,"searchAllToMap");function BI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(BI,"iterateDBI");function Jt(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(Jt,"pushResults");function GI(e,t,r,s,n,i){t.toString().endsWith(e)&&Jt(t,r,s,n,i)}a(GI,"endsWith");function vI(e,t,r,s,n,i){t.toString().includes(e)&&Jt(t,r,s,n,i)}a(vI,"contains");function FI(e,t,r,s,n,i){t>e&&Jt(t,r,s,n,i)}a(FI,"greaterThanCompare");function qI(e,t,r,s,n,i){t>=e&&Jt(t,r,s,n,i)}a(qI,"greaterThanEqualCompare");function xI(e,t,r,s,n,i){t<e&&Jt(t,r,s,n,i)}a(xI,"lessThanCompare");function VI(e,t,r,s,n,i){t<=e&&Jt(t,r,s,n,i)}a(VI,"lessThanEqualCompare");vl.exports={parseRow:Io,searchAll:PI,searchAllToMap:HI,iterateDBI:BI,endsWith:GI,contains:vI,greaterThanCompare:FI,greaterThanEqualCompare:qI,lessThanCompare:xI,lessThanEqualCompare:VI,pushResults:Jt}});var Zt=h((RB,$l)=>{"use strict";var Lt=q(),fB=O(),Ce=xt(),zn=ne(),W=Me().LMDB_ERRORS_ENUM,mB=p(),kI=f(),jn=Co(),{parseRow:YI}=jn,AB=require("lmdb"),{OVERFLOW_MARKER:Fl,MAX_SEARCH_KEY_LENGTH:$I}=zn;function ql(e,t,r,s=!1,n=void 0,i=void 0){return Xt(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ql,"iterateFullIndex");function Ss(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return Xt(e,t,r,(E,l,S,d)=>{let x={transaction:E,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,l.getRange(x).map(v=>({value:v}))):l.getRange(x)})}a(Ss,"iterateRangeBetween");function Xt(e,t,r,s){let n=e.database||e,i=Lt.openDBI(n,r);i[zn.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Lt.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(Xt,"setupTransaction");function xl(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(Fl)){if(!n)if(r)n=Lt.openDBI(e,r);else{let c=Lt.listDBIs(e);for(let u=0,E=c.length;u<E&&(n=Lt.openDBI(e,c[u]),!n[zn.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(xl,"getOverflowCheck");function KI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Xt(e,t,t,(o,_,c)=>(ei(r),r=hs(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>YI(u.value,r))))}a(KI,"searchAll");function WI(e,t,r,s=!1,n=void 0,i=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);ei(r),r=hs(e.database||e,r);let o=new Map;for(let{key:_,value:c}of ql(e,t,t,s,n,i))o.set(_,jn.parseRow(c,r));return o}a(WI,"searchAllToMap");function QI(e,t,r=!1,s=void 0,n=void 0){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ql(e,void 0,t,r,s,n),_=o.transaction,c=xl(_.database,_,void 0,t);for(let{key:u,value:E}of o){let l=c(u,E);i[l]===void 0&&(i[l]=[]),i[l].push(E)}return i}a(QI,"iterateDBI");function JI(e,t){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(JI,"countAll");function XI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Xt(e,t,r,(_,c,u,E)=>(s=Ce.convertKeyValueToWrite(s),E===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(l=>({key:s,value:l}))))}a(XI,"equals");function ZI(e,t,r){return yt(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(ZI,"count");function zI(e,t,r,s,n=!1,i=void 0,o=void 0){return yt(e,r,s),Xt(e,null,r,(_,c)=>{s=Ce.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let E;if(n===!0){let l;for(let S of c.getKeys({transaction:_,start:s}))if(!S.startsWith(s)){l=S;break}return l!==void 0&&(Number.isInteger(o)?o++:i++),E=c.getRange({transaction:_,start:l,end:void 0,reverse:n,limit:i,offset:o}).map(S=>{let{key:d}=S;if(d!==l){if(d.toString().startsWith(s))return S;if(u===!0)return E.DONE}}),E.filter(S=>S)}else return E=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(l=>{if(l.key.toString().startsWith(s))return l;if(u===!0)return E.DONE}),u?E:E.filter(l=>l)})}a(zI,"startsWith");function jI(e,t,r,s,n=!1,i=void 0,o=void 0){return Vl(e,t,r,s,n,i,o,!0)}a(jI,"endsWith");function Vl(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return yt(e,r,s),Xt(e,null,r,(c,u,E,l)=>{let S=xl(E,c,l,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let A=d.toString();return A.endsWith(Fl)?u.getValues(d,{transaction:c}).map(g=>{let y=S(d,g);if(_?y.endsWith(s):y.includes(s))return{key:y,value:g}}).filter(g=>g):(_?A.endsWith(s):A.includes(s))?u[zn.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(g=>({key:d,value:g})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Vl,"contains");function eC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!0,!1)}a(eC,"greaterThan");function tC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ss(e,t,r,s,c,n,i,o,!1,!1)}a(tC,"greaterThanEqual");function rC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!0)}a(rC,"lessThan");function sC(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ss(e,t,r,c,s,n,i,o,!1,!1)}a(sC,"lessThanEqual");function nC(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Ce.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=Ce.convertKeyValueToWrite(s),n=Ce.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ss(e,t,r,s,n,i,o,_)}a(nC,"between");function iC(e,t,r,s){Ce.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),r=hs(n,r),s===void 0)throw new Error(W.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=jn.parseRow(_,r)),o}a(iC,"searchByHash");function aC(e,t,r){Ce.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(aC,"checkHashExists");function oC(e,t,r,s,n=[]){return Yl(e,t,r,s,n),kl(e,t,r,s,n).map(i=>i[1])}a(oC,"batchSearchByHash");function _C(e,t,r,s,n=[]){Yl(e,t,r,s,n);let i=new Map;for(let[o,_]of kl(e,t,r,s,n))i.set(o,_);return i}a(_C,"batchSearchByHashToMap");function kl(e,t,r,s,n=[]){return Xt(e,t,t,(i,o,_)=>{r=hs(_,r);let c=r.length<3;return s.map(u=>{let E=_.dbis[t].get(u,{transaction:i,lazy:c});if(E)return[u,jn.parseRow(E,r)];n.push(u)}).filter(u=>u)})}a(kl,"batchHashSearch");function Yl(e,t,r,s,n){if(Ce.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(ei(r),s==null)throw new Error(W.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(W.IDS_MUST_BE_ITERABLE)}a(Yl,"initializeBatchSearchByHash");function ei(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ei,"validateFetchAttributes");function yt(e,t,r){if(Ce.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>$I)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function hs(e,t){return t.length===1&&kI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(hs,"setGetWholeRowAttributes");$l.exports={searchAll:KI,searchAllToMap:WI,count:ZI,countAll:JI,equals:XI,startsWith:zI,endsWith:jI,contains:Vl,searchByHash:iC,setGetWholeRowAttributes:hs,batchSearchByHash:oC,batchSearchByHashToMap:_C,checkHashExists:aC,iterateDBI:QI,greaterThan:eC,greaterThanEqual:tC,lessThan:rC,lessThanEqual:sC,between:nC}});var ni=h((NB,jl)=>{"use strict";var Wl=Zn(),Ut=O(),Ql=ja(),cC=require("lodash"),uC=ds(),Jl=p(),{promisify:Xl}=require("util"),k=f(),{handleHDBError:ti,hdb_errors:EC}=Q(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:Zl}=EC,lC=J();lC.initSync();var Kl=q(),dC=Zt(),{getSchemaPath:SC}=Y(),Ts=Xl(Wl.searchByValue),hC=Xl(Wl.searchByHash),Ar="name",zl="hash_attribute",bo="schema",TC="schema_table",fC="attribute";jl.exports={describeAll:mC,describeTable:si,describeSchema:RC};async function mC(e){try{let t=Jl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ar,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Ar]},i=await Ts(n),o={},_={};for(let S of i)o[S.name]=!0,!t&&!s&&(_[S.name]=r[S.name].describe);let c={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:k.ID_ATTRIBUTE_STRING,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},u=await Ts(c),E=[];for(let S of u)try{let d;if(t||s)d=await si({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let A=r[S.schema].tables[S.name].attribute_permissions;d=await si({schema:S.schema,table:S.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let S in E)t||s?(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]):_[E[S].schema]&&(l[E[S].schema]==null&&(l[E[S].schema]={}),l[E[S].schema][E[S].name]=E[S],o[E[S].schema]&&delete o[E[S].schema]);for(let S in o)t||s?l[S]={}:_[S]&&(l[S]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),ti(new Error,ri.DESCRIBE_ALL_ERR)}}a(mC,"describeAll");async function si(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Ql.describe_table(e);if(o)throw o;if(r===k.SYSTEM_SCHEMA_NAME)return global.hdb_schema[k.SYSTEM_SCHEMA_NAME][s];let _={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ar,search_value:s,hash_values:[],get_attributes:[k.WILDCARD_SEARCH_VALUE]},c=Array.from(await Ts(_));if(!c||c.length===0)throw ti(new Error,ri.TABLE_NOT_FOUND(e.schema,e.table),Zl.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw ti(new Error,ri.INVALID_TABLE_ERR(i));let E={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:TC,search_value:r+"."+s,get_attributes:[fC]},l=Array.from(await Ts(E));l=cC.uniqBy(l,S=>S.attribute),n&&n.length>0&&(l=AC(n)),i.attributes=l,i.clustering_stream_name=uC.createNatsTableStreamName(u.schema,u.name);try{let S=SC(i.schema,i.name),d=await Kl.openEnvironment(S,i.name),A=Kl.statDBI(d,i.hash_attribute);i.record_count=A.entryCount;for(let{key:g}of dC.lessThan(d,i.hash_attribute,k.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=g}catch(S){Ut.warn(`unable to stat table dbi due to ${S}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(si,"descTable");function AC(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(AC,"getAttrsByPerms");async function RC(e){let t=Ql.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:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:bo,search_value:s,hash_values:[],get_attributes:[zl,k.ID_ATTRIBUTE_STRING,Ar,bo]},i=Array.from(await Ts(n));if(i&&i.length<1){let o={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ar]},_=Array.from(await hC(o));if(_&&_.length<1)throw ti(new Error,ri.SCHEMA_NOT_FOUND(e.schema),Zl.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Jl.isEmpty(c)||c.describe){let u=await si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(RC,"describeSchema")});var ii=h((OB,nd)=>{var Rr=$t(),{callbackify:rd,promisify:gC}=require("util");nd.exports={setSchemaDataToGlobal:ed,getTableSchema:OC,getSystemSchema:CC,setSchemaDataToGlobalAsync:gC(ed)};var sd=ni(),NC=rd(sd.describeAll),pC=rd(sd.describeTable);function ed(e){NC(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Rr),global.hdb_schema=r,e(null,null)})}a(ed,"setSchemaDataToGlobal");function td(e,t){return e==="system"?Rr[t]:global.hdb_schema[e][t]}a(td,"returnSchema");function OC(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?IC(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,td(e,t))}):r(null,td(e,t))}a(OC,"getTableSchema");function IC(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Rr:global.hdb_schema={system:Rr},r();return}pC(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Rr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(IC,"setTableDataToGlobal");function CC(){return Rr}a(CC,"getSystemSchema")});var ai=h((CB,_d)=>{"use strict";var zt=O(),be=f(),bC=sl(),id=ii(),LC=ni(),yC=Nr(),{validateEvent:od}=gr(),fs=Qt(),UC=require("process"),wC={[be.ITC_EVENT_TYPES.SCHEMA]:MC,[be.ITC_EVENT_TYPES.USER]:PC};async function MC(e){let t=od(e);if(t){zt.error(t);return}zt.trace("ITC schemaHandler received schema event:",e),await bC(e.message),await DC(e.message)}a(MC,"schemaHandler");async function DC(e){try{if(fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.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 LC.describeTable({schema:e.schema,table:e.table});break;default:id.setSchemaDataToGlobal(ad);break}else id.setSchemaDataToGlobal(ad)}catch(t){zt.error(t)}}a(DC,"syncSchemaMetadata");function ad(e){e&&zt.error(e)}a(ad,"handleErrorCallback");async function PC(e){try{fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),fs.resetReadTxn(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=od(e);if(t){zt.error(t);return}zt.trace(`ITC userHandler ${be.HDB_ITC_CLIENT_PREFIX}${UC.pid} received user event:`,e),await yC.setUsersToGlobal()}catch(t){zt.error(t)}}a(PC,"userHandler");_d.exports=wC});var gr=h((wB,ud)=>{"use strict";var LB=O(),Lo=p(),HC=f(),{ITC_ERRORS:ms}=Me(),{parentPort:yB,threadId:BC,isMainThread:GC,workerData:UB}=require("worker_threads"),{onMessageFromWorkers:vC,broadcast:FC}=Kn();ud.exports={sendItcEvent:qC,validateEvent:cd,SchemaEventMsg:xC,UserEventMsg:VC};var oi;vC(e=>{oi=oi||ai(),cd(e),oi[e.type]&&oi[e.type](e)});function qC(e){!GC&&e.message&&(e.message.originator=BC),FC(e)}a(qC,"sendItcEvent");function cd(e){if(typeof e!="object")return ms.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Lo.isEmpty(e.type))return ms.MISSING_TYPE;if(!e.hasOwnProperty("message")||Lo.isEmpty(e.message))return ms.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Lo.isEmpty(e.message.originator))return ms.MISSING_ORIGIN;if(HC.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ms.INVALID_EVENT(e.type)}a(cd,"validateEvent");function xC(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(xC,"SchemaEventMsg");function VC(e){this.originator=e}a(VC,"UserEventMsg")});var ci=h((PB,Sd)=>{"use strict";var Ed=f(),DB=p(),_i=O(),ld=wE(),pr,{sendItcEvent:dd}=gr();function kC(e){try{_i.trace("signalSchemaChange called with message:",e),pr=pr||ai();let t=new ld(Ed.ITC_EVENT_TYPES.SCHEMA,e);pr.schema(t),dd(t)}catch(t){_i.error(t)}}a(kC,"signalSchemaChange");function YC(e){try{_i.trace("signalUserChange called with message:",e),pr=pr||ai();let t=new ld(Ed.ITC_EVENT_TYPES.USER,e);pr.user(t),dd(t)}catch(t){_i.error(t)}}a(YC,"signalUserChange");Sd.exports={signalSchemaChange:kC,signalUserChange:YC}});var ui=h((BB,Td)=>{"use strict";var hd=p(),$C=f(),KC=O(),WC=Pn(),QC=Dn(),JC=ci(),{SchemaEventMsg:XC}=gr(),ZC="already exists in";Td.exports=zC;async function zC(e,t,r){if(hd.isEmptyOrZeroLength(r))return r;let s=[];hd.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 jC(e,t.schema,t.name,i)})),n}a(zC,"lmdbCheckForNewAttributes");async function jC(e,t,r,s){let n=new QC(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await eb(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZC))KC.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(jC,"createNewAttribute");async function eb(e){let t;return t=await WC(e),JC.signalSchemaChange(new XC(process.pid,$C.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(eb,"createAttribute")});var Or=h((vB,fd)=>{"use strict";var Ei=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(Ei,"LMDBTransactionObject");fd.exports=Ei});var Ad=h((qB,md)=>{"use strict";var tb=Or(),rb=f().OPERATIONS_ENUM,li=class extends tb{constructor(t,r,s,n,i=void 0){super(rb.INSERT,r,s,n,i),this.records=t}};a(li,"LMDBInsertTransactionObject");md.exports=li});var gd=h((VB,Rd)=>{"use strict";var sb=Or(),nb=f().OPERATIONS_ENUM,di=class extends sb{constructor(t,r,s,n,i,o=void 0){super(nb.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(di,"LMDBUpdateTransactionObject");Rd.exports=di});var pd=h((YB,Nd)=>{"use strict";var ib=Or(),ab=f().OPERATIONS_ENUM,Si=class extends ib{constructor(t,r,s,n,i,o=void 0){super(ab.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Si,"LMDBUpsertTransactionObject");Nd.exports=Si});var Id=h((KB,Od)=>{"use strict";var ob=Or(),_b=f().OPERATIONS_ENUM,hi=class extends ob{constructor(t,r,s,n,i=void 0){super(_b.DELETE,s,n,t,i),this.original_records=r}};a(hi,"LMDBDeleteTransactionObject");Od.exports=hi});var As=h((JB,yd)=>{"use strict";var QB=require("path"),Cd=q(),cb=Ad(),ub=gd(),Eb=pd(),lb=Id(),Ir=ne(),bd=p(),{CONFIG_PARAMS:db}=f(),Ld=J();Ld.initSync();var Ti=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Sb}=Y();yd.exports=hb;async function hb(e,t){if(Ld.get(db.LOGGING_AUDITLOG)===!1)return;let r=Sb(e.schema,e.table),s=await Cd.openEnvironment(r,e.table,!0),n=Tb(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Cd.initializeDBIs(s,Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ir.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),bd.isEmpty(n.user_name)||s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ir.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(hb,"writeTransaction");function Tb(e,t){let r=bd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Ti.INSERT)return new cb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPDATE)return new ub(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.UPSERT)return new Eb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ti.DELETE)return new lb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Tb,"createTransactionObject")});var yo=h((zB,Ud)=>{"use strict";var fb=Hn(),ZB=Gn(),Rs=f(),mb=Fn(),Ab=hr().insertRecords,Rb=q(),gb=O(),Nb=ui(),{getSchemaPath:pb}=Y(),Ob=As();Ud.exports=Ib;async function Ib(e){try{let{schema_table:t,attributes:r}=fb(e);mb(e,r,t.hash_attribute),e.schema!==Rs.SYSTEM_SCHEMA_NAME&&(r.includes(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nb(e.hdb_auth_header,t,r),n=pb(e.schema,e.table),i=await Rb.openEnvironment(n,e.table),o=await Ab(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ob(e,o)}catch(_){gb.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ib,"lmdbCreateRecords")});var Dd=h((eG,Md)=>{"use strict";var wd=f(),Cb=yo(),bb=Gn(),Lb=require("fs-extra"),{getSchemaPath:yb}=Y();Md.exports=Ub;async function Ub(e){let t=[{name:e.schema,createddate:Date.now()}],r=new bb(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Cb(r),await Lb.mkdirp(yb(e.schema))}a(Ub,"lmdbCreateSchema")});var Hd=h((rG,Pd)=>{"use strict";var fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(fi,"DeleteRecordsResponseObject");Pd.exports=fi});var Mo=h((oG,vd)=>{"use strict";var Bd=q(),Uo=xt(),wo=Me().LMDB_ERRORS_ENUM,wb=ne(),Gd=O(),nG=p(),Mb=require("lmdb"),Db=Hd(),Pb=f(),{OVERFLOW_MARKER:iG,MAX_SEARCH_KEY_LENGTH:aG}=wb,Hb=Pb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Bb(e,t,r,s){if(Uo.validateEnv(e),t===void 0)throw new Error(wo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wo.IDS_REQUIRED):new Error(wo.IDS_MUST_BE_ITERABLE);try{let n=Bd.listDBIs(e);Bd.initializeDBIs(e,t,n);let i=new Db,o,_=[],c=[];for(let S=0,d=r.length;S<d;S++)try{o=r[S];let A=e.dbis[t].get(o);if(!A||s&&A[Hb]>s){i.skipped.push(o);continue}let g=e.dbis[t].ifVersion(o,Mb.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let y=0;y<n.length;y++){let $=n[y];if(!A.hasOwnProperty($)||$===t)continue;let x=e.dbis[$],v=A[$];if(v!=null)try{let we=Uo.getIndexedValues(v);if(we)for(let Ft=0,ir=we.length;Ft<ir;Ft++)x.remove(we[Ft],o)}catch{Gd.warn(`cannot delete from attribute: ${$}, ${v}:${o}`)}}});_.push(g),c.push(o),i.original_records.push(A)}catch(A){Gd.warn(A),i.skipped.push(o)}let u=[],E=await Promise.all(_);for(let S=0,d=E.length;S<d;S++)E[S]===!0?i.deleted.push(c[S]):(i.skipped.push(c[S]),u.push(S));let l=0;for(let S=0;S<u.length;S++){let d=u[S];i.original_records.splice(d-l,1),l++}return i.txn_time=Uo.getNextMonotonicTime(),i}catch(n){throw n}}a(Bb,"deleteRecords");vd.exports={deleteRecords:Bb}});var gs=h((cG,qd)=>{"use strict";var Cr=p(),Gb=Mo(),vb=q(),{getSchemaPath:Fb}=Y(),qb=As(),xb=O();qd.exports=Vb;async function Vb(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cr.isEmptyOrZeroLength(e.hash_values)&&!Cr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cr.isEmpty(c)||e.hash_values.push(c)}}if(Cr.isEmptyOrZeroLength(e.hash_values))return Fd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Fb(e.schema,e.table),i=await vb.openEnvironment(n,e.table),o=await Gb.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qb(e,o)}catch(_){xb.error(`unable to write transaction due to ${_.message}`)}return Fd(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Vb,"lmdbDeleteRecords");function Fd(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(Fd,"createDeleteResponse")});var Ns=h((lG,Yd)=>{var xd=require("lodash"),Vd=at(),B=require("joi"),kb=p(),{hdb_schema_table:$e,checkValidTable:kd}=Er(),{handleHDBError:Yb,hdb_errors:$b}=Q(),{HTTP_STATUS_CODES:Kb}=$b,EG=B.object({schema:$e,table:$e,hash_values:B.array().min(0).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items($e).required()}),Wb=B.object({schema:$e,table:$e,search_attribute:$e,search_value:B.any().required(),get_attributes:B.array().min(1).items($e).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),Qb=B.object({schema:$e,table:$e,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items($e).required(),conditions:B.array().min(1).items(B.object({search_attribute:$e,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});Yd.exports=function(e,t){let r=null;switch(t){case"value":r=Vd.validateBySchema(e,Wb);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(kd("schema",e.schema)),i(kd("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=Vd.validateBySchema(e,Qb);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=kb.checkGlobalSchemaTable(e.schema,e.table);if(n)return Yb(new Error,n,Kb.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=xd.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!xd.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Do=h((SG,$d)=>{"use strict";var Jb=q(),Xb=Ns(),{getSchemaPath:Zb}=Y();$d.exports=zb;function zb(e){let t=Xb(e,"hashes");if(t)throw t;let r=Zb(e.schema,e.table);return Jb.openEnvironment(r,e.table)}a(zb,"initialize")});var Po=h((TG,Kd)=>{"use strict";var jb=Zt(),eL=Do();Kd.exports=tL;async function tL(e){let t=await eL(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jb.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(tL,"lmdbGetDataByHash")});var Ai=h((mG,Wd)=>{"use strict";var mi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(mi,"SearchByHashObject");Wd.exports=mi});var Jd=h((gG,Qd)=>{"use strict";var RG=Ai(),rL=Zt(),sL=Do();Qd.exports=nL;async function nL(e){let t=await sL(e),r=global.hdb_schema[e.schema][e.table];return rL.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(nL,"lmdbSearchByHash")});var dt=h((pG,Xd)=>{"use strict";var Ri=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Ri,"SearchObject");Xd.exports=Ri});var gi=h((IG,rS)=>{"use strict";var _e=Zt(),iL=q(),aL=p(),R=ne(),jt=f(),oL=$t(),Zd=Me().LMDB_ERRORS_ENUM,{compareKeys:br}=require("ordered-binary"),{getSchemaPath:_L}=Y(),St=jt.SEARCH_WILDCARDS;async function cL(e,t,r){let s;e.schema===jt.SYSTEM_SCHEMA_NAME?s=oL[e.table]:s=global.hdb_schema[e.schema][e.table];let n=tS(e,s.hash_attribute,r,t);return jd(e,n,s.hash_attribute,r)}a(cL,"prepSearch");async function jd(e,t,r,s){let n=_L(e.schema,e.table),i=await iL.openEnvironment(n,e.table),o=eS(i,e,t,r),_=o.transaction||i;if([R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,R.SEARCH_TYPES.SEARCH_ALL,R.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(EL(e,r)===!1){let E=e.search_attribute;if(E===r)return s?zd(o,()=>!0):o.map(S=>({[r]:S.key}));let l=a(S=>({[r]:S.value,[E]:S.key}),"toObject");return s?zd(o,l):o.map(l)}let u=e.search_attribute===r?o.map(E=>E.key):o.map(E=>E.value);return s===!0?_e.batchSearchByHashToMap(_,r,e.get_attributes,u):_e.batchSearchByHash(_,r,e.get_attributes,u)}a(jd,"executeSearch");function eS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case R.SEARCH_TYPES.EQUALS:n=_e.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.CONTAINS:n=_e.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:n=_e.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:n=_e.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _e.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _e.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case R.SEARCH_TYPES.SEARCH_ALL:return _e.searchAll(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _e.searchAllToMap(e,s,t.get_attributes,o,_,c);case R.SEARCH_TYPES.BETWEEN:n=_e.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:n=_e.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:n=_e.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:n=_e.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:n=_e.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(eS,"searchByType");function uL(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case R.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case R.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case R.SEARCH_TYPES.ENDS_WITH:case R.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case R.SEARCH_TYPES.STARTS_WITH:case R.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case R.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return br(i,s[0])>=0&&br(i,s[1])<=0};case R.SEARCH_TYPES.GREATER_THAN:case R.SEARCH_TYPES._GREATER_THAN:return n=>br(n[r],s)>0;case R.SEARCH_TYPES.GREATER_THAN_EQUAL:case R.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>br(n[r],s)>=0;case R.SEARCH_TYPES.LESS_THAN:case R.SEARCH_TYPES._LESS_THAN:return n=>br(n[r],s)<0;case R.SEARCH_TYPES.LESS_THAN_EQUAL:case R.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>br(n[r],s)<=0;default:return Object.create(null)}}a(uL,"filterByType");function zd(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(zd,"createMapFromIterable");function EL(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(EL,"checkToFetchMore");function tS(e,t,r,s){if(aL.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),St.indexOf(n)>-1)return r===!0?R.SEARCH_TYPES.SEARCH_ALL_TO_MAP:R.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:R.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:R.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),R.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),R.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),R.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return R.SEARCH_TYPES.EQUALS;throw new Error(Zd.UNKNOWN_SEARCH_TYPE)}else switch(s){case jt.VALUE_SEARCH_COMPARATORS.BETWEEN:return R.SEARCH_TYPES.BETWEEN;case jt.VALUE_SEARCH_COMPARATORS.GREATER:return R.SEARCH_TYPES.GREATER_THAN;case jt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return R.SEARCH_TYPES.GREATER_THAN_EQUAL;case jt.VALUE_SEARCH_COMPARATORS.LESS:return R.SEARCH_TYPES.LESS_THAN;case jt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return R.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Zd.UNKNOWN_SEARCH_TYPE)}}a(tS,"createSearchTypeFromSearchObject");rS.exports={executeSearch:jd,createSearchTypeFromSearchObject:tS,prepSearch:cL,searchByType:eS,filterByType:uL}});var nS=h((LG,sS)=>{"use strict";var bG=dt(),lL=Ns(),dL=p(),SL=f(),hL=gi();sS.exports=TL;function TL(e,t){if(!dL.isEmpty(t)&&SL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lL(e,"value");if(s)throw s;let n=!0;return hL.prepSearch(e,t,n)}a(TL,"lmdbGetDataByValue")});var Lr=h((wG,iS)=>{"use strict";var UG=dt(),fL=Ns(),mL=p(),AL=f(),RL=gi();iS.exports=gL;async function gL(e,t){if(!mL.isEmpty(t)&&AL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=fL(e,"value");if(s)throw s;return RL.prepSearch(e,t,!1)}a(gL,"lmdbSearchByValue")});var oS=h((PG,aS)=>{"use strict";var DG=ne(),Ni=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Ni,"SearchByConditionsObject");var pi=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(pi,"SearchCondition");var Oi=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oi,"SortAttribute");aS.exports={SearchByConditionsObject:Ni,SearchCondition:pi,SortAttribute:Oi}});var lS=h((GG,ES)=>{"use strict";var BG=oS().SearchByConditionsObject,NL=dt(),pL=Ns(),Ho=Zt(),Ii=ne(),uS=gi(),OL=Co(),IL=require("lodash"),{getSchemaPath:CL}=Y(),_S=q(),{handleHDBError:bL,hdb_errors:LL}=Q(),{HTTP_STATUS_CODES:yL}=LL,UL=1e8;ES.exports=wL;async function wL(e){let t=pL(e,"conditions");if(t)throw bL(t,t.message,yL.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=CL(e.schema,e.table),s=await _S.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_S.openDBI(s,u.search_attribute);let i=IL.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let E=u.search_type;E===Ii.SEARCH_TYPES.EQUALS?u.estimated_count=Ho.count(s,u.search_attribute,u.search_value):E===Ii.SEARCH_TYPES.CONTAINS||E===Ii.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=UL}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await cS(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],E=i.slice(1).map(uS.filterByType),l=E.length,S=Ho.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),l>0&&(c=c.filter(d=>{for(let A=0;A<l;A++)if(!E[A](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>OL.parseRow(d,S))}else{for(let l=1;l<i.length;l++){let S=i[l],d=await cS(o,e,S,n.hash_attribute);_=_.concat(d)}let u=new Set,E=e.offset||0;_=_.filter(l=>u.has(l)?!1:(u.add(l),!0)).slice(E,e.limit&&e.limit+E),c=Ho.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(wL,"lmdbSearchByConditions");async function cS(e,t,r,s){let n=new NL(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ii.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,uS.searchByType(e,n,i,s).map(o=>o.value)}a(cS,"executeConditionSearch")});var bi=h((FG,dS)=>{"use strict";var ML=f().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=ML.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ci,"DeleteObject");dS.exports=Ci});var Bo=h((xG,gS)=>{"use strict";var fS=dt(),mS=bi(),AS=Lr(),RS=gs(),he=f(),SS=p(),hS=q(),{getTransactionAuditStorePath:DL,getSchemaPath:PL}=Y(),TS=O();gS.exports=HL;async function HL(e){try{if(SS.isEmpty(global.hdb_schema[e.schema])||SS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await BL(e),await GL(e);let t=PL(e.schema,e.table);try{await hS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")TS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=DL(e.schema,e.table);await hS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")TS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(HL,"lmdbDropTable");async function BL(e){let t=new fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await AS(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 mS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await RS(n)}a(BL,"deleteAttributesFromSystem");async function GL(e){let t=new fS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,he.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await AS(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 mS(he.SYSTEM_SCHEMA_NAME,he.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await RS(n)}catch(i){throw i}}a(GL,"dropTableFromSystem")});var pS=h((kG,NS)=>{"use strict";var vL=require("fs-extra"),FL=dt(),qL=Ai(),xL=bi(),VL=Bo(),kL=gs(),YL=Po(),$L=Lr(),ht=f(),{getSchemaPath:KL}=Y(),{handleHDBError:WL,hdb_errors:QL}=Q(),{HDB_ERROR_MSGS:JL,HTTP_STATUS_CODES:XL}=QL;NS.exports=ZL;async function ZL(e){let t;try{t=await zL(e.schema);let r=new FL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await $L(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await VL(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new xL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kL(n);let i=KL(t);await vL.remove(i)}catch(r){throw r}}a(ZL,"lmdbDropSchema");async function zL(e){let t=new qL(ht.SYSTEM_SCHEMA_NAME,ht.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ht.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await YL(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw WL(new Error,JL.SCHEMA_NOT_FOUND(e),XL.NOT_FOUND,void 0,void 0,!0);return s}a(zL,"validateDropSchema")});var IS=h(($G,OS)=>{"use strict";var Li=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Li,"CreateTableObject");OS.exports=Li});var bS=h((QG,CS)=>{"use strict";var jL=require("fs-extra"),yi=q(),{getTransactionAuditStorePath:ey}=Y(),Go=ne(),WG=IS();CS.exports=ty;async function ty(e){let t;try{let r=ey(e.schema,e.table);await jL.mkdirp(r),t=await yi.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{yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),yi.createDBI(t,Go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ty,"createTransactionsAuditEnvironment")});var wS=h((XG,US)=>{"use strict";var vo=f(),LS=q(),ry=hr(),{getSystemSchemaPath:sy,getSchemaPath:ny}=Y(),iy=$t(),ay=Pn(),Fo=Dn(),oy=O(),_y=bS(),xo=iy.hdb_table,yS=[];for(let e=0;e<xo.attributes.length;e++)yS.push(xo.attributes[e].attribute);US.exports=cy;async function cy(e,t){let r=ny(t.schema,t.table),s=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fo(t.schema,t.table,vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await LS.createEnvironment(r,t.table),e!==void 0){let o=await LS.openEnvironment(sy(),vo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ry.insertRecords(o,xo.hash_attribute,yS,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await qo(s),await qo(n),await qo(i)}await _y(t)}catch(o){throw o}}a(cy,"lmdbCreateTable");async function qo(e){try{await ay(e)}catch(t){oy.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(qo,"createAttribute")});var DS=h((zG,MS)=>{"use strict";var uy=Hn(),Ey=Fn(),ly=ui(),ps=f(),dy=hr().updateRecords,Sy=q(),{getSchemaPath:hy}=Y(),Ty=As(),fy=O();MS.exports=my;async function my(e){try{let{schema_table:t,attributes:r}=uy(e);Ey(e,r,t.hash_attribute),e.schema!==ps.SYSTEM_SCHEMA_NAME&&(r.includes(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ly(e.hdb_auth_header,t,r),n=hy(e.schema,e.table),i=await Sy.openEnvironment(n,e.table),o=await dy(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ty(e,o)}catch(_){fy.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(my,"lmdbUpdateRecords")});var HS=h((ev,PS)=>{"use strict";var Ay=f().OPERATIONS_ENUM,Ui=class{constructor(t,r,s,n=void 0){this.operation=Ay.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ui,"UpsertObject");PS.exports=Ui});var GS=h((sv,BS)=>{"use strict";var rv=HS(),Ry=Hn(),gy=Fn(),Ny=ui(),Os=f(),py=hr().upsertRecords,Oy=q(),{getSchemaPath:Iy}=Y(),Cy=As(),by=O(),{handleHDBError:Ly,hdb_errors:yy}=Q();BS.exports=Uy;async function Uy(e){let t;try{t=Ry(e)}catch(c){throw Ly(c,c.message,yy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;gy(e,s,r.hash_attribute),e.schema!==Os.SYSTEM_SCHEMA_NAME&&(s.includes(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Os.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ny(e.hdb_auth_header,r,s),i=Iy(e.schema,e.table),o=await Oy.openEnvironment(i,e.table),_=await py(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Cy(e,_)}catch(c){by.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Uy,"lmdbUpsertRecords")});var kS=h((iv,VS)=>{"use strict";var wy=dt(),vS=p(),FS=O(),My=Lr(),qS=f(),Dy=Mo().deleteRecords,Py=q(),{getSchemaPath:Hy}=Y(),{promisify:By}=require("util"),Gy=By(setTimeout),xS=1e4,vy=10;VS.exports=Fy;async function Fy(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(vS.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 wy(e.schema,e.table,qS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await My(n,qS.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw FS.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return vS.isEmptyOrZeroLength(s)?(FS.trace("No records found to delete"),{message:"No records found to delete"}):await qy(e,s,t)}a(Fy,"lmdbDeleteRecordsBefore");async function qy(e,t,r){let s=Hy(e.schema,e.table),n=await Py.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=xS){let c=t.slice(o,o+xS),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Dy(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await Gy(vy)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(qy,"chunkDeletes")});var $S=h((ov,YS)=>{"use strict";var wi=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(wi,"DeleteBeforeObject");YS.exports=wi});var WS=h((cv,KS)=>{"use strict";var Mi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Mi,"DeleteAuditLogsBeforeResults");KS.exports=Mi});var XS=h((lv,JS)=>{"use strict";var Vo=q(),{getTransactionAuditStorePath:xy}=Y(),Ev=$S(),Is=ne(),Vy=p(),QS=WS(),ky=require("util").promisify,Yy=ky(setTimeout),$y=1e4,Ky=100;JS.exports=Wy;async function Wy(e){let t=xy(e.schema,e.table),r=await Vo.openEnvironment(t,e.table,!0),s=Vo.listDBIs(r);Vo.initializeDBIs(r,Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new QS;do n=await Qy(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 Yy(Ky);while(n.transactions_deleted>0);return i}a(Wy,"deleteAuditLogsBefore");async function Qy(e,t){let r=new QS;try{let s=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Vy.isEmpty(_)||(n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Is.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$y)break}return await n,r}catch(s){throw s}}a(Qy,"deleteTransactions")});var zS=h((Sv,ZS)=>{"use strict";var Di=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Di,"DropAttributeObject");ZS.exports=Di});var eh=h((fv,jS)=>{"use strict";var Jy=dt(),Xy=bi(),Tv=zS(),ze=f(),Zy=p(),ko=q(),zy=$t(),jy=Lr(),eU=gs(),{getSchemaPath:tU}=Y();jS.exports=rU;async function rU(e,t=!0){let r;e.schema===ze.SYSTEM_SCHEMA_NAME?r=zy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nU(e),n=tU(e.schema,e.table),i=await ko.openEnvironment(n,e.table);return t===!0&&await sU(e,i,r.hash_attribute),ko.dropDBI(i,e.attribute),s}a(rU,"lmdbDropAttribute");async function sU(e,t,r){let s=ko.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(sU,"removeAttributeFromAllObjects");async function nU(e){let t=new Jy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await jy(t)).filter(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Zy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Xy(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return eU(i)}a(nU,"dropAttributeFromSystem")});var ah=h((Rv,ih)=>{"use strict";var Yo=q(),yr=ne(),Av=xt(),$o=f(),th=p(),{getTransactionAuditStorePath:iU}=Y(),aU=Zt(),Pi=Or(),oU=O();ih.exports=_U;async function _U(e){let t=iU(e.schema,e.table),r=await Yo.openEnvironment(t,e.table,!0),s=Yo.listDBIs(r);Yo.initializeDBIs(r,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rh(r,e.search_values);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,uU(r,e.search_values,n);case $o.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cU(r,e.search_values);default:return rh(r)}}a(_U,"readAuditLog");function rh(e,t=[0,Date.now()]){th.isEmpty(t[0])&&(t[0]=0),th.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yr.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 Pi,n))}a(rh,"searchTransactionsByTimestamp");function cU(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[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,nh(e,i))}return Object.fromEntries(r)}a(cU,"searchTransactionsByUsername");function uU(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=aU.equals(e,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:l}of E){let S=Number(l);s.has(S)?s.get(S).push(u.toString()):s.set(S,[u.toString()])}}let n=Array.from(s.keys()),i=nh(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);sh(c,"records",r,E,o),sh(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(uU,"searchTransactionsByHashValues");function sh(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Pi(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Pi(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(sh,"loopRecords");function nh(e,t){let r=[];try{let s=e.dbis[yr.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 Pi,i);r.push(o)}}catch(i){oU.warn(i)}return r}catch(s){throw s}}a(nh,"batchSearchTransactions")});var _h=h((Nv,oh)=>{"use strict";var{getSchemaPath:EU}=Y(),lU=q();oh.exports={writeTransaction:dU};async function dU(e,t,r){let s=EU(e,t);return(await lU.openEnvironment(s,t)).transaction(r)}a(dU,"writeTransaction")});var lh=h((Ov,Eh)=>{"use strict";var{getSchemaPath:ch}=Y(),uh=q();Eh.exports={flush:SU,resetReadTxn:hU};async function SU(e,t){return(await uh.openEnvironment(ch(e,t),t.toString())).flushed}a(SU,"flush");async function hU(e,t){try{(await uh.openEnvironment(ch(e,t),t.toString())).resetReadTxn()}catch{}}a(hU,"resetReadTxn")});var hh=h((Cv,Sh)=>{"use strict";var TU=O(),{handleHDBError:fU}=Q(),mU=Pa(),AU=Pn(),RU=yo(),gU=Dd(),NU=gs(),pU=Po(),OU=Jd(),IU=nS(),CU=Lr(),bU=lS(),LU=pS(),yU=wS(),UU=DS(),wU=GS(),MU=kS(),DU=XS(),PU=Bo(),HU=eh(),BU=ah(),GU=_h(),dh=lh(),Hi=class extends mU{async searchByConditions(t){return bU(t)}async getDataByHash(t){return await pU(t)}async searchByHash(t){return await OU(t)}async getDataByValue(t,r){return await IU(t,r)}async searchByValue(t){return await CU(t)}async createSchema(t){return await gU(t)}async dropSchema(t){return await LU(t)}async createTable(t,r){return await yU(t,r)}async dropTable(t){return await PU(t)}async createAttribute(t){return await AU(t)}async createRecords(t){return await RU(t)}async updateRecords(t){return await UU(t)}async upsertRecords(t){try{return await wU(t)}catch(r){throw fU(r,null,null,TU.ERR,r)}}async deleteRecords(t){return await NU(t)}async deleteRecordsBefore(t){return await MU(t)}async dropAttribute(t){return await HU(t)}async deleteAuditLogsBefore(t){return await DU(t)}async readAuditLog(t){return await BU(t)}writeTransaction(t,r,s){return GU.writeTransaction(t,r,s)}flush(t,r){return dh.flush(t,r)}resetReadTxn(t,r){return dh.resetReadTxn(t,r)}};a(Hi,"LMDBBridge");Sh.exports=Hi});var Qt=h((Lv,fh)=>{"use strict";var vU=hh(),FU=Pa(),qU=J();qU.initSync();var Th;function xU(){return Th instanceof FU?Th:new vU}a(xU,"getBridge");fh.exports=xU()});var Fi=h((Uv,Rh)=>{"use strict";var Gi=Da(),Ge=p(),VU=require("util"),vi=Qt(),kU=ii(),Ko=O(),{handleHDBError:wt,hdb_errors:YU}=Q(),{HTTP_STATUS_CODES:er}=YU,$U=VU.promisify(kU.getTableSchema),KU="updated",mh="inserted",Ah="upserted";Rh.exports={insert:QU,update:JU,upsert:XU,validation:WU,flush:ZU};async function WU(e){if(Ge.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ge.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ge.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await $U(e.schema,e.table),r=Gi(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Ge.isEmptyOrZeroLength(_[s]))throw Ko.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Ge.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ko.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Ge.isEmpty(_[s])&&_[s]!==""&&n.has(Ge.autoCast(_[s]))&&(_.skip=!0),n.add(Ge.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(WU,"validation");async function QU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);let s=await vi.createRecords(e);return Bi(mh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(QU,"insertData");async function JU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);let s=await vi.updateRecords(e);return Ge.isEmpty(s.existing_rows)?Bi(KU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Bi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(JU,"updateData");async function XU(e){if(e.operation!=="upsert")throw wt(new Error,"invalid operation, must be upsert",er.INTERNAL_SERVER_ERROR);let t=Gi(e);if(t)throw wt(new Error,t.message,er.BAD_REQUEST);let r=Ge.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,er.BAD_REQUEST);try{let s=await vi.upsertRecords(e);return Bi(Ah,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw wt(s,null,null,Ko.ERR,n)}}a(XU,"upsertData");function Bi(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===mh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Ah?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Bi,"returnObject");function ZU(e){return vi.flush(e.schema,e.table)}a(ZU,"flush")});var Oh=h((Mv,ph)=>{var zU=at(),Wo=require("joi"),{hdb_schema_table:gh}=Er(),Nh={schema:gh,table:gh},jU={date:Wo.date().iso().required()},ew={timestamp:Wo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ph.exports=function(e,t){let r=t==="timestamp"?{...Nh,...ew}:{...Nh,...jU},s=Wo.object(r);return zU.validateBySchema(e,s)}});var Lh=h((Dv,bh)=>{var tw=at(),Ih=require("joi"),{hdb_schema_table:Ch}=Er(),rw=Ih.object({schema:Ch,table:Ch,hash_values:Ih.array().required()});bh.exports=function(e){return tw.validateBySchema(e,rw)}});var Uh=h((Pv,yh)=>{"use strict";var qi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(qi,"InsertObject");var xi=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(xi,"NoSQLSeachObject");var Vi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vi,"DeleteResponseObject");yh.exports={InsertObject:qi,NoSQLSeachObject:xi,DeleteResponseObject:Vi}});var Bh=h((Bv,Hh)=>{"use strict";var Mh=Oh(),sw=Lh(),ki=p(),wh=require("moment"),Dh=O(),{promisify:nw,callbackify:iw}=require("util"),tr=f(),aw=ii(),Qo=nw(aw.getTableSchema),Jo=Qt(),{DeleteResponseObject:ow}=Uh(),{handleHDBError:Mt,hdb_errors:_w}=Q(),{HDB_ERROR_MSGS:Yi,HTTP_STATUS_CODES:Dt}=_w,cw="records successfully deleted",uw=iw(Ph);Hh.exports={delete:uw,deleteRecord:Ph,deleteFilesBefore:Ew,deleteAuditLogsBefore:lw};async function Ew(e){let t=Mh(e,"date");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(!wh(e.date,wh.ISO_8601).isValid())throw Mt(new Error,Yi.INVALID_DATE,Dt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,Yi.INVALID_DATE,!0);let s=ki.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,s,!0);let n=await Jo.deleteRecordsBefore(e);if(await Qo(e.schema,e.table),Dh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ew,"deleteFilesBefore");async function lw(e){let t=Mh(e,"timestamp");if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Yi.INVALID_VALUE("Timestamp"),Dt.BAD_REQUEST,tr.LOG_LEVELS.ERROR,Yi.INVALID_VALUE("Timestamp"),!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);let s=await Jo.deleteAuditLogsBefore(e);return await Qo(e.schema,e.table),Dh.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(lw,"deleteAuditLogsBefore");async function Ph(e){let t=sw(e);if(t)throw Mt(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=ki.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Dt.NOT_FOUND,tr.LOG_LEVELS.ERROR,r,!0);try{await Qo(e.schema,e.table);let s=await Jo.deleteRecords(e);return ki.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${cw}`),s}catch(s){if(s.message===tr.SEARCH_NOT_FOUND_MESSAGE){let n=new ow;return n.message=tr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Ph,"deleteRecord")});var vh=h((vv,Gh)=>{var Xo=at(),ce={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 dw(e){return ce.password.presence=!0,ce.username.presence=!0,ce.role.presence=!0,ce.active.presence=!0,Xo.validateObject(e,ce)}a(dw,"addUserValidation");function Sw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(Sw,"alterUserValidation");function hw(e){return ce.password.presence=!1,ce.username.presence=!0,ce.role.presence=!1,ce.active.presence=!1,Xo.validateObject(e,ce)}a(hw,"dropUserValidation");Gh.exports={addUserValidation:dw,alterUserValidation:Sw,dropUserValidation:hw}});var Nr=h((xv,jh)=>{"use strict";var kh="username is required",Yh="nothing to update, must supply active, role or password to update",$h="password cannot be an empty string",Kh="If role is specified, it cannot be empty.",Wh="active must be true or false";jh.exports={addUser:pw,alterUser:Ow,dropUser:Cw,userInfo:bw,listUsers:Ki,listUsersExternal:Lw,setUsersToGlobal:Cs,findAndValidateUser:ww,getClusterUser:Mw,USERNAME_REQUIRED:kh,ALTERUSER_NOTHING_TO_UPDATE:Yh,EMPTY_PASSWORD:$h,EMPTY_ROLE:Kh,ACTIVE_BOOLEAN:Wh};var Qh=Fi(),Tw=Bh(),zo=xn(),Jh=vh(),Xh=Zn(),jo=ci(),Le=p(),Zh=require("validate.js"),C=O(),{promisify:e_}=require("util"),t_=ds(),Fh=f(),qh=it(),fw=$r(),qv=J(),mw=kn(),Aw=$t(),{handleHDBError:je,hdb_errors:Rw}=Q(),{HTTP_STATUS_CODES:et,AUTHENTICATION_ERROR_MSGS:Zo,HDB_ERROR_MSGS:Ur}=Rw,{UserEventMsg:r_}=gr(),xh=require("lodash"),zh={username:!0,active:!0,role:!0,password:!0},Vh=new Map,$i=e_(Xh.searchByValue),gw=e_(Xh.searchByHash),Nw=e_(Tw.delete);async function pw(e){let t=Zh.cleanAttributes(e,zh),r=Jh.addUserValidation(t);if(r)throw je(new Error,r.message,et.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 $i(s),n=n&&Array.from(n)}catch(c){throw C.error("There was an error searching for a role in add user"),C.error(c),c}if(!n||n.length<1)throw je(new Error,Ur.ROLE_NAME_NOT_FOUND(t.role),et.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw je(new Error,Ur.DUP_ROLES_FOUND(t.role),et.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Qh.insert(i)}catch(c){throw C.error("There was an error searching for a user."),C.error(c),c}C.debug(o);try{await Cs()}catch(c){throw C.error("Got an error setting users to global"),C.error(c),c}if(o.skipped_hashes.length===1)throw je(new Error,Ur.USER_ALREADY_EXISTS(t.username),et.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],jo.signalUserChange(new r_(process.pid)),`${_.username} successfully added`}a(pw,"addUser");async function Ow(e){let t=Zh.cleanAttributes(e,zh);if(Le.isEmptyOrZeroLength(t.username))throw new Error(kh);if(Le.isEmptyOrZeroLength(t.password)&&Le.isEmptyOrZeroLength(t.role)&&Le.isEmptyOrZeroLength(t.active))throw new Error(Yh);if(!Le.isEmpty(t.password)&&Le.isEmptyOrZeroLength(t.password.trim()))throw new Error($h);if(!Le.isEmpty(t.active)&&!Le.isBoolean(t.active))throw new Error(Wh);let r=Iw(t.username);if(!Le.isEmpty(t.password)&&!Le.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=t_.encrypt(t.password)),t.password=zo.hash(t.password)),t.role==="")throw new Error(Kh);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 $i(i)||[])}catch(_){throw C.error("Got an error searching for a role."),C.error(_),_}if(!o||o.length===0){let _=Ur.ALTER_USER_ROLE_NOT_FOUND(t.role);throw C.error(_),je(new Error,_,et.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=Ur.ALTER_USER_DUP_ROLES(t.role);throw C.error(_),je(new Error,_,et.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 Qh.update(s)}catch(i){throw C.error("Error during update."),C.error(i),i}try{await Cs()}catch(i){throw C.error("Got an error setting users to global"),C.error(i),i}return jo.signalUserChange(new r_(process.pid)),n}a(Ow,"alterUser");function Iw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Iw,"isClusterUser");async function Cw(e){try{let t=Jh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Le.isEmpty(global.hdb_users.get(e.username)))throw je(new Error,Ur.USER_NOT_EXIST(e.username),et.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Nw(r)}catch(n){throw C.error("Got an error deleting a user."),C.error(n),n}C.debug(s);try{await Cs()}catch(n){throw C.error("Got an error setting users to global."),C.error(n),n}return jo.signalUserChange(new r_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Cw,"dropUser");async function bw(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 gw(r)}catch(n){throw C.error("Got an error searching for a role."),C.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw C.error(r),r}return t}a(bw,"userInfo");async function Lw(){let e;try{e=await Ki()}catch(t){throw C.error("Got an error listing users."),C.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(Lw,"listUsersExternal");async function Ki(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $i(e)}catch(o){throw C.error("Got an error searching for roles."),C.error(o),o}let r={};for(let o of t)r[o.id]=xh.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 $i(s)}catch(o){throw C.error("Got an error searching for users."),C.error(o),o}let i=new Map;for(let o of n)o=xh.cloneDeep(o),o.role=r[o.role],yw(o.role),i.set(o.username,o);return(await mw.getLicense()).enterprise?i:Uw(Array.from(i.values()))}catch(e){throw C.error("got an error listing users"),C.error(e),Le.errorizeMessage(e)}return null}a(Ki,"listUsers");function yw(e){try{if(!e){C.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(Aw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){C.error("Got an error trying to set system permissions."),C.error(t)}}a(yw,"appendSystemTablesToRole");function Uw(e){try{if(C.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?(C.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return C.error("error filtering users."),C.error(t),new Map}}a(Uw,"nonEnterpriseFilter");async function Cs(){try{let e=await Ki();global.hdb_users=e}catch(e){throw C.error(e),e}}a(Cs,"setUsersToGlobal");async function ww(e,t,r=!0){global.hdb_users||await Cs();let s=global.hdb_users.get(e);if(!s)throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw je(new Error,Zo.USER_INACTIVE,et.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(Vh.get(t)===s.password)return n;if(zo.validate(s.password,t))Vh.set(t,s.password);else throw je(new Error,Zo.GENERIC_AUTH_FAIL,et.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ww,"findAndValidateUser");async function Mw(){let e=await Ki(),t=fw.getConfigFromFile(Fh.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Le.isEmpty(r)&&r?.role?.role===Fh.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=t_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+qh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+qh.SERVER_SUFFIX.ADMIN,r}a(Mw,"getClusterUser")});var tT=h((kv,eT)=>{"use strict";var Dw=Qt();eT.exports={writeTransaction:Pw};function Pw(e,t,r){return Dw.writeTransaction(e,t,r)}a(Pw,"writeTransaction")});var s_=h(($v,Hw)=>{Hw.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 h_=h((eF,AT)=>{"use strict";var ee=J();ee.initSync();var Bw=require("fs-extra"),Gw=require("semver"),ws=require("path"),{monotonicFactory:vw}=require("ulidx"),__=vw(),Fw=require("util"),sT=require("child_process"),qw=Fw.promisify(sT.exec),xw=sT.spawn,M=it(),G=f(),Wi=p(),Pt=O(),Qi=ds(),Vw=tT(),bs=$r(),{encode:a_,decode:c_}=require("msgpackr"),{isEmpty:rr}=Wi,nT=Nr(),iT=12e10,{connect:kw,StorageType:aT,RetentionPolicy:oT,AckPolicy:u_,DeliverPolicy:Ms,DiscardPolicy:Yw,NatsConnection:Kv,JetStreamManager:Wv,JetStreamClient:Qv,StringCodec:Jv,JSONCodec:$w,createInbox:E_,StreamSource:Xv,headers:Kw,toJsMsg:_T,nuid:Zv,JetStreamOptions:zv,ErrorCode:rT,nanos:jv}=require("nats"),{PACKAGE_ROOT:Ww}=f(),Qw=s_(),cT=$w(),Jw="clustering",Xw=Qw.engines[M.NATS_SERVER_NAME],Zw=ws.join(Ww,"dependencies"),o_=ws.join(Zw,`${process.platform}-${process.arch}`,M.NATS_BINARY_NAME),n_,i_,Ls,ys,Us,Ke;AT.exports={runCommand:uT,checkNATSServerInstalled:zw,createConnection:l_,getConnection:Ji,getJetStreamManager:Ds,getJetStream:ET,getNATSReferences:ye,getServerList:eM,createLocalStream:d_,listStreams:lT,deleteLocalStream:tM,getServerConfig:Ps,listRemoteStreams:rM,viewStream:sM,viewStreamIterator:nM,publishToStream:iM,createWorkQueueStream:aM,addSourceToWorkStream:ST,request:oM,removeSourceFromWorkStream:TT,reloadNATS:S_,reloadNATSHub:_M,reloadNATSLeaf:cM,extractServerName:hT,requestErrorHandler:uM,updateWorkStream:EM,createLocalTableStream:fT,createTableStreams:lM,purgeTableStream:mT,purgeSchemaTableStreams:dM,getStreamInfo:SM,updateLocalStreams:TM,closeConnection:jw,getJsmServerName:Hs,addNatsMsgHeader:dT};async function uT(e,t=void 0){let{stdout:r,stderr:s}=await qw(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
7
|
`,"")}a(uT,"runCommand");async function zw(){try{await Bw.access(o_)}catch{return!1}let e=await uT(`${o_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Gw.eq(t,Xw)}a(zw,"checkNATSServerInstalled");async function l_(e,t,r,s=!0,n="127.0.0.1"){return kw({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ee.get(G.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(l_,"createConnection");async function jw(){Ke&&(await Ke.drain(),Ke=void 0)}a(jw,"closeConnection");async function Ji(){if(!Ke){let e=await nT.getClusterUser();if(rr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Ke=await l_(t,e.username,e.decrypt_hash)}return Ke}a(Ji,"getConnection");async function Ds(){if(ys)return ys;rr(Ke)&&await Ji();let{domain:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ys=await Ke.jetstreamManager({domain:e}),ys}a(Ds,"getJetStreamManager");async function ET(){if(Us)return Us;rr(Ke)&&await Ji();let{domain:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Us=Ke.jetstream({domain:e}),Us}a(ET,"getJetStream");async function ye(){let e=Ke||await Ji(),t=ys||await Ds(),r=Us||await ET();return{connection:e,jsm:t,js:r}}a(ye,"getNATSReferences");async function eM(e){let t=ee.get(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await nT.getClusterUser(),n=await l_(t,r,s),i=E_(),o=n.subscribe(i),_=[],c,u=(async()=>{for await(let E of o){let l=cT.decode(E.data);l.response_time=Date.now()-c,_.push(l)}})();return c=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Wi.async_set_timeout(e),await o.drain(),await n.close(),await u,_}a(eM,"getServerList");async function d_(e,t){let{jsm:r}=await ye(),s=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:aT.File,retention:oT.Limits,subjects:t,discard:Yw.Old,duplicate_window:iT,max_msgs:n,max_bytes:i,max_age:s})}a(d_,"createLocalStream");async function lT(){let{jsm:e}=await ye(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(lT,"listStreams");async function tM(e){let{jsm:t}=await ye();await t.streams.delete(e)}a(tM,"deleteLocalStream");async function rM(e){let{connection:t}=await ye(),r=[],s=E_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(cT.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(rM,"listRemoteStreams");async function sM(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ye(),i=__(),o=[],_={ack_policy:u_.None,durable_name:i,deliver_subject:i,deliver_policy:Ms.All};t&&(_.deliver_policy=Ms.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=_T(E),S=c_(l.data),d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:S};l.headers&&(d.origin=l.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=l.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),o.push(d),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(sM,"viewStream");async function*nM(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ye(),i=__(),o={ack_policy:u_.None,durable_name:i,deliver_subject:i,deliver_policy:Ms.All};t&&(o.deliver_policy=Ms.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let E=_T(u),l=c_(E.data);l[0]||(l=[l]);for(let S of l){let d={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:S};E.headers&&(d.origin=E.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=E.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),yield d}c.getPending()===1&&E.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}a(nM,"viewStreamIterator");async function iM(e,t,r,s){Pt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ee.get(G.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(M.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=dT(s,r);let{js:i}=await ye(),o=await Hs(),_=`${e}.${o}`;try{Pt.trace(`publishToStream publishing to subject: ${_}, data:`,s),n&&await i.publish(_,a_(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")Pt.trace(`publishToStream creating stream: ${t}`),await d_(t,[_]),n&&await i.publish(_,a_(s),{headers:r});else throw c}}a(iM,"publishToStream");function dT(e,t){t===void 0&&(t=Kw());let r=ee.get(G.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(M.MSG_HEADERS.NATS_MSG_ID)){let s=Wi.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${__()}`;t.append(M.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(M.MSG_HEADERS.ORIGIN)||t.append(M.MSG_HEADERS.ORIGIN,r),t}a(dT,"addNatsMsgHeader");function Ps(e){e=e.toLowerCase();let t=ws.join(ee.get(G.CONFIG_PARAMS.ROOTPATH),Jw);if(e===G.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return rr(i_)&&(i_={port:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.HUB,config_file:M.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ws.join(t,M.PID_FILES.HUB),hdb_nats_path:t}),i_;if(e===G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return rr(n_)&&(n_={port:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,config_file:M.NATS_CONFIG_FILES.LEAF_SERVER,domain:bs.getConfigFromFile(G.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,pid_file_path:ws.join(t,M.PID_FILES.LEAF),hdb_nats_path:t}),n_;Pt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ps,"getServerConfig");async function aM(e){let{jsm:t}=await ye(),r=await Hs();try{await t.streams.add({name:e.stream_name,storage:aT.File,retention:oT.Workqueue,duplicate_window:iT,subjects:[`${M.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:u_.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ms.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(aM,"createWorkQueueStream");async function ST(e,t,r){let{jsm:s}=await ye(),n=await s.streams.info(t),i=hT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Qi.createNatsTableStreamName(_,c),E=i===e,l,S,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let g=0,y=n.config.sources.length;g<y;g++)if(l=n.config.sources[g],S=g,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(l.opt_start_time===o)return;n.config.sources.splice(S,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${M.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(ST,"addSourceToWorkStream");function hT(e){return e.split(".")[1]}a(hT,"extractServerName");async function TT(e,t,r){let{schema:s,table:n}=r,i=Qi.createNatsTableStreamName(s,n),{jsm:o}=await ye(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config)}a(TT,"removeSourceFromWorkStream");async function oM(e,t,r=2e3,s=E_()){if(!Wi.isObject(t))throw new Error("data param must be an object");let n=a_(t),{connection:i}=await ye(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return c_(_.data)}a(oM,"request");function S_(e){return new Promise(async(t,r)=>{let s=xw(o_,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(S_,"reloadNATS");async function _M(){let{pid_file_path:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await S_(e)}a(_M,"reloadNATSHub");async function cM(){let{pid_file_path:e}=Ps(G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await S_(e)}a(cM,"reloadNATSLeaf");function uM(e,t,r){let s;switch(e.code){case rT.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case rT.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(uM,"requestErrorHandler");async function EM(e,t){let r=t+M.SERVER_SUFFIX.LEAF;await Vw.writeTransaction(G.SYSTEM_SCHEMA_NAME,G.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await ST(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await TT(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(EM,"updateWorkStream");async function fT(e,t){let r=Qi.createNatsTableStreamName(e,t),s=await Hs(),n=hM(e,t,s);await d_(r,[n])}a(fT,"createLocalTableStream");async function lM(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await fT(s,n)}}a(lM,"createTableStreams");async function mT(e,t){if(ee.get(G.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Qi.createNatsTableStreamName(e,t),{jsm:s}=await ye();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Pt.warn(r);else throw r}}a(mT,"purgeTableStream");async function dM(e,t){if(ee.get(G.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await mT(e,t[r])}a(dM,"purgeSchemaTableStreams");async function SM(e){return(await Ds()).streams.info(e)}a(SM,"getStreamInfo");function hM(e,t,r){return`${M.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(hM,"createSubjectName");async function Hs(){if(Ls)return Ls;if(Ls=(await Ds())?.nc?.info?.server_name,Ls===void 0)throw new Error("Unable to get jetstream manager server name");return Ls}a(Hs,"getJsmServerName");async function TM(){let e=await Ds(),t=await Hs(),r=await lT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=fM(s),_=i.split(".");if(!(_[_.length-1]===t&&!o)){if(n.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Pt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Pt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(M.WORK_QUEUE_CONSUMER_NAMES.stream_name,M.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${M.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let E=u.join(".");Pt.trace(`Updating stream subject name from: ${i} to: ${E}`),n.subjects[0]=E}await e.streams.update(n.name,n)}}}a(TM,"updateLocalStreams");function fM(e){let{config:t}=e,r=!1;if(t.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ee.get(G.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(fM,"updateStreamLimits")});var pT=h((rF,NT)=>{"use strict";var Bs=require("path"),ji=require("fs-extra"),mM=jc(),AM=ru(),RM=nu(),gM=au(),T_=Nr(),wr=p(),Te=$r(),zi=f(),Xi=it(),{CONFIG_PARAMS:Z}=zi,vs=O(),ea=J(),RT=ds(),f_=h_(),Gs="clustering",NM=1e4,gT=5;NT.exports={generateNatsConfig:pM,removeNatsConfig:OM};async function pM(e=!1,t=void 0){ea.initSync();let r=ea.get(Z.ROOTPATH),s=Bs.join(r,Gs,Xi.PID_FILES.HUB),n=Bs.join(r,Gs,Xi.PID_FILES.LEAF),i=Te.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Bs.join(r,Gs,Xi.NATS_CONFIG_FILES.HUB_SERVER),_=Bs.join(r,Gs,Xi.NATS_CONFIG_FILES.LEAF_SERVER),c=Te.getConfigFromFile(Z.CLUSTERING_TLS_CERTIFICATE),u=Te.getConfigFromFile(Z.CLUSTERING_TLS_PRIVATEKEY),E=Te.getConfigFromFile(Z.CLUSTERING_TLS_CERT_AUTH),l=Te.getConfigFromFile(Z.CLUSTERING_TLS_INSECURE),S=Te.getConfigFromFile(Z.CLUSTERING_TLS_VERIFY),d=Te.getConfigFromFile(Z.CLUSTERING_NODENAME),A=Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await f_.checkNATSServerInstalled()||ta("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let g=await T_.listUsers(),y=Te.getConfigFromFile(Z.CLUSTERING_USER),$=await T_.getClusterUser();(wr.isEmpty($)||$.active!==!0)&&ta(`Invalid cluster user '${y}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Zi(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Zi(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Zi(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),await Zi(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],v=[];for(let[Hr,ar]of g.entries())ar.role.role===zi.ROLE_TYPES_ENUM.CLUSTER_USER&&ar.active&&(x.push(new gM(ar.username,RT.decrypt(ar.hash))),v.push(new RM(ar.username,RT.decrypt(ar.hash))));let we=[],{hub_routes:Ft}=Te.getClusteringRoutes();if(!wr.isEmptyOrZeroLength(Ft))for(let Hr of Ft)we.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${Hr.host}:${Hr.port}`);let ir=new mM(Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,c,u,E,l,S,A,Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NAME),Te.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),we,x,v);E==null&&(delete ir.tls.ca_file,delete ir.leafnodes.tls.ca_file),t=wr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===zi.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ji.writeJson(o,ir),vs.trace(`Hub server config written to ${o}`));let V_=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${A}`,k_=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${A}`,Aa=new AM(Te.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[V_],[k_],x,v,c,u,E,l);E==null&&delete Aa.tls.ca_file,(t===void 0||t===zi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ji.writeJson(_,Aa),vs.trace(`Leaf server config written to ${_}`))}a(pM,"generateNatsConfig");async function Zi(e){let t=ea.get(e);return wr.isEmpty(t)&&ta(`port undefined for '${e}'`),await wr.isPortTaken(t)&&ta(`'${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(Zi,"isPortAvailable");function ta(e){let t=`Error generating clustering config: ${e}`;vs.error(t),console.error(t),process.exit(1)}a(ta,"generateNatsConfigError");async function OM(e){let{port:t,config_file:r}=f_.getServerConfig(e),{username:s,decrypt_hash:n}=await T_.getClusterUser(),i=0,o=500;for(;i<gT;){try{let u=await f_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){vs.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=gT)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 wr.async_set_timeout(o*i)}let _="0".repeat(NM),c=Bs.join(ea.get(Z.ROOTPATH),Gs,r);await ji.writeFile(c,_),await ji.remove(c),vs.notify(e,"started.")}a(OM,"removeNatsConfig")});var yT=h((nF,LT)=>{"use strict";var Ue=J(),IM=kn(),w=f(),Fs=it(),Tt=require("path"),{PACKAGE_ROOT:ra}=f(),OT=J(),Mr="/dev/null",CM=Tt.join(ra,"launchServiceScripts"),IT=Tt.join(ra,"utility/scripts"),bM=Tt.join(IT,w.HDB_RESTART_SCRIPT),CT=Tt.resolve(ra,"dependencies",`${process.platform}-${process.arch}`,Fs.NATS_BINARY_NAME);function bT(){let t=IM.licenseSearch().ram_allocation||w.RAM_ALLOCATION_ENUM.DEFAULT,r=w.MEM_SETTING_KEY+t;return{name:w.PROCESS_DESCRIPTORS.HDB,script:w.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:ra}}a(bT,"generateMainServerConfig");var LM=9930;function yM(){Ue.initSync(!0);let e=Ue.get(w.CONFIG_PARAMS.ROOTPATH),t=Tt.join(e,"clustering",Fs.NATS_CONFIG_FILES.HUB_SERVER),r=Tt.join(Ue.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY),w.LOG_NAMES.HDB),s=OT.get(w.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Fs.LOG_LEVEL_FLAGS[Ue.get(w.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==LM?"-"+s:""),script:CT,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mr,i.error_file=Mr),i}a(yM,"generateNatsHubServerConfig");var UM=9940;function wM(){Ue.initSync(!0);let e=Ue.get(w.CONFIG_PARAMS.ROOTPATH),t=Tt.join(e,"clustering",Fs.NATS_CONFIG_FILES.LEAF_SERVER),r=Tt.join(Ue.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY),w.LOG_NAMES.HDB),s=OT.get(w.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Fs.LOG_LEVEL_FLAGS[Ue.get(w.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==UM?"-"+s:""),script:CT,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mr,i.error_file=Mr),i}a(wM,"generateNatsLeafServerConfig");function MM(){Ue.initSync();let e=Tt.join(Ue.get(w.CONFIG_PARAMS.LOGGING_ROOT),w.LOG_NAMES.HDB),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:w.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:CM,autorestart:!1};return Ue.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Mr,t.error_file=Mr),t}a(MM,"generateClusteringUpgradeV4ServiceConfig");function DM(){return{...{name:w.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:IT},script:bM}}a(DM,"generateRestart");function PM(){return{apps:[bT()]}}a(PM,"generateAllServiceConfigs");LT.exports={generateAllServiceConfigs:PM,generateMainServerConfig:bT,generateRestart:DM,generateNatsHubServerConfig:yM,generateNatsLeafServerConfig:wM,generateClusteringUpgradeV4ServiceConfig:MM}});var wT=h((aF,UT)=>{var HM=at(),BM={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};UT.exports=function(e){return HM.validateObject(e,BM)}});var DT=h((oF,MT)=>{"use strict";var GM=f().OPERATIONS_ENUM,sa=class{constructor(t,r,s,n=void 0){this.operation=GM.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(sa,"UpdateObject");MT.exports=sa});var HT=h((cF,PT)=>{"use strict";var vM={OPERATION:"operation",REFRESH:"refresh"},na=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(na,"JWTTokens");var ia=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(ia,"JWTRSAKeys");PT.exports={JWTTokens:na,TOKEN_TYPE_ENUM:vM,JWTRSAKeys:ia}});var qT=h((EF,FT)=>{"use strict";var xs=require("jsonwebtoken"),m_=require("fs-extra"),A_=p(),ve=f(),{handleHDBError:fe,hdb_errors:FM}=Q(),{HTTP_STATUS_CODES:me,AUTHENTICATION_ERROR_MSGS:Ae}=FM,qs=O(),BT=xn(),N_=Nr(),qM=Fi().update,xM=DT(),VM=ci(),{UserEventMsg:kM}=gr(),Ht=J();Ht.initSync();var R_=require("path"),{JWTTokens:YM,JWTRSAKeys:$M,TOKEN_TYPE_ENUM:aa}=HT(),KM=Ht.get(ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",WM=Ht.get(ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",oa="RS256",g_;FT.exports={createTokens:QM,validateOperationToken:XM,refreshOperationToken:JM,validateRefreshToken:vT};async function QM(e){if(A_.isEmpty(e)||typeof e!="object")throw fe(new Error,Ae.INVALID_AUTH_OBJECT,me.BAD_REQUEST,void 0,void 0,!0);if(A_.isEmpty(e.username))throw fe(new Error,Ae.USERNAME_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);if(A_.isEmpty(e.password))throw fe(new Error,Ae.PASSWORD_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await N_.findAndValidateUser(e.username,e.password),!t)throw fe(new Error,Ae.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}catch(S){throw qs.error(S),fe(new Error,Ae.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}let r=await _a(),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 GT(i,r.private_key,r.passphrase),_=await xs.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:WM,algorithm:oa,subject:aa.REFRESH}),c=BT.hash(_),u=new xM(ve.SYSTEM_SCHEMA_NAME,ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await qM(u)}catch(S){qs.error(S),l=S}if(l!==void 0||E.skipped_hashes.length>0)throw fe(new Error,Ae.REFRESH_TOKEN_SAVE_FAILED,me.INTERNAL_SERVER_ERROR);return VM.signalUserChange(new kM(process.pid)),new YM(o,_)}a(QM,"createTokens");async function GT(e,t,r){return await xs.sign(e,{key:t,passphrase:r},{expiresIn:KM,algorithm:oa,subject:aa.OPERATION})}a(GT,"signOperationToken");async function _a(){if(g_===void 0)try{let e=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=R_.join(Ht.getHdbBasePath(),ve.LICENSE_KEY_DIR_NAME,ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await m_.readFile(e)).toString(),n=(await m_.readFile(t)).toString(),i=(await m_.readFile(r)).toString();g_=new $M(i,n,s)}catch(e){throw qs.error(e),fe(new Error,Ae.NO_ENCRYPTION_KEYS,me.INTERNAL_SERVER_ERROR)}return g_}a(_a,"getJWTRSAKeys");async function JM(e){if(!e)throw fe(new Error,Ae.INVALID_BODY,me.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fe(new Error,Ae.REFRESH_TOKEN_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);await vT(e.refresh_token);let t=await _a(),r=await xs.decode(e.refresh_token);return{operation_token:await GT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(JM,"refreshOperationToken");async function XM(e){try{let t=await _a(),r=await xs.verify(e,t.public_key,{algorithms:oa,subject:aa.OPERATION});return await N_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw qs.warn(t),t.name&&t.name==="TokenExpiredError"?fe(new Error,Ae.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED)}}a(XM,"validateOperationToken");async function vT(e){let t;try{let r=await _a(),s=await xs.verify(e,r.public_key,{algorithms:oa,subject:aa.REFRESH});t=await N_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw qs.warn(r),r.name&&r.name==="TokenExpiredError"?fe(new Error,Ae.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED)}if(!BT.validate(t.refresh_token,e))throw fe(new Error,Ae.INVALID_TOKEN,me.UNAUTHORIZED);return t}a(vT,"validateRefreshToken")});var YT=h((SF,kT)=>{"use strict";var ZM=wT(),Dr=require("passport"),zM=require("passport-local").Strategy,jM=require("passport-http").BasicStrategy,eD=require("util"),tD=Nr(),VT=eD.callbackify(tD.findAndValidateUser),dF=Me(),rD=f(),xT=qT();Dr.use(new zM(function(e,t,r){VT(e,t,r)}));Dr.use(new jM(function(e,t,r){VT(e,t,r)}));Dr.serializeUser(function(e,t){t(null,e)});Dr.deserializeUser(function(e,t){t(null,e)});function sD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Dr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===rD.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?xT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):xT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Dr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(sD,"authorize");function nD(e,t){let r=ZM(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(nD,"checkPermissions");kT.exports={authorize:sD,checkPermissions:nD}});var KT=h((TF,$T)=>{"use strict";var ca=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(ca,"Node");var ua=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(ua,"NodeSubscription");$T.exports={Node:ca,NodeSubscription:ua}});var QT=h((mF,WT)=>{"use strict";var iD=f().OPERATIONS_ENUM,Ea=class{constructor(t,r,s,n=void 0){this.operation=iD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ea,"UpsertObject");WT.exports=Ea});var XT=h((RF,JT)=>{"use strict";var la=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(la,"RemotePayloadObject");var da=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(da,"RemotePayloadSubscription");JT.exports={RemotePayloadObject:la,RemotePayloadSubscription:da}});var zT=h((NF,ZT)=>{"use strict";var Sa=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(Sa,"TableSizeObject");ZT.exports=Sa});var ef=h((OF,jT)=>{"use strict";var aD=zT(),oD=ne(),Pr=q(),_D=O(),{getSchemaPath:cD,getTransactionAuditStorePath:uD}=Y();jT.exports=ED;async function ED(e){let t=new aD;try{let r=cD(e.schema,e.name),s=await Pr.openEnvironment(r,e.name),n=Pr.statDBI(s,e.hash_attribute),i=uD(e.schema,e.name),o=await Pr.openEnvironment(i,e.name,!0),_=Pr.statDBI(o,oD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Pr.environmentDataSize(r,e.name),u=await Pr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){_D.warn(`unable to stat table dbi due to ${r}`)}return t}a(ED,"lmdbGetTableSize")});var rf=h((CF,tf)=>{"use strict";var ha=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(ha,"SystemInformationObject");tf.exports=ha});var D_=h((LF,of)=>{"use strict";var lD=require("fs-extra"),dD=require("path"),ue=require("systeminformation"),Bt=O(),p_=f(),SD=ef(),nf=ni(),{getThreadInfo:sf}=Kn(),af=J();af.initSync();var hD=rf(),{openEnvironment:TD}=q(),{getSchemaPath:fD}=Y(),Ta;of.exports={getHDBProcessInfo:b_,getNetworkInfo:y_,getDiskInfo:L_,getMemoryInfo:C_,getCPUInfo:I_,getTimeInfo:O_,getSystemInformation:U_,systemInformation:mD,getTableSize:w_,getMetrics:M_};function O_(){return ue.time()}a(O_,"getTimeInfo");async function I_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ue.cpu();E.cpu_speed=await ue.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:S,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:g,raw_currentload_user:y,cpus:$,...x}=await ue.currentLoad();return x.cpus=[],$.forEach(v=>{let{raw_load:we,raw_load_idle:Ft,raw_load_irq:ir,raw_load_nice:V_,raw_load_system:k_,raw_load_user:Aa,...Hr}=v;x.cpus.push(Hr)}),E.current_load=x,E}catch(e){return Bt.error(`error in getCPUInfo: ${e}`),{}}}a(I_,"getCPUInfo");async function C_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ue.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Bt.error(`error in getMemoryInfo: ${e}`),{}}}a(C_,"getMemoryInfo");async function b_(){let e={core:[],clustering:[]};try{let t=await ue.processes(),r;try{r=Number.parseInt(await lD.readFile(dD.join(af.get(p_.CONFIG_PARAMS.ROOTPATH),p_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===p_.NODE_ERROR_CODES.ENOENT)Bt.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 Bt.error(`error in getHDBProcessInfo: ${t}`),e}}a(b_,"getHDBProcessInfo");async function L_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ue.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ue.fsStats();return e.read_write=u,e.size=await ue.fsSize(),e}catch(t){return Bt.error(`error in getDiskInfo: ${t}`),e}}a(L_,"getDiskInfo");async function y_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ue.networkInterfaceDefault(),e.latency=await ue.inetChecksite("google.com"),(await ue.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...S}=s;e.interfaces.push(S)}),(await ue.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e}catch(t){return Bt.error(`error in getNetworkInfo: ${t}`),e}}a(y_,"getNetworkInfo");async function U_(){if(Ta!==void 0)return Ta;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ue.osInfo();e=_;let c=await ue.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Ta=e,Ta}catch(t){return Bt.error(`error in getSystemInformation: ${t}`),e}}a(U_,"getSystemInformation");async function w_(){let e=[],t=await nf.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await SD(s));return e}a(w_,"getTableSize");async function M_(){let e=await nf.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=fD(r,n),_=(await TD(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){Bt.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(M_,"getMetrics");async function mD(e){let t=new hD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await U_(),t.time=O_(),t.cpu=await I_(),t.memory=await C_(),t.disk=await L_(),t.network=await y_(),t.harperdb_processes=await b_(),t.table_size=await w_(),t.metrics=await M_(),t.threads=await sf(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await U_();break;case"time":t.time=O_();break;case"cpu":t.cpu=await I_();break;case"memory":t.memory=await C_();break;case"disk":t.disk=await L_();break;case"network":t.network=await y_();break;case"harperdb_processes":t.harperdb_processes=await b_();break;case"table_size":t.table_size=await w_();break;case"database_metrics":case"metrics":t.metrics=await M_();break;case"threads":t.threads=await sf();break;default:break}return t}a(mD,"systemInformation")});var cf=h((MF,_f)=>{"use strict";var UF=require("fs-extra"),wF=O();_f.exports={version:AD,printVersion:gD,nodeVersion:RD};var Gt=s_();function AD(){if(Gt)return Gt.version}a(AD,"version");function RD(){if(Gt&&Gt.engines&&Gt.engines["preferred-node"])return Gt.engines["preferred-node"]}a(RD,"nodeVersion");function gD(){Gt&&console.log(`HarperDB Version ${Gt.version}`)}a(gD,"printVersion")});var Sf=h((BF,df)=>{"use strict";var ND=Fi(),P_=p(),H_=require("util"),sr=f(),uf=J();uf.initSync();var pD=YT(),Ef=Zn(),{Node:PF,NodeSubscription:HF}=KT(),OD=Ai(),ID=QT(),{RemotePayloadObject:CD,RemotePayloadSubscription:bD}=XT(),{handleHDBError:LD,hdb_errors:yD}=Q(),{HTTP_STATUS_CODES:UD,HDB_ERROR_MSGS:wD}=yD,MD=dt(),DD=D_(),PD=cf(),HD=H_.promisify(pD.authorize),BD=H_.promisify(Ef.searchByHash),GD=H_.promisify(Ef.searchByValue);df.exports={authHeaderToUser:vD,isEmpty:FD,getNodeRecord:qD,upsertNodeRecord:xD,buildNodePayloads:VD,checkClusteringEnabled:kD,getAllNodeRecords:YD,getSystemInfo:$D,reverseSubscription:lf};async function vD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await HD(t,null),e}a(vD,"authHeaderToUser");function FD(e){return e==null}a(FD,"isEmpty");async function qD(e){let t=new OD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return BD(t)}a(qD,"getNodeRecord");async function xD(e){let t=new ID(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ND.upsert(t)}a(xD,"upsertNodeRecord");function lf(e){if(P_.isEmpty(e.subscribe)||P_.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(lf,"reverseSubscription");function VD(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=P_.getTableHashAttribute(c,u),{subscribe:l,publish:S}=lf(_),d=new bD(c,u,E,S,l,_.start_time);n.push(d)}return new CD(r,t,n,s)}a(VD,"buildNodePayloads");function kD(){if(!uf.get(sr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw LD(new Error,wD.CLUSTERING_NOT_ENABLED,UD.BAD_REQUEST,void 0,void 0,!0)}a(kD,"checkClusteringEnabled");async function YD(){let e=new MD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await GD(e))}a(YD,"getAllNodeRecords");async function $D(){let e=await DD.getSystemInformation();return{hdb_version:PD.version(),node_version:e.node_version,platform:e.platform}}a($D,"getSystemInfo")});var yf=h((YF,Lf)=>{"use strict";var P=f(),Tf=p(),Vs=pT(),fa=h_(),tt=it(),H=require("pm2"),vt=yT(),ma=J(),ft=O(),KD=Sf(),{startWorker:B_,onMessageFromWorkers:WD}=Kn(),vF=D_(),QD=require("util"),ff=require("child_process"),{execFile:JD}=ff,FF=QD.promisify(ff.exec),qF=require("systeminformation");Lf.exports={enterPM2Mode:XD,start:nr,stop:G_,reload:mf,restart:Af,list:v_,describe:F_,connect:mt,kill:tP,startAllServices:rP,startService:q_,getUniqueServicesList:gf,restartAllServices:sP,isServiceRegistered:Nf,reloadStopStart:pf,restartHdb:Rf,deleteProcess:jD,startClusteringProcesses:Cf,startClusteringThreads:bf,isHdbRestartRunning:eP,isClusteringRunning:iP,stopClustering:nP,reloadClustering:aP};var{PACKAGE_ROOT:xF}=f(),VF=f(),{loggerWithTag:kF}=ft,ks=!1;WD(e=>{e.type==="restart"&&ma.initSync(!0)});function XD(){ks=!0}a(XD,"enterPM2Mode");function mt(){return new Promise((e,t)=>{H.connect((r,s)=>{ft.setupConsoleLogging(),r&&t(r),e(s)})})}a(mt,"connect");var Re,ZD=10,hf;function nr(e){if(ks)return zD(e);let t=JD(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Re.indexOf(t);i>-1&&Re.splice(i,1),!hf&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<ZD&&nr(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=ma.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,_,c=0,u;for(;_=o.exec(n);){if(_.index&&tt.LOG_LEVEL_HIERARCHY[i]>=tt.LOG_LEVEL_HIERARCHY[u||"info"]){let S=u===tt.LOG_LEVELS.ERR||u===tt.LOG_LEVELS.WRN?ft.OUTPUTS.STDERR:ft.OUTPUTS.STDOUT;ft.logCustomLevel(u||"info",S,r,n.slice(c,_.index).trim())}let[E,l]=_;c=_.index+E.length,u=tt.LOG_LEVELS[l]}if(tt.LOG_LEVEL_HIERARCHY[i]>=tt.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===tt.LOG_LEVELS.ERR||u===tt.LOG_LEVELS.WRN?ft.OUTPUTS.STDERR:ft.OUTPUTS.STDOUT;ft.logCustomLevel(u||"info",E,r,n.slice(c).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Re){Re=[];let n=a(()=>{hf=!0,Re&&(Re.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)}Re.push(t)}a(nr,"start");function zD(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.start(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(zD,"startWithPM2");function G_(e){if(!ks){for(let t of Re||[])t.name===e&&(Re.splice(Re.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.stop(e,async(s,n)=>{s&&(H.disconnect(),r(s)),H.delete(e,(i,o)=>{i&&(H.disconnect(),r(s)),H.disconnect(),t(o)})})})}a(G_,"stop");function mf(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.reload(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(mf,"reload");function Af(e){if(!ks)for(let t of Re||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.restart(e,(s,n)=>{H.disconnect(),t(n)})})}a(Af,"restart");function jD(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.delete(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(jD,"deleteProcess");async function Rf(){await nr(vt.generateRestart())}a(Rf,"restartHdb");async function eP(){let e=await v_();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(eP,"isHdbRestartRunning");function v_(){return new Promise(async(e,t)=>{try{await mt()}catch(r){t(r)}H.list((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(v_,"list");function F_(e){return new Promise(async(t,r)=>{try{await mt()}catch(s){r(s)}H.describe(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(F_,"describe");function tP(){if(!ks){for(let e of Re||[])e.kill();Re=[];return}return new Promise(async(e,t)=>{try{await mt()}catch(r){t(r)}H.killDaemon((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(tP,"kill");async function rP(){try{await Cf(),await bf(),await nr(vt.generateAllServiceConfigs())}catch(e){throw H.disconnect(),e}}a(rP,"startAllServices");async function q_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=vt.generateMainServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=vt.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=vt.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=vt.generateNatsHubServerConfig(),await nr(t),await Vs.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=vt.generateNatsLeafServerConfig(),await nr(t),await Vs.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=vt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await nr(t)}catch(t){throw H.disconnect(),t}}a(q_,"startService");async function gf(){try{let e=await v_(),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 H.disconnect(),e}}a(gf,"getUniqueServicesList");async function sP(e=[]){try{let t=!1,r=await gf();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await Af(o))}t&&await pf(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw H.disconnect(),t}}a(sP,"restartAllServices");async function Nf(e){return Re?.find(t=>t.name===e)?!0:!Tf.isEmptyOrZeroLength(await F_(e))}a(Nf,"isServiceRegistered");async function pf(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?ma.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ma.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await F_(e),s=Tf.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await G_(e),await q_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await Rf():await mf(e)}a(pf,"reloadStopStart");var Of,If;async function Cf(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await q_(t)}}a(Cf,"startClusteringProcesses");async function bf(){Of=B_(P.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),If=B_(P.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await fa.createWorkQueueStream(tt.WORK_QUEUE_CONSUMER_NAMES),await fa.updateLocalStreams();let e=await KD.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){ft.info("Starting clustering upgrade 4.0.0 process"),B_(P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bf,"startClusteringThreads");async function nP(){for(let e in P.CLUSTERING_PROCESSES)if(e===P.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await Of.terminate();else if(e===P.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await If.terminate();else{let t=P.CLUSTERING_PROCESSES[e];await G_(t)}}a(nP,"stopClustering");async function iP(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await Nf(t)===!1)return!1}return!0}a(iP,"isClusteringRunning");async function aP(){await Vs.generateNatsConfig(!0),await fa.reloadNATSHub(),await fa.reloadNATSLeaf(),await Vs.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vs.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(aP,"reloadClustering")});var x_=yf(),Uf=f();a(async function(){try{let t=await x_.describe(Uf.PROCESS_DESCRIPTORS.HDB);for(let r of t)await x_.reload(r.pm_id);await x_.deleteProcess(Uf.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|