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,7 +2,7 @@
|
|
|
2
2
|
`,dL={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hL=["*","%"],fL="unauthorized_access",SL="func_val",TL={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},mL={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},RL={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"},AL={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},pL={HTTP:"http"},gL={STOPPED:"stopped",ONLINE:"online"},NL="3.x.x";Mh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:gh,HDB_SUPPORT_URL:Oh,HDB_PRICING_URL:Xw,SUPPORT_HELP_MSG:Zw,LICENSE_HELP_MSG:Ih,HDB_PROC_NAME:Ah,HDB_PROC_DESCRIPTOR:hu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca,CLUSTERING_HUB_PROC_DESCRIPTOR:wa,SYSTEM_SCHEMA_NAME:SC,HASH_FOLDER_NAME:TC,HDB_HOME_DIR_NAME:mC,UPDATE_FILE_NAME:gC,LICENSE_KEY_DIR_NAME:AC,BOOT_PROPS_FILE_NAME:pC,JOB_TYPE_ENUM:ZC,JOB_STATUS_ENUM:kC,SYSTEM_TABLE_NAMES:HC,SYSTEM_TABLE_HASH_ATTRIBUTES:qC,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:$C,S3_BUCKET_AUTH_KEYS:YC,VALID_SQL_OPS_ENUM:KC,GEO_CONVERSION_ENUM:QC,HDB_SETTINGS_NAMES:Ch,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:JC,SERVICE_ACTIONS_ENUM:WC,CLUSTER_MESSAGE_TYPE_ENUM:zC,CLUSTER_CONNECTION_DIRECTION_ENUM:jC,CLUSTER_EVENTS_DEFS_ENUM:sL,PERIOD_REGEX:nC,DOUBLE_PERIOD_REGEX:iC,UNICODE_PERIOD:aC,FORWARD_SLASH_REGEX:oC,UNICODE_FORWARD_SLASH:cC,ESCAPED_FORWARD_SLASH_REGEX:_C,ESCAPED_PERIOD_REGEX:uC,ESCAPED_DOUBLE_PERIOD_REGEX:lC,REG_KEY_FILE_NAME:xC,RESTART_TIMEOUT_MS:IC,HDB_FILE_PERMISSIONS:bC,SCHEMA_DIR_NAME:LC,TRANSACTIONS_DIR_NAME:yC,LIMIT_COUNT_NAME:UC,ID_ATTRIBUTE_STRING:MC,INSERT_MODULE_ENUM:BC,UPGRADE_JSON_FIELD_NAMES_ENUM:vC,RESTART_CODE:NC,RESTART_CODE_NUM:OC,CLUSTER_OPERATIONS:Gn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:FC,HDB_INTERNAL_SC_CHANNEL_PREFIX:nt,INTERNAL_SC_CHANNELS:GC,CLUSTERING_MESSAGE_TYPES:uL,HDB_FILE_SUFFIX:RC,BLOB_FOLDER_NAME:wC,HDB_TRASH_DIR:CC,ORIGINATOR_SET_VALUE:lL,LICENSE_VALUES:tL,RAM_ALLOCATION_ENUM:rL,STORAGE_TYPES_ENUM:eL,TIME_STAMP_NAMES_ENUM:yh,TIME_STAMP_NAMES:oL,PERMS_UPDATE_RELEASE_TIMESTAMP:cL,SEARCH_NOT_FOUND_MESSAGE:zw,SEARCH_ATTRIBUTE_NOT_FOUND:jw,LICENSE_ROLE_DENIED_RESPONSE:eC,LICENSE_MAX_CONNS_REACHED:tC,BASIC_LICENSE_MAX_NON_CU_ROLES:Nh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Jw,VALUE_SEARCH_COMPARATORS:Uh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:_L,LICENSE_FILE_NAME:VC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:nL,NEW_LINE:EL,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:sC,MOMENT_DAYS_TAG:EC,API_TURNOVER_SEC:dC,LOOPBACK:rC,CODE_EXTENSION:ba,WILDCARD_SEARCH_VALUE:hC,NODE_ERROR_CODES:iL,JAVASCRIPT_EXTENSION:Rh,PERMS_CRUD_ENUM:dL,UNAUTHORIZED_PERMISSION_NAME:fL,SEARCH_WILDCARDS:hL,FUNC_VAL:SL,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:TL,JWT_ENUM:mL,CLUSTERING_FLAG:aL,ITC_EVENT_TYPES:RL,CUSTOM_FUNCTION_PROC_NAME:ph,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ia,SERVICES:AL,THREAD_TYPES:pL,MEM_SETTING_KEY:fC,HDB_RESTART_SCRIPT:Bw,PROCESS_DESCRIPTORS:Fw,SERVICE_SERVERS:Yw,SERVICE_SERVERS_CWD:du,PROCESS_DESCRIPTORS_VALIDATE:kw,LAUNCH_SERVICE_SCRIPTS:Kw,LOG_LEVELS:Vw,PROCESS_NAME_ENV_PROP:DC,LOG_NAMES:xw,PM2_PROCESS_STATUSES:gL,CONFIG_PARAM_MAP:Lh,CONFIG_PARAMS:S,HDB_CONFIG_FILE:Mw,HDB_DEFAULT_CONFIG_FILE:Dw,ROLE_TYPES_ENUM:Ww,BOOT_PROP_PARAMS:bh,INSTALL_PROMPTS:PC,HDB_ROOT_DIR_NAME:Pw,CLUSTERING_PROCESSES:$w,FOREGROUND_PID_FILE:qw,PACKAGE_ROOT:Cr,PRE_4_0_0_VERSION:NL,SCHEMAS_PARAM_CONFIG:XC,HDB_PID_FILE:Gw}});var fu=f((DX,Bh)=>{"use strict";var Dh=require("minimist");Bh.exports=OL;function OL(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Ph(process.env),s=Ph(Dh(process.argv))):(r=process.env,s=Dh(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(OL,"assignCMDENVVariables");function Ph(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Ph,"objKeysToLowerCase")});var I=f((BX,Wh)=>{"use strict";var Ws=require("fs-extra"),{workerData:IL,threadId:bL}=require("worker_threads"),Lr=require("path"),qh=require("yaml"),Gh=require("properties-reader"),Ae=m(),vh=fu(),wL=require("os"),{PACKAGE_ROOT:Tu}=m(),Fh={};for(let e in console)Fh[e]=console[e];var ke={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},xh={STDOUT:"stdOut",STDERR:"stdErr"},CL=Lr.join(Tu,"logs"),LL=Lr.join(Tu,"config/yaml/",Ae.HDB_DEFAULT_CONFIG_FILE),yL=1e4,ar,or,Ve,La,ya,Ua,xn,Fn;Fn===void 0&&Vh();Wh.exports={notify:Yh,fatal:Kh,error:Vn,warn:pu,info:Ma,debug:Au,trace:Ru,setLogLevel:HL,log_level:Ve,loggerWithTag:UL,suppressLogging:ML,initLogSettings:Vh,setupConsoleLogging:kh,logCustomLevel:BL,closeLogFile:mu,getLogFilePath:()=>Ua,OUTPUTS:xh};function Vh(e=!1){try{if(Fn===void 0||e){mu();let t=vL();Fn=Gh(t);let r=vh(["ROOTPATH"]);({level:Ve,config_log_path:ya,to_file:ar,to_stream:or}=qL(r.ROOTPATH?Lr.join(r.ROOTPATH,Ae.HDB_CONFIG_FILE):Fn.get("settings_path"))),La=Ae.LOG_NAMES.HDB,Ua=Lr.join(ya,La)}}catch(t){if(Fn=void 0,t.code===Ae.NODE_ERROR_CODES.ENOENT){let r=vh(Object.keys(Ae.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Ae.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let _=r[o];if(c===Ae.CONFIG_PARAMS.LOGGING_LEVEL){Ve=_;continue}if(c===Ae.CONFIG_PARAMS.LOGGING_STDSTREAMS){or=_;continue}c===Ae.CONFIG_PARAMS.LOGGING_FILE&&(ar=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=GL();ar=ar===void 0?n:ar,ar=Hh(ar),or=or===void 0?i:or,or=Hh(or),Ve=Ve===void 0?s:Ve,ya=CL,La=Ae.LOG_NAMES.INSTALL,Ua=Lr.join(ya,La);return}throw Vn("Error initializing log settings"),Vn(t),t}kh()}a(Vh,"initLogSettings");var Su=!0;function kh(){Ks("error",Vn),Ks("warn",pu),Ks("log",Ma),Ks("info",Ma),Ks("debug",Au),Ks("trace",Ru)}a(kh,"setupConsoleLogging");function Ks(e,t){console[e]=function(...r){if(Su&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Fh[e](...r)}}a(Ks,"logConsole");function UL(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Yh),fatal:r(Kh),error:r(Vn),warn:r(pu),info:r(Ma),debug:r(Au),trace:r(Ru)};function r(s){return function(...n){return s(t,...n)}}}a(UL,"loggerWithTag");function ML(e){try{Su=!1,e()}finally{Su=!0}}a(ML,"suppressLogging");var DL=IL?.name?.replace(/ /g,"-")||"main";function cr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),o.unshift(_||DL+"/"+bL);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
3
|
`}a(cr,"createLogRecord");function kn(e){ar&&$h(e),or&&process.stdout.write(e)}a(kn,"logStdOut");function Da(e){ar&&$h(e),or&&process.stderr.write(e)}a(Da,"logStdErr");function $h(e){PL(),Ws.appendFileSync(xn,e)}a($h,"logToFile");function mu(){try{Ws.closeSync(xn)}catch{}xn=null}a(mu,"closeLogFile");function PL(){xn||(xn=Ws.openSync(Ua,"a"),setTimeout(()=>{mu()},yL).unref())}a(PL,"openLogFile");function Ma(...e){ke[Ve]<=ke.info&&kn(cr("info",e))}a(Ma,"info");function Ru(...e){ke[Ve]<=ke.trace&&kn(cr("trace",e))}a(Ru,"trace");function Vn(...e){ke[Ve]<=ke.error&&Da(cr("error",e))}a(Vn,"error");function Au(...e){ke[Ve]<=ke.debug&&kn(cr("debug",e))}a(Au,"debug");function Yh(...e){ke[Ve]<=ke.notify&&kn(cr("notify",e))}a(Yh,"notify");function Kh(...e){ke[Ve]<=ke.fatal&&Da(cr("fatal",e))}a(Kh,"fatal");function pu(...e){ke[Ve]<=ke.warn&&Da(cr("warn",e))}a(pu,"warn");function BL(e,t,...r){t===xh.STDERR?Da(cr(e,r)):kn(cr(e,r))}a(BL,"logCustomLevel");function vL(){let e;try{e=wL.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Lr.join(e,Ae.HDB_HOME_DIR_NAME,Ae.BOOT_PROPS_FILE_NAME);return Ws.existsSync(t)||(t=Lr.join(Tu,"utility/hdb_boot_properties.file")),t}a(vL,"getPropsFilePath");function HL(e){Ve=e}a(HL,"setLogLevel");function Hh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Hh,"autoCastBoolean");function qL(e){try{if(e.includes("config/settings.js")){let o=Gh(e);return{level:o.get(Ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Lr.dirname(o.get(Ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=qh.parseDocument(Ws.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===Ae.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(qL,"getLogConfig");function GL(){try{let e=qh.parseDocument(Ws.readFileSync(LL,"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(GL,"getDefaultConfig")});var Jh=f((HX,Qh)=>{"use strict";var FL=require("util"),xL=require("path"),VL=require("child_process"),kL=FL.promisify(VL.execFile),$L=1e3*1e3*10;Qh.exports={findPs:YL};async function YL(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await kL("ps",["wwxo",`pid,${r}`],{maxBuffer:$L});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:xL.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(YL,"findPs")});var Ue=f((GX,Zh)=>{"use strict";var KL="__dbis__",WL="__environment_name__",QL="__dbi_defintion__",JL={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"},XL=["__createdtime__","__updatedtime__"],ZL="\uFFFF",Xh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},zL=Object.values(Xh);Zh.exports={INTERNAL_DBIS_NAME:KL,DBI_DEFINITION_NAME:QL,SEARCH_TYPES:JL,TIMESTAMP_NAMES:XL,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:WL,TRANSACTIONS_DBI_NAMES_ENUM:Xh,TRANSACTIONS_DBIS:zL,OVERFLOW_MARKER:ZL}});var it=f((FX,of)=>{"use strict";var zh=m(),jh=Ue(),ef={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},tf=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),rf={500:tf("There was an error processing your request."),400:"Invalid request"},jL=rf[ef.INTERNAL_SERVER_ERROR],ey={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.`},ty={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ry={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"},sy={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 ${jh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${jh.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"},ny={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zh.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 ${zh.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"},sf={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"},iy={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."},ay={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`},oy={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"},cy={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},_y={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`},nf={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.`},af={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}`},uy={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."},ly={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Ey={...sf,...ry,...ey,...iy,...ay,...oy,...cy,..._y,...ny,...nf,...af,...uy,...ly,...ty};of.exports={CHECK_LOGS_WRAPPER:tf,HDB_ERROR_MSGS:Ey,DEFAULT_ERROR_MSGS:rf,DEFAULT_ERROR_RESP:jL,HTTP_STATUS_CODES:ef,LMDB_ERRORS_ENUM:sy,AUTHENTICATION_ERROR_MSGS:sf,VALIDATION_ERROR_MSGS:nf,ITC_ERRORS:af}});var L=f((VX,uf)=>{"use strict";var Qs=it(),dy=I(),hy=m(),$n=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,cf),this.http_resp_code=s||Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qs.DEFAULT_ERROR_MSGS[s]?Qs.DEFAULT_ERROR_MSGS[s]:Qs.DEFAULT_ERROR_MSGS[Qs.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&&dy[n](i)}};a($n,"HdbError");function cf(e,t,r,s=hy.LOG_LEVELS.ERROR,n=null,i=!1){if(_f(e))return e;let o=new $n(e,t,r,s,n);return i&&delete o.stack,o}a(cf,"handleHDBError");function _f(e){return e.__proto__.constructor.name===$n.name}a(_f,"isHDBError");uf.exports={isHDBError:_f,handleHDBError:cf,hdb_errors:Qs}});var b=f((YX,Of)=>{"use strict";var _s=require("path"),fy=require("fs-extra"),De=I(),lf=require("fs-extra"),Yn=require("os"),Sy=require("net"),Ty=require("recursive-iterator"),Me=m(),ff=Jh(),Ef=require("papaparse"),Pa=require("moment"),{inspect:my}=require("util"),df=require("is-number"),$X=require("lodash"),{hdb_errors:Ba}=L(),Sf=require("util").promisify(setTimeout),Ry=100,Ay=5,py="",gy=4,hf={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Of.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:Iy,arrayHasEmptyOrZeroLengthValues:by,buildFolderPath:wy,isBoolean:Tf,errorizeMessage:Ny,stripFileExtension:Ly,autoCast:yy,autoCastJSON:mf,autoCastJSONDeep:gu,removeDir:Uy,compareVersions:My,isCompatibleDataVersion:Dy,escapeRawValue:Py,unescapeValue:By,stringifyProps:vy,timeoutPromise:qy,isClusterOperation:Fy,getClusterUser:Vy,checkGlobalSchemaTable:xy,getHomeDir:Af,getPropsFilePath:Hy,promisifyPapaParse:ky,removeBOM:pf,createEventPromise:$y,checkProcessRunning:Yy,checkSchemaTableExist:Ky,checkSchemaExists:gf,checkTableExists:Nf,getStartOfTomorrowInSeconds:Wy,getLimitKey:Qy,isObject:Cy,isNotEmptyAndHasValue:Oy,autoCasterIsNumberCheck:Rf,backtickASTSchemaItems:Jy,isPortTaken:Gy,stopProcess:Xy,createForkArgs:Zy,autoCastBoolean:zy,async_set_timeout:Sf,getTableHashAttribute:jy,doesSchemaExist:eU,doesTableExist:tU,stringifyObj:rU,ms_to_time:sU,changeExtension:nU,PACKAGE_ROOT:Me.PACKAGE_ROOT};function Ny(e){return e instanceof Error?e:new Error(e)}a(Ny,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function Oy(e){return!at(e)&&(e||e===0||e===""||Tf(e))}a(Oy,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function Iy(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(Iy,"arrayHasEmptyValues");function by(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(by,"arrayHasEmptyOrZeroLengthValues");function wy(...e){try{return e.join(_s.sep)}catch{console.error(e)}}a(wy,"buildFolderPath");function Tf(e){return at(e)?!1:e===!0||e===!1}a(Tf,"isBoolean");function Cy(e){return at(e)?!1:typeof e=="object"}a(Cy,"isObject");function Ly(e){return kt(e)?py:e.slice(0,-gy)}a(Ly,"stripFileExtension");function yy(e){return at(e)||e===""||typeof e!="string"?e:hf[e]!==void 0?hf[e]:Rf(e)===!0?Number(e):e}a(yy,"autoCast");function mf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(mf,"autoCastJSON");function gu(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=gu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=gu(r);s!==r&&(e[t]=s)}return e}else return mf(e)}a(gu,"autoCastJSONDeep");function Rf(e){if(e.startsWith("0.")&&df(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&df(e))}a(Rf,"autoCasterIsNumberCheck");async function Uy(e){if(kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await lf.emptyDir(e),await lf.remove(e)}catch(t){throw De.error(`Error removing files in ${e} -- ${t}`),t}}a(Uy,"removeDir");function My(e,t){if(kt(e)){De.info("Invalid current version sent as parameter.");return}if(kt(t)){De.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(My,"compareVersions");function Dy(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Dy,"isCompatibleDataVersion");function Py(e){if(at(e))return e;let t=String(e);return t==="."?Me.UNICODE_PERIOD:t===".."?Me.UNICODE_PERIOD+Me.UNICODE_PERIOD:t.replace(Me.FORWARD_SLASH_REGEX,Me.UNICODE_FORWARD_SLASH)}a(Py,"escapeRawValue");function By(e){if(at(e))return e;let t=String(e);return t===Me.UNICODE_PERIOD?".":t===Me.UNICODE_PERIOD+Me.UNICODE_PERIOD?"..":String(e).replace(Me.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(By,"unescapeValue");function vy(e,t){if(at(e))return De.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Yn.EOL}!kt(s)&&s[0]===";"?r+=" "+s+n+Yn.EOL:kt(s)||(r+=s+"="+n+Yn.EOL)}catch{De.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(vy,"stringifyProps");function Af(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Af,"getHomeDir");function Hy(){let e=_s.join(Af(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return fy.existsSync(e)||(e=_s.join(__dirname,"../","hdb_boot_properties.file")),e}a(Hy,"getPropsFilePath");function qy(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(qy,"timeoutPromise");async function Gy(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Sy.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Gy,"isPortTaken");function Fy(e){try{return Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Fy,"isClusterOperation");function xy(e,t){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xy,"checkGlobalSchemaTable");function Vy(e,t){if(at(t)){De.warn("No CLUSTERING_USER defined, clustering disabled");return}if(at(e)||kt(e)){De.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){De.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){De.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Vy,"getClusterUser");function ky(){Ef.parsePromise=function(e,t){return new Promise(function(r,s){Ef.parse(e,{header:!0,transformHeader:pf,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(ky,"promisifyPapaParse");function pf(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(pf,"removeBOM");function $y(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${my(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a($y,"createEventPromise");async function Yy(e){let t=!0,r=0;do await Sf(Ry*r++),(await ff.findPs(e)).length>0&&(t=!1);while(t&&r<Ay);if(t)throw new Error(`process ${e} was not started`)}a(Yy,"checkProcessRunning");function Ky(e,t){let r=gf(e);if(r)return r;let s=Nf(e,t);if(s)return s}a(Ky,"checkSchemaTableExist");function gf(e){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gf,"checkSchemaExists");function Nf(e,t){if(!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Nf,"checkTableExists");function Wy(){let e=Pa().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(Wy,"getStartOfTomorrowInSeconds");function Qy(){return Pa().utc().format("DD-MM-YYYY")}a(Qy,"getLimitKey");function Jy(e){try{let t=new Ty(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){De.error("Got an error back ticking items."),De.error(t)}}a(Jy,"backtickASTSchemaItems");async function Xy(e){let t=Yn.userInfo();(await ff.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),De.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(Xy,"stopProcess");function Zy(e){return[e]}a(Zy,"createForkArgs");function zy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(zy,"autoCastBoolean");function jy(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(jy,"getTableHashAttribute");function eU(e){return global?.hdb_schema?.[e]!==void 0}a(eU,"doesSchemaExist");function tU(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(tU,"doesTableExist");function rU(e){try{return JSON.stringify(e)}catch{return e}}a(rU,"stringifyObj");function sU(e){let t=Pa.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(sU,"ms_to_time");function nU(e,t){let r=_s.basename(e,_s.extname(e));return _s.join(_s.dirname(e),r+t)}a(nU,"changeExtension")});var Hf=f((QX,vf)=>{"use strict";var Nu=require("recursive-iterator"),iU=require("alasql"),Ou=require("clone"),If=b(),{handleHDBError:bf,hdb_errors:aU}=L(),{HDB_ERROR_MSGS:wf,HTTP_STATUS_CODES:Cf}=aU,oU=["DISTINCT_ARRAY"],Lf=Symbol("validateTables"),Iu=Symbol("validateTable"),WX=Symbol("getAllColumns"),yf=Symbol("validateAllColumns"),va=Symbol("findColumn"),Uf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),bu=Symbol("validateColumn"),Mf=Symbol("setColumnsForTable"),Df=Symbol("checkColumnsForAsterisk"),Pf=Symbol("validateGroupBy"),Bf=Symbol("hasColumns"),Ha=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Lf](),this[Df](),this[yf]()}[Lf](){if(this[Bf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Iu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Iu](t.table)})}}[Bf](){let t=!1,r=new Nu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Iu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw bf(new Error,wf.SCHEMA_NOT_FOUND(t.databaseid),Cf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw bf(new Error,wf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Cf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Ou(s);n.table=Ou(t),this.attributes.push(n)})}[va](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)}[Df](){let t=new Nu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Mf](r.tableid)}[Mf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new iU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Pf](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new Nu(t),n=[];for(let{node:i,path:o}of s)!If.isEmpty(i)&&!If.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Uf](i):n.push(this[bu](i)));return n}[Pf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&oU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Ou(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[va](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[va](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Uf](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[bu](t)}[bu](t){let r=this[va](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(Ha,"SelectValidator");vf.exports=Ha});var wu=f((XX,qf)=>{"use strict";var qa=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(qa,"BridgeMethods");qf.exports=qa});var us=f((e3,$f)=>{"use strict";var Gf=it().LMDB_ERRORS_ENUM,zX=require("lmdb"),cU=Ue(),jX=require("buffer").Buffer,{OVERFLOW_MARKER:Ff,MAX_SEARCH_KEY_LENGTH:Ga}=cU,xf=["number","string","symbol","boolean","bigint"];function _U(e){if(e=e?.database||e,!e)throw new Error(Gf.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Gf.INVALID_ENVIRONMENT)}a(_U,"validateEnv");function uU(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(uU,"stringifyData");function lU(e){return e instanceof Date?e.valueOf():e}a(lU,"convertKeyValueToWrite");function EU(e){if(e==null)return;if(xf.includes(typeof e))return e.length>Ga?[e.slice(0,Ga)+Ff]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];xf.includes(typeof n)&&(n.length>Ga?t.push(n.slice(0,Ga)+Ff):t.push(n))}}return t}a(EU,"getIndexedValues");var Fa=0,Vf=0;function kf(){Vf=Date.now()-performance.now()}a(kf,"adjustStartTime");kf();var dU=6e4;setInterval(kf,dU).unref();function hU(){let e=performance.now()+Vf;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(hU,"getNextMonotonicTime");$f.exports={validateEnv:_U,stringifyData:uU,convertKeyValueToWrite:lU,getNextMonotonicTime:hU,getIndexedValues:EU}});var Kf=f((r3,Yf)=>{"use strict";var xa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(xa,"DBIDefinition");Yf.exports=xa});var Qf=f((n3,Wf)=>{"use strict";var fU={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))},SU="certificate.pem",TU="privateKey.pem",mU="ca.pem";Wf.exports={CERTIFICATE_VALUES:fU,CERTIFICATE_PEM_NAME:SU,PRIVATEKEY_PEM_NAME:TU,CA_PEM_NAME:mU}});var te=f((i3,Jf)=>{"use strict";var $e=require("validate.js");$e.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||$e.validators.type.checks[t](e)?null:` must be a '${t}' value`};$e.validators.type.checks={Object:function(e){return $e.isObject(e)&&!$e.isArray(e)},Array:$e.isArray,Integer:$e.isInteger,Number:$e.isNumber,String:$e.isString,Date:$e.isDate,Boolean:function(e){return typeof e=="boolean"}};$e.validators.hasValidFileExt=function(e,t){return $e.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};Jf.exports={validateObject:RU,validateObjectAsync:AU,validateBySchema:pU};function RU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=$e(e,t,{format:"flat"});return r?new Error(r):null}a(RU,"validateObject");async function AU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await $e.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(AU,"validateObjectAsync");function pU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(pU,"validateBySchema")});var Lu=f((c3,jf)=>{"use strict";var gU=require("fs-extra"),P=require("joi"),NU=require("os"),{boolean:re,string:_r,number:Mt,array:Cu}=P.types(),{totalmem:Xf}=require("os"),Wn=require("path"),OU=I(),ka=b(),o3=Qf(),IU=m(),bU=te(),Zf="log",wU="custom_functions",CU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",LU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",UU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",MU="rootPath config parameter is undefined",DU="clustering.enabled config parameter is undefined",ls=Mt.min(0).required(),$a=Cu.items({host:_r.required(),port:ls}).empty(null),yr;jf.exports={configValidator:PU,routesValidator:FU,route_constraints:$a};function PU(e){if(yr=e.rootPath,ka.isEmpty(yr))throw MU;let t=re.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(GU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(BU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=P.string().empty(null).default(Va),_=P.custom(vU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw DU;let l;return u===!0?l=P.object({enabled:t,hubServer:P.object({cluster:P.object({name:P.required().empty(null),network:P.object({port:ls,routes:$a}).required()}).required(),leafNodes:P.object({network:P.object({port:ls}).required()}).required(),network:P.object({port:ls}).required()}).required(),leafServer:P.object({network:P.object({port:ls,routes:$a}).required(),streams:P.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:P.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:re.optional(),tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required(),verify:re.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:re.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}),nodeEnv:r,root:n,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:P.object({enabled:t}).required(),logging:P.object({file:re.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:re.optional(),compress:re.optional(),interval:_r.custom(qU).optional().empty(null),maxSize:_r.custom(HU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:re.required(),auditLog:re.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:re.required(),network:P.object({cors:re.required(),corsAccessList:Cu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}).required(),nodeEnv:r,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:P.object({threads:s}).required(),storage:P.object({writeAsync:re.required(),overlappingSync:re.optional(),caching:re.optional(),compression:re.optional(),noReadAhead:re.optional(),path:_,prefetchWrites:re.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(PU,"configValidator");function zf(e){return gU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(zf,"doesPathExist");function BU(e,t){if(e===null)return;let r=zf(e);return r?t.message(r):e}a(BU,"validatePemFile");function vU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=zf(e);if(r)return t.message(r)}a(vU,"validatePath");function HU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(CU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(yU):e}a(HU,"validateRotationMaxSize");function qU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(LU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(UU):e}a(qU,"validateRotationInterval");function GU(e,t){let r=t.state.path.join("."),s=NU.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Xf();return i=Math.round(Math.min(i,Xf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),OU.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(GU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(yr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Wn.join(yr,wU);case"logging.root":return Wn.join(yr,Zf);case"clustering.leafServer.streams.path":return Wn.join(yr,"clustering","leaf");case"storage.path":return Wn.join(yr,IU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Wn.join(yr,Zf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function FU(e){let t=P.object({routes:$a});return bU.validateBySchema({routes:e},t)}a(FU,"routesValidator")});var lr=f((u3,_S)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:xU,routesValidator:eS}=Lu(),Rt=require("fs-extra"),VU=require("yaml"),$t=require("path"),kU=require("is-number"),rS=require("properties-reader"),$U=require("lodash"),{handleHDBError:YU}=L(),{HTTP_STATUS_CODES:KU,HDB_ERROR_MSGS:Ya}=it(),WU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Qn,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:ur}=At,QU="Unable to get config value because config is uninitialized",JU="Config successfully initialized",XU="Error backing up config file",ZU="Empty parameter sent to getConfigValue",sS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),zU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",tS={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"},Ka,Ne;_S.exports={createConfigFile:jU,getDefaultConfig:eM,getConfigValue:iS,initConfig:aS,flattenConfig:Es,updateConfigValue:oS,updateConfigObject:rM,getConfiguration:iM,setConfiguration:aM,readConfigFile:Du,getClusteringRoutes:oM,initOldConfig:cS,getConfigFromFile:cM};function jU(e){let t=Js(sS);Ka=Es(t.toJSON());let r;for(let o in e){let c=ur[o.toLowerCase()];if(c===Ur.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=yu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&nS(t,r),Mu(t);let s=t.toJSON();Ne=Es(s);let n=t.getIn(["rootPath"]),i=$t.join(n,At.HDB_CONFIG_FILE);Rt.createFileSync(i),Rt.writeFileSync(i,String(t)),Te.trace(`Config file written to ${i}`)}a(jU,"createConfigFile");function nS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ot.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Qn.TABLES))for(let i in s[n][Qn.TABLES])for(let o in s[n][Qn.TABLES][i]){let c=s[n][Qn.TABLES][i][o],_=[Ur.SCHEMAS,n,Qn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Ur.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Te.error("Error parsing schemas CLI/env config arguments",s)}}a(nS,"setSchemasConfig");function eM(e){if(Ka===void 0){let r=Js(sS);Ka=Es(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(eM,"getDefaultConfig");function iS(e){if(ot.isEmpty(e)){Te.error(ZU);return}if(Ne===void 0){Te.trace(QU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(iS,"getConfigValue");function Uu(e){let t=WU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):rS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Uu,"getConfigFilePath");function aS(e=!1){if(Ne===void 0||e){let t=ot.getPropsFilePath();try{Rt.accessSync(t,Rt.constants.F_OK|Rt.constants.R_OK)}catch(i){throw Te.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Uu(t),s;if(r.includes("config/settings.js"))try{cS(r);return}catch(i){if(i.code!==At.NODE_ERROR_CODES.ENOENT)throw i}try{s=Js(r)}catch(i){if(i.code===At.NODE_ERROR_CODES.ENOENT){Te.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 Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}tM(s,r),Mu(s);let n=s.toJSON();if(Ne=Es(n),Ne.logging_rotation_rotate)for(let i in tS)Ne[i]&&Te.error(`Config ${tS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace(JU)}}a(aS,"initConfig");function tM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(tM,"checkForUpdatedConfig");function Mu(e){let t=e.toJSON(),r=xU(t);if(r.error)throw Ya.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(Mu,"validateConfig");function rM(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(rM,"updateConfigObject");function oS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&aS();let i=iS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Ur.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Ur.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&nS(c,_),Mu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&sM(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=Es(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oS,"updateConfigValue");function sM(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(XU),Te.error(r)}}a(sM,"backupConfigFile");var nM=["schemas"];function Es(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!nM.includes(r)){let s=Es(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(Es,"flattenConfig");function yu(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(kU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function iM(){let e=ot.getPropsFilePath(),t=Uu(e);return Js(t).toJSON()}a(iM,"getConfiguration");async function aM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oS(void 0,void 0,n,!0),zU}catch(i){throw typeof i=="string"||i instanceof String?YU(i,i,KU.BAD_REQUEST,void 0,void 0,!0):i}}a(aM,"setConfiguration");function Du(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Uu(e);return Js(t).toJSON()}a(Du,"readConfigFile");function Js(e){return VU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function oM(){let e=Du(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=eS(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=eS(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(oM,"getClusteringRoutes");function cS(e){let t=rS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Ur.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(cS,"initOldConfig");function cM(e){let t=Du();return $U.get(t,e.replaceAll("_","."))}a(cM,"getConfigFromFile")});var B=f((E3,lS)=>{"use strict";var Pu=require("fs-extra"),Yt=require("path"),_M=require("os"),uM=require("properties-reader"),Jn=I(),Xs=b(),y=m(),Wa=lr(),lM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",uS=!1,EM={[y.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};lS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:dM,setHdbBasePath:hM,get:fM,initSync:TM,setProperty:k,initTestEnvironment:mM};function dM(){return Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(dM,"getHdbBasePath");function hM(e){Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hM,"setHdbBasePath");function fM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(fM,"get");function k(e,t){EM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function SM(){let e;try{e=Xs.getPropsFilePath(),Pu.accessSync(e,Pu.constants.F_OK|Pu.constants.R_OK),uS=!0;let t=uM(e);return Er[y.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(y.HDB_SETTINGS_NAMES.INSTALL_USER),Er[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(SM,"doesPropFileExist");function TM(e=!1){try{(uS||SM())&&(Wa.initConfig(e),Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jn.error(lM),Jn.error(t),console.error(t),process.exit(1)}}a(TM,"initSync");function mM(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(y.HDB_SETTINGS_NAMES.INSTALL_USER,_M.userInfo().username),k(y.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(y.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(y.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(y.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(y.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(y.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(y.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(y.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(y.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(y.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(y.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Jn.fatal(r),Jn.error(t)}}a(mM,"initTestEnvironment")});var hS=f((h3,dS)=>{"use strict";var Bu=B(),ES=m();Bu.initSync();var RM=Bu.get(ES.CONFIG_PARAMS.STORAGE_COMPRESSION),AM=Bu.get(ES.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=RM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=AM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");dS.exports=Ja});var TS=f((S3,SS)=>{"use strict";var Zs=B(),Xn=m();Zs.initSync();var pM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",fS=Zs.get(Xn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),gM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=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=pM,fS!==void 0&&(this.overlappingSync=fS),this.noReadAhead=gM}};a(Xa,"OpenEnvironmentObject");SS.exports=Xa});var X=f((m3,OS)=>{"use strict";var vu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=us(),mS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Kf(),Hu=hS(),RS=TS(),Mr=Ue(),Pt=Mr.INTERNAL_DBIS_NAME,AS=Mr.DBI_DEFINITION_NAME,NM="data.mdb",OM="lock.mdb",Zn=".mdb",IM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(t,r),this.key_type=this.dbi[Mr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new vu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function qu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(qu,"pathEnvNameValidation");async function Gu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Zn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,NM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(Gu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function bM(e,t,r=!1,s=!1){qu(e,t),t=t.toString();try{return await Gu(e,t,s),Fu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new RS(s?i:i+Zn,!1),c=vu.open(o);c.dbis=Object.create(null);let _=new Hu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=xu(e,t,r);return c[Mr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(bM,"createEnvironment");async function wM(e,t,r,s=!0){let n=await Fu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(wM,"copyEnvironment");async function Fu(e,t,r=!1){qu(e,t),t=t.toString();let s=xu(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 Gu(e,t),i=Dt.join(e,t+Zn),o=n!=i,c=new RS(n,o),_=vu.open(c);_.dbis=Object.create(null);let u=gS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Mr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Fu,"openEnvironment");async function CM(e,t,r=!1){qu(e,t),t=t.toString();let s=Dt.join(e,t+Zn),n=await Gu(e,t);if(global.lmdb_map!==void 0){let i=xu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+IM:Dt.join(Dt.dirname(n),OM))}a(CM,"deleteEnvironment");async function pS(e){za.validateEnv(e);let t=e[Mr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pS,"closeEnvironment");function xu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(xu,"getCachedEnvironmentName");function LM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{mS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(LM,"listDBIDefinitions");function gS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(gS,"listDBIs");function yM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yM,"getDBIDefinition");function NS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new Hu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[AS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(NS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=yM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new Hu(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Oe.DBI_DOES_NOT_EXIST):n}return s[AS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function UM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Mr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(UM,"statDBI");async function MM(e,t){try{let r=Dt.join(e,t+Zn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(MM,"environmentDataSize");function DM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(DM,"dropDBI");function PM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)NS(e,n,n!==t,n===t);else throw i}}}a(PM,"initializeDBIs");OS.exports={openDBI:gt,openEnvironment:Fu,createEnvironment:bM,listDBIs:gS,listDBIDefinitions:LM,createDBI:NS,dropDBI:DM,statDBI:UM,deleteEnvironment:CM,initializeDBIs:PM,TransactionCursor:Za,environmentDataSize:MM,copyEnvironment:wM,closeEnvironment:pS}});var bS=f((A3,IS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");IS.exports=to});var CS=f((g3,wS)=>{"use strict";var ro=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(ro,"UpdateRecordsResponseObject");wS.exports=ro});var yS=f((O3,LS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");LS.exports=so});var zs=f((L3,DS)=>{"use strict";var BM=X(),vM=bS(),HM=CS(),qM=yS(),Kt=us(),zn=it().LMDB_ERRORS_ENUM,GM=Ue(),dr=m(),FM=b(),xM=require("uuid"),b3=require("lmdb"),{handleHDBError:VM,hdb_errors:kM}=L(),{OVERFLOW_MARKER:w3,MAX_SEARCH_KEY_LENGTH:C3}=GM,US=B();US.initSync();var no=US.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Vu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ds=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $M(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new vM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];MS(u,!0,n);let l=YM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return $u(o,c,s,i,n)}a($M,"insertRecords");function YM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[ds])})}a(YM,"insertRecord");function KM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(KM,"removeSkippedRecords");function MS(e,t,r){let s=r>0;(s||!Number.isInteger(e[ds]))&&(e[ds]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Vu]))&&(e[Vu]=r||Kt.getNextMonotonicTime()):delete e[Vu]}a(MS,"setTimestamps");function ku(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BM.initializeDBIs(e,t,r)}a(ku,"initializeTransaction");async function WM(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new HM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return $u(c,_,s,i,n,o)}a(WM,"updateRecords");async function QM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Ku(e,t,r,s)}catch(_){throw VM(_,_.message,kM.HTTP_STATUS_CODES.BAD_REQUEST)}ku(e,t,r);let i=new qM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;FM.isEmpty(u[t])?(l=xM.v4(),u[t]=l):l=u[t];let E=Yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return $u(o,c,s,i,n)}a(QM,"upsertRecords");async function $u(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),KM(r,i),s}a($u,"finalizeWrite");function Yu(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(MS(r,!l,o),Number.isInteger(r[ds])&&u[ds]>r[ds])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[ds])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:Yu(e,t,r,s,n,i,o))}a(Yu,"updateUpsertRecord");function JM(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(JM,"validateBasic");function Ku(e,t,r,s){if(JM(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Ku,"validateWrite");function io(){}a(io,"noop");DS.exports={insertRecords:$M,updateRecords:WM,upsertRecords:QM}});var j=f((U3,GS)=>{"use strict";var si=m(),XM=b(),Ye=B(),ni=require("path"),ZM=require("minimist"),PS=require("fs-extra"),BS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Dr,SCHEMAS_PARAM_CONFIG:jn,SYSTEM_SCHEMA_NAME:ao}=si,ei,ti,ri;function vS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=Ye.get(Dr.STORAGE_PATH)||ni.join(Ye.getHdbBasePath(),si.SCHEMA_DIR_NAME),ei}a(vS,"getBaseSchemaPath");function HS(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=qS(ao),ti}a(HS,"getSystemSchemaPath");function zM(){if(ri!==void 0)return ri;if(Ye.getHdbBasePath()!==void 0)return ri=Ye.get(si.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ni.join(Ye.getHdbBasePath(),si.TRANSACTIONS_DIR_NAME),ri}a(zM,"getTransactionAuditStoreBasePath");function jM(e,t){let r=Ye.get(Dr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ni.join(zM(),e.toString())}a(jM,"getTransactionAuditStorePath");function qS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(si.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ni.join(vS(),e)}a(qS,"getSchemaPath");function eD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ZM(process.argv));let s=r[Dr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!XM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Dr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[jn.PATH];if(u)return BS.set(_,[ao,jn.TABLES,t,jn.PATH],u),Ye.setProperty(Dr.SCHEMAS,_),u;let l=c?.[jn.PATH];if(l)return BS.set(_,[ao,jn.PATH],l),Ye.setProperty(Dr.SCHEMAS,_),l}}let n=r[Dr.STORAGE_PATH.toUpperCase()];if(n){if(!PS.pathExistsSync(n))throw new Error(n+" does not exist");let i=ni.join(n,e);return PS.mkdirsSync(i),Ye.setProperty(Dr.STORAGE_PATH,n),i}return HS()}a(eD,"initSystemSchemaPaths");function tD(){ei=void 0,ti=void 0,ri=void 0}a(tD,"resetPaths");GS.exports={getBaseSchemaPath:vS,getSystemSchemaPath:HS,getTransactionAuditStorePath:jM,getSchemaPath:qS,initSystemSchemaPaths:eD,resetPaths:tD}});var Wt=f((D3,VS)=>{"use strict";var xS=b(),FS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wu=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rD=Wu.alternatives(Wu.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Wu.number()).required();function sD(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sD,"checkValidTable");function nD(e,t){return xS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(nD,"validateSchemaExists");function iD(e,t){let r=t.state.ancestors[0].schema;return xS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(iD,"validateTableExists");function aD(e,t){return e.toLowerCase()===FS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${FS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aD,"validateSchemaName");VS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:rD,validateSchemaExists:nD,validateTableExists:iD,validateSchemaName:aD,checkValidTable:sD}});var _o=f((B3,kS)=>{var{common_validators:Pr}=Wt(),ii=te(),Bt="is required",Z={schema:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},table:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},hash_attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length}};function ai(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(ai,"makeAttributesStrings");function oD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(oD,"schema_object");function cD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(cD,"table_object");function _D(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ii.validateObject(e,Z)}a(_D,"create_table_object");function uD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(uD,"attribute_object");function lD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(lD,"describe_table");function ED(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(ED,"validateTableResidence");kS.exports={schema_object:oD,create_table_object:_D,table_object:cD,attribute_object:uD,describe_table:lD,validateTableResidence:ED}});var YS=f((H3,$S)=>{"use strict";var dD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||dD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");$S.exports=uo});var Eo=f((G3,KS)=>{"use strict";var hD=YS(),lo=class extends hD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");KS.exports=lo});var QS=f((x3,WS)=>{"use strict";WS.exports=SD;var fD="inserted";function SD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===fD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(SD,"returnObject")});var ho=f((k3,jS)=>{"use strict";var TD=m(),Qu=X(),mD=zs(),{getSystemSchemaPath:RD,getSchemaPath:AD}=j(),pD=cs(),gD=_o(),ND=Eo(),OD=QS(),{handleHDBError:JS,hdb_errors:ZS}=L(),XS=b(),{HTTP_STATUS_CODES:ID}=ZS,Ju=pD.hdb_attribute,zS=[];for(let e=0;e<Ju.attributes.length;e++)zS.push(Ju.attributes[e].attribute);var bD="inserted";jS.exports=wD;async function wD(e){let t=gD.attribute_object(e);if(t)throw JS(new Error,t.message,ZS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&XS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw JS(new Error,r,ID.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=XS.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 ND(e.schema,e.table,e.attribute,e.id);try{let i=await Qu.openEnvironment(AD(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}`);Qu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Qu.openEnvironment(RD(),TD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await mD.insertRecords(o,Ju.hash_attribute,zS,[n]);return OD(bD,c,{records:[n]},_)}catch(i){throw i}}a(wD,"lmdbCreateAttribute")});var Zu=f((Y3,tT)=>{var{hdb_schema_table:eT}=Wt(),CD=te(),Xu=require("joi"),LD={undefined:"undefined",null:"null"},yD=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||LD[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"),UD=Xu.object({schema:eT,table:eT,records:Xu.array().items(Xu.object().custom(yD)).required()});tT.exports=function(e){return CD.validateBySchema(e,UD)}});var fo=f((Q3,sT)=>{"use strict";var hr=b(),rT=I(),W3=Zu();sT.exports=MD;function MD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.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&&hr.isEmptyOrZeroLength(o[r]))throw rT.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(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw rT.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`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(MD,"insertUpdateValidate")});var oi=f((X3,nT)=>{"use strict";var DD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=DD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");nT.exports=So});var mo=f((j3,iT)=>{"use strict";var z3=oi(),To=m(),ju=b(),zu=I(),PD=require("uuid"),{handleHDBError:ci,hdb_errors:BD}=L(),{HDB_ERROR_MSGS:_i,HTTP_STATUS_CODES:ui}=BD;iT.exports=vD;function vD(e,t,r){for(let n=0;n<t.length;n++)HD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];qD(i,r,e.operation)}}a(vD,"processRows");function HD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ci(new Error,_i.ATTR_NAME_LENGTH_ERR(e),ui.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmptyOrZeroLength(e)||ju.isEmpty(e.trim()))throw ci(new Error,_i.ATTR_NAME_NULLISH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(HD,"validateAttribute");function qD(e,t,r){if(!e.hasOwnProperty(t)||ju.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=PD.v4();return}throw zu.error("Update transaction aborted due to record with no hash value:",e),ci(new Error,_i.RECORD_MISSING_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw zu.error(e),ci(new Error,_i.HASH_VAL_LENGTH_ERR,ui.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw zu.error(e),ci(new Error,_i.INVALID_FORWARD_SLASH_IN_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(qD,"validateHash")});var oT=f((tZ,aT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");aT.exports=Ro});var Ao=f((sZ,uT)=>{var GD=require("crypto"),cT=9;function FD(e){let t=VD(cT),r=_T(e+t);return t+r}a(FD,"createHash");function xD(e,t){let r=e.substr(0,cT),s=r+_T(t+r);return e===s}a(xD,"validateHash");function VD(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(VD,"generateSalt");function _T(e){return GD.createHash("md5").update(e).digest("hex")}a(_T,"md5");uT.exports={hash:FD,validate:xD}});var ET=f((iZ,lT)=>{"use strict";var Br=m(),li=class{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.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(li,"BaseLicense");var po=class extends li{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");lT.exports={BaseLicense:li,ExtendedLicense:po}});var tn=f((oZ,mT)=>{"use strict";var en=require("fs-extra"),dT=Ao(),hT=require("crypto"),kD=require("moment"),$D=require("uuid").v4,Pe=I(),tl=require("path"),YD=b(),ct=m(),KD=ET().ExtendedLicense,js="invalid license key format",WD="061183",QD="mofi25",JD="aes-256-cbc",XD=16,ZD=32,fT=B();fT.initSync();var el;mT.exports={validateLicense:ST,generateFingerPrint:jD,licenseSearch:TT,getLicense:rP};function rl(){return tl.join(fT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(rl,"getLicenseDirPath");function zD(){let e=rl();return tl.join(e,ct.LICENSE_FILE_NAME)}a(zD,"getLicenseFilePath");function sl(){let e=rl();return tl.join(e,ct.REG_KEY_FILE_NAME)}a(sl,"getFingerPrintFilePath");async function jD(){let e=sl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await eP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(jD,"generateFingerPrint");async function eP(){let e=$D(),t=dT.hash(e),r=sl();try{await en.mkdirp(rl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(eP,"writeFingerprint");function ST(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=sl(),n=!1;try{n=en.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(QD),c=o[1];c=Buffer.concat([Buffer.from(c)],XD);let _=Buffer.concat([Buffer.from(i)],ZD),u=hT.createDecipheriv(JD,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=tP(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),Pe.error(js),new Error(js)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(js),Pe.error(js),new Error(js)}else r.exp_date=l;r.exp_date<kD().valueOf()&&(r.valid_date=!1),dT.validate(o[1],`${WD}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Pe.error("Invalid licence"),r}a(ST,"validateLicense");function tP(e,t){try{let r=hT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(tP,"checkOldLicense");function TT(){let e=new KD;e.api_call=0;let t=[];try{t=en.readFileSync(zD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(YD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ST(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),el=e,e}a(TT,"licenseSearch");async function rP(){return el||await TT(),el}a(rP,"getLicense")});var fs=f((_Z,_l)=>{"use strict";var{Worker:sP,MessageChannel:nP,parentPort:fr,isMainThread:pT,threadId:iP,workerData:aP}=require("worker_threads"),{PACKAGE_ROOT:oP}=m(),{join:cP,isAbsolute:_P,extname:uP}=require("path"),{totalmem:RT}=require("os"),ol=m(),gT=B(),lP=tn(),go=I(),EP=m();gT.initSync();var dP=gT.get(ol.CONFIG_PARAMS.HTTP_THREADS)||1,hP=1024*1024,vr=[],hs=[],fP=50,NT=1e4,OT="restart",IT="request_thread_info",bT="resource_report",wT="thread_info",CT="added-port",nl;_l.exports={startWorker:il,restartWorkers:cl,shutdownWorkers:TP,workers:vr,setMonitorListener:gP,onMessageFromWorkers:mP,broadcast:RP};function il(e,t={}){let s=lP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||RT();n=Math.min(n,RT());let i=Math.min(Math.max(Math.floor(n/hP/(1+dP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of hs){let{port1:l,port2:E}=new nP;u.postMessage({type:CT,port:l},[l]),c.push(E)}uP(e)||(e+=".js");let _=new sP(_P(e)?e:cP(oP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{il(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{vr.splice(vr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<fP?(t.unexpectedRestarts=_.unexpectedRestarts+1,il(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===OT&&cl(u.workerType),u.type===IT&&AP(_),u.type===bT&&pP(_,u)}),vr.push(_),OP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(il,"startWorker");var SP=[ol.THREAD_TYPES.HTTP];async function cl(e=null,t=2,r=!0){if(pT){t<1&&(t=t*vr.length);let s=[];for(let n of vr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=SP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),NT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:OT,workerType:e})}a(cl,"restartWorkers");function TP(e){return cl(e,1/0,!1)}a(TP,"shutdownWorkers");var LT=[];function mP(e){LT.push(e)}a(mP,"onMessageFromWorkers");function RP(e){for(let t of hs)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(RP,"broadcast");function AP(e){e.postMessage({type:wT,workers:yT()})}a(AP,"sendThreadInfo");function yT(){let e=Date.now();return vr.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(yT,"getChildWorkerInfo");function pP(e,t){e.resources=t,e.resources.updated=Date.now()}a(pP,"recordResourceReport");var al;function gP(e){al=e}a(gP,"setMonitorListener");var NP=1e3,AT=!1;function OP(){AT||(AT=!0,setInterval(()=>{for(let e of vr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}al&&al()},NP).unref())}a(OP,"startMonitoring");var IP=1e3;if(fr){No(fr);for(let e of aP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:bT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},IP).unref(),nl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:IT});function r(s){s.type===wT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else nl=yT;_l.exports.getThreadInfo=nl;function No(e,t){hs.push(e),e.on("message",r=>{if(r.type===CT)No(r.port);else for(let s of LT)s(r)}).on("close",()=>{hs.splice(hs.indexOf(e),1)}).on("exit",()=>{hs.splice(hs.indexOf(e),1)}),t||e.unref()}a(No,"addPort");pT||fr.on("message",async e=>{let{type:t}=e;t===EP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",iP),process.exit(0)},NT).unref())})});var DT=f((lZ,MT)=>{"use strict";var ul=X(),bP=I(),UT=it().LMDB_ERRORS_ENUM;MT.exports=wP;async function wP(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 ul.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==UT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ul.closeEnvironment(global.lmdb_map[s]),await ul.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==UT.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){bP.error(t)}}a(wP,"cleanLMDBMap")});var Ot=f((dZ,vT)=>{"use strict";var Io=Zu(),Nt=b(),CP=require("util"),bo=Qt(),LP=qr(),ll=I(),{handleHDBError:Hr,hdb_errors:yP}=L(),{HTTP_STATUS_CODES:Ss}=yP,UP=CP.promisify(LP.getTableSchema),MP="updated",PT="inserted",BT="upserted";vT.exports={insert:PP,update:BP,upsert:vP,validation:DP,flush:HP};async function DP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await UP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ll.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ll.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(DP,"validation");async function PP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(PT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(PP,"insertData");async function BP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(MP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(BP,"updateData");async function vP(e){if(e.operation!=="upsert")throw Hr(new Error,"invalid operation, must be upsert",Ss.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(BT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Hr(s,null,null,ll.ERR,n)}}a(vP,"upsertData");function Oo(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===PT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===BT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function HP(e){return bo.flush(e.schema,e.table)}a(HP,"flush")});var dl=f((fZ,GT)=>{var qP=te(),El=require("joi"),{hdb_schema_table:HT}=Wt(),qT={schema:HT,table:HT},GP={date:El.date().iso().required()},FP={timestamp:El.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GT.exports=function(e,t){let r=t==="timestamp"?{...qT,...FP}:{...qT,...GP},s=El.object(r);return qP.validateBySchema(e,s)}});var kT=f((SZ,VT)=>{var xP=te(),FT=require("joi"),{hdb_schema_table:xT}=Wt(),VP=FT.object({schema:xT,table:xT,hash_values:FT.array().required()});VT.exports=function(e){return xP.validateBySchema(e,VP)}});var YT=f((TZ,$T)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=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(Co,"NoSQLSeachObject");var Lo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Lo,"DeleteResponseObject");$T.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:Lo}});var ms=f((RZ,XT)=>{"use strict";var WT=dl(),kP=kT(),yo=b(),KT=require("moment"),QT=I(),{promisify:$P,callbackify:YP}=require("util"),Ts=m(),KP=qr(),hl=$P(KP.getTableSchema),fl=Qt(),{DeleteResponseObject:WP}=YT(),{handleHDBError:Gr,hdb_errors:QP}=L(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:Fr}=QP,JP="records successfully deleted",XP=YP(JT);XT.exports={delete:XP,deleteRecord:JT,deleteFilesBefore:ZP,deleteAuditLogsBefore:zP};async function ZP(e){let t=WT(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!KT(e.date,KT.ISO_8601).isValid())throw Gr(new Error,Uo.INVALID_DATE,Fr.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,s,!0);let n=await fl.deleteRecordsBefore(e);if(await hl(e.schema,e.table),QT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(ZP,"deleteFilesBefore");async function zP(e){let t=WT(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,Uo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);let s=await fl.deleteAuditLogsBefore(e);return await hl(e.schema,e.table),QT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(zP,"deleteAuditLogsBefore");async function JT(e){let t=kP(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{await hl(e.schema,e.table);let s=await fl.deleteRecords(e);return yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${JP}`),s}catch(s){if(s.message===Ts.SEARCH_NOT_FOUND_MESSAGE){let n=new WP;return n.message=Ts.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(JT,"deleteRecord")});var zT=f((pZ,ZT)=>{var Sl=te(),Be={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 jP(e){return Be.password.presence=!0,Be.username.presence=!0,Be.role.presence=!0,Be.active.presence=!0,Sl.validateObject(e,Be)}a(jP,"addUserValidation");function eB(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(eB,"alterUserValidation");function tB(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(tB,"dropUserValidation");ZT.exports={addUserValidation:jP,alterUserValidation:eB,dropUserValidation:tB}});var xr=f((NZ,rm)=>{"use strict";var Ei=require("crypto"),em="aes-256-cbc",rB=32,sB=16,Tl=64,tm=32,nB=Tl+tm,jT=new Map;rm.exports={encrypt:iB,decrypt:aB,createNatsTableStreamName:oB};function iB(e){let t=Ei.randomBytes(rB),r=Ei.randomBytes(sB),s=Ei.createCipheriv(em,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(iB,"encrypt");function aB(e){let t=e.substr(0,Tl),r=e.substr(Tl,tm),s=e.substr(nB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ei.createDecipheriv(em,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(aB,"decrypt");function oB(e,t){let r=`${e}.${t}`,s=jT.get(r);return s||(s=Ei.createHash("md5").update(`${e}.${t}`).digest("hex"),jT.set(r,s)),s}a(oB,"createNatsTableStreamName")});var oe=f((bZ,nm)=>{"use strict";var{platform:IZ}=require("os"),cB="nats-server.zip",ml="nats-server",_B=process.platform==="win32"?`${ml}.exe`:ml,Rl="HDB",uB=/^[^\s.,*>]+$/,sm="__request__",lB=a(e=>`${e}.${sm}`,"REQUEST_SUBJECT"),EB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},dB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},hB={HUB:"hub.pid",LEAF:"leaf.pid"},fB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},SB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Rl,deliver_subject:"__HDB__.WORKQUEUE"},TB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Rl,deliver_subject:"HDB.SCHEMAQUEUE"},mB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Rl,deliver_subject:"HDB.USERQUEUE"},RB={SUCCESS:"success",ERROR:"error"},AB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pB={TXN:"txn",MSGID:"msgid"},rn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},gB={[rn.ERR]:1,[rn.WRN]:2,[rn.INF]:3,[rn.DBG]:4,[rn.TRC]:5},NB={debug:"-D",trace:"-DVV"};nm.exports={NATS_SERVER_ZIP:cB,NATS_SERVER_NAME:ml,NATS_BINARY_NAME:_B,PID_FILES:hB,NATS_CONFIG_FILES:dB,SERVER_SUFFIX:fB,WORK_QUEUE_CONSUMER_NAMES:SB,SCHEMA_QUEUE_CONSUMER_NAMES:TB,USER_QUEUE_CONSUMER_NAMES:mB,NATS_TERM_CONSTRAINTS_RX:uB,REQUEST_SUFFIX:sm,UPDATE_REMOTE_RESPONSE_STATUSES:RB,CLUSTER_STATUS_STATUSES:AB,REQUEST_SUBJECT:lB,SUBJECT_PREFIXES:pB,MSG_HEADERS:EB,LOG_LEVELS:rn,LOG_LEVEL_FLAGS:NB,LOG_LEVEL_HIERARCHY:gB}});var Vr=f((LZ,Rm)=>{"use strict";var _m="username is required",um="nothing to update, must supply active, role or password to update",lm="password cannot be an empty string",Em="If role is specified, it cannot be empty.",dm="active must be true or false";Rm.exports={addUser:UB,alterUser:MB,dropUser:PB,userInfo:BB,listUsers:Do,listUsersExternal:vB,setUsersToGlobal:di,findAndValidateUser:GB,getClusterUser:FB,USERNAME_REQUIRED:_m,ALTERUSER_NOTHING_TO_UPDATE:um,EMPTY_PASSWORD:lm,EMPTY_ROLE:Em,ACTIVE_BOOLEAN:dm};var hm=Ot(),OB=ms(),pl=Ao(),fm=zT(),Sm=It(),gl=nn(),_t=b(),Tm=require("validate.js"),M=I(),{promisify:Nl}=require("util"),Ol=xr(),im=m(),am=oe(),IB=lr(),CZ=B(),bB=tn(),wB=cs(),{handleHDBError:Jt,hdb_errors:CB}=L(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Al,HDB_ERROR_MSGS:sn}=CB,{UserEventMsg:Il}=kr(),om=require("lodash"),mm={username:!0,active:!0,role:!0,password:!0},cm=new Map,Mo=Nl(Sm.searchByValue),LB=Nl(Sm.searchByHash),yB=Nl(OB.delete);async function UB(e){let t=Tm.cleanAttributes(e,mm),r=fm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,sn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,sn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await hm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await di()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,sn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],gl.signalUserChange(new Il(process.pid)),`${c.username} successfully added`}a(UB,"addUser");async function MB(e){let t=Tm.cleanAttributes(e,mm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(_m);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(um);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(lm);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(dm);let r=DB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password)),t.role==="")throw new Error(Em);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 Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=sn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=sn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.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 hm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await di()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return gl.signalUserChange(new Il(process.pid)),n}a(MB,"alterUser");function DB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(DB,"isClusterUser");async function PB(e){try{let t=fm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,sn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await di()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return gl.signalUserChange(new Il(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(PB,"dropUser");async function BB(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 LB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(BB,"userInfo");async function vB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(vB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=om.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 Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=om.cloneDeep(o),o.role=r[o.role],HB(o.role),i.set(o.username,o);return(await bB.getLicense()).enterprise?i:qB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function HB(e){try{if(!e){M.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(wB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(HB,"appendSystemTablesToRole");function qB(e){try{if(M.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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(qB,"nonEnterpriseFilter");async function di(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(di,"setUsersToGlobal");async function GB(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Al.USER_INACTIVE,Xt.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(cm.get(t)===s.password)return n;if(pl.validate(s.password,t))cm.set(t,s.password);else throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(GB,"findAndValidateUser");async function FB(){let e=await Do(),t=IB.getConfigFromFile(im.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===im.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ol.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+am.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+am.SERVER_SUFFIX.ADMIN,r}a(FB,"getClusterUser")});var Po=f((UZ,Nm)=>{"use strict";var Rs=I(),ut=m(),xB=DT(),Am=qr(),VB=As(),kB=Vr(),{validateEvent:gm}=kr(),hi=Qt(),$B=require("process"),YB={[ut.ITC_EVENT_TYPES.SCHEMA]:KB,[ut.ITC_EVENT_TYPES.USER]:QB};async function KB(e){let t=gm(e);if(t){Rs.error(t);return}Rs.trace("ITC schemaHandler received schema event:",e),await xB(e.message),await WB(e.message)}a(KB,"schemaHandler");async function WB(e){try{if(hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.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 VB.describeTable({schema:e.schema,table:e.table});break;default:Am.setSchemaDataToGlobal(pm);break}else Am.setSchemaDataToGlobal(pm)}catch(t){Rs.error(t)}}a(WB,"syncSchemaMetadata");function pm(e){e&&Rs.error(e)}a(pm,"handleErrorCallback");async function QB(e){try{hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=gm(e);if(t){Rs.error(t);return}Rs.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${$B.pid} received user event:`,e),await kB.setUsersToGlobal()}catch(t){Rs.error(t)}}a(QB,"userHandler");Nm.exports=YB});var kr=f((vZ,Im)=>{"use strict";var DZ=I(),bl=b(),JB=m(),{ITC_ERRORS:fi}=it(),{parentPort:PZ,threadId:XB,isMainThread:ZB,workerData:BZ}=require("worker_threads"),{onMessageFromWorkers:zB,broadcast:jB}=fs();Im.exports={sendItcEvent:ev,validateEvent:Om,SchemaEventMsg:tv,UserEventMsg:rv};var Bo;zB(e=>{Bo=Bo||Po(),Om(e),Bo[e.type]&&Bo[e.type](e)});function ev(e){!ZB&&e.message&&(e.message.originator=XB),jB(e)}a(ev,"sendItcEvent");function Om(e){if(typeof e!="object")return fi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bl.isEmpty(e.type))return fi.MISSING_TYPE;if(!e.hasOwnProperty("message")||bl.isEmpty(e.message))return fi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bl.isEmpty(e.message.originator))return fi.MISSING_ORIGIN;if(JB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return fi.INVALID_EVENT(e.type)}a(Om,"validateEvent");function tv(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(tv,"SchemaEventMsg");function rv(e){this.originator=e}a(rv,"UserEventMsg")});var nn=f((GZ,Lm)=>{"use strict";var bm=m(),qZ=b(),vo=I(),wm=oT(),an,{sendItcEvent:Cm}=kr();function sv(e){try{vo.trace("signalSchemaChange called with message:",e),an=an||Po();let t=new wm(bm.ITC_EVENT_TYPES.SCHEMA,e);an.schema(t),Cm(t)}catch(t){vo.error(t)}}a(sv,"signalSchemaChange");function nv(e){try{vo.trace("signalUserChange called with message:",e),an=an||Po();let t=new wm(bm.ITC_EVENT_TYPES.USER,e);an.user(t),Cm(t)}catch(t){vo.error(t)}}a(nv,"signalUserChange");Lm.exports={signalSchemaChange:sv,signalUserChange:nv}});var Ho=f((xZ,Um)=>{"use strict";var ym=b(),iv=m(),av=I(),ov=ho(),cv=Eo(),_v=nn(),{SchemaEventMsg:uv}=kr(),lv="already exists in";Um.exports=Ev;async function Ev(e,t,r){if(ym.isEmptyOrZeroLength(r))return r;let s=[];ym.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 dv(e,t.schema,t.name,i)})),n}a(Ev,"lmdbCheckForNewAttributes");async function dv(e,t,r,s){let n=new cv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await hv(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(lv))av.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(dv,"createNewAttribute");async function hv(e){let t;return t=await ov(e),_v.signalSchemaChange(new uv(process.pid,iv.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(hv,"createAttribute")});var on=f((kZ,Mm)=>{"use strict";var qo=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(qo,"LMDBTransactionObject");Mm.exports=qo});var Pm=f((YZ,Dm)=>{"use strict";var fv=on(),Sv=m().OPERATIONS_ENUM,Go=class extends fv{constructor(t,r,s,n,i=void 0){super(Sv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Dm.exports=Go});var vm=f((WZ,Bm)=>{"use strict";var Tv=on(),mv=m().OPERATIONS_ENUM,Fo=class extends Tv{constructor(t,r,s,n,i,o=void 0){super(mv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Bm.exports=Fo});var qm=f((JZ,Hm)=>{"use strict";var Rv=on(),Av=m().OPERATIONS_ENUM,xo=class extends Rv{constructor(t,r,s,n,i,o=void 0){super(Av.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");Hm.exports=xo});var Fm=f((ZZ,Gm)=>{"use strict";var pv=on(),gv=m().OPERATIONS_ENUM,Vo=class extends pv{constructor(t,r,s,n,i=void 0){super(gv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");Gm.exports=Vo});var Si=f((ez,$m)=>{"use strict";var jZ=require("path"),xm=X(),Nv=Pm(),Ov=vm(),Iv=qm(),bv=Fm(),cn=Ue(),Vm=b(),{CONFIG_PARAMS:wv}=m(),km=B();km.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Cv}=j();$m.exports=Lv;async function Lv(e,t){if(km.get(wv.LOGGING_AUDITLOG)===!1)return;let r=Cv(e.schema,e.table),s=await xm.openEnvironment(r,e.table,!0),n=yv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){xm.initializeDBIs(s,cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,cn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Vm.isEmpty(n.user_name)||s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(Lv,"writeTransaction");function yv(e,t){let r=Vm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new Nv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Ov(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Iv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new bv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yv,"createTransactionObject")});var wl=f((sz,Ym)=>{"use strict";var Uv=fo(),rz=oi(),Ti=m(),Mv=mo(),Dv=zs().insertRecords,Pv=X(),Bv=I(),vv=Ho(),{getSchemaPath:Hv}=j(),qv=Si();Ym.exports=Gv;async function Gv(e){try{let{schema_table:t,attributes:r}=Uv(e);Mv(e,r,t.hash_attribute),e.schema!==Ti.SYSTEM_SCHEMA_NAME&&(r.includes(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vv(e.hdb_auth_header,t,r),n=Hv(e.schema,e.table),i=await Pv.openEnvironment(n,e.table),o=await Dv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qv(e,o)}catch(c){Bv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Gv,"lmdbCreateRecords")});var Qm=f((iz,Wm)=>{"use strict";var Km=m(),Fv=wl(),xv=oi(),Vv=require("fs-extra"),{getSchemaPath:kv}=j();Wm.exports=$v;async function $v(e){let t=[{name:e.schema,createddate:Date.now()}],r=new xv(Km.SYSTEM_SCHEMA_NAME,Km.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Fv(r),await Vv.mkdirp(kv(e.schema))}a($v,"lmdbCreateSchema")});var Xm=f((oz,Jm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Jm.exports=$o});var yl=f((Ez,jm)=>{"use strict";var Zm=X(),Cl=us(),Ll=it().LMDB_ERRORS_ENUM,Yv=Ue(),zm=I(),_z=b(),Kv=require("lmdb"),Wv=Xm(),Qv=m(),{OVERFLOW_MARKER:uz,MAX_SEARCH_KEY_LENGTH:lz}=Yv,Jv=Qv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Xv(e,t,r,s){if(Cl.validateEnv(e),t===void 0)throw new Error(Ll.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ll.IDS_REQUIRED):new Error(Ll.IDS_MUST_BE_ITERABLE);try{let n=Zm.listDBIs(e);Zm.initializeDBIs(e,t,n);let i=new Wv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[Jv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,Kv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=Cl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=Cl.getNextMonotonicTime(),i}catch(n){throw n}}a(Xv,"deleteRecords");jm.exports={deleteRecords:Xv}});var mi=f((hz,tR)=>{"use strict";var _n=b(),Zv=yl(),zv=X(),{getSchemaPath:jv}=j(),eH=Si(),tH=I();tR.exports=rH;async function rH(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(_n.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_n.isEmptyOrZeroLength(e.hash_values)&&!_n.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];_n.isEmpty(_)||e.hash_values.push(_)}}if(_n.isEmptyOrZeroLength(e.hash_values))return eR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_n.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=jv(e.schema,e.table),i=await zv.openEnvironment(n,e.table),o=await Zv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await eH(e,o)}catch(c){tH.error(`unable to write transaction due to ${c.message}`)}return eR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(rH,"lmdbDeleteRecords");function eR(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(eR,"createDeleteResponse")});var Ml=f((Tz,rR)=>{"use strict";var sH=m(),Sz=us();function Ul(e,t){let r=Object.create(null);if(t.length===1&&sH.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(Ul,"parseRow");function nH(e,t,r,s){let n=Ul(r,e);s.push(n)}a(nH,"searchAll");function iH(e,t,r,s){let n=Ul(r,e);s[t]=n}a(iH,"searchAllToMap");function aH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(aH,"iterateDBI");function ps(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(ps,"pushResults");function oH(e,t,r,s,n,i){t.toString().endsWith(e)&&ps(t,r,s,n,i)}a(oH,"endsWith");function cH(e,t,r,s,n,i){t.toString().includes(e)&&ps(t,r,s,n,i)}a(cH,"contains");function _H(e,t,r,s,n,i){t>e&&ps(t,r,s,n,i)}a(_H,"greaterThanCompare");function uH(e,t,r,s,n,i){t>=e&&ps(t,r,s,n,i)}a(uH,"greaterThanEqualCompare");function lH(e,t,r,s,n,i){t<e&&ps(t,r,s,n,i)}a(lH,"lessThanCompare");function EH(e,t,r,s,n,i){t<=e&&ps(t,r,s,n,i)}a(EH,"lessThanEqualCompare");rR.exports={parseRow:Ul,searchAll:nH,searchAllToMap:iH,iterateDBI:aH,endsWith:oH,contains:cH,greaterThanCompare:_H,greaterThanEqualCompare:uH,lessThanCompare:lH,lessThanEqualCompare:EH,pushResults:ps}});var Ns=f((gz,_R)=>{"use strict";var $r=X(),Rz=I(),lt=us(),Yo=Ue(),ce=it().LMDB_ERRORS_ENUM,Az=b(),dH=m(),Ko=Ml(),{parseRow:hH}=Ko,pz=require("lmdb"),{OVERFLOW_MARKER:sR,MAX_SEARCH_KEY_LENGTH:fH}=Yo;function nR(e,t,r,s=!1,n=void 0,i=void 0){return gs(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(nR,"iterateFullIndex");function Ri(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return gs(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(Ri,"iterateRangeBetween");function gs(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(gs,"setupTransaction");function iR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(sR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(iR,"getOverflowCheck");function SH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return gs(e,t,t,(o,c,_)=>(Wo(r),r=Ai(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>hH(u.value,r))))}a(SH,"searchAll");function TH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ai(e.database||e,r);let o=new Map;for(let{key:c,value:_}of nR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(TH,"searchAllToMap");function mH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=nR(e,void 0,t,r,s,n),c=o.transaction,_=iR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(mH,"iterateDBI");function RH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(RH,"countAll");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),gs(e,t,r,(c,_,u,l)=>(s=lt.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(AH,"equals");function pH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(pH,"count");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),gs(e,null,r,(c,_)=>{s=lt.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(gH,"startsWith");function NH(e,t,r,s,n=!1,i=void 0,o=void 0){return aR(e,t,r,s,n,i,o,!0)}a(NH,"endsWith");function aR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),gs(e,null,r,(_,u,l,E)=>{let d=iR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(sR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(aR,"contains");function OH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!0,!1)}a(OH,"greaterThan");function IH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!1,!1)}a(IH,"greaterThanEqual");function bH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!0)}a(bH,"lessThan");function wH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!1)}a(wH,"lessThanEqual");function CH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ri(e,t,r,s,n,i,o,c)}a(CH,"between");function LH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ai(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(LH,"searchByHash");function yH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(yH,"checkHashExists");function UH(e,t,r,s,n=[]){return cR(e,t,r,s,n),oR(e,t,r,s,n).map(i=>i[1])}a(UH,"batchSearchByHash");function MH(e,t,r,s,n=[]){cR(e,t,r,s,n);let i=new Map;for(let[o,c]of oR(e,t,r,s,n))i.set(o,c);return i}a(MH,"batchSearchByHashToMap");function oR(e,t,r,s,n=[]){return gs(e,t,t,(i,o,c)=>{r=Ai(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(oR,"batchHashSearch");function cR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(cR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>fH)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ai(e,t){return t.length===1&&dH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ai,"setGetWholeRowAttributes");_R.exports={searchAll:SH,searchAllToMap:TH,count:pH,countAll:RH,equals:AH,startsWith:gH,endsWith:NH,contains:aR,searchByHash:LH,setGetWholeRowAttributes:Ai,batchSearchByHash:UH,batchSearchByHashToMap:MH,checkHashExists:yH,iterateDBI:mH,greaterThan:OH,greaterThanEqual:IH,lessThan:bH,lessThanEqual:wH,between:CH}});var pi=f((Iz,dR)=>{var uR=require("lodash"),lR=te(),W=require("joi"),DH=b(),{hdb_schema_table:vt,checkValidTable:ER}=Wt(),{handleHDBError:PH,hdb_errors:BH}=L(),{HTTP_STATUS_CODES:vH}=BH,Oz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),HH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),qH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});dR.exports=function(e,t){let r=null;switch(t){case"value":r=lR.validateBySchema(e,HH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ER("schema",e.schema)),i(ER("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=lR.validateBySchema(e,qH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=DH.checkGlobalSchemaTable(e.schema,e.table);if(n)return PH(new Error,n,vH.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=uR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!uR.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Dl=f((wz,hR)=>{"use strict";var GH=X(),FH=pi(),{getSchemaPath:xH}=j();hR.exports=VH;function VH(e){let t=FH(e,"hashes");if(t)throw t;let r=xH(e.schema,e.table);return GH.openEnvironment(r,e.table)}a(VH,"initialize")});var Pl=f((Lz,fR)=>{"use strict";var kH=Ns(),$H=Dl();fR.exports=YH;async function YH(e){let t=await $H(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return kH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(YH,"lmdbGetDataByHash")});var un=f((Uz,SR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");SR.exports=Qo});var mR=f((Pz,TR)=>{"use strict";var Dz=un(),KH=Ns(),WH=Dl();TR.exports=QH;async function QH(e){let t=await WH(e),r=global.hdb_schema[e.schema][e.table];return KH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(QH,"lmdbSearchByHash")});var Ht=f((vz,RR)=>{"use strict";var Jo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");RR.exports=Jo});var Xo=f((qz,IR)=>{"use strict";var ve=Ns(),JH=X(),XH=b(),C=Ue(),Os=m(),ZH=cs(),AR=it().LMDB_ERRORS_ENUM,{compareKeys:ln}=require("ordered-binary"),{getSchemaPath:zH}=j(),Sr=Os.SEARCH_WILDCARDS;async function jH(e,t,r){let s;e.schema===Os.SYSTEM_SCHEMA_NAME?s=ZH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=OR(e,s.hash_attribute,r,t);return gR(e,n,s.hash_attribute,r)}a(jH,"prepSearch");async function gR(e,t,r,s){let n=zH(e.schema,e.table),i=await JH.openEnvironment(n,e.table),o=NR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(tq(e,r)===!1){let l=e.search_attribute;if(l===r)return s?pR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?pR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ve.batchSearchByHashToMap(c,r,e.get_attributes,u):ve.batchSearchByHash(c,r,e.get_attributes,u)}a(gR,"executeSearch");function NR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ve.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=ve.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ve.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ve.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ve.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ve.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ve.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ve.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=ve.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ve.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ve.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ve.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ve.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(NR,"searchByType");function eq(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ln(i,s[0])>=0&&ln(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ln(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ln(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ln(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ln(n[r],s)<=0;default:return Object.create(null)}}a(eq,"filterByType");function pR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(pR,"createMapFromIterable");function tq(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(tq,"checkToFetchMore");function OR(e,t,r,s){if(XH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Sr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Sr[0])<0&&n.indexOf(Sr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Sr.indexOf(i)>=0&&Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Sr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Sr[0])||n.includes(Sr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(AR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Os.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Os.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Os.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Os.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Os.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AR.UNKNOWN_SEARCH_TYPE)}}a(OR,"createSearchTypeFromSearchObject");IR.exports={executeSearch:gR,createSearchTypeFromSearchObject:OR,prepSearch:jH,searchByType:NR,filterByType:eq}});var wR=f((xz,bR)=>{"use strict";var Fz=Ht(),rq=pi(),sq=b(),nq=m(),iq=Xo();bR.exports=aq;function aq(e,t){if(!sq.isEmpty(t)&&nq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rq(e,"value");if(s)throw s;let n=!0;return iq.prepSearch(e,t,n)}a(aq,"lmdbGetDataByValue")});var En=f(($z,CR)=>{"use strict";var kz=Ht(),oq=pi(),cq=b(),_q=m(),uq=Xo();CR.exports=lq;async function lq(e,t){if(!cq.isEmpty(t)&&_q.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=oq(e,"value");if(s)throw s;return uq.prepSearch(e,t,!1)}a(lq,"lmdbSearchByValue")});var yR=f((Wz,LR)=>{"use strict";var Kz=Ue(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");LR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var BR=f((Xz,PR)=>{"use strict";var Jz=yR().SearchByConditionsObject,Eq=Ht(),dq=pi(),Bl=Ns(),ec=Ue(),DR=Xo(),hq=Ml(),fq=require("lodash"),{getSchemaPath:Sq}=j(),UR=X(),{handleHDBError:Tq,hdb_errors:mq}=L(),{HTTP_STATUS_CODES:Rq}=mq,Aq=1e8;PR.exports=pq;async function pq(e){let t=dq(e,"conditions");if(t)throw Tq(t,t.message,Rq.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=Sq(e.schema,e.table),s=await UR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)UR.openDBI(s,u.search_attribute);let i=fq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Bl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Aq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await MR(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(DR.filterByType),E=l.length,d=Bl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>hq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await MR(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Bl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(pq,"lmdbSearchByConditions");async function MR(e,t,r,s){let n=new Eq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,DR.searchByType(e,n,i,s).map(o=>o.value)}a(MR,"executeConditionSearch")});var gi=f((zz,vR)=>{"use strict";var gq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=gq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");vR.exports=tc});var vl=f((e2,$R)=>{"use strict";var FR=Ht(),xR=gi(),VR=En(),kR=mi(),Ke=m(),HR=b(),qR=X(),{getTransactionAuditStorePath:Nq,getSchemaPath:Oq}=j(),GR=I();$R.exports=Iq;async function Iq(e){try{if(HR.isEmpty(global.hdb_schema[e.schema])||HR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await bq(e),await wq(e);let t=Oq(e.schema,e.table);try{await qR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")GR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Nq(e.schema,e.table);await qR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")GR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Iq,"lmdbDropTable");async function bq(e){let t=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await VR(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 xR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await kR(n)}a(bq,"deleteAttributesFromSystem");async function wq(e){let t=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await VR(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 xR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await kR(n)}catch(i){throw i}}a(wq,"dropTableFromSystem")});var KR=f((r2,YR)=>{"use strict";var Cq=require("fs-extra"),Lq=Ht(),yq=un(),Uq=gi(),Mq=vl(),Dq=mi(),Pq=Pl(),Bq=En(),Tr=m(),{getSchemaPath:vq}=j(),{handleHDBError:Hq,hdb_errors:qq}=L(),{HDB_ERROR_MSGS:Gq,HTTP_STATUS_CODES:Fq}=qq;YR.exports=xq;async function xq(e){let t;try{t=await Vq(e.schema);let r=new Lq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Bq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Mq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new Uq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Dq(n);let i=vq(t);await Cq.remove(i)}catch(r){throw r}}a(xq,"lmdbDropSchema");async function Vq(e){let t=new yq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Pq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Hq(new Error,Gq.SCHEMA_NOT_FOUND(e),Fq.NOT_FOUND,void 0,void 0,!0);return s}a(Vq,"validateDropSchema")});var Hl=f((n2,WR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");WR.exports=rc});var JR=f((o2,QR)=>{"use strict";var kq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:$q}=j(),ql=Ue(),a2=Hl();QR.exports=Yq;async function Yq(e){let t;try{let r=$q(e.schema,e.table);await kq.mkdirp(r),t=await sc.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,ql.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(Yq,"createTransactionsAuditEnvironment")});var jR=f((_2,zR)=>{"use strict";var Gl=m(),XR=X(),Kq=zs(),{getSystemSchemaPath:Wq,getSchemaPath:Qq}=j(),Jq=cs(),Xq=ho(),Fl=Eo(),Zq=I(),zq=JR(),Vl=Jq.hdb_table,ZR=[];for(let e=0;e<Vl.attributes.length;e++)ZR.push(Vl.attributes[e].attribute);zR.exports=jq;async function jq(e,t){let r=Qq(t.schema,t.table),s=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await XR.createEnvironment(r,t.table),e!==void 0){let o=await XR.openEnvironment(Wq(),Gl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Kq.insertRecords(o,Vl.hash_attribute,ZR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xl(s),await xl(n),await xl(i)}await zq(t)}catch(o){throw o}}a(jq,"lmdbCreateTable");async function xl(e){try{await Xq(e)}catch(t){Zq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xl,"createAttribute")});var tA=f((l2,eA)=>{"use strict";var eG=fo(),tG=mo(),rG=Ho(),Ni=m(),sG=zs().updateRecords,nG=X(),{getSchemaPath:iG}=j(),aG=Si(),oG=I();eA.exports=cG;async function cG(e){try{let{schema_table:t,attributes:r}=eG(e);tG(e,r,t.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(r.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rG(e.hdb_auth_header,t,r),n=iG(e.schema,e.table),i=await nG.openEnvironment(n,e.table),o=await sG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await aG(e,o)}catch(c){oG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(cG,"lmdbUpdateRecords")});var sA=f((d2,rA)=>{"use strict";var _G=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=_G.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");rA.exports=nc});var iA=f((S2,nA)=>{"use strict";var f2=sA(),uG=fo(),lG=mo(),EG=Ho(),Oi=m(),dG=zs().upsertRecords,hG=X(),{getSchemaPath:fG}=j(),SG=Si(),TG=I(),{handleHDBError:mG,hdb_errors:RG}=L();nA.exports=AG;async function AG(e){let t;try{t=uG(e)}catch(_){throw mG(_,_.message,RG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lG(e,s,r.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(s.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await EG(e.hdb_auth_header,r,s),i=fG(e.schema,e.table),o=await hG.openEnvironment(i,e.table),c=await dG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await SG(e,c)}catch(_){TG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(AG,"lmdbUpsertRecords")});var lA=f((m2,uA)=>{"use strict";var pG=Ht(),aA=b(),oA=I(),gG=En(),cA=m(),NG=yl().deleteRecords,OG=X(),{getSchemaPath:IG}=j(),{promisify:bG}=require("util"),wG=bG(setTimeout),_A=1e4,CG=10;uA.exports=LG;async function LG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(aA.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 pG(e.schema,e.table,cA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await gG(n,cA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw oA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return aA.isEmptyOrZeroLength(s)?(oA.trace("No records found to delete"),{message:"No records found to delete"}):await yG(e,s,t)}a(LG,"lmdbDeleteRecordsBefore");async function yG(e,t,r){let s=IG(e.schema,e.table),n=await OG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=_A){let _=t.slice(o,o+_A),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await NG(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await wG(CG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(yG,"chunkDeletes")});var dA=f((A2,EA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");EA.exports=ic});var fA=f((g2,hA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");hA.exports=ac});var mA=f((I2,TA)=>{"use strict";var kl=X(),{getTransactionAuditStorePath:UG}=j(),O2=dA(),Ii=Ue(),MG=b(),SA=fA(),DG=require("util").promisify,PG=DG(setTimeout),BG=1e4,vG=100;TA.exports=HG;async function HG(e){let t=UG(e.schema,e.table),r=await kl.openEnvironment(t,e.table,!0),s=kl.listDBIs(r);kl.initializeDBIs(r,Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new SA;do n=await qG(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 PG(vG);while(n.transactions_deleted>0);return i}a(HG,"deleteAuditLogsBefore");async function qG(e,t){let r=new SA;try{let s=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];MG.isEmpty(c)||(n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>BG)break}return await n,r}catch(s){throw s}}a(qG,"deleteTransactions")});var AA=f((w2,RA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");RA.exports=oc});var gA=f((y2,pA)=>{"use strict";var GG=Ht(),FG=gi(),L2=AA(),Zt=m(),xG=b(),$l=X(),VG=cs(),kG=En(),$G=mi(),{getSchemaPath:YG}=j();pA.exports=KG;async function KG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=VG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await QG(e),n=YG(e.schema,e.table),i=await $l.openEnvironment(n,e.table);return t===!0&&await WG(e,i,r.hash_attribute),$l.dropDBI(i,e.attribute),s}a(KG,"lmdbDropAttribute");async function WG(e,t,r){let s=$l.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(WG,"removeAttributeFromAllObjects");async function QG(e){let t=new GG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await kG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(xG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new FG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return $G(i)}a(QG,"dropAttributeFromSystem")});var CA=f((D2,wA)=>{"use strict";var Yl=X(),dn=Ue(),M2=us(),Kl=m(),NA=b(),{getTransactionAuditStorePath:JG}=j(),XG=Ns(),cc=on(),ZG=I();wA.exports=zG;async function zG(e){let t=JG(e.schema,e.table),r=await Yl.openEnvironment(t,e.table,!0),s=Yl.listDBIs(r);Yl.initializeDBIs(r,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return OA(r,e.search_values);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,eF(r,e.search_values,n);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return jG(r,e.search_values);default:return OA(r)}}a(zG,"readAuditLog");function OA(e,t=[0,Date.now()]){NA.isEmpty(t[0])&&(t[0]=0),NA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[dn.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 cc,n))}a(OA,"searchTransactionsByTimestamp");function jG(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[dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,bA(e,i))}return Object.fromEntries(r)}a(jG,"searchTransactionsByUsername");function eF(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=XG.equals(e,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=bA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);IA(_,"records",r,l,o),IA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(eF,"searchTransactionsByHashValues");function IA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(IA,"loopRecords");function bA(e,t){let r=[];try{let s=e.dbis[dn.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 cc,i);r.push(o)}}catch(i){ZG.warn(i)}return r}catch(s){throw s}}a(bA,"batchSearchTransactions")});var yA=f((B2,LA)=>{"use strict";var{getSchemaPath:tF}=j(),rF=X();LA.exports={writeTransaction:sF};async function sF(e,t,r){let s=tF(e,t);return(await rF.openEnvironment(s,t)).transaction(r)}a(sF,"writeTransaction")});var PA=f((H2,DA)=>{"use strict";var{getSchemaPath:UA}=j(),MA=X();DA.exports={flush:nF,resetReadTxn:iF};async function nF(e,t){return(await MA.openEnvironment(UA(e,t),t.toString())).flushed}a(nF,"flush");async function iF(e,t){try{(await MA.openEnvironment(UA(e,t),t.toString())).resetReadTxn()}catch{}}a(iF,"resetReadTxn")});var HA=f((G2,vA)=>{"use strict";var aF=I(),{handleHDBError:oF}=L(),cF=wu(),_F=ho(),uF=wl(),lF=Qm(),EF=mi(),dF=Pl(),hF=mR(),fF=wR(),SF=En(),TF=BR(),mF=KR(),RF=jR(),AF=tA(),pF=iA(),gF=lA(),NF=mA(),OF=vl(),IF=gA(),bF=CA(),wF=yA(),BA=PA(),_c=class extends cF{async searchByConditions(t){return TF(t)}async getDataByHash(t){return await dF(t)}async searchByHash(t){return await hF(t)}async getDataByValue(t,r){return await fF(t,r)}async searchByValue(t){return await SF(t)}async createSchema(t){return await lF(t)}async dropSchema(t){return await mF(t)}async createTable(t,r){return await RF(t,r)}async dropTable(t){return await OF(t)}async createAttribute(t){return await _F(t)}async createRecords(t){return await uF(t)}async updateRecords(t){return await AF(t)}async upsertRecords(t){try{return await pF(t)}catch(r){throw oF(r,null,null,aF.ERR,r)}}async deleteRecords(t){return await EF(t)}async deleteRecordsBefore(t){return await gF(t)}async dropAttribute(t){return await IF(t)}async deleteAuditLogsBefore(t){return await NF(t)}async readAuditLog(t){return await bF(t)}writeTransaction(t,r,s){return wF.writeTransaction(t,r,s)}flush(t,r){return BA.flush(t,r)}resetReadTxn(t,r){return BA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");vA.exports=_c});var Qt=f((x2,GA)=>{"use strict";var CF=HA(),LF=wu(),yF=B();yF.initSync();var qA;function UF(){return qA instanceof LF?qA:new CF}a(UF,"getBridge");GA.exports=UF()});var kA=f((k2,VA)=>{"use strict";var FA=require("lodash"),bi=require("mathjs"),MF=require("jsonata"),xA=b();VA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?FA.uniqWith(e,FA.isEqual):e,searchJSON:DF,mad:wi.bind(null,bi.mad),mean:wi.bind(null,bi.mean),mode:wi.bind(null,bi.mode),prod:wi.bind(null,bi.prod),median:wi.bind(null,bi.median)};function wi(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(wi,"aggregateFunction");function DF(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(xA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xA.isEmpty(this.__ala__.res[r])){let s=MF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(DF,"searchJSON")});var YA=f((Y2,$A)=>{"use strict";var le=require("moment"),Wl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;$A.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Wl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Wl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Wl)}});var JA=f((K2,QA)=>{"use strict";var PF=require("@turf/area"),BF=require("@turf/length"),vF=require("@turf/circle"),HF=require("@turf/difference"),qF=require("@turf/distance"),GF=require("@turf/boolean-contains"),FF=require("@turf/boolean-equal"),xF=require("@turf/boolean-disjoint"),VF=require("@turf/helpers"),KA=m(),G=b();QA.exports={geoArea:kF,geoLength:$F,geoCircle:YF,geoDifference:KF,geoDistance:WA,geoNear:WF,geoContains:QF,geoEqual:JF,geoCrosses:XF,geoConvert:ZF};var Ql="geo1 is required",Jl="geo2 is required";function kF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),PF.default(e)}a(kF,"geoArea");function $F(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),BF.default(e,{units:t||"kilometers"})}a($F,"geoLength");function YF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),vF.default(e,t,{units:r||"kilometers"})}a(YF,"geoCircle");function KF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),HF(e,t)}a(KF,"geoDifference");function WA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),qF.default(e,t,{units:r||"kilometers"})}a(WA,"geoDistance");function WF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return WA(e,t,s)<=r}a(WF,"geoNear");function QF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),GF.default(e,t)}a(QF,"geoContains");function JF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),FF.default(e,t)}a(JF,"geoEqual");function XF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!xF.default(e,t)}a(XF,"geoCrosses");function ZF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(KA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KA.GEO_CONVERSION_ENUM).join(",")}`);return VF[t](e,r)}a(ZF,"geoConvert")});var uc=f((Q2,XA)=>{var Is=kA(),Et=YA(),zt=JA();XA.exports=e=>{e.aggr.mad=e.aggr.MAD=Is.mad,e.aggr.mean=e.aggr.MEAN=Is.mean,e.aggr.mode=e.aggr.MODE=Is.mode,e.aggr.prod=e.aggr.PROD=Is.prod,e.aggr.median=e.aggr.MEDIAN=Is.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Is.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Is.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var jA=f((J2,zA)=>{"use strict";var Ci=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var zF=uc(),ZA=require("clone"),lc=require("recursive-iterator"),D=I(),v=b(),hn=Qt(),jF=m(),{hdb_errors:e0}=L(),t0="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";zF(Ie);var Ec=class{constructor(t,r){if(v.isEmpty(t))throw D.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(),v.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!v.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(ZA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ci.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(v.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!v.isEmpty(r)&&r.right)if(v.isNotEmptyAndHasValue(r.right.value)){let s=v.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!v.isEmpty(s)&&v.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=v.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&v.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(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(!v.isEmpty(jF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(v.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(v.isEmptyOrZeroLength(r.left.columnid)||v.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(v.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!v.isEmpty(r.right.value)||!v.isEmpty(r.left.value)?s.add(v.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from)&&v.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&&Ci.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(v.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);v.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(v.isEmptyOrZeroLength(this.all_table_attributes)&&!v.isEmptyOrZeroLength(this.columns.columns))return t;if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(ZA(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(v.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(t0)>-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=Ci.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!v.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await hn.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await hn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!v.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await hn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await hn.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.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 Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Ci.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ci.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 D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await hn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(e0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await hn.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");zA.exports=Ec});var It=f((Z2,tp)=>{"use strict";var r0=Hf();tp.exports={searchByConditions:a0,searchByHash:o0,searchByValue:c0,search:_0};var Xl=Qt(),ep=require("util"),s0=ep.callbackify(Xl.searchByHash),n0=ep.callbackify(Xl.searchByValue),i0=jA();async function a0(e){return Xl.searchByConditions(e)}a(a0,"searchByConditions");function o0(e,t){try{s0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(o0,"searchByHash");function c0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),n0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(c0,"searchByValue");function _0(e,t){try{let r=new r0(e);r.validate(),new i0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(_0,"search")});var As=f((j2,_p)=>{"use strict";var sp=It(),Kr=I(),np=_o(),u0=require("lodash"),l0=xr(),ip=b(),{promisify:ap}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:E0}=L(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:op}=E0,d0=B();d0.initSync();var rp=X(),h0=Ns(),{getSchemaPath:f0}=j(),Li=ap(sp.searchByValue),S0=ap(sp.searchByHash),fn="name",cp="hash_attribute",Zl="schema",T0="schema_table",m0="attribute";_p.exports={describeAll:R0,describeTable:fc,describeSchema:p0};async function R0(e){try{let t=ip.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:fn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[fn]},i=await Li(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[cp,z.ID_ATTRIBUTE_STRING,fn,Zl]},u=await Li(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(R0,"describeAll");async function fc(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=np.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:fn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Li(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),op.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:T0,search_value:r+"."+s,get_attributes:[m0]},E=Array.from(await Li(l));E=u0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=A0(n)),i.attributes=E,i.clustering_stream_name=l0.createNatsTableStreamName(u.schema,u.name);try{let d=f0(i.schema,i.name),h=await rp.openEnvironment(d,i.name),T=rp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of h0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function A0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(A0,"getAttrsByPerms");async function p0(e){let t=np.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Zl,search_value:s,hash_values:[],get_attributes:[cp,z.ID_ATTRIBUTE_STRING,fn,Zl]},i=Array.from(await Li(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[fn]},c=Array.from(await S0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),op.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),ip.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(p0,"describeSchema")});var qr=f((t4,hp)=>{var Sn=cs(),{callbackify:Ep,promisify:g0}=require("util");hp.exports={setSchemaDataToGlobal:up,getTableSchema:I0,getSystemSchema:w0,setSchemaDataToGlobalAsync:g0(up)};var dp=As(),N0=Ep(dp.describeAll),O0=Ep(dp.describeTable);function up(e){N0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(up,"setSchemaDataToGlobal");function lp(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(lp,"returnSchema");function I0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?b0(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,lp(e,t))}):r(null,lp(e,t))}a(I0,"getTableSchema");function b0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}O0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(b0,"setTableDataToGlobal");function w0(){return Sn}a(w0,"getSystemSchema")});var Sc=f((s4,fp)=>{"use strict";var C0=Qt();fp.exports={writeTransaction:L0};function L0(e,t,r){return C0.writeTransaction(e,t,r)}a(L0,"writeTransaction")});var zl=f((i4,y0)=>{y0.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 be=f((h4,Dp)=>{"use strict";var pe=B();pe.initSync();var U0=require("fs-extra"),M0=require("semver"),Pi=require("path"),{monotonicFactory:D0}=require("ulidx"),sE=D0(),P0=require("util"),Tp=require("child_process"),B0=P0.promisify(Tp.exec),v0=Tp.spawn,V=oe(),Q=m(),Tc=b(),Wr=I(),mc=xr(),H0=Sc(),yi=lr(),{encode:tE,decode:nE}=require("msgpackr"),{isEmpty:bs}=Tc,mp=Vr(),Rp=12e10,{connect:q0,StorageType:Ap,RetentionPolicy:pp,AckPolicy:iE,DeliverPolicy:Bi,DiscardPolicy:G0,NatsConnection:a4,JetStreamManager:o4,JetStreamClient:c4,StringCodec:_4,JSONCodec:F0,createInbox:aE,StreamSource:u4,headers:x0,toJsMsg:gp,nuid:l4,JetStreamOptions:E4,ErrorCode:Sp,nanos:d4}=require("nats"),{PACKAGE_ROOT:V0}=m(),k0=zl(),Np=F0(),$0="clustering",Y0=k0.engines[V.NATS_SERVER_NAME],K0=Pi.join(V0,"dependencies"),rE=Pi.join(K0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),jl,eE,Ui,Mi,Di,Gt;Dp.exports={runCommand:Op,checkNATSServerInstalled:W0,createConnection:oE,getConnection:Rc,getJetStreamManager:vi,getJetStream:Ip,getNATSReferences:dt,getServerList:J0,createLocalStream:cE,listStreams:bp,deleteLocalStream:X0,getServerConfig:Hi,listRemoteStreams:Z0,viewStream:z0,viewStreamIterator:j0,publishToStream:ex,createWorkQueueStream:tx,addSourceToWorkStream:Cp,request:rx,removeSourceFromWorkStream:yp,reloadNATS:_E,reloadNATSHub:sx,reloadNATSLeaf:nx,extractServerName:Lp,requestErrorHandler:ix,updateWorkStream:ax,createLocalTableStream:Up,createTableStreams:ox,purgeTableStream:Mp,purgeSchemaTableStreams:cx,getStreamInfo:_x,updateLocalStreams:lx,closeConnection:Q0,getJsmServerName:qi,addNatsMsgHeader:wp};async function Op(e,t=void 0){let{stdout:r,stderr:s}=await B0(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}tM(s,r),Mu(s);let n=s.toJSON();if(Ne=Es(n),Ne.logging_rotation_rotate)for(let i in tS)Ne[i]&&Te.error(`Config ${tS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace(JU)}}a(aS,"initConfig");function tM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(tM,"checkForUpdatedConfig");function Mu(e){let t=e.toJSON(),r=xU(t);if(r.error)throw Ya.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(Mu,"validateConfig");function rM(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(rM,"updateConfigObject");function oS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&aS();let i=iS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Ur.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Ur.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&nS(c,_),Mu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&sM(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=Es(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oS,"updateConfigValue");function sM(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(XU),Te.error(r)}}a(sM,"backupConfigFile");var nM=["schemas"];function Es(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!nM.includes(r)){let s=Es(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(Es,"flattenConfig");function yu(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(kU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function iM(){let e=ot.getPropsFilePath(),t=Uu(e);return Js(t).toJSON()}a(iM,"getConfiguration");async function aM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oS(void 0,void 0,n,!0),zU}catch(i){throw typeof i=="string"||i instanceof String?YU(i,i,KU.BAD_REQUEST,void 0,void 0,!0):i}}a(aM,"setConfiguration");function Du(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Uu(e);return Js(t).toJSON()}a(Du,"readConfigFile");function Js(e){return VU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function oM(){let e=Du(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=eS(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=eS(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(oM,"getClusteringRoutes");function cS(e){let t=rS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Ur.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(cS,"initOldConfig");function cM(e){let t=Du();return $U.get(t,e.replaceAll("_","."))}a(cM,"getConfigFromFile")});var B=f((E3,lS)=>{"use strict";var Pu=require("fs-extra"),Yt=require("path"),_M=require("os"),uM=require("properties-reader"),Jn=I(),Xs=b(),y=m(),Wa=lr(),lM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",uS=!1,EM={[y.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};lS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:dM,setHdbBasePath:hM,get:fM,initSync:TM,setProperty:k,initTestEnvironment:mM};function dM(){return Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(dM,"getHdbBasePath");function hM(e){Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hM,"setHdbBasePath");function fM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(fM,"get");function k(e,t){EM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function SM(){let e;try{e=Xs.getPropsFilePath(),Pu.accessSync(e,Pu.constants.F_OK|Pu.constants.R_OK),uS=!0;let t=uM(e);return Er[y.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(y.HDB_SETTINGS_NAMES.INSTALL_USER),Er[y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(SM,"doesPropFileExist");function TM(e=!1){try{(uS||SM())&&(Wa.initConfig(e),Er[y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jn.error(lM),Jn.error(t),console.error(t),process.exit(1)}}a(TM,"initSync");function mM(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(y.HDB_SETTINGS_NAMES.INSTALL_USER,_M.userInfo().username),k(y.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(y.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(y.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(y.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(y.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(y.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(y.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(y.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(y.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(y.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(y.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(y.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(y.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(y.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Jn.fatal(r),Jn.error(t)}}a(mM,"initTestEnvironment")});var hS=f((h3,dS)=>{"use strict";var Bu=B(),ES=m();Bu.initSync();var RM=Bu.get(ES.CONFIG_PARAMS.STORAGE_COMPRESSION),AM=Bu.get(ES.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=RM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=AM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");dS.exports=Ja});var TS=f((S3,SS)=>{"use strict";var Zs=B(),Xn=m();Zs.initSync();var pM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Xn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",fS=Zs.get(Xn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),gM=Zs.get(Xn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=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=pM,fS!==void 0&&(this.overlappingSync=fS),this.noReadAhead=gM}};a(Xa,"OpenEnvironmentObject");SS.exports=Xa});var X=f((m3,OS)=>{"use strict";var vu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=us(),mS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Kf(),Hu=hS(),RS=TS(),Mr=Ue(),Pt=Mr.INTERNAL_DBIS_NAME,AS=Mr.DBI_DEFINITION_NAME,NM="data.mdb",OM="lock.mdb",Zn=".mdb",IM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(t,r),this.key_type=this.dbi[Mr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new vu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function qu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(qu,"pathEnvNameValidation");async function Gu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Zn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,NM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(Gu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function bM(e,t,r=!1,s=!1){qu(e,t),t=t.toString();try{return await Gu(e,t,s),Fu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new RS(s?i:i+Zn,!1),c=vu.open(o);c.dbis=Object.create(null);let _=new Hu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=xu(e,t,r);return c[Mr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(bM,"createEnvironment");async function wM(e,t,r,s=!0){let n=await Fu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(wM,"copyEnvironment");async function Fu(e,t,r=!1){qu(e,t),t=t.toString();let s=xu(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 Gu(e,t),i=Dt.join(e,t+Zn),o=n!=i,c=new RS(n,o),_=vu.open(c);_.dbis=Object.create(null);let u=gS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Mr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Fu,"openEnvironment");async function CM(e,t,r=!1){qu(e,t),t=t.toString();let s=Dt.join(e,t+Zn),n=await Gu(e,t);if(global.lmdb_map!==void 0){let i=xu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+IM:Dt.join(Dt.dirname(n),OM))}a(CM,"deleteEnvironment");async function pS(e){za.validateEnv(e);let t=e[Mr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pS,"closeEnvironment");function xu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(xu,"getCachedEnvironmentName");function LM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{mS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(LM,"listDBIDefinitions");function gS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(gS,"listDBIs");function yM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yM,"getDBIDefinition");function NS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new Hu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[AS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(NS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=yM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new Hu(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Oe.DBI_DOES_NOT_EXIST):n}return s[AS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function UM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Mr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(UM,"statDBI");async function MM(e,t){try{let r=Dt.join(e,t+Zn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(MM,"environmentDataSize");function DM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(DM,"dropDBI");function PM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)NS(e,n,n!==t,n===t);else throw i}}}a(PM,"initializeDBIs");OS.exports={openDBI:gt,openEnvironment:Fu,createEnvironment:bM,listDBIs:gS,listDBIDefinitions:LM,createDBI:NS,dropDBI:DM,statDBI:UM,deleteEnvironment:CM,initializeDBIs:PM,TransactionCursor:Za,environmentDataSize:MM,copyEnvironment:wM,closeEnvironment:pS}});var bS=f((A3,IS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");IS.exports=to});var CS=f((g3,wS)=>{"use strict";var ro=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(ro,"UpdateRecordsResponseObject");wS.exports=ro});var yS=f((O3,LS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");LS.exports=so});var zs=f((L3,DS)=>{"use strict";var BM=X(),vM=bS(),HM=CS(),qM=yS(),Kt=us(),zn=it().LMDB_ERRORS_ENUM,GM=Ue(),dr=m(),FM=b(),xM=require("uuid"),b3=require("lmdb"),{handleHDBError:VM,hdb_errors:kM}=L(),{OVERFLOW_MARKER:w3,MAX_SEARCH_KEY_LENGTH:C3}=GM,US=B();US.initSync();var no=US.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Vu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ds=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $M(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new vM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];MS(u,!0,n);let l=YM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return $u(o,c,s,i,n)}a($M,"insertRecords");function YM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[ds])})}a(YM,"insertRecord");function KM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(KM,"removeSkippedRecords");function MS(e,t,r){let s=r>0;(s||!Number.isInteger(e[ds]))&&(e[ds]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Vu]))&&(e[Vu]=r||Kt.getNextMonotonicTime()):delete e[Vu]}a(MS,"setTimestamps");function ku(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BM.initializeDBIs(e,t,r)}a(ku,"initializeTransaction");async function WM(e,t,r,s,n=Kt.getNextMonotonicTime()){Ku(e,t,r,s),ku(e,t,r);let i=new HM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return $u(c,_,s,i,n,o)}a(WM,"updateRecords");async function QM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Ku(e,t,r,s)}catch(_){throw VM(_,_.message,kM.HTTP_STATUS_CODES.BAD_REQUEST)}ku(e,t,r);let i=new qM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;FM.isEmpty(u[t])?(l=xM.v4(),u[t]=l):l=u[t];let E=Yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return $u(o,c,s,i,n)}a(QM,"upsertRecords");async function $u(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),KM(r,i),s}a($u,"finalizeWrite");function Yu(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(MS(r,!l,o),Number.isInteger(r[ds])&&u[ds]>r[ds])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[ds])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:Yu(e,t,r,s,n,i,o))}a(Yu,"updateUpsertRecord");function JM(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(JM,"validateBasic");function Ku(e,t,r,s){if(JM(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Ku,"validateWrite");function io(){}a(io,"noop");DS.exports={insertRecords:$M,updateRecords:WM,upsertRecords:QM}});var j=f((U3,GS)=>{"use strict";var si=m(),XM=b(),Ye=B(),ni=require("path"),ZM=require("minimist"),PS=require("fs-extra"),BS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Dr,SCHEMAS_PARAM_CONFIG:jn,SYSTEM_SCHEMA_NAME:ao}=si,ei,ti,ri;function vS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=Ye.get(Dr.STORAGE_PATH)||ni.join(Ye.getHdbBasePath(),si.SCHEMA_DIR_NAME),ei}a(vS,"getBaseSchemaPath");function HS(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=qS(ao),ti}a(HS,"getSystemSchemaPath");function zM(){if(ri!==void 0)return ri;if(Ye.getHdbBasePath()!==void 0)return ri=Ye.get(si.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ni.join(Ye.getHdbBasePath(),si.TRANSACTIONS_DIR_NAME),ri}a(zM,"getTransactionAuditStoreBasePath");function jM(e,t){let r=Ye.get(Dr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ni.join(zM(),e.toString())}a(jM,"getTransactionAuditStorePath");function qS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(si.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ni.join(vS(),e)}a(qS,"getSchemaPath");function eD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ZM(process.argv));let s=r[Dr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!XM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Dr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[jn.PATH];if(u)return BS.set(_,[ao,jn.TABLES,t,jn.PATH],u),Ye.setProperty(Dr.SCHEMAS,_),u;let l=c?.[jn.PATH];if(l)return BS.set(_,[ao,jn.PATH],l),Ye.setProperty(Dr.SCHEMAS,_),l}}let n=r[Dr.STORAGE_PATH.toUpperCase()];if(n){if(!PS.pathExistsSync(n))throw new Error(n+" does not exist");let i=ni.join(n,e);return PS.mkdirsSync(i),Ye.setProperty(Dr.STORAGE_PATH,n),i}return HS()}a(eD,"initSystemSchemaPaths");function tD(){ei=void 0,ti=void 0,ri=void 0}a(tD,"resetPaths");GS.exports={getBaseSchemaPath:vS,getSystemSchemaPath:HS,getTransactionAuditStorePath:jM,getSchemaPath:qS,initSystemSchemaPaths:eD,resetPaths:tD}});var Wt=f((D3,VS)=>{"use strict";var xS=b(),FS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wu=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rD=Wu.alternatives(Wu.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Wu.number()).required();function sD(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sD,"checkValidTable");function nD(e,t){return xS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(nD,"validateSchemaExists");function iD(e,t){let r=t.state.ancestors[0].schema;return xS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(iD,"validateTableExists");function aD(e,t){return e.toLowerCase()===FS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${FS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aD,"validateSchemaName");VS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:rD,validateSchemaExists:nD,validateTableExists:iD,validateSchemaName:aD,checkValidTable:sD}});var _o=f((B3,kS)=>{var{common_validators:Pr}=Wt(),ii=te(),Bt="is required",Z={schema:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},table:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length},hash_attribute:{presence:!0,format:Pr.schema_format,length:Pr.schema_length}};function ai(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(ai,"makeAttributesStrings");function oD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(oD,"schema_object");function cD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(cD,"table_object");function _D(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ii.validateObject(e,Z)}a(_D,"create_table_object");function uD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(uD,"attribute_object");function lD(e){return e=ai(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ii.validateObject(e,Z)}a(lD,"describe_table");function ED(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(ED,"validateTableResidence");kS.exports={schema_object:oD,create_table_object:_D,table_object:cD,attribute_object:uD,describe_table:lD,validateTableResidence:ED}});var YS=f((H3,$S)=>{"use strict";var dD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||dD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");$S.exports=uo});var Eo=f((G3,KS)=>{"use strict";var hD=YS(),lo=class extends hD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");KS.exports=lo});var QS=f((x3,WS)=>{"use strict";WS.exports=SD;var fD="inserted";function SD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===fD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(SD,"returnObject")});var ho=f((k3,jS)=>{"use strict";var TD=m(),Qu=X(),mD=zs(),{getSystemSchemaPath:RD,getSchemaPath:AD}=j(),pD=cs(),gD=_o(),ND=Eo(),OD=QS(),{handleHDBError:JS,hdb_errors:ZS}=L(),XS=b(),{HTTP_STATUS_CODES:ID}=ZS,Ju=pD.hdb_attribute,zS=[];for(let e=0;e<Ju.attributes.length;e++)zS.push(Ju.attributes[e].attribute);var bD="inserted";jS.exports=wD;async function wD(e){let t=gD.attribute_object(e);if(t)throw JS(new Error,t.message,ZS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&XS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw JS(new Error,r,ID.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=XS.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 ND(e.schema,e.table,e.attribute,e.id);try{let i=await Qu.openEnvironment(AD(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}`);Qu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Qu.openEnvironment(RD(),TD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await mD.insertRecords(o,Ju.hash_attribute,zS,[n]);return OD(bD,c,{records:[n]},_)}catch(i){throw i}}a(wD,"lmdbCreateAttribute")});var Zu=f((Y3,tT)=>{var{hdb_schema_table:eT}=Wt(),CD=te(),Xu=require("joi"),LD={undefined:"undefined",null:"null"},yD=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||LD[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"),UD=Xu.object({schema:eT,table:eT,records:Xu.array().items(Xu.object().custom(yD)).required()});tT.exports=function(e){return CD.validateBySchema(e,UD)}});var fo=f((Q3,sT)=>{"use strict";var hr=b(),rT=I(),W3=Zu();sT.exports=MD;function MD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.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&&hr.isEmptyOrZeroLength(o[r]))throw rT.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(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw rT.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`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(MD,"insertUpdateValidate")});var oi=f((X3,nT)=>{"use strict";var DD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=DD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");nT.exports=So});var mo=f((j3,iT)=>{"use strict";var z3=oi(),To=m(),ju=b(),zu=I(),PD=require("uuid"),{handleHDBError:ci,hdb_errors:BD}=L(),{HDB_ERROR_MSGS:_i,HTTP_STATUS_CODES:ui}=BD;iT.exports=vD;function vD(e,t,r){for(let n=0;n<t.length;n++)HD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];qD(i,r,e.operation)}}a(vD,"processRows");function HD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ci(new Error,_i.ATTR_NAME_LENGTH_ERR(e),ui.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmptyOrZeroLength(e)||ju.isEmpty(e.trim()))throw ci(new Error,_i.ATTR_NAME_NULLISH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(HD,"validateAttribute");function qD(e,t,r){if(!e.hasOwnProperty(t)||ju.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=PD.v4();return}throw zu.error("Update transaction aborted due to record with no hash value:",e),ci(new Error,_i.RECORD_MISSING_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw zu.error(e),ci(new Error,_i.HASH_VAL_LENGTH_ERR,ui.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw zu.error(e),ci(new Error,_i.INVALID_FORWARD_SLASH_IN_HASH_ERR,ui.BAD_REQUEST,void 0,void 0,!0)}a(qD,"validateHash")});var oT=f((tZ,aT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");aT.exports=Ro});var Ao=f((sZ,uT)=>{var GD=require("crypto"),cT=9;function FD(e){let t=VD(cT),r=_T(e+t);return t+r}a(FD,"createHash");function xD(e,t){let r=e.substr(0,cT),s=r+_T(t+r);return e===s}a(xD,"validateHash");function VD(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(VD,"generateSalt");function _T(e){return GD.createHash("md5").update(e).digest("hex")}a(_T,"md5");uT.exports={hash:FD,validate:xD}});var ET=f((iZ,lT)=>{"use strict";var Br=m(),li=class{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.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(li,"BaseLicense");var po=class extends li{constructor(t=0,r=Br.STORAGE_TYPES_ENUM.LMDB,s=Br.LICENSE_VALUES.API_CALL_DEFAULT,n=Br.RAM_ALLOCATION_ENUM.DEFAULT,i=Br.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");lT.exports={BaseLicense:li,ExtendedLicense:po}});var tn=f((oZ,mT)=>{"use strict";var en=require("fs-extra"),dT=Ao(),hT=require("crypto"),kD=require("moment"),$D=require("uuid").v4,Pe=I(),tl=require("path"),YD=b(),ct=m(),KD=ET().ExtendedLicense,js="invalid license key format",WD="061183",QD="mofi25",JD="aes-256-cbc",XD=16,ZD=32,fT=B();fT.initSync();var el;mT.exports={validateLicense:ST,generateFingerPrint:jD,licenseSearch:TT,getLicense:rP};function rl(){return tl.join(fT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(rl,"getLicenseDirPath");function zD(){let e=rl();return tl.join(e,ct.LICENSE_FILE_NAME)}a(zD,"getLicenseFilePath");function sl(){let e=rl();return tl.join(e,ct.REG_KEY_FILE_NAME)}a(sl,"getFingerPrintFilePath");async function jD(){let e=sl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await eP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(jD,"generateFingerPrint");async function eP(){let e=$D(),t=dT.hash(e),r=sl();try{await en.mkdirp(rl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(eP,"writeFingerprint");function ST(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=sl(),n=!1;try{n=en.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(QD),c=o[1];c=Buffer.concat([Buffer.from(c)],XD);let _=Buffer.concat([Buffer.from(i)],ZD),u=hT.createDecipheriv(JD,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=tP(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),Pe.error(js),new Error(js)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(js),Pe.error(js),new Error(js)}else r.exp_date=l;r.exp_date<kD().valueOf()&&(r.valid_date=!1),dT.validate(o[1],`${WD}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Pe.error("Invalid licence"),r}a(ST,"validateLicense");function tP(e,t){try{let r=hT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(tP,"checkOldLicense");function TT(){let e=new KD;e.api_call=0;let t=[];try{t=en.readFileSync(zD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(YD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ST(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),el=e,e}a(TT,"licenseSearch");async function rP(){return el||await TT(),el}a(rP,"getLicense")});var fs=f((_Z,_l)=>{"use strict";var{Worker:sP,MessageChannel:nP,parentPort:fr,isMainThread:pT,threadId:iP,workerData:aP}=require("worker_threads"),{PACKAGE_ROOT:oP}=m(),{join:cP,isAbsolute:_P,extname:uP}=require("path"),{totalmem:RT}=require("os"),ol=m(),gT=B(),lP=tn(),go=I(),EP=m();gT.initSync();var dP=gT.get(ol.CONFIG_PARAMS.HTTP_THREADS)||1,hP=1024*1024,vr=[],hs=[],fP=50,NT=1e4,OT="restart",IT="request_thread_info",bT="resource_report",wT="thread_info",CT="added-port",nl;_l.exports={startWorker:il,restartWorkers:cl,shutdownWorkers:TP,workers:vr,setMonitorListener:gP,onMessageFromWorkers:mP,broadcast:RP};function il(e,t={}){let s=lP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||RT();n=Math.min(n,RT());let i=Math.min(Math.max(Math.floor(n/hP/(1+dP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of hs){let{port1:l,port2:E}=new nP;u.postMessage({type:CT,port:l},[l]),c.push(E)}uP(e)||(e+=".js");let _=new sP(_P(e)?e:cP(oP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{il(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{vr.splice(vr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<fP?(t.unexpectedRestarts=_.unexpectedRestarts+1,il(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===OT&&cl(u.workerType),u.type===IT&&AP(_),u.type===bT&&pP(_,u)}),vr.push(_),OP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(il,"startWorker");var SP=[ol.THREAD_TYPES.HTTP];async function cl(e=null,t=2,r=!0){if(pT){t<1&&(t=t*vr.length);let s=[];for(let n of vr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=SP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),NT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:OT,workerType:e})}a(cl,"restartWorkers");function TP(e){return cl(e,1/0,!1)}a(TP,"shutdownWorkers");var LT=[];function mP(e){LT.push(e)}a(mP,"onMessageFromWorkers");function RP(e){for(let t of hs)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(RP,"broadcast");function AP(e){e.postMessage({type:wT,workers:yT()})}a(AP,"sendThreadInfo");function yT(){let e=Date.now();return vr.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(yT,"getChildWorkerInfo");function pP(e,t){e.resources=t,e.resources.updated=Date.now()}a(pP,"recordResourceReport");var al;function gP(e){al=e}a(gP,"setMonitorListener");var NP=1e3,AT=!1;function OP(){AT||(AT=!0,setInterval(()=>{for(let e of vr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}al&&al()},NP).unref())}a(OP,"startMonitoring");var IP=1e3;if(fr){No(fr);for(let e of aP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:bT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},IP).unref(),nl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:IT});function r(s){s.type===wT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else nl=yT;_l.exports.getThreadInfo=nl;function No(e,t){hs.push(e),e.on("message",r=>{if(r.type===CT)No(r.port);else for(let s of LT)s(r)}).on("close",()=>{hs.splice(hs.indexOf(e),1)}).on("exit",()=>{hs.splice(hs.indexOf(e),1)}),t||e.unref()}a(No,"addPort");pT||fr.on("message",async e=>{let{type:t}=e;t===EP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",iP),process.exit(0)},NT).unref())})});var DT=f((lZ,MT)=>{"use strict";var ul=X(),bP=I(),UT=it().LMDB_ERRORS_ENUM;MT.exports=wP;async function wP(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 ul.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==UT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ul.closeEnvironment(global.lmdb_map[s]),await ul.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==UT.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){bP.error(t)}}a(wP,"cleanLMDBMap")});var Ot=f((dZ,vT)=>{"use strict";var Io=Zu(),Nt=b(),CP=require("util"),bo=Qt(),LP=qr(),ll=I(),{handleHDBError:Hr,hdb_errors:yP}=L(),{HTTP_STATUS_CODES:Ss}=yP,UP=CP.promisify(LP.getTableSchema),MP="updated",PT="inserted",BT="upserted";vT.exports={insert:PP,update:BP,upsert:vP,validation:DP,flush:HP};async function DP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await UP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ll.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ll.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(DP,"validation");async function PP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(PT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(PP,"insertData");async function BP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(MP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(BP,"updateData");async function vP(e){if(e.operation!=="upsert")throw Hr(new Error,"invalid operation, must be upsert",Ss.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw Hr(new Error,t.message,Ss.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hr(new Error,r,Ss.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(BT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Hr(s,null,null,ll.ERR,n)}}a(vP,"upsertData");function Oo(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===PT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===BT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function HP(e){return bo.flush(e.schema,e.table)}a(HP,"flush")});var dl=f((fZ,GT)=>{var qP=te(),El=require("joi"),{hdb_schema_table:HT}=Wt(),qT={schema:HT,table:HT},GP={date:El.date().iso().required()},FP={timestamp:El.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GT.exports=function(e,t){let r=t==="timestamp"?{...qT,...FP}:{...qT,...GP},s=El.object(r);return qP.validateBySchema(e,s)}});var kT=f((SZ,VT)=>{var xP=te(),FT=require("joi"),{hdb_schema_table:xT}=Wt(),VP=FT.object({schema:xT,table:xT,hash_values:FT.array().required()});VT.exports=function(e){return xP.validateBySchema(e,VP)}});var YT=f((TZ,$T)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=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(Co,"NoSQLSeachObject");var Lo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Lo,"DeleteResponseObject");$T.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:Lo}});var ms=f((RZ,XT)=>{"use strict";var WT=dl(),kP=kT(),yo=b(),KT=require("moment"),QT=I(),{promisify:$P,callbackify:YP}=require("util"),Ts=m(),KP=qr(),hl=$P(KP.getTableSchema),fl=Qt(),{DeleteResponseObject:WP}=YT(),{handleHDBError:Gr,hdb_errors:QP}=L(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:Fr}=QP,JP="records successfully deleted",XP=YP(JT);XT.exports={delete:XP,deleteRecord:JT,deleteFilesBefore:ZP,deleteAuditLogsBefore:zP};async function ZP(e){let t=WT(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!KT(e.date,KT.ISO_8601).isValid())throw Gr(new Error,Uo.INVALID_DATE,Fr.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,s,!0);let n=await fl.deleteRecordsBefore(e);if(await hl(e.schema,e.table),QT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(ZP,"deleteFilesBefore");async function zP(e){let t=WT(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,Uo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);let s=await fl.deleteAuditLogsBefore(e);return await hl(e.schema,e.table),QT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(zP,"deleteAuditLogsBefore");async function JT(e){let t=kP(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{await hl(e.schema,e.table);let s=await fl.deleteRecords(e);return yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${JP}`),s}catch(s){if(s.message===Ts.SEARCH_NOT_FOUND_MESSAGE){let n=new WP;return n.message=Ts.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(JT,"deleteRecord")});var zT=f((pZ,ZT)=>{var Sl=te(),Be={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 jP(e){return Be.password.presence=!0,Be.username.presence=!0,Be.role.presence=!0,Be.active.presence=!0,Sl.validateObject(e,Be)}a(jP,"addUserValidation");function eB(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(eB,"alterUserValidation");function tB(e){return Be.password.presence=!1,Be.username.presence=!0,Be.role.presence=!1,Be.active.presence=!1,Sl.validateObject(e,Be)}a(tB,"dropUserValidation");ZT.exports={addUserValidation:jP,alterUserValidation:eB,dropUserValidation:tB}});var xr=f((NZ,rm)=>{"use strict";var Ei=require("crypto"),em="aes-256-cbc",rB=32,sB=16,Tl=64,tm=32,nB=Tl+tm,jT=new Map;rm.exports={encrypt:iB,decrypt:aB,createNatsTableStreamName:oB};function iB(e){let t=Ei.randomBytes(rB),r=Ei.randomBytes(sB),s=Ei.createCipheriv(em,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(iB,"encrypt");function aB(e){let t=e.substr(0,Tl),r=e.substr(Tl,tm),s=e.substr(nB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ei.createDecipheriv(em,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(aB,"decrypt");function oB(e,t){let r=`${e}.${t}`,s=jT.get(r);return s||(s=Ei.createHash("md5").update(`${e}.${t}`).digest("hex"),jT.set(r,s)),s}a(oB,"createNatsTableStreamName")});var oe=f((bZ,nm)=>{"use strict";var{platform:IZ}=require("os"),cB="nats-server.zip",ml="nats-server",_B=process.platform==="win32"?`${ml}.exe`:ml,Rl="HDB",uB=/^[^\s.,*>]+$/,sm="__request__",lB=a(e=>`${e}.${sm}`,"REQUEST_SUBJECT"),EB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},dB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},hB={HUB:"hub.pid",LEAF:"leaf.pid"},fB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},SB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Rl,deliver_subject:"__HDB__.WORKQUEUE"},TB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Rl,deliver_subject:"HDB.SCHEMAQUEUE"},mB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Rl,deliver_subject:"HDB.USERQUEUE"},RB={SUCCESS:"success",ERROR:"error"},AB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pB={TXN:"txn",MSGID:"msgid"},rn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},gB={[rn.ERR]:1,[rn.WRN]:2,[rn.INF]:3,[rn.DBG]:4,[rn.TRC]:5},NB={debug:"-D",trace:"-DVV"};nm.exports={NATS_SERVER_ZIP:cB,NATS_SERVER_NAME:ml,NATS_BINARY_NAME:_B,PID_FILES:hB,NATS_CONFIG_FILES:dB,SERVER_SUFFIX:fB,WORK_QUEUE_CONSUMER_NAMES:SB,SCHEMA_QUEUE_CONSUMER_NAMES:TB,USER_QUEUE_CONSUMER_NAMES:mB,NATS_TERM_CONSTRAINTS_RX:uB,REQUEST_SUFFIX:sm,UPDATE_REMOTE_RESPONSE_STATUSES:RB,CLUSTER_STATUS_STATUSES:AB,REQUEST_SUBJECT:lB,SUBJECT_PREFIXES:pB,MSG_HEADERS:EB,LOG_LEVELS:rn,LOG_LEVEL_FLAGS:NB,LOG_LEVEL_HIERARCHY:gB}});var Vr=f((LZ,Rm)=>{"use strict";var _m="username is required",um="nothing to update, must supply active, role or password to update",lm="password cannot be an empty string",Em="If role is specified, it cannot be empty.",dm="active must be true or false";Rm.exports={addUser:UB,alterUser:MB,dropUser:PB,userInfo:BB,listUsers:Do,listUsersExternal:vB,setUsersToGlobal:di,findAndValidateUser:GB,getClusterUser:FB,USERNAME_REQUIRED:_m,ALTERUSER_NOTHING_TO_UPDATE:um,EMPTY_PASSWORD:lm,EMPTY_ROLE:Em,ACTIVE_BOOLEAN:dm};var hm=Ot(),OB=ms(),pl=Ao(),fm=zT(),Sm=It(),gl=nn(),_t=b(),Tm=require("validate.js"),M=I(),{promisify:Nl}=require("util"),Ol=xr(),im=m(),am=oe(),IB=lr(),CZ=B(),bB=tn(),wB=cs(),{handleHDBError:Jt,hdb_errors:CB}=L(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Al,HDB_ERROR_MSGS:sn}=CB,{UserEventMsg:Il}=kr(),om=require("lodash"),mm={username:!0,active:!0,role:!0,password:!0},cm=new Map,Mo=Nl(Sm.searchByValue),LB=Nl(Sm.searchByHash),yB=Nl(OB.delete);async function UB(e){let t=Tm.cleanAttributes(e,mm),r=fm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,sn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,sn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await hm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await di()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,sn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],gl.signalUserChange(new Il(process.pid)),`${c.username} successfully added`}a(UB,"addUser");async function MB(e){let t=Tm.cleanAttributes(e,mm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(_m);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(um);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(lm);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(dm);let r=DB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ol.encrypt(t.password)),t.password=pl.hash(t.password)),t.role==="")throw new Error(Em);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 Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=sn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=sn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.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 hm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await di()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return gl.signalUserChange(new Il(process.pid)),n}a(MB,"alterUser");function DB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(DB,"isClusterUser");async function PB(e){try{let t=fm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,sn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await di()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return gl.signalUserChange(new Il(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(PB,"dropUser");async function BB(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 LB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(BB,"userInfo");async function vB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(vB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=om.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 Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=om.cloneDeep(o),o.role=r[o.role],HB(o.role),i.set(o.username,o);return(await bB.getLicense()).enterprise?i:qB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function HB(e){try{if(!e){M.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(wB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(HB,"appendSystemTablesToRole");function qB(e){try{if(M.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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(qB,"nonEnterpriseFilter");async function di(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(di,"setUsersToGlobal");async function GB(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Al.USER_INACTIVE,Xt.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(cm.get(t)===s.password)return n;if(pl.validate(s.password,t))cm.set(t,s.password);else throw Jt(new Error,Al.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(GB,"findAndValidateUser");async function FB(){let e=await Do(),t=IB.getConfigFromFile(im.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===im.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ol.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+am.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+am.SERVER_SUFFIX.ADMIN,r}a(FB,"getClusterUser")});var Po=f((UZ,Nm)=>{"use strict";var Rs=I(),ut=m(),xB=DT(),Am=qr(),VB=As(),kB=Vr(),{validateEvent:gm}=kr(),hi=Qt(),$B=require("process"),YB={[ut.ITC_EVENT_TYPES.SCHEMA]:KB,[ut.ITC_EVENT_TYPES.USER]:QB};async function KB(e){let t=gm(e);if(t){Rs.error(t);return}Rs.trace("ITC schemaHandler received schema event:",e),await xB(e.message),await WB(e.message)}a(KB,"schemaHandler");async function WB(e){try{if(hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.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 VB.describeTable({schema:e.schema,table:e.table});break;default:Am.setSchemaDataToGlobal(pm);break}else Am.setSchemaDataToGlobal(pm)}catch(t){Rs.error(t)}}a(WB,"syncSchemaMetadata");function pm(e){e&&Rs.error(e)}a(pm,"handleErrorCallback");async function QB(e){try{hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),hi.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=gm(e);if(t){Rs.error(t);return}Rs.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${$B.pid} received user event:`,e),await kB.setUsersToGlobal()}catch(t){Rs.error(t)}}a(QB,"userHandler");Nm.exports=YB});var kr=f((vZ,Im)=>{"use strict";var DZ=I(),bl=b(),JB=m(),{ITC_ERRORS:fi}=it(),{parentPort:PZ,threadId:XB,isMainThread:ZB,workerData:BZ}=require("worker_threads"),{onMessageFromWorkers:zB,broadcast:jB}=fs();Im.exports={sendItcEvent:ev,validateEvent:Om,SchemaEventMsg:tv,UserEventMsg:rv};var Bo;zB(e=>{Bo=Bo||Po(),Om(e),Bo[e.type]&&Bo[e.type](e)});function ev(e){!ZB&&e.message&&(e.message.originator=XB),jB(e)}a(ev,"sendItcEvent");function Om(e){if(typeof e!="object")return fi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bl.isEmpty(e.type))return fi.MISSING_TYPE;if(!e.hasOwnProperty("message")||bl.isEmpty(e.message))return fi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bl.isEmpty(e.message.originator))return fi.MISSING_ORIGIN;if(JB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return fi.INVALID_EVENT(e.type)}a(Om,"validateEvent");function tv(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(tv,"SchemaEventMsg");function rv(e){this.originator=e}a(rv,"UserEventMsg")});var nn=f((GZ,Lm)=>{"use strict";var bm=m(),qZ=b(),vo=I(),wm=oT(),an,{sendItcEvent:Cm}=kr();function sv(e){try{vo.trace("signalSchemaChange called with message:",e),an=an||Po();let t=new wm(bm.ITC_EVENT_TYPES.SCHEMA,e);an.schema(t),Cm(t)}catch(t){vo.error(t)}}a(sv,"signalSchemaChange");function nv(e){try{vo.trace("signalUserChange called with message:",e),an=an||Po();let t=new wm(bm.ITC_EVENT_TYPES.USER,e);an.user(t),Cm(t)}catch(t){vo.error(t)}}a(nv,"signalUserChange");Lm.exports={signalSchemaChange:sv,signalUserChange:nv}});var Ho=f((xZ,Um)=>{"use strict";var ym=b(),iv=m(),av=I(),ov=ho(),cv=Eo(),_v=nn(),{SchemaEventMsg:uv}=kr(),lv="already exists in";Um.exports=Ev;async function Ev(e,t,r){if(ym.isEmptyOrZeroLength(r))return r;let s=[];ym.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 dv(e,t.schema,t.name,i)})),n}a(Ev,"lmdbCheckForNewAttributes");async function dv(e,t,r,s){let n=new cv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await hv(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(lv))av.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(dv,"createNewAttribute");async function hv(e){let t;return t=await ov(e),_v.signalSchemaChange(new uv(process.pid,iv.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(hv,"createAttribute")});var on=f((kZ,Mm)=>{"use strict";var qo=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(qo,"LMDBTransactionObject");Mm.exports=qo});var Pm=f((YZ,Dm)=>{"use strict";var fv=on(),Sv=m().OPERATIONS_ENUM,Go=class extends fv{constructor(t,r,s,n,i=void 0){super(Sv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Dm.exports=Go});var vm=f((WZ,Bm)=>{"use strict";var Tv=on(),mv=m().OPERATIONS_ENUM,Fo=class extends Tv{constructor(t,r,s,n,i,o=void 0){super(mv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Bm.exports=Fo});var qm=f((JZ,Hm)=>{"use strict";var Rv=on(),Av=m().OPERATIONS_ENUM,xo=class extends Rv{constructor(t,r,s,n,i,o=void 0){super(Av.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");Hm.exports=xo});var Fm=f((ZZ,Gm)=>{"use strict";var pv=on(),gv=m().OPERATIONS_ENUM,Vo=class extends pv{constructor(t,r,s,n,i=void 0){super(gv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");Gm.exports=Vo});var Si=f((ez,$m)=>{"use strict";var jZ=require("path"),xm=X(),Nv=Pm(),Ov=vm(),Iv=qm(),bv=Fm(),cn=Ue(),Vm=b(),{CONFIG_PARAMS:wv}=m(),km=B();km.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Cv}=j();$m.exports=Lv;async function Lv(e,t){if(km.get(wv.LOGGING_AUDITLOG)===!1)return;let r=Cv(e.schema,e.table),s=await xm.openEnvironment(r,e.table,!0),n=yv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){xm.initializeDBIs(s,cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,cn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Vm.isEmpty(n.user_name)||s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[cn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(Lv,"writeTransaction");function yv(e,t){let r=Vm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new Nv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Ov(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Iv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new bv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yv,"createTransactionObject")});var wl=f((sz,Ym)=>{"use strict";var Uv=fo(),rz=oi(),Ti=m(),Mv=mo(),Dv=zs().insertRecords,Pv=X(),Bv=I(),vv=Ho(),{getSchemaPath:Hv}=j(),qv=Si();Ym.exports=Gv;async function Gv(e){try{let{schema_table:t,attributes:r}=Uv(e);Mv(e,r,t.hash_attribute),e.schema!==Ti.SYSTEM_SCHEMA_NAME&&(r.includes(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ti.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vv(e.hdb_auth_header,t,r),n=Hv(e.schema,e.table),i=await Pv.openEnvironment(n,e.table),o=await Dv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qv(e,o)}catch(c){Bv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Gv,"lmdbCreateRecords")});var Qm=f((iz,Wm)=>{"use strict";var Km=m(),Fv=wl(),xv=oi(),Vv=require("fs-extra"),{getSchemaPath:kv}=j();Wm.exports=$v;async function $v(e){let t=[{name:e.schema,createddate:Date.now()}],r=new xv(Km.SYSTEM_SCHEMA_NAME,Km.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Fv(r),await Vv.mkdirp(kv(e.schema))}a($v,"lmdbCreateSchema")});var Xm=f((oz,Jm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Jm.exports=$o});var yl=f((Ez,jm)=>{"use strict";var Zm=X(),Cl=us(),Ll=it().LMDB_ERRORS_ENUM,Yv=Ue(),zm=I(),_z=b(),Kv=require("lmdb"),Wv=Xm(),Qv=m(),{OVERFLOW_MARKER:uz,MAX_SEARCH_KEY_LENGTH:lz}=Yv,Jv=Qv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Xv(e,t,r,s){if(Cl.validateEnv(e),t===void 0)throw new Error(Ll.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ll.IDS_REQUIRED):new Error(Ll.IDS_MUST_BE_ITERABLE);try{let n=Zm.listDBIs(e);Zm.initializeDBIs(e,t,n);let i=new Wv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[Jv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,Kv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=Cl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=Cl.getNextMonotonicTime(),i}catch(n){throw n}}a(Xv,"deleteRecords");jm.exports={deleteRecords:Xv}});var mi=f((hz,tR)=>{"use strict";var _n=b(),Zv=yl(),zv=X(),{getSchemaPath:jv}=j(),eH=Si(),tH=I();tR.exports=rH;async function rH(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(_n.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_n.isEmptyOrZeroLength(e.hash_values)&&!_n.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];_n.isEmpty(_)||e.hash_values.push(_)}}if(_n.isEmptyOrZeroLength(e.hash_values))return eR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_n.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=jv(e.schema,e.table),i=await zv.openEnvironment(n,e.table),o=await Zv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await eH(e,o)}catch(c){tH.error(`unable to write transaction due to ${c.message}`)}return eR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(rH,"lmdbDeleteRecords");function eR(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(eR,"createDeleteResponse")});var Ml=f((Tz,rR)=>{"use strict";var sH=m(),Sz=us();function Ul(e,t){let r=Object.create(null);if(t.length===1&&sH.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(Ul,"parseRow");function nH(e,t,r,s){let n=Ul(r,e);s.push(n)}a(nH,"searchAll");function iH(e,t,r,s){let n=Ul(r,e);s[t]=n}a(iH,"searchAllToMap");function aH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(aH,"iterateDBI");function ps(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(ps,"pushResults");function oH(e,t,r,s,n,i){t.toString().endsWith(e)&&ps(t,r,s,n,i)}a(oH,"endsWith");function cH(e,t,r,s,n,i){t.toString().includes(e)&&ps(t,r,s,n,i)}a(cH,"contains");function _H(e,t,r,s,n,i){t>e&&ps(t,r,s,n,i)}a(_H,"greaterThanCompare");function uH(e,t,r,s,n,i){t>=e&&ps(t,r,s,n,i)}a(uH,"greaterThanEqualCompare");function lH(e,t,r,s,n,i){t<e&&ps(t,r,s,n,i)}a(lH,"lessThanCompare");function EH(e,t,r,s,n,i){t<=e&&ps(t,r,s,n,i)}a(EH,"lessThanEqualCompare");rR.exports={parseRow:Ul,searchAll:nH,searchAllToMap:iH,iterateDBI:aH,endsWith:oH,contains:cH,greaterThanCompare:_H,greaterThanEqualCompare:uH,lessThanCompare:lH,lessThanEqualCompare:EH,pushResults:ps}});var Ns=f((gz,_R)=>{"use strict";var $r=X(),Rz=I(),lt=us(),Yo=Ue(),ce=it().LMDB_ERRORS_ENUM,Az=b(),dH=m(),Ko=Ml(),{parseRow:hH}=Ko,pz=require("lmdb"),{OVERFLOW_MARKER:sR,MAX_SEARCH_KEY_LENGTH:fH}=Yo;function nR(e,t,r,s=!1,n=void 0,i=void 0){return gs(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(nR,"iterateFullIndex");function Ri(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return gs(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(Ri,"iterateRangeBetween");function gs(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(gs,"setupTransaction");function iR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(sR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(iR,"getOverflowCheck");function SH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return gs(e,t,t,(o,c,_)=>(Wo(r),r=Ai(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>hH(u.value,r))))}a(SH,"searchAll");function TH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ai(e.database||e,r);let o=new Map;for(let{key:c,value:_}of nR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(TH,"searchAllToMap");function mH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=nR(e,void 0,t,r,s,n),c=o.transaction,_=iR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(mH,"iterateDBI");function RH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(RH,"countAll");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),gs(e,t,r,(c,_,u,l)=>(s=lt.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(AH,"equals");function pH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(pH,"count");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),gs(e,null,r,(c,_)=>{s=lt.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(gH,"startsWith");function NH(e,t,r,s,n=!1,i=void 0,o=void 0){return aR(e,t,r,s,n,i,o,!0)}a(NH,"endsWith");function aR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),gs(e,null,r,(_,u,l,E)=>{let d=iR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(sR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(aR,"contains");function OH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!0,!1)}a(OH,"greaterThan");function IH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ri(e,t,r,s,_,n,i,o,!1,!1)}a(IH,"greaterThanEqual");function bH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!0)}a(bH,"lessThan");function wH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ri(e,t,r,_,s,n,i,o,!1,!1)}a(wH,"lessThanEqual");function CH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ri(e,t,r,s,n,i,o,c)}a(CH,"between");function LH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ai(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(LH,"searchByHash");function yH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(yH,"checkHashExists");function UH(e,t,r,s,n=[]){return cR(e,t,r,s,n),oR(e,t,r,s,n).map(i=>i[1])}a(UH,"batchSearchByHash");function MH(e,t,r,s,n=[]){cR(e,t,r,s,n);let i=new Map;for(let[o,c]of oR(e,t,r,s,n))i.set(o,c);return i}a(MH,"batchSearchByHashToMap");function oR(e,t,r,s,n=[]){return gs(e,t,t,(i,o,c)=>{r=Ai(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(oR,"batchHashSearch");function cR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(cR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>fH)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ai(e,t){return t.length===1&&dH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ai,"setGetWholeRowAttributes");_R.exports={searchAll:SH,searchAllToMap:TH,count:pH,countAll:RH,equals:AH,startsWith:gH,endsWith:NH,contains:aR,searchByHash:LH,setGetWholeRowAttributes:Ai,batchSearchByHash:UH,batchSearchByHashToMap:MH,checkHashExists:yH,iterateDBI:mH,greaterThan:OH,greaterThanEqual:IH,lessThan:bH,lessThanEqual:wH,between:CH}});var pi=f((Iz,dR)=>{var uR=require("lodash"),lR=te(),W=require("joi"),DH=b(),{hdb_schema_table:vt,checkValidTable:ER}=Wt(),{handleHDBError:PH,hdb_errors:BH}=L(),{HTTP_STATUS_CODES:vH}=BH,Oz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),HH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),qH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});dR.exports=function(e,t){let r=null;switch(t){case"value":r=lR.validateBySchema(e,HH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ER("schema",e.schema)),i(ER("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=lR.validateBySchema(e,qH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=DH.checkGlobalSchemaTable(e.schema,e.table);if(n)return PH(new Error,n,vH.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=uR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!uR.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Dl=f((wz,hR)=>{"use strict";var GH=X(),FH=pi(),{getSchemaPath:xH}=j();hR.exports=VH;function VH(e){let t=FH(e,"hashes");if(t)throw t;let r=xH(e.schema,e.table);return GH.openEnvironment(r,e.table)}a(VH,"initialize")});var Pl=f((Lz,fR)=>{"use strict";var kH=Ns(),$H=Dl();fR.exports=YH;async function YH(e){let t=await $H(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return kH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(YH,"lmdbGetDataByHash")});var un=f((Uz,SR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");SR.exports=Qo});var mR=f((Pz,TR)=>{"use strict";var Dz=un(),KH=Ns(),WH=Dl();TR.exports=QH;async function QH(e){let t=await WH(e),r=global.hdb_schema[e.schema][e.table];return KH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(QH,"lmdbSearchByHash")});var Ht=f((vz,RR)=>{"use strict";var Jo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");RR.exports=Jo});var Xo=f((qz,IR)=>{"use strict";var ve=Ns(),JH=X(),XH=b(),C=Ue(),Os=m(),ZH=cs(),AR=it().LMDB_ERRORS_ENUM,{compareKeys:ln}=require("ordered-binary"),{getSchemaPath:zH}=j(),Sr=Os.SEARCH_WILDCARDS;async function jH(e,t,r){let s;e.schema===Os.SYSTEM_SCHEMA_NAME?s=ZH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=OR(e,s.hash_attribute,r,t);return gR(e,n,s.hash_attribute,r)}a(jH,"prepSearch");async function gR(e,t,r,s){let n=zH(e.schema,e.table),i=await JH.openEnvironment(n,e.table),o=NR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(tq(e,r)===!1){let l=e.search_attribute;if(l===r)return s?pR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?pR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ve.batchSearchByHashToMap(c,r,e.get_attributes,u):ve.batchSearchByHash(c,r,e.get_attributes,u)}a(gR,"executeSearch");function NR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ve.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=ve.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ve.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ve.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ve.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ve.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ve.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ve.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=ve.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ve.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ve.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ve.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ve.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(NR,"searchByType");function eq(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ln(i,s[0])>=0&&ln(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ln(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ln(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ln(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ln(n[r],s)<=0;default:return Object.create(null)}}a(eq,"filterByType");function pR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(pR,"createMapFromIterable");function tq(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(tq,"checkToFetchMore");function OR(e,t,r,s){if(XH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Sr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Sr[0])<0&&n.indexOf(Sr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Sr.indexOf(i)>=0&&Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Sr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Sr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Sr[0])||n.includes(Sr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(AR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Os.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Os.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Os.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Os.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Os.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AR.UNKNOWN_SEARCH_TYPE)}}a(OR,"createSearchTypeFromSearchObject");IR.exports={executeSearch:gR,createSearchTypeFromSearchObject:OR,prepSearch:jH,searchByType:NR,filterByType:eq}});var wR=f((xz,bR)=>{"use strict";var Fz=Ht(),rq=pi(),sq=b(),nq=m(),iq=Xo();bR.exports=aq;function aq(e,t){if(!sq.isEmpty(t)&&nq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rq(e,"value");if(s)throw s;let n=!0;return iq.prepSearch(e,t,n)}a(aq,"lmdbGetDataByValue")});var En=f(($z,CR)=>{"use strict";var kz=Ht(),oq=pi(),cq=b(),_q=m(),uq=Xo();CR.exports=lq;async function lq(e,t){if(!cq.isEmpty(t)&&_q.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=oq(e,"value");if(s)throw s;return uq.prepSearch(e,t,!1)}a(lq,"lmdbSearchByValue")});var yR=f((Wz,LR)=>{"use strict";var Kz=Ue(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");LR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var BR=f((Xz,PR)=>{"use strict";var Jz=yR().SearchByConditionsObject,Eq=Ht(),dq=pi(),Bl=Ns(),ec=Ue(),DR=Xo(),hq=Ml(),fq=require("lodash"),{getSchemaPath:Sq}=j(),UR=X(),{handleHDBError:Tq,hdb_errors:mq}=L(),{HTTP_STATUS_CODES:Rq}=mq,Aq=1e8;PR.exports=pq;async function pq(e){let t=dq(e,"conditions");if(t)throw Tq(t,t.message,Rq.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=Sq(e.schema,e.table),s=await UR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)UR.openDBI(s,u.search_attribute);let i=fq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Bl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Aq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await MR(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(DR.filterByType),E=l.length,d=Bl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>hq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await MR(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Bl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(pq,"lmdbSearchByConditions");async function MR(e,t,r,s){let n=new Eq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,DR.searchByType(e,n,i,s).map(o=>o.value)}a(MR,"executeConditionSearch")});var gi=f((zz,vR)=>{"use strict";var gq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=gq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");vR.exports=tc});var vl=f((e2,$R)=>{"use strict";var FR=Ht(),xR=gi(),VR=En(),kR=mi(),Ke=m(),HR=b(),qR=X(),{getTransactionAuditStorePath:Nq,getSchemaPath:Oq}=j(),GR=I();$R.exports=Iq;async function Iq(e){try{if(HR.isEmpty(global.hdb_schema[e.schema])||HR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await bq(e),await wq(e);let t=Oq(e.schema,e.table);try{await qR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")GR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Nq(e.schema,e.table);await qR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")GR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Iq,"lmdbDropTable");async function bq(e){let t=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await VR(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 xR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await kR(n)}a(bq,"deleteAttributesFromSystem");async function wq(e){let t=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await VR(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 xR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await kR(n)}catch(i){throw i}}a(wq,"dropTableFromSystem")});var KR=f((r2,YR)=>{"use strict";var Cq=require("fs-extra"),Lq=Ht(),yq=un(),Uq=gi(),Mq=vl(),Dq=mi(),Pq=Pl(),Bq=En(),Tr=m(),{getSchemaPath:vq}=j(),{handleHDBError:Hq,hdb_errors:qq}=L(),{HDB_ERROR_MSGS:Gq,HTTP_STATUS_CODES:Fq}=qq;YR.exports=xq;async function xq(e){let t;try{t=await Vq(e.schema);let r=new Lq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Bq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Mq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new Uq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Dq(n);let i=vq(t);await Cq.remove(i)}catch(r){throw r}}a(xq,"lmdbDropSchema");async function Vq(e){let t=new yq(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Pq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Hq(new Error,Gq.SCHEMA_NOT_FOUND(e),Fq.NOT_FOUND,void 0,void 0,!0);return s}a(Vq,"validateDropSchema")});var Hl=f((n2,WR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");WR.exports=rc});var JR=f((o2,QR)=>{"use strict";var kq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:$q}=j(),ql=Ue(),a2=Hl();QR.exports=Yq;async function Yq(e){let t;try{let r=$q(e.schema,e.table);await kq.mkdirp(r),t=await sc.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,ql.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,ql.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(Yq,"createTransactionsAuditEnvironment")});var jR=f((_2,zR)=>{"use strict";var Gl=m(),XR=X(),Kq=zs(),{getSystemSchemaPath:Wq,getSchemaPath:Qq}=j(),Jq=cs(),Xq=ho(),Fl=Eo(),Zq=I(),zq=JR(),Vl=Jq.hdb_table,ZR=[];for(let e=0;e<Vl.attributes.length;e++)ZR.push(Vl.attributes[e].attribute);zR.exports=jq;async function jq(e,t){let r=Qq(t.schema,t.table),s=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Fl(t.schema,t.table,Gl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Fl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await XR.createEnvironment(r,t.table),e!==void 0){let o=await XR.openEnvironment(Wq(),Gl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Kq.insertRecords(o,Vl.hash_attribute,ZR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xl(s),await xl(n),await xl(i)}await zq(t)}catch(o){throw o}}a(jq,"lmdbCreateTable");async function xl(e){try{await Xq(e)}catch(t){Zq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xl,"createAttribute")});var tA=f((l2,eA)=>{"use strict";var eG=fo(),tG=mo(),rG=Ho(),Ni=m(),sG=zs().updateRecords,nG=X(),{getSchemaPath:iG}=j(),aG=Si(),oG=I();eA.exports=cG;async function cG(e){try{let{schema_table:t,attributes:r}=eG(e);tG(e,r,t.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(r.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rG(e.hdb_auth_header,t,r),n=iG(e.schema,e.table),i=await nG.openEnvironment(n,e.table),o=await sG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await aG(e,o)}catch(c){oG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(cG,"lmdbUpdateRecords")});var sA=f((d2,rA)=>{"use strict";var _G=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=_G.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");rA.exports=nc});var iA=f((S2,nA)=>{"use strict";var f2=sA(),uG=fo(),lG=mo(),EG=Ho(),Oi=m(),dG=zs().upsertRecords,hG=X(),{getSchemaPath:fG}=j(),SG=Si(),TG=I(),{handleHDBError:mG,hdb_errors:RG}=L();nA.exports=AG;async function AG(e){let t;try{t=uG(e)}catch(_){throw mG(_,_.message,RG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lG(e,s,r.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(s.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await EG(e.hdb_auth_header,r,s),i=fG(e.schema,e.table),o=await hG.openEnvironment(i,e.table),c=await dG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await SG(e,c)}catch(_){TG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(AG,"lmdbUpsertRecords")});var lA=f((m2,uA)=>{"use strict";var pG=Ht(),aA=b(),oA=I(),gG=En(),cA=m(),NG=yl().deleteRecords,OG=X(),{getSchemaPath:IG}=j(),{promisify:bG}=require("util"),wG=bG(setTimeout),_A=1e4,CG=10;uA.exports=LG;async function LG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(aA.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 pG(e.schema,e.table,cA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await gG(n,cA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw oA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return aA.isEmptyOrZeroLength(s)?(oA.trace("No records found to delete"),{message:"No records found to delete"}):await yG(e,s,t)}a(LG,"lmdbDeleteRecordsBefore");async function yG(e,t,r){let s=IG(e.schema,e.table),n=await OG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=_A){let _=t.slice(o,o+_A),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await NG(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await wG(CG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(yG,"chunkDeletes")});var dA=f((A2,EA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");EA.exports=ic});var fA=f((g2,hA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");hA.exports=ac});var mA=f((I2,TA)=>{"use strict";var kl=X(),{getTransactionAuditStorePath:UG}=j(),O2=dA(),Ii=Ue(),MG=b(),SA=fA(),DG=require("util").promisify,PG=DG(setTimeout),BG=1e4,vG=100;TA.exports=HG;async function HG(e){let t=UG(e.schema,e.table),r=await kl.openEnvironment(t,e.table,!0),s=kl.listDBIs(r);kl.initializeDBIs(r,Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new SA;do n=await qG(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 PG(vG);while(n.transactions_deleted>0);return i}a(HG,"deleteAuditLogsBefore");async function qG(e,t){let r=new SA;try{let s=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];MG.isEmpty(c)||(n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ii.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>BG)break}return await n,r}catch(s){throw s}}a(qG,"deleteTransactions")});var AA=f((w2,RA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");RA.exports=oc});var gA=f((y2,pA)=>{"use strict";var GG=Ht(),FG=gi(),L2=AA(),Zt=m(),xG=b(),$l=X(),VG=cs(),kG=En(),$G=mi(),{getSchemaPath:YG}=j();pA.exports=KG;async function KG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=VG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await QG(e),n=YG(e.schema,e.table),i=await $l.openEnvironment(n,e.table);return t===!0&&await WG(e,i,r.hash_attribute),$l.dropDBI(i,e.attribute),s}a(KG,"lmdbDropAttribute");async function WG(e,t,r){let s=$l.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(WG,"removeAttributeFromAllObjects");async function QG(e){let t=new GG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await kG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(xG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new FG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return $G(i)}a(QG,"dropAttributeFromSystem")});var CA=f((D2,wA)=>{"use strict";var Yl=X(),dn=Ue(),M2=us(),Kl=m(),NA=b(),{getTransactionAuditStorePath:JG}=j(),XG=Ns(),cc=on(),ZG=I();wA.exports=zG;async function zG(e){let t=JG(e.schema,e.table),r=await Yl.openEnvironment(t,e.table,!0),s=Yl.listDBIs(r);Yl.initializeDBIs(r,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return OA(r,e.search_values);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,eF(r,e.search_values,n);case Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return jG(r,e.search_values);default:return OA(r)}}a(zG,"readAuditLog");function OA(e,t=[0,Date.now()]){NA.isEmpty(t[0])&&(t[0]=0),NA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[dn.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 cc,n))}a(OA,"searchTransactionsByTimestamp");function jG(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[dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,bA(e,i))}return Object.fromEntries(r)}a(jG,"searchTransactionsByUsername");function eF(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=XG.equals(e,dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=bA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);IA(_,"records",r,l,o),IA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(eF,"searchTransactionsByHashValues");function IA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(IA,"loopRecords");function bA(e,t){let r=[];try{let s=e.dbis[dn.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 cc,i);r.push(o)}}catch(i){ZG.warn(i)}return r}catch(s){throw s}}a(bA,"batchSearchTransactions")});var yA=f((B2,LA)=>{"use strict";var{getSchemaPath:tF}=j(),rF=X();LA.exports={writeTransaction:sF};async function sF(e,t,r){let s=tF(e,t);return(await rF.openEnvironment(s,t)).transaction(r)}a(sF,"writeTransaction")});var PA=f((H2,DA)=>{"use strict";var{getSchemaPath:UA}=j(),MA=X();DA.exports={flush:nF,resetReadTxn:iF};async function nF(e,t){return(await MA.openEnvironment(UA(e,t),t.toString())).flushed}a(nF,"flush");async function iF(e,t){try{(await MA.openEnvironment(UA(e,t),t.toString())).resetReadTxn()}catch{}}a(iF,"resetReadTxn")});var HA=f((G2,vA)=>{"use strict";var aF=I(),{handleHDBError:oF}=L(),cF=wu(),_F=ho(),uF=wl(),lF=Qm(),EF=mi(),dF=Pl(),hF=mR(),fF=wR(),SF=En(),TF=BR(),mF=KR(),RF=jR(),AF=tA(),pF=iA(),gF=lA(),NF=mA(),OF=vl(),IF=gA(),bF=CA(),wF=yA(),BA=PA(),_c=class extends cF{async searchByConditions(t){return TF(t)}async getDataByHash(t){return await dF(t)}async searchByHash(t){return await hF(t)}async getDataByValue(t,r){return await fF(t,r)}async searchByValue(t){return await SF(t)}async createSchema(t){return await lF(t)}async dropSchema(t){return await mF(t)}async createTable(t,r){return await RF(t,r)}async dropTable(t){return await OF(t)}async createAttribute(t){return await _F(t)}async createRecords(t){return await uF(t)}async updateRecords(t){return await AF(t)}async upsertRecords(t){try{return await pF(t)}catch(r){throw oF(r,null,null,aF.ERR,r)}}async deleteRecords(t){return await EF(t)}async deleteRecordsBefore(t){return await gF(t)}async dropAttribute(t){return await IF(t)}async deleteAuditLogsBefore(t){return await NF(t)}async readAuditLog(t){return await bF(t)}writeTransaction(t,r,s){return wF.writeTransaction(t,r,s)}flush(t,r){return BA.flush(t,r)}resetReadTxn(t,r){return BA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");vA.exports=_c});var Qt=f((x2,GA)=>{"use strict";var CF=HA(),LF=wu(),yF=B();yF.initSync();var qA;function UF(){return qA instanceof LF?qA:new CF}a(UF,"getBridge");GA.exports=UF()});var kA=f((k2,VA)=>{"use strict";var FA=require("lodash"),bi=require("mathjs"),MF=require("jsonata"),xA=b();VA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?FA.uniqWith(e,FA.isEqual):e,searchJSON:DF,mad:wi.bind(null,bi.mad),mean:wi.bind(null,bi.mean),mode:wi.bind(null,bi.mode),prod:wi.bind(null,bi.prod),median:wi.bind(null,bi.median)};function wi(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(wi,"aggregateFunction");function DF(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(xA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xA.isEmpty(this.__ala__.res[r])){let s=MF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(DF,"searchJSON")});var YA=f((Y2,$A)=>{"use strict";var le=require("moment"),Wl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;$A.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Wl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Wl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Wl)}});var JA=f((K2,QA)=>{"use strict";var PF=require("@turf/area"),BF=require("@turf/length"),vF=require("@turf/circle"),HF=require("@turf/difference"),qF=require("@turf/distance"),GF=require("@turf/boolean-contains"),FF=require("@turf/boolean-equal"),xF=require("@turf/boolean-disjoint"),VF=require("@turf/helpers"),KA=m(),G=b();QA.exports={geoArea:kF,geoLength:$F,geoCircle:YF,geoDifference:KF,geoDistance:WA,geoNear:WF,geoContains:QF,geoEqual:JF,geoCrosses:XF,geoConvert:ZF};var Ql="geo1 is required",Jl="geo2 is required";function kF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),PF.default(e)}a(kF,"geoArea");function $F(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),BF.default(e,{units:t||"kilometers"})}a($F,"geoLength");function YF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),vF.default(e,t,{units:r||"kilometers"})}a(YF,"geoCircle");function KF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),HF(e,t)}a(KF,"geoDifference");function WA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),qF.default(e,t,{units:r||"kilometers"})}a(WA,"geoDistance");function WF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return WA(e,t,s)<=r}a(WF,"geoNear");function QF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),GF.default(e,t)}a(QF,"geoContains");function JF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),FF.default(e,t)}a(JF,"geoEqual");function XF(e,t){if(G.isEmpty(e))throw new Error(Ql);if(G.isEmpty(e))throw new Error(Jl);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!xF.default(e,t)}a(XF,"geoCrosses");function ZF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(KA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KA.GEO_CONVERSION_ENUM).join(",")}`);return VF[t](e,r)}a(ZF,"geoConvert")});var uc=f((Q2,XA)=>{var Is=kA(),Et=YA(),zt=JA();XA.exports=e=>{e.aggr.mad=e.aggr.MAD=Is.mad,e.aggr.mean=e.aggr.MEAN=Is.mean,e.aggr.mode=e.aggr.MODE=Is.mode,e.aggr.prod=e.aggr.PROD=Is.prod,e.aggr.median=e.aggr.MEDIAN=Is.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Is.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Is.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var jA=f((J2,zA)=>{"use strict";var Ci=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var zF=uc(),ZA=require("clone"),lc=require("recursive-iterator"),D=I(),v=b(),hn=Qt(),jF=m(),{hdb_errors:e0}=L(),t0="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";zF(Ie);var Ec=class{constructor(t,r){if(v.isEmpty(t))throw D.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(),v.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!v.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(ZA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ci.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(v.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!v.isEmpty(r)&&r.right)if(v.isNotEmptyAndHasValue(r.right.value)){let s=v.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!v.isEmpty(s)&&v.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=v.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&v.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(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(!v.isEmpty(jF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(v.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(v.isEmptyOrZeroLength(r.left.columnid)||v.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(v.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!v.isEmpty(r.right.value)||!v.isEmpty(r.left.value)?s.add(v.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from)&&v.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&&Ci.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(v.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);v.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(v.isEmptyOrZeroLength(this.all_table_attributes)&&!v.isEmptyOrZeroLength(this.columns.columns))return t;if(v.isEmptyOrZeroLength(this.all_table_attributes)&&v.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(ZA(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(v.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(t0)>-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=Ci.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!v.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await hn.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await hn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!v.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!v.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await hn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await hn.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,v.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,v.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.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 Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Ci.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ci.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 D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await hn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(e0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await hn.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");zA.exports=Ec});var It=f((Z2,tp)=>{"use strict";var r0=Hf();tp.exports={searchByConditions:a0,searchByHash:o0,searchByValue:c0,search:_0};var Xl=Qt(),ep=require("util"),s0=ep.callbackify(Xl.searchByHash),n0=ep.callbackify(Xl.searchByValue),i0=jA();async function a0(e){return Xl.searchByConditions(e)}a(a0,"searchByConditions");function o0(e,t){try{s0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(o0,"searchByHash");function c0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),n0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(c0,"searchByValue");function _0(e,t){try{let r=new r0(e);r.validate(),new i0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(_0,"search")});var As=f((j2,_p)=>{"use strict";var sp=It(),Kr=I(),np=_o(),u0=require("lodash"),l0=xr(),ip=b(),{promisify:ap}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:E0}=L(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:op}=E0,d0=B();d0.initSync();var rp=X(),h0=Ns(),{getSchemaPath:f0}=j(),Li=ap(sp.searchByValue),S0=ap(sp.searchByHash),fn="name",cp="hash_attribute",Zl="schema",T0="schema_table",m0="attribute";_p.exports={describeAll:R0,describeTable:fc,describeSchema:p0};async function R0(e){try{let t=ip.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:fn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[fn]},i=await Li(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[cp,z.ID_ATTRIBUTE_STRING,fn,Zl]},u=await Li(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(R0,"describeAll");async function fc(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=np.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:fn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Li(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),op.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:T0,search_value:r+"."+s,get_attributes:[m0]},E=Array.from(await Li(l));E=u0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=A0(n)),i.attributes=E,i.clustering_stream_name=l0.createNatsTableStreamName(u.schema,u.name);try{let d=f0(i.schema,i.name),h=await rp.openEnvironment(d,i.name),T=rp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of h0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function A0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(A0,"getAttrsByPerms");async function p0(e){let t=np.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Zl,search_value:s,hash_values:[],get_attributes:[cp,z.ID_ATTRIBUTE_STRING,fn,Zl]},i=Array.from(await Li(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[fn]},c=Array.from(await S0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),op.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),ip.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(p0,"describeSchema")});var qr=f((t4,hp)=>{var Sn=cs(),{callbackify:Ep,promisify:g0}=require("util");hp.exports={setSchemaDataToGlobal:up,getTableSchema:I0,getSystemSchema:w0,setSchemaDataToGlobalAsync:g0(up)};var dp=As(),N0=Ep(dp.describeAll),O0=Ep(dp.describeTable);function up(e){N0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(up,"setSchemaDataToGlobal");function lp(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(lp,"returnSchema");function I0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?b0(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,lp(e,t))}):r(null,lp(e,t))}a(I0,"getTableSchema");function b0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}O0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(b0,"setTableDataToGlobal");function w0(){return Sn}a(w0,"getSystemSchema")});var Sc=f((s4,fp)=>{"use strict";var C0=Qt();fp.exports={writeTransaction:L0};function L0(e,t,r){return C0.writeTransaction(e,t,r)}a(L0,"writeTransaction")});var zl=f((i4,y0)=>{y0.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 be=f((h4,Dp)=>{"use strict";var pe=B();pe.initSync();var U0=require("fs-extra"),M0=require("semver"),Pi=require("path"),{monotonicFactory:D0}=require("ulidx"),sE=D0(),P0=require("util"),Tp=require("child_process"),B0=P0.promisify(Tp.exec),v0=Tp.spawn,V=oe(),Q=m(),Tc=b(),Wr=I(),mc=xr(),H0=Sc(),yi=lr(),{encode:tE,decode:nE}=require("msgpackr"),{isEmpty:bs}=Tc,mp=Vr(),Rp=12e10,{connect:q0,StorageType:Ap,RetentionPolicy:pp,AckPolicy:iE,DeliverPolicy:Bi,DiscardPolicy:G0,NatsConnection:a4,JetStreamManager:o4,JetStreamClient:c4,StringCodec:_4,JSONCodec:F0,createInbox:aE,StreamSource:u4,headers:x0,toJsMsg:gp,nuid:l4,JetStreamOptions:E4,ErrorCode:Sp,nanos:d4}=require("nats"),{PACKAGE_ROOT:V0}=m(),k0=zl(),Np=F0(),$0="clustering",Y0=k0.engines[V.NATS_SERVER_NAME],K0=Pi.join(V0,"dependencies"),rE=Pi.join(K0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),jl,eE,Ui,Mi,Di,Gt;Dp.exports={runCommand:Op,checkNATSServerInstalled:W0,createConnection:oE,getConnection:Rc,getJetStreamManager:vi,getJetStream:Ip,getNATSReferences:dt,getServerList:J0,createLocalStream:cE,listStreams:bp,deleteLocalStream:X0,getServerConfig:Hi,listRemoteStreams:Z0,viewStream:z0,viewStreamIterator:j0,publishToStream:ex,createWorkQueueStream:tx,addSourceToWorkStream:Cp,request:rx,removeSourceFromWorkStream:yp,reloadNATS:_E,reloadNATSHub:sx,reloadNATSLeaf:nx,extractServerName:Lp,requestErrorHandler:ix,updateWorkStream:ax,createLocalTableStream:Up,createTableStreams:ox,purgeTableStream:Mp,purgeSchemaTableStreams:cx,getStreamInfo:_x,updateLocalStreams:lx,closeConnection:Q0,getJsmServerName:qi,addNatsMsgHeader:wp};async function Op(e,t=void 0){let{stdout:r,stderr:s}=await B0(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
7
|
`,"")}a(Op,"runCommand");async function W0(){try{await U0.access(rE)}catch{return!1}let e=await Op(`${rE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return M0.eq(t,Y0)}a(W0,"checkNATSServerInstalled");async function oE(e,t,r,s=!0,n="127.0.0.1"){return q0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(oE,"createConnection");async function Q0(){Gt&&(await Gt.drain(),Gt=void 0)}a(Q0,"closeConnection");async function Rc(){if(!Gt){let e=await mp.getClusterUser();if(bs(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Gt=await oE(t,e.username,e.decrypt_hash)}return Gt}a(Rc,"getConnection");async function vi(){if(Mi)return Mi;bs(Gt)&&await Rc();let{domain:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Mi=await Gt.jetstreamManager({domain:e}),Mi}a(vi,"getJetStreamManager");async function Ip(){if(Di)return Di;bs(Gt)&&await Rc();let{domain:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Di=Gt.jetstream({domain:e}),Di}a(Ip,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Mi||await vi(),r=Di||await Ip();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function J0(e){let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await mp.getClusterUser(),n=await oE(t,r,s),i=aE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=Np.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Tc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a(J0,"getServerList");async function cE(e,t){let{jsm:r}=await dt(),s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Ap.File,retention:pp.Limits,subjects:t,discard:G0.Old,duplicate_window:Rp,max_msgs:n,max_bytes:i,max_age:s})}a(cE,"createLocalStream");async function bp(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(bp,"listStreams");async function X0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(X0,"deleteLocalStream");async function Z0(e){let{connection:t}=await dt(),r=[],s=aE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Np.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(Z0,"listRemoteStreams");async function z0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=sE(),o=[],c={ack_policy:iE.None,durable_name:i,deliver_subject:i,deliver_policy:Bi.All};t&&(c.deliver_policy=Bi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=gp(l),d=nE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(z0,"viewStream");async function*j0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=sE(),o={ack_policy:iE.None,durable_name:i,deliver_subject:i,deliver_policy:Bi.All};t&&(o.deliver_policy=Bi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=gp(u),E=nE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}a(j0,"viewStreamIterator");async function ex(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;pe.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=wp(s,r);let{js:i}=await dt(),o=await qi(),c=`${e}.${o}`;try{Wr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,tE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await cE(t,[c]),n&&await i.publish(c,tE(s),{headers:r});else throw _}}a(ex,"publishToStream");function wp(e,t){t===void 0&&(t=x0());let r=pe.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Tc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${sE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(wp,"addNatsMsgHeader");function Hi(e){e=e.toLowerCase();let t=Pi.join(pe.get(Q.CONFIG_PARAMS.ROOTPATH),$0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bs(eE)&&(eE={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Pi.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),eE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bs(jl)&&(jl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Pi.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),jl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Hi,"getServerConfig");async function tx(e){let{jsm:t}=await dt(),r=await qi();try{await t.streams.add({name:e.stream_name,storage:Ap.File,retention:pp.Workqueue,duplicate_window:Rp,subjects:[`${V.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:iE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Bi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(tx,"createWorkQueueStream");async function Cp(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=Lp(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=mc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let T={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(Cp,"addSourceToWorkStream");function Lp(e){return e.split(".")[1]}a(Lp,"extractServerName");async function yp(e,t,r){let{schema:s,table:n}=r,i=mc.createNatsTableStreamName(s,n),{jsm:o}=await dt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config)}a(yp,"removeSourceFromWorkStream");async function rx(e,t,r=2e3,s=aE()){if(!Tc.isObject(t))throw new Error("data param must be an object");let n=tE(t),{connection:i}=await dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return nE(c.data)}a(rx,"request");function _E(e){return new Promise(async(t,r)=>{let s=v0(rE,["--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(_E,"reloadNATS");async function sx(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await _E(e)}a(sx,"reloadNATSHub");async function nx(){let{pid_file_path:e}=Hi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await _E(e)}a(nx,"reloadNATSLeaf");function ix(e,t,r){let s;switch(e.code){case Sp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Sp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(ix,"requestErrorHandler");async function ax(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await H0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Cp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await yp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(ax,"updateWorkStream");async function Up(e,t){let r=mc.createNatsTableStreamName(e,t),s=await qi(),n=ux(e,t,s);await cE(r,[n])}a(Up,"createLocalTableStream");async function ox(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Up(s,n)}}a(ox,"createTableStreams");async function Mp(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=mc.createNatsTableStreamName(e,t),{jsm:s}=await dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Wr.warn(r);else throw r}}a(Mp,"purgeTableStream");async function cx(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Mp(e,t[r])}a(cx,"purgeSchemaTableStreams");async function _x(e){return(await vi()).streams.info(e)}a(_x,"getStreamInfo");function ux(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ux,"createSubjectName");async function qi(){if(Ui)return Ui;if(Ui=(await vi())?.nc?.info?.server_name,Ui===void 0)throw new Error("Unable to get jetstream manager server name");return Ui}a(qi,"getJsmServerName");async function lx(){let e=await vi(),t=await qi(),r=await bp();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Ex(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");Wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(lx,"updateLocalStreams");function Ex(e){let{config:t}=e,r=!1;if(t.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Ex,"updateStreamLimits")});var uE=f((S4,Pp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Pp.exports=Ac});var Tn=f((m4,Bp)=>{"use strict";var dx=b(),lE=B(),Qr=m(),hx=oe(),fx=be(),jt=I(),Sx=uE(),Tx=xr();lE.initSync();Bp.exports={postOperationHandler:Rx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=mx(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await fx.publishToStream(`${hx.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,Tx.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function mx(e,t,r){if(dx.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Qr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(mx,"convertCRUDOperationToTransaction");async function Rx(e,t,r){if(!lE.get(Qr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;jt.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=lE.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new Sx(t.txn_time,s,n);switch(e.operation){case Qr.OPERATIONS_ENUM.INSERT:try{await pc(e,t.inserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for insert."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.DELETE:try{await pc(e,t.deleted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for delete."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPDATE:try{await pc(e,t.update_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for update."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPSERT:try{await pc(e,t.upserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for upsert."),jt.error(o)}break;default:break}return t}a(Rx,"postOperationHandler")});var Fp=f((A4,Gp)=>{"use strict";var Ax=It(),px=qr(),vp=I(),Hp=Ot(),gx=Sc(),Nx=require("clone"),dE=require("alasql"),Ox=uc(),qp=require("util"),Ix=qp.promisify(px.getTableSchema),bx=qp.promisify(Ax.search),wx=m(),EE=b(),Cx=Tn();Ox(dE);Gp.exports={update:yx};var Lx="There was a problem performing this update. Please check the logs and try again.";async function yx({statement:e,hdb_user:t}){let r=await Ix(e.table.databaseid,e.table.tableid),s=Ux(e.columns);EE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Nx(n),c=EE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=dE.parse(_).statements[0],l=await gx.writeTransaction(r.schema,r.name,async()=>{let E=await bx(u),d=Mx(s,E);return Dx(o,d,t)});return await Hp.flush({schema:r.schema,table:r.name}),l}a(yx,"update");function Ux(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=dE.compile(`SELECT ${r.expression.toString()} AS [${wx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw vp.error(t),new Error(Lx)}}a(Ux,"createUpdateRecord");function Mx(e,t){return EE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Mx,"buildUpdateRecords");async function Dx(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Hp.update(s);await Cx.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){vp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Dx,"updateRecords")});var Vp=f((g4,xp)=>{var Px=require("alasql"),Bx=It(),vx=I(),Hx=Qt(),fE=require("util"),hE=b(),qx=m(),Gx=qr(),Fx=Sc(),xx=Tn(),Vx=Ot(),kx="record",$x="successfully deleted",Yx=fE.callbackify(Jx),Kx=fE.promisify(Bx.search),Wx=fE.promisify(Gx.getTableSchema);xp.exports={convertDelete:Yx};function Qx(e){return`${e.deleted_hashes.length} ${kx}${e.deleted_hashes.length===1?"":"s"} ${$x}`}a(Qx,"generateReturnMessage");async function Jx({statement:e,hdb_user:t}){let r=await Wx(e.table.databaseid,e.table.tableid);hE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Px.parse(o).statements[0],_={operation:qx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Fx.writeTransaction(r.schema,r.name,async()=>(_.records=await Kx(c),Hx.deleteRecords(_)));return await Vx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await xx.postOperationHandler(_,u),hE.isEmptyOrZeroLength(u.message)&&(u.message=Qx(u)),delete u.txn_time,u}catch(u){throw vx.error(u),u.hdb_code?u.message:u}}a(Jx,"convertDelete")});var Yp=f((O4,$p)=>{"use strict";var TE=As(),{hdb_errors:SE}=L();$p.exports={checkSchemaExists:kp,checkSchemaTableExists:Xx,schema_describe:TE};async function kp(e){if(!global.hdb_schema[e])try{let t=await TE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return SE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(kp,"checkSchemaExists");async function Xx(e,t){let r=await kp(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await TE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return SE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return SE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(Xx,"checkSchemaTableExists")});var Nc=f((w4,Jp)=>{"use strict";var mn=_o(),ws=Yp(),Zx=I(),zx=require("uuid").v4,b4=require("clone"),Rn=nn(),Cs=m(),jx=require("util"),Ls=Qt(),{handleHDBError:We,hdb_errors:eV}=L(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=eV,{SchemaEventMsg:An}=kr(),Kp=be();Jp.exports={createSchema:tV,createSchemaStructure:Wp,createTable:rV,createTableStructure:Qp,createAttribute:oV,dropSchema:sV,dropTable:nV,dropAttribute:iV};async function tV(e){try{let t=await Wp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(tV,"createSchema");async function Wp(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);if(!await ws.checkSchemaExists(e.schema))throw We(new Error,gc.SCHEMA_EXISTS_ERR(e.schema),Qe.BAD_REQUEST,Cs.LOG_LEVELS.ERROR,gc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ls.createSchema(e),`schema '${e.schema}' successfully created`}a(Wp,"createSchemaStructure");async function rV(e){let t=await Qp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(rV,"createTable");async function Qp(e){let t=mn.create_table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);mn.validateTableResidence(e.residence);let r=await ws.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);if(!await ws.checkSchemaTableExists(e.schema,e.table))throw We(new Error,gc.TABLE_EXISTS_ERR(e.schema,e.table),Qe.BAD_REQUEST,Cs.LOG_LEVELS.ERROR,gc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zx(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ls.createTable(n,e);else throw We(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qe.BAD_REQUEST);else await Ls.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Qp,"createTableStructure");async function sV(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await ws.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);let s=await ws.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ls.dropSchema(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Kp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(sV,"dropSchema");async function nV(e){let t=mn.table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await ws.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);return await Ls.dropTable(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),await Kp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nV,"dropTable");async function iV(e){let t=mn.attribute_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await ws.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,Cs.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw We(new Error,"You cannot drop a hash attribute",Qe.BAD_REQUEST,void 0,void 0,!0);if(Cs.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw We(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qe.BAD_REQUEST,void 0,void 0,!0);try{return await Ls.dropAttribute(e),aV(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Zx.error(`Got an error deleting attribute ${jx.inspect(e)}.`),s}}a(iV,"dropAttribute");function aV(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(aV,"dropAttributeFromGlobal");async function oV(e){return await Ls.createAttribute(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(oV,"createAttribute")});var Zp=f((L4,Xp)=>{"use strict";var{OPERATIONS_ENUM:cV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=cV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Xp.exports=Oc});var mE=f((M4,rg)=>{"use strict";var _V=Qt(),U4=Zp(),Ic=b(),bc=m(),uV=B(),{handleHDBError:zp,hdb_errors:lV}=L(),{HDB_ERROR_MSGS:jp,HTTP_STATUS_CODES:eg}=lV,EV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),tg="To use this operation audit log must be enabled in harperdb-config.yaml";rg.exports=dV;async function dV(e){if(Ic.isEmpty(e.schema))throw new Error(jp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(jp.TABLE_REQUIRED_ERR);if(!uV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw zp(new Error,tg,eg.BAD_REQUEST,bc.LOG_LEVELS.ERROR,tg,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw zp(new Error,t,eg.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&EV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await _V.readAuditLog(e)}a(dV,"readAuditLog")});var cg=f((P4,og)=>{var Jr=require("validate.js"),ng=te(),pn=m(),{handleHDBError:hV,hdb_errors:fV}=L(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:SV}=fV,RE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),TV={STRUCTURE_USER:"structure_user"},sg=Object.values(pn.ROLE_TYPES_ENUM),mV="attribute_permissions",RV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,AV=[mV,...Object.values(gn)],ig=[gn.READ,gn.INSERT,gn.UPDATE],pV=[RV,...ig];function gV(e){let t=RE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ag(e,t)}a(gV,"addRoleValidation");function NV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ag(e,t)}a(NV,"alterRoleValidation");function OV(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ng.validateObject(e,t)}a(OV,"dropRoleValidation");var IV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ag(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)IV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=ng.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=bV(e);o&&Ee(o,r),sg.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&Ee(_e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(sg.indexOf(o)<0){if(o===TV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||Ee(_e.SCHEMA_NOT_FOUND(E),r)}continue}Ee(_e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ee(_e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Ee(_e.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{AV.includes(l)||Ee(_e.INVALID_PERM_KEY(l),r,o,_)}),Object.values(gn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||Ee(_e.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Ee(_e.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){Ee(_e.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Ee(_e.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!pV.includes(R)&&R!==gn.DELETE&&Ee(_e.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){Ee(_e.ATTR_PERM_MISSING_NAME,r,o,_);continue}let T=h.attribute_name;if(!l.includes(T)){Ee(_e.INVALID_ATTRIBUTE_IN_PERMS(T),r,o,_);continue}ig.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||Ee(_e.ATTR_PERM_NOT_BOOLEAN(R,T),r,o,_):Ee(_e.ATTR_PERM_MISSING(R,T),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;Ee(_e.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return wV(r)}a(ag,"customValidate");og.exports={addRoleValidation:gV,alterRoleValidation:NV,dropRoleValidation:OV};function bV(e){let{operation:t,permission:r}=e;if(t===pn.OPERATIONS_ENUM.ADD_ROLE||t===pn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return _e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pn.ROLE_TYPES_ENUM.SUPER_USER:pn.ROLE_TYPES_ENUM.CLUSTER_USER;return _e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(bV,"validateNoSUPerms");function wV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_e.ROLE_PERMS_ERROR,...e};return hV(new Error,s,SV.BAD_REQUEST)}else return null}a(wV,"generateRolePermResponse");function Ee(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Ee,"addPermError")});var wE=f((v4,hg)=>{"use strict";var _g=Ot(),ug=It(),CV=ms(),gE=cg(),NE=nn(),LV=require("uuid").v4,OE=require("util"),yV=tn(),mr=m(),lg=b(),IE=OE.promisify(ug.searchByValue),UV=OE.promisify(ug.searchByHash),MV=OE.promisify(CV.delete),DV=Ht(),PV=un(),{hdb_errors:BV,handleHDBError:Gi}=L(),{HDB_ERROR_MSGS:Eg,HTTP_STATUS_CODES:AE}=BV,{UserEventMsg:bE}=kr();hg.exports={addRole:vV,alterRole:qV,dropRole:GV,listRoles:dg};function pE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(pE,"scrubRoleDetails");async function vV(e){let t=gE.addRoleValidation(e);if(t)throw t;if(!(await yV.getLicense()).enterprise){let o=await dg();if(HV(e,o))throw new Error(`Your current license only supports ${mr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${mr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${mr.BASIC_LICENSE_MAX_NON_CU_ROLES+mr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${mr.SUPPORT_HELP_MSG}`)}e=pE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await IE(s)||[])}catch(o){throw Gi(o)}if(n&&n.length>0)throw Gi(new Error,Eg.ROLE_ALREADY_EXISTS(e.role),AE.CONFLICT,void 0,void 0,!0);e.id||(e.id=LV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await _g.insert(i),NE.signalUserChange(new bE(process.pid)),e=pE(e),e}a(vV,"addRole");function HV(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!lg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(HV,"checkClusterUserRole");async function qV(e){let t=gE.alterRoleValidation(e);if(t)throw t;e=pE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await _g.update(r)}catch(s){throw Gi(s)}return NE.signalUserChange(new bE(process.pid)),e}a(qV,"alterRole");async function GV(e){let t=gE.dropRoleValidation(e);if(t)throw Gi(new Error,t,AE.BAD_REQUEST,void 0,void 0,!0);let r=new PV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await UV(r));if(s.length===0)throw Gi(new Error,Eg.ROLE_NOT_FOUND,AE.NOT_FOUND,void 0,void 0,!0);let n=new DV(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await IE(n)),o=!1;if(lg.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await MV(c),NE.signalUserChange(new bE(process.pid)),`${s[0].role} successfully deleted`}a(GV,"dropRole");async function dg(){return IE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(dg,"listRoles")});var mg=f((q4,Tg)=>{"use strict";var FV=B(),Xr=require("joi"),xV=te(),fg=require("moment"),VV=require("fs-extra"),CE=require("path"),kV=require("lodash"),Fi=m(),{LOG_LEVELS:ys}=m(),$V="YYYY-MM-DD hh:mm:ss",YV=CE.resolve(__dirname,"../logs");Tg.exports=function(e){return xV.validateBySchema(e,KV)};var KV=Xr.object({from:Xr.custom(Sg),until:Xr.custom(Sg),level:Xr.valid(ys.NOTIFY,ys.FATAL,ys.ERROR,ys.WARN,ys.INFO,ys.DEBUG,ys.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(WV)});function Sg(e,t){if(fg(e,fg.ISO_8601).format($V)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Sg,"validateDatetime");function WV(e,t){if(kV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=FV.get(Fi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Fi.LOG_NAMES.HDB:e,i=n===Fi.LOG_NAMES.INSTALL?CE.join(YV,Fi.LOG_NAMES.INSTALL):CE.join(s,n);return VV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(WV,"validateReadLogPath")});var yE=f((F4,Rg)=>{"use strict";var wc=m(),QV=I(),JV=B(),XV=mg(),LE=require("path"),ZV=require("fs-extra"),{once:zV}=require("events"),{handleHDBError:jV,hdb_errors:ek}=L(),{PACKAGE_ROOT:tk}=m(),rk=LE.join(tk,"logs"),sk=1e3;Rg.exports=nk;async function nk(e){let t=XV(e);if(t)throw jV(t,t.message,ek.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=JV.get(wc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?wc.LOG_NAMES.HDB:e.log_name,n=s===wc.LOG_NAMES.INSTALL?LE.join(rk,wc.LOG_NAMES.INSTALL):LE.join(r,s),i=ZV.createReadStream(n);i.on("error",U=>{QV.error(U)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?sk:e.limit,h=e.order===void 0?void 0:e.order,T=e.start===void 0?0:e.start,R=T+d,g=0,H=[],x="",q;i.on("data",U=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=x+U;let ue=0,ae;for(;(ae=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(ue,ae.index),ye(q));let[qn,os,wr]=ae,Oa=wr.split("] ["),bw=Oa[0],ww=Oa[1];Oa.splice(0,2),q={timestamp:os,thread:bw,level:ww,tags:Oa,message:""},ue=ae.index+qn.length}x=U.slice(ue)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),ye(q))}),i.resume();function ye(U){let $,ue,ae;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),ue=new Date(u),ae=new Date(E),U.level===c&&$>=ue&&$<=ae&&g<T?g++:U.level===c&&$>=ue&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(U.timestamp),ue=new Date(u),U.level===c&&$>=ue&&g<T?g++:U.level===c&&$>=ue&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(U.timestamp),ae=new Date(E),U.level===c&&$<=ae&&g<T?g++:U.level===c&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),ue=new Date(u),ae=new Date(E),$>=ue&&$<=ae&&g<T?g++:$>=ue&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case o:U.level===c&&g<T?g++:U.level===c&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(U.timestamp),ue=new Date(u),$>=ue&&g<T?g++:$>=ue&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(U.timestamp),ae=new Date(E),$<=ae&&g<T?g++:$<=ae&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;default:g<T?g++:(Zr(U,h,H),g++,g===R&&i.destroy())}}return a(ye,"onLogMessage"),await zV(i,"close"),H}a(nk,"readLog");function Zr(e,t,r){t==="desc"?ik(e,r):t==="asc"?ak(e,r):r.push(e)}a(Zr,"pushLineToResult");function ik(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ik,"insertDescending");function ak(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(ak,"insertAscending")});var Lc=f(($4,gg)=>{"use strict";var UE=require("joi"),{string:Cc,boolean:Ag,date:ok}=UE.types(),ck=te(),{validateSchemaExists:V4,validateTableExists:k4,validateSchemaName:_k}=Wt(),uk=m(),lk=oe(),Ek=B(),dk=Cc.invalid(Ek.get(uk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lk.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),pg={operation:Cc.valid("add_node","update_node"),node_name:dk,subscriptions:UE.array().items({table:Cc.required(),schema:Cc.custom(_k).required(),subscribe:Ag.required(),publish:Ag.required().custom(fk),start_time:ok.iso()}).min(1).required()};function hk(e){return ck.validateBySchema(e,UE.object(pg))}a(hk,"addUpdateNodeValidator");function fk(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(fk,"checkForFalsy");gg.exports={addUpdateNodeValidator:hk,validation_schema:pg}});var Og=f((K4,Ng)=>{var Sk=te(),Tk={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Ng.exports=function(e){return Sk.validateObject(e,Tk)}});var ME=f((W4,Ig)=>{"use strict";var mk=m().OPERATIONS_ENUM,yc=class{constructor(t,r,s,n=void 0){this.operation=mk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(yc,"UpdateObject");Ig.exports=yc});var wg=f((J4,bg)=>{"use strict";var Rk={OPERATION:"operation",REFRESH:"refresh"},Uc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Uc,"JWTTokens");var Mc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Mc,"JWTRSAKeys");bg.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:Rk,JWTRSAKeys:Mc}});var vc=f((Z4,Ug)=>{"use strict";var Vi=require("jsonwebtoken"),DE=require("fs-extra"),PE=b(),bt=m(),{handleHDBError:Je,hdb_errors:Ak}=L(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=Ak,xi=I(),Cg=Ao(),HE=Vr(),pk=Ot().update,gk=ME(),Nk=nn(),{UserEventMsg:Ok}=kr(),zr=B();zr.initSync();var BE=require("path"),{JWTTokens:Ik,JWTRSAKeys:bk,TOKEN_TYPE_ENUM:Dc}=wg(),wk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Ck=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",vE;Ug.exports={createTokens:Lk,validateOperationToken:Uk,refreshOperationToken:yk,validateRefreshToken:yg};async function Lk(e){if(PE.isEmpty(e)||typeof e!="object")throw Je(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(PE.isEmpty(e.username))throw Je(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(PE.isEmpty(e.password))throw Je(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await HE.findAndValidateUser(e.username,e.password),!t)throw Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw xi.error(d),Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bc(),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 Lg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Ck,algorithm:Pc,subject:Dc.REFRESH}),_=Cg.hash(c),u=new gk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await pk(u)}catch(d){xi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Je(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return Nk.signalUserChange(new Ok(process.pid)),new Ik(o,c)}a(Lk,"createTokens");async function Lg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:wk,algorithm:Pc,subject:Dc.OPERATION})}a(Lg,"signOperationToken");async function Bc(){if(vE===void 0)try{let e=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=BE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await DE.readFile(e)).toString(),n=(await DE.readFile(t)).toString(),i=(await DE.readFile(r)).toString();vE=new bk(i,n,s)}catch(e){throw xi.error(e),Je(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return vE}a(Bc,"getJWTRSAKeys");async function yk(e){if(!e)throw Je(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Je(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await yg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await Lg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(yk,"refreshOperationToken");async function Uk(e){try{let t=await Bc(),r=await Vi.verify(e,t.public_key,{algorithms:Pc,subject:Dc.OPERATION});return await HE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xi.warn(t),t.name&&t.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(Uk,"validateOperationToken");async function yg(e){let t;try{let r=await Bc(),s=await Vi.verify(e,r.public_key,{algorithms:Pc,subject:Dc.REFRESH});t=await HE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xi.warn(r),r.name&&r.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!Cg.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(yg,"validateRefreshToken")});var Bg=f((e5,Pg)=>{"use strict";var Mk=Og(),Nn=require("passport"),Dk=require("passport-local").Strategy,Pk=require("passport-http").BasicStrategy,Bk=require("util"),vk=Vr(),Dg=Bk.callbackify(vk.findAndValidateUser),j4=it(),Hk=m(),Mg=vc();Nn.use(new Dk(function(e,t,r){Dg(e,t,r)}));Nn.use(new Pk(function(e,t,r){Dg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function qk(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Nn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===Hk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Mg.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Mg.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(qk,"authorize");function Gk(e,t){let r=Mk(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Gk,"checkPermissions");Pg.exports={authorize:qk,checkPermissions:Gk}});var On=f((r5,vg)=>{"use strict";var Hc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hc,"Node");var qc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qc,"NodeSubscription");vg.exports={Node:Hc,NodeSubscription:qc}});var qg=f((n5,Hg)=>{"use strict";var Fk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Fk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");Hg.exports=Gc});var ki=f((a5,Gg)=>{"use strict";var Fc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Fc,"RemotePayloadObject");var xc=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(xc,"RemotePayloadSubscription");Gg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var xg=f((c5,Fg)=>{"use strict";var Vc=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(Vc,"TableSizeObject");Fg.exports=Vc});var kg=f((u5,Vg)=>{"use strict";var xk=xg(),Vk=Ue(),In=X(),kk=I(),{getSchemaPath:$k,getTransactionAuditStorePath:Yk}=j();Vg.exports=Kk;async function Kk(e){let t=new xk;try{let r=$k(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=Yk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Vk.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await In.environmentDataSize(r,e.name),u=await In.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){kk.warn(`unable to stat table dbi due to ${r}`)}return t}a(Kk,"lmdbGetTableSize")});var Yg=f((E5,$g)=>{"use strict";var kc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(kc,"SystemInformationObject");$g.exports=kc});var bn=f((h5,Jg)=>{"use strict";var Wk=require("fs-extra"),Qk=require("path"),He=require("systeminformation"),jr=I(),qE=m(),Jk=kg(),Wg=As(),{getThreadInfo:Kg}=fs(),Qg=B();Qg.initSync();var Xk=Yg(),{openEnvironment:Zk}=X(),{getSchemaPath:zk}=j(),$c;Jg.exports={getHDBProcessInfo:VE,getNetworkInfo:$E,getDiskInfo:kE,getMemoryInfo:xE,getCPUInfo:FE,getTimeInfo:GE,getSystemInformation:YE,systemInformation:jk,getTableSize:KE,getMetrics:WE};function GE(){return He.time()}a(GE,"getTimeInfo");async function FE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await He.cpu();l.cpu_speed=await He.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:T,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await He.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:ye,raw_load_idle:U,raw_load_irq:$,raw_load_nice:ue,raw_load_system:ae,raw_load_user:qn,...os}=q;x.cpus.push(os)}),l.current_load=x,l}catch(e){return jr.error(`error in getCPUInfo: ${e}`),{}}}a(FE,"getCPUInfo");async function xE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await He.mem();return Object.assign(n,process.memoryUsage())}catch(e){return jr.error(`error in getMemoryInfo: ${e}`),{}}}a(xE,"getMemoryInfo");async function VE(){let e={core:[],clustering:[]};try{let t=await He.processes(),r;try{r=Number.parseInt(await Wk.readFile(Qk.join(Qg.get(qE.CONFIG_PARAMS.ROOTPATH),qE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===qE.NODE_ERROR_CODES.ENOENT)jr.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 jr.error(`error in getHDBProcessInfo: ${t}`),e}}a(VE,"getHDBProcessInfo");async function kE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await He.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await He.fsStats();return e.read_write=u,e.size=await He.fsSize(),e}catch(t){return jr.error(`error in getDiskInfo: ${t}`),e}}a(kE,"getDiskInfo");async function $E(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await He.networkInterfaceDefault(),e.latency=await He.inetChecksite("google.com"),(await He.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await He.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return jr.error(`error in getNetworkInfo: ${t}`),e}}a($E,"getNetworkInfo");async function YE(){if($c!==void 0)return $c;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await He.osInfo();e=c;let _=await He.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,$c=e,$c}catch(t){return jr.error(`error in getSystemInformation: ${t}`),e}}a(YE,"getSystemInformation");async function KE(){let e=[],t=await Wg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Jk(s));return e}a(KE,"getTableSize");async function WE(){let e=await Wg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=zk(r,n),c=(await Zk(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){jr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(WE,"getMetrics");async function jk(e){let t=new Xk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await YE(),t.time=GE(),t.cpu=await FE(),t.memory=await xE(),t.disk=await kE(),t.network=await $E(),t.harperdb_processes=await VE(),t.table_size=await KE(),t.metrics=await WE(),t.threads=await Kg(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await YE();break;case"time":t.time=GE();break;case"cpu":t.cpu=await FE();break;case"memory":t.memory=await xE();break;case"disk":t.disk=await kE();break;case"network":t.network=await $E();break;case"harperdb_processes":t.harperdb_processes=await VE();break;case"table_size":t.table_size=await KE();break;case"database_metrics":case"metrics":t.metrics=await WE();break;case"threads":t.threads=await Kg();break;default:break}return t}a(jk,"systemInformation")});var QE=f((m5,Xg)=>{"use strict";var S5=require("fs-extra"),T5=I();Xg.exports={version:e$,printVersion:r$,nodeVersion:t$};var es=zl();function e$(){if(es)return es.version}a(e$,"version");function t$(){if(es&&es.engines&&es.engines["preferred-node"])return es.engines["preferred-node"]}a(t$,"nodeVersion");function r$(){es&&console.log(`HarperDB Version ${es.version}`)}a(r$,"printVersion")});var Rr=f((g5,eN)=>{"use strict";var s$=Ot(),JE=b(),XE=require("util"),Us=m(),Zg=B();Zg.initSync();var n$=Bg(),zg=It(),{Node:A5,NodeSubscription:p5}=On(),i$=un(),a$=qg(),{RemotePayloadObject:o$,RemotePayloadSubscription:c$}=ki(),{handleHDBError:_$,hdb_errors:u$}=L(),{HTTP_STATUS_CODES:l$,HDB_ERROR_MSGS:E$}=u$,d$=Ht(),h$=bn(),f$=QE(),S$=XE.promisify(n$.authorize),T$=XE.promisify(zg.searchByHash),m$=XE.promisify(zg.searchByValue);eN.exports={authHeaderToUser:R$,isEmpty:A$,getNodeRecord:p$,upsertNodeRecord:g$,buildNodePayloads:N$,checkClusteringEnabled:O$,getAllNodeRecords:I$,getSystemInfo:b$,reverseSubscription:jg};async function R$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await S$(t,null),e}a(R$,"authHeaderToUser");function A$(e){return e==null}a(A$,"isEmpty");async function p$(e){let t=new i$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return T$(t)}a(p$,"getNodeRecord");async function g$(e){let t=new a$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return s$.upsert(t)}a(g$,"upsertNodeRecord");function jg(e){if(JE.isEmpty(e.subscribe)||JE.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(jg,"reverseSubscription");function N$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=JE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=jg(c),h=new c$(_,u,l,d,E,c.start_time);n.push(h)}return new o$(r,t,n,s)}a(N$,"buildNodePayloads");function O$(){if(!Zg.get(Us.CONFIG_PARAMS.CLUSTERING_ENABLED))throw _$(new Error,E$.CLUSTERING_NOT_ENABLED,l$.BAD_REQUEST,void 0,void 0,!0)}a(O$,"checkClusteringEnabled");async function I$(){let e=new d$(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await m$(e))}a(I$,"getAllNodeRecords");async function b$(){let e=await h$.getSystemInformation();return{hdb_version:f$.version(),node_version:e.node_version,platform:e.platform}}a(b$,"getSystemInfo")});var zE=f((O5,aN)=>{"use strict";var ZE=be(),tN=b(),rN=oe(),w$=m(),Yc=I(),sN=Nc(),C$=Hl(),{RemotePayloadObject:L$}=ki(),{handleHDBError:nN,hdb_errors:y$}=L(),{HTTP_STATUS_CODES:iN}=y$,{NodeSubscription:U$}=On();aN.exports=M$;async function M$(e,t){let r;try{r=await ZE.request(`${t}.${rN.REQUEST_SUFFIX}`,new L$(w$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Yc.trace("Response from remote describe all request:",r)}catch(o){Yc.error(`addNode received error from describe all request to remote node: ${o}`);let c=ZE.requestErrorHandler(o,"add_node",t);throw nN(new Error,c,iN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===rN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw nN(new Error,o,iN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=tN.doesSchemaExist(c),l=s[c]!==void 0,E=tN.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Yc.trace(`addNode creating schema: ${c}`),await sN.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new C$(c,_,s[c][_].hash_attribute);await sN.createTable(T)}await ZE.createLocalTableStream(c,_);let h=new U$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(M$,"reviewSubscriptions")});var Qc=f((b5,_N)=>{"use strict";var{handleHDBError:Kc,hdb_errors:D$}=L(),{HTTP_STATUS_CODES:Wc}=D$,{addUpdateNodeValidator:P$}=Lc(),$i=I(),cN=m(),oN=oe(),B$=b(),jE=be(),Yi=Rr(),v$=B(),H$=zE(),{Node:q$,NodeSubscription:G$}=On(),F$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",x$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",V$=v$.get(cN.CONFIG_PARAMS.CLUSTERING_NODENAME);_N.exports=k$;async function k$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=P$(e);if(r)throw Kc(r,r.message,Wc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Yi.getNodeRecord(s);if(!B$.isEmptyOrZeroLength(E))throw Kc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Wc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await H$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=F$,o;let c=Yi.buildNodePayloads(n,V$,cN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await jE.request(`${s}.${oN.REQUEST_SUFFIX}`,c)}catch(E){$i.error(`addNode received error from request: ${E}`);let d=jE.requestErrorHandler(E,"add_node",s);throw Kc(new Error,d,Wc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===oN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Kc(new Error,E,Wc.INTERNAL_SERVER_ERROR,"error",E)}$i.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];$i.trace("Add node updating work stream for node:",s,"subscriptions:",h),await jE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new G$(h.schema,h.table,h.publish,h.subscribe))}let l=new q$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=x$:o.message=`Successfully added '${s}' to manifest`,o}a(k$,"addNode")});var td=f((C5,EN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:$$}=L(),{HTTP_STATUS_CODES:Xc}=$$,{addUpdateNodeValidator:Y$}=Lc(),Ki=I(),lN=m(),uN=oe(),K$=b(),ed=be(),Wi=Rr(),W$=B(),{cloneDeep:Q$}=require("lodash"),J$=zE(),{NodeSubscription:X$}=On(),Z$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",z$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",j$=W$.get(lN.CONFIG_PARAMS.CLUSTERING_NODENAME);EN.exports=eY;async function eY(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=Y$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Q$(await Wi.getNodeRecord(r));if(K$.isEmptyOrZeroLength(s))throw Jc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await J$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Z$,o;let c=Wi.buildNodePayloads(n,j$,lN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await ed.request(`${r}.${uN.REQUEST_SUFFIX}`,c)}catch(u){Ki.error(`updateNode received error from request: ${u}`);let l=ed.requestErrorHandler(u,"update_node",r);throw Jc(new Error,l,Xc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===uN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Jc(new Error,u,Xc.INTERNAL_SERVER_ERROR,"error",u)}Ki.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Ki.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await ed.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await tY(s[0],n,_.system_info),i.length>0?o.message=z$:o.message=`Successfully updated '${r}'`,o}a(eY,"updateNode");async function tY(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new X$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(tY,"updateNodeTable")});var TN=f((y5,SN)=>{"use strict";var fN=require("joi"),{string:dN}=fN.types(),rY=te(),hN=m(),sY=B(),nY=oe();SN.exports=iY;function iY(e){let t=dN.invalid(sY.get(hN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(nY.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=fN.object({operation:dN.valid(hN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return rY.validateBySchema(e,r)}a(iY,"removeNodeValidator")});var zc=f((M5,NN)=>{"use strict";var{handleHDBError:mN,hdb_errors:aY}=L(),{HTTP_STATUS_CODES:RN}=aY,oY=TN(),Qi=I(),AN=Rr(),cY=b(),Zc=m(),pN=oe(),gN=be(),_Y=B(),{RemotePayloadObject:uY}=ki(),{NodeSubscription:lY}=On(),EY=gi(),dY=ms(),hY=_Y.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);NN.exports=fY;async function fY(e){Qi.trace("removeNode called with:",e),AN.checkClusteringEnabled();let t=oY(e);if(t)throw mN(t,t.message,RN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await AN.getNodeRecord(r);if(cY.isEmptyOrZeroLength(s))throw mN(new Error,`Node '${r}' was not found.`,RN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new uY(Zc.OPERATIONS_ENUM.REMOVE_NODE,hY,[]),i,o=!1;try{i=await gN.request(`${r}.${pN.REQUEST_SUFFIX}`,n),Qi.trace("Remove node reply from remote node:",r,i)}catch(_){Qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new lY(l.schema,l.table,!1,!1);await gN.updateWorkStream(E,r)}let c=new EY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await dY.deleteRecord(c),i?.status===pN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(fY,"removeNode")});var bN=f((P5,IN)=>{"use strict";var ON=require("joi"),{string:SY,array:TY}=ON.types(),mY=te(),RY=Lc();IN.exports=AY;function AY(e){let t=ON.object({operation:SY.valid("configure_cluster").required(),connections:TY.items(RY.validation_schema).required()});return mY.validateBySchema(e,t)}a(AY,"configureClusterValidator")});var rd=f((v5,UN)=>{"use strict";var pY=m(),jc=I(),gY=b(),NY=zc(),OY=Qc(),wN=Rr(),IY=bN(),{handleHDBError:CN,hdb_errors:bY}=L(),{HTTP_STATUS_CODES:LN}=bY,wY="Configure cluster complete.",CY="Failed to configure the cluster. Check the logs for more details.",LY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";UN.exports=yY;async function yY(e){jc.trace("configure cluster called with:",e),wN.checkClusteringEnabled();let t=IY(e);if(t)throw CN(t,t.message,LN.BAD_REQUEST,void 0,void 0,!0);let r=await wN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(yN(NY,{operation:pY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);jc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(yN(OY,h,h.node_name))}let c=await Promise.allSettled(i);jc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let T=E[d];T.status==="rejected"&&(jc.error(T.reason),_.includes(T.reason.node_name)||_.push(T.reason.node_name)),T.status==="fulfilled"&&(l=!0);let R=T?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||T.status==="rejected"||u.push({node_name:T?.value?.node_name,subscriptions:T?.value?.result})}if(gY.isEmptyOrZeroLength(_))return{message:wY,connections:u};if(l)return{message:LY,failed_nodes:_,connections:u};throw CN(new Error,CY,LN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(yY,"configureCluster");async function yN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(yN,"functionWrapper")});var DN=f((q5,MN)=>{"use strict";var e_=require("joi"),UY=te(),{validateSchemaExists:MY,validateTableExists:DY,validateSchemaName:PY}=Wt(),BY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(MY).custom(PY).required(),table:e_.string().custom(DY).required()});function vY(e){return UY.validateBySchema(e,BY)}a(vY,"purgeStreamValidator");MN.exports=vY});var sd=f((F5,PN)=>{"use strict";var{handleHDBError:HY,hdb_errors:qY}=L(),{HTTP_STATUS_CODES:GY}=qY,FY=DN(),xY=be(),VY=Rr();PN.exports=kY;async function kY(e){let t=FY(e);if(t)throw HY(t,t.message,GY.BAD_REQUEST,void 0,void 0,!0);VY.checkClusteringEnabled();let{schema:r,table:s}=e;return await xY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(kY,"purgeStream")});var ad=f((V5,FN)=>{"use strict";var id=Rr(),$Y=be(),HN=B(),t_=m(),Ms=oe(),YY=b(),nd=I(),{RemotePayloadObject:KY}=ki(),{ErrorCode:BN}=require("nats"),vN=HN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),qN=HN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);FN.exports={clusterStatus:WY,buildNodeStatus:GN};async function WY(){let e={node_name:qN,is_enabled:vN,connections:[]};if(!vN)return e;let t=await id.getAllNodeRecords();if(YY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(GN(t[s],e.connections));return await Promise.allSettled(r),e}a(WY,"clusterStatus");async function GN(e,t){let r=e.name,s=new KY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,qN,void 0,await id.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await $Y.request(Ms.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Ms.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ms.CLUSTER_STATUS_STATUSES.CLOSED,nd.error(`Error getting node status from ${r} `,n))}catch(_){nd.warn(`Error getting node status from ${r}`,_),_.code===BN.NoResponders?o=Ms.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===BN.Timeout?o=Ms.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ms.CLUSTER_STATUS_STATUSES.CLOSED}let c=new QY(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==t_.PRE_4_0_0_VERSION&&await id.upsertNodeRecord(_)}catch(_){nd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(GN,"buildNodeStatus");function QY(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(QY,"NodeStatusObject")});var cd=f(($5,xN)=>{"use strict";var{handleHDBError:JY,hdb_errors:XY}=L(),{HTTP_STATUS_CODES:ZY}=XY,zY=be(),jY=Rr(),od=b(),r_=require("joi"),eK=te(),tK=2e3,rK=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});xN.exports=sK;async function sK(e){jY.checkClusteringEnabled();let t=eK.validateBySchema(e,rK);if(t)throw JY(t,t.message,ZY.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||od.autoCastBoolean(s),o=n===void 0||od.autoCastBoolean(n),c={nodes:[]},_=await zY.getServerList(r??tK),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,h=_[l].data;if(d.name.endsWith("-hub")){let T={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(T.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(T.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:od.autoCast(R.split(":")[1])})):[]),c.nodes.push(T)}}return c}a(sK,"clusterNetwork")});var YN=f((K5,$N)=>{"use strict";var _d=require("joi"),VN=te(),{route_constraints:kN}=Lu();$N.exports={setRoutesValidator:nK,deleteRoutesValidator:iK};function nK(e){let t=_d.object({server:_d.valid("hub","leaf").required(),routes:kN.required()});return VN.validateBySchema(e,t)}a(nK,"setRoutesValidator");function iK(e){let t=_d.object({routes:kN.required()});return VN.validateBySchema(e,t)}a(iK,"deleteRoutesValidator")});var ld=f((Q5,JN)=>{"use strict";var Ds=lr(),ud=b(),s_=m(),KN=YN(),{handleHDBError:WN,hdb_errors:aK}=L(),{HTTP_STATUS_CODES:QN}=aK,oK="cluster routes successfully set",cK="cluster routes successfully deleted";JN.exports={setRoutes:_K,getRoutes:uK,deleteRoutes:lK};function _K(e){let t=KN.setRoutesValidator(e);if(t)throw WN(t,t.message,QN.BAD_REQUEST,void 0,void 0,!0);let r=Ds.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=ud.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:oK,set:o,skipped:i}}a(_K,"setRoutes");function uK(){let e=Ds.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(uK,"getRoutes");function lK(e){let t=KN.deleteRoutesValidator(e);if(t)throw WN(t,t.message,QN.BAD_REQUEST,void 0,void 0,!0);let r=Ds.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,T=s.length;h<T;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let T=0,R=n.length;T<R;T++){let g=n[T];if(E.host===g.host&&E.port===g.port){n.splice(T,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=ud.isEmptyOrZeroLength(s)?null:s,Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=ud.isEmptyOrZeroLength(n)?null:n,Ds.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:cK,deleted:i,skipped:o}}a(lK,"deleteRoutes")});var ZN=f((X5,XN)=>{"use strict";var Ji=require("alasql"),Ps=require("recursive-iterator"),Ft=I(),EK=b(),Xi=m(),n_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,hK(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Xi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Xi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Xi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=dK(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Xi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Ji.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(n_,"sql_statement_bucket");function dK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(dK,"filterReadRestrictedAttrs");function hK(e,t,r,s,n){fK(e,t,r,s,n)}a(hK,"interpretAST");function Zi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Zi,"addSchemaTableToMap");function fK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?RK(e,t,r):e instanceof Ji.yy.Select?SK(e,t,r,s,n):e instanceof Ji.yy.Update?TK(e,t,r):e instanceof Ji.yy.Delete?mK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(fK,"getRecordAttributesAST");function SK(e,t,r,s,n){if(!e){Ft.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(EK.isEmptyOrZeroLength(i)){Ft.error("No schema specified");return}e.from.forEach(c=>{Zi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Zi(c.table,t,r,s,n)});let o=new Ps(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Ft.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ps(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ps(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ps(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Ft.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(SK,"getSelectAttributes");function TK(e,t,r){if(!e){Ft.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ps(e.columns),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Ed(e.table.tableid,n,i.columnid,t,r)}a(TK,"getUpdateAttributes");function mK(e,t,r){if(!e){Ft.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ps(e.where),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Ed(e.table.tableid,n,i.columnid,t,r)}a(mK,"getDeleteAttributes");function RK(e,t,r){if(!e){Ft.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ps(e.columns),n=e.into.databaseid;Zi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&Ed(e.into.tableid,n,i.columnid,t,r)}a(RK,"getInsertAttributes");function Ed(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(Ed,"pushAttribute");XN.exports=n_});var eO=f((z5,jN)=>{var AK=require("os"),zN=B();jN.exports={checkPermission:pK};function pK(){if(AK.userInfo().username!==zN.get("install_user"))throw new Error(`Error: Must execute as ${zN.get("install_user")}`)}a(pK,"checkPermission")});var hd=f((ej,iO)=>{var a_=tn(),tO=require("chalk"),er=I(),rO=eO(),sO=require("prompt"),{promisify:gK}=require("util"),i_=m(),NK=require("fs-extra"),OK=require("path"),IK=b(),bK=QE(),nO=B();nO.initSync();var wK=require("moment"),CK=gK(sO.get),LK=OK.join(nO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);iO.exports={getFingerprint:UK,setLicense:yK,parseLicense:dd,register:MK,getRegistrationInfo:PK};async function yK(e){if(e&&e.key&&e.company){try{er.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await dd(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw er.error(r),er.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(yK,"setLicense");async function UK(){try{rO.checkPermission()}catch(t){throw er.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await a_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw er.error(r),er.error(t),new Error(r)}return e}a(UK,"getFingerprint");async function dd(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=a_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{er.info("writing license to disk"),await NK.writeFile(LK,JSON.stringify({license_key:e,company:t}))}catch(s){throw er.error("Failed to write License"),s}return"Registration successful."}a(dd,"parseLicense");async function MK(){let e=await DK();return dd(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(MK,"register");async function DK(){try{rO.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:tO.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:tO.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{sO.start()}catch(s){er.error(s)}let r;try{r=await CK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(DK,"promptForRegistration");async function PK(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await a_.getLicense()}catch(r){throw er.error(`There was an error when searching licenses due to: ${r.message}`),r}if(IK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=bK.version(),e.storage_type=i_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=wK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(PK,"getRegistrationInfo")});var oO=f((rj,aO)=>{"use strict";var BK=oe(),o_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,T){this.port=t,o===null&&(o=void 0),this.server_name=r+BK.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:T}},this.system_account="SYS"}};a(o_,"HubConfigObject");aO.exports=o_});var uO=f((nj,_O)=>{"use strict";var cO=oe(),c_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+cO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+cO.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(c_,"LeafConfigObject");_O.exports=c_});var EO=f((aj,lO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");lO.exports=__});var hO=f((cj,dO)=>{"use strict";var vK=oe(),u_=class{constructor(t,r){this.user=t+vK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");dO.exports=u_});var Td=f((uj,TO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),HK=oO(),qK=uO(),GK=EO(),FK=hO(),fd=Vr(),wn=b(),ze=lr(),d_=m(),l_=oe(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=B(),fO=xr(),Sd=be(),ji="clustering",xK=1e4,SO=5;TO.exports={generateNatsConfig:VK,removeNatsConfig:kK};async function VK(e=!1,t=void 0){f_.initSync();let r=f_.get(de.ROOTPATH),s=zi.join(r,ji,l_.PID_FILES.HUB),n=zi.join(r,ji,l_.PID_FILES.LEAF),i=ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zi.join(r,ji,l_.NATS_CONFIG_FILES.HUB_SERVER),c=zi.join(r,ji,l_.NATS_CONFIG_FILES.LEAF_SERVER),_=ze.getConfigFromFile(de.CLUSTERING_TLS_CERTIFICATE),u=ze.getConfigFromFile(de.CLUSTERING_TLS_PRIVATEKEY),l=ze.getConfigFromFile(de.CLUSTERING_TLS_CERT_AUTH),E=ze.getConfigFromFile(de.CLUSTERING_TLS_INSECURE),d=ze.getConfigFromFile(de.CLUSTERING_TLS_VERIFY),h=ze.getConfigFromFile(de.CLUSTERING_NODENAME),T=ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Sd.checkNATSServerInstalled()||S_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await fd.listUsers(),g=ze.getConfigFromFile(de.CLUSTERING_USER),H=await fd.getClusterUser();(wn.isEmpty(H)||H.active!==!0)&&S_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await E_(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_NETWORK_PORT),await E_(de.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[os,wr]of R.entries())wr.role.role===d_.ROLE_TYPES_ENUM.CLUSTER_USER&&wr.active&&(x.push(new FK(wr.username,fO.decrypt(wr.hash))),q.push(new GK(wr.username,fO.decrypt(wr.hash))));let ye=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let os of U)ye.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${os.host}:${os.port}`);let $=new HK(ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,T,ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NAME),ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ye,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=wn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await h_.writeJson(o,$),ea.trace(`Hub server config written to ${o}`));let ue=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,ae=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,qn=new qK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[ae],x,q,_,u,l,E);l==null&&delete qn.tls.ca_file,(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await h_.writeJson(c,qn),ea.trace(`Leaf server config written to ${c}`))}a(VK,"generateNatsConfig");async function E_(e){let t=f_.get(e);return wn.isEmpty(t)&&S_(`port undefined for '${e}'`),await wn.isPortTaken(t)&&S_(`'${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(E_,"isPortAvailable");function S_(e){let t=`Error generating clustering config: ${e}`;ea.error(t),console.error(t),process.exit(1)}a(S_,"generateNatsConfigError");async function kK(e){let{port:t,config_file:r}=Sd.getServerConfig(e),{username:s,decrypt_hash:n}=await fd.getClusterUser(),i=0,o=500;for(;i<SO;){try{let u=await Sd.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=SO)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 wn.async_set_timeout(o*i)}let c="0".repeat(xK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(kK,"removeNatsConfig")});var NO=f((Ej,gO)=>{"use strict";var ht=B(),$K=tn(),F=m(),ta=oe(),Ar=require("path"),{PACKAGE_ROOT:T_}=m(),mO=B(),Cn="/dev/null",YK=Ar.join(T_,"launchServiceScripts"),RO=Ar.join(T_,"utility/scripts"),KK=Ar.join(RO,F.HDB_RESTART_SCRIPT),AO=Ar.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function pO(){let t=$K.licenseSearch().ram_allocation||F.RAM_ALLOCATION_ENUM.DEFAULT,r=F.MEM_SETTING_KEY+t;return{name:F.PROCESS_DESCRIPTORS.HDB,script:F.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:T_}}a(pO,"generateMainServerConfig");var WK=9930;function QK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=Ar.join(e,"clustering",ta.NATS_CONFIG_FILES.HUB_SERVER),r=Ar.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=mO.get(F.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==WK?"-"+s:""),script:AO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(QK,"generateNatsHubServerConfig");var JK=9940;function XK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=Ar.join(e,"clustering",ta.NATS_CONFIG_FILES.LEAF_SERVER),r=Ar.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=mO.get(F.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==JK?"-"+s:""),script:AO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(XK,"generateNatsLeafServerConfig");function ZK(){ht.initSync();let e=Ar.join(ht.get(F.CONFIG_PARAMS.LOGGING_ROOT),F.LOG_NAMES.HDB),t={name:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:F.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:YK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(ZK,"generateClusteringUpgradeV4ServiceConfig");function zK(){return{...{name:F.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:RO},script:KK}}a(zK,"generateRestart");function jK(){return{apps:[pO()]}}a(jK,"generateAllServiceConfigs");gO.exports={generateAllServiceConfigs:jK,generateMainServerConfig:pO,generateRestart:zK,generateNatsHubServerConfig:QK,generateNatsLeafServerConfig:XK,generateClusteringUpgradeV4ServiceConfig:ZK}});var qO=f((Aj,HO)=>{"use strict";var Y=m(),IO=b(),ra=Td(),m_=be(),tr=oe(),K=require("pm2"),ts=NO(),R_=B(),pr=I(),eW=Rr(),{startWorker:md,onMessageFromWorkers:tW}=fs(),hj=bn(),rW=require("util"),bO=require("child_process"),{execFile:sW}=bO,fj=rW.promisify(bO.exec),Sj=require("systeminformation");HO.exports={enterPM2Mode:nW,start:Bs,stop:Rd,reload:wO,restart:CO,list:Ad,describe:pd,connect:gr,kill:_W,startAllServices:uW,startService:gd,getUniqueServicesList:yO,restartAllServices:lW,isServiceRegistered:UO,reloadStopStart:MO,restartHdb:LO,deleteProcess:oW,startClusteringProcesses:BO,startClusteringThreads:vO,isHdbRestartRunning:cW,isClusteringRunning:dW,stopClustering:EW,reloadClustering:hW};var{PACKAGE_ROOT:Tj}=m(),mj=m(),{loggerWithTag:Rj}=pr,sa=!1;tW(e=>{e.type==="restart"&&R_.initSync(!0)});function nW(){sa=!0}a(nW,"enterPM2Mode");function gr(){return new Promise((e,t)=>{K.connect((r,s)=>{pr.setupConsoleLogging(),r&&t(r),e(s)})})}a(gr,"connect");var je,iW=10,OO;function Bs(e){if(sa)return aW(e);let t=sW(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=je.indexOf(t);i>-1&&je.splice(i,1),!OO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<iW&&Bs(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=R_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?pr.OUTPUTS.STDERR:pr.OUTPUTS.STDOUT;pr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=tr.LOG_LEVELS[E]}if(tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?pr.OUTPUTS.STDERR:pr.OUTPUTS.STDOUT;pr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!je){je=[];let n=a(()=>{OO=!0,je&&(je.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)}je.push(t)}a(Bs,"start");function aW(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(aW,"startWithPM2");function Rd(e){if(!sa){for(let t of je||[])t.name===e&&(je.splice(je.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(Rd,"stop");function wO(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(wO,"reload");function CO(e){if(!sa)for(let t of je||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(CO,"restart");function oW(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(oW,"deleteProcess");async function LO(){await Bs(ts.generateRestart())}a(LO,"restartHdb");async function cW(){let e=await Ad();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(cW,"isHdbRestartRunning");function Ad(){return new Promise(async(e,t)=>{try{await gr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Ad,"list");function pd(e){return new Promise(async(t,r)=>{try{await gr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(pd,"describe");function _W(){if(!sa){for(let e of je||[])e.kill();je=[];return}return new Promise(async(e,t)=>{try{await gr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(_W,"kill");async function uW(){try{await BO(),await vO(),await Bs(ts.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(uW,"startAllServices");async function gd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ts.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ts.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ts.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ts.generateNatsHubServerConfig(),await Bs(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ts.generateNatsLeafServerConfig(),await Bs(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ts.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Bs(t)}catch(t){throw K.disconnect(),t}}a(gd,"startService");async function yO(){try{let e=await Ad(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw K.disconnect(),e}}a(yO,"getUniqueServicesList");async function lW(e=[]){try{let t=!1,r=await yO();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await CO(o))}t&&await MO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(lW,"restartAllServices");async function UO(e){return je?.find(t=>t.name===e)?!0:!IO.isEmptyOrZeroLength(await pd(e))}a(UO,"isServiceRegistered");async function MO(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?R_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):R_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await pd(e),s=IO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await Rd(e),await gd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await LO():await wO(e)}a(MO,"reloadStopStart");var DO,PO;async function BO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await gd(t)}}a(BO,"startClusteringProcesses");async function vO(){DO=md(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),PO=md(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await m_.createWorkQueueStream(tr.WORK_QUEUE_CONSUMER_NAMES),await m_.updateLocalStreams();let e=await eW.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){pr.info("Starting clustering upgrade 4.0.0 process"),md(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(vO,"startClusteringThreads");async function EW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await DO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await PO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await Rd(t)}}a(EW,"stopClustering");async function dW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await UO(t)===!1)return!1}return!0}a(dW,"isClusteringRunning");async function hW(){await ra.generateNatsConfig(!0),await m_.reloadNATSHub(),await m_.reloadNATSLeaf(),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(hW,"reloadClustering")});var Ld=f((gj,$O)=>{"use strict";var fW=require("minimist"),{isMainThread:Id,parentPort:xO}=require("worker_threads"),se=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=se,rr=I(),bd=b(),A_=Td(),Ln=be(),Nd=oe(),VO=lr(),sr=qO(),GO=bn(),SW=fu(),{restartWorkers:p_,onMessageFromWorkers:TW}=fs(),{handleHDBError:mW,hdb_errors:RW}=L(),{HTTP_STATUS_CODES:AW}=RW,g_=B();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${se.RESTART_TIMEOUT_MS/1e3} seconds.`,pW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",FO="Clustering is not enabled so cannot be restarted",gW="Invalid service",vs,xt;$O.exports={restart:kO,restartService:wd};Id&&TW(e=>{e.type===se.ITC_EVENT_TYPES.RESTART&&(e.workerType?wd({service:e.workerType}):kO({operation:"restart"}))});async function kO(e){xt=Object.keys(e).length===0,vs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR);let t=fW(process.argv);if(t.service){await wd(t);return}if(xt&&!vs){console.error(pW);return}if(xt&&console.log(ia),vs){sr.enterPM2Mode(),rr.notify(ia);let r=SW(Object.keys(se.CONFIG_PARAM_MAP),!0);return bd.isEmptyOrZeroLength(Object.keys(r))||VO.updateConfigValue(void 0,void 0,r,!0,!0),OW(),ia}return Id?(rr.notify(ia),await Cd(),setTimeout(()=>{p_()},50)):xO.postMessage({type:se.ITC_EVENT_TYPES.RESTART}),ia}a(kO,"restart");async function wd(e){let{service:t}=e;if(se.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw mW(new Error,gW,AW.BAD_REQUEST,void 0,void 0,!0);if(vs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR),!Id)return xO.postMessage({type:se.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await Cd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=FO;break}xt&&console.log("Restarting clustering_config"),rr.notify("Restarting clustering_config"),await sr.reloadClustering();break;case"custom_functions":case"custom functions":case na.harperdb:case na.http_workers:if(xt&&!vs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}xt&&console.log("Restarting http_workers"),rr.notify("Restarting http_workers"),vs?await sr.restart(se.HDB_PROC_DESCRIPTOR):setTimeout(()=>{p_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rr.error(r),xt&&console.error(r),r):`Restarting ${t}`}a(wd,"restartService");async function NW(){await Ln.publishToStream(`${Nd.SUBJECT_PREFIXES.TXN}.${Nd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Nd.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ln.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(NW,"postDummyNatsMsg");async function OW(){await Cd(),await sr.restart(se.HDB_PROC_DESCRIPTOR),await bd.async_set_timeout(2e3),g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Od(),xt&&(await Ln.closeConnection(),process.exit(0))}a(OW,"restartPM2Mode");async function Cd(){if(!VO.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await GO.getHDBProcessInfo()).clustering.length===0)rr.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await sr.startClusteringProcesses(),await sr.startClusteringThreads(),await Od(),xt&&await Ln.closeConnection();else{await NW(),await A_.generateNatsConfig(!0),vs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await GO.getHDBProcessInfo()).clustering.forEach(n=>{rr.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await bd.async_set_timeout(3e3),await Od(),await Ln.updateLocalStreams(),xt&&await Ln.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Cd,"restartClustering");async function Od(){await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Od,"removeNatsConfig")});var tI=f((Ij,eI)=>{"use strict";var Oj=require("lodash"),qe=m(),{handleHDBError:YO,hdb_errors:IW}=L(),{HDB_ERROR_MSGS:bW,HTTP_STATUS_CODES:wW}=IW,yd=I();eI.exports={getRolePermissions:LW};var Hs=Object.create(null),CW=a(e=>({key:e,perms:{}}),"perms_template_obj"),JO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),XO=a((e=!1,t=!1,r=!1,s=!1)=>({[qe.PERMS_CRUD_ENUM.READ]:e,[qe.PERMS_CRUD_ENUM.INSERT]:t,[qe.PERMS_CRUD_ENUM.UPDATE]:r,[qe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Ud=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...XO(t,r,s,n)}),"table_perms_template"),KO=a((e,t=XO())=>({attribute_name:e,describe:jO(t),[aa]:t[aa],[Md]:t[Md],[Dd]:t[Dd]}),"attr_perms_template"),WO=a((e,t=!1)=>({attribute_name:e,describe:t,[aa]:t}),"timestamp_attr_perms_template"),{READ:aa,INSERT:Md,UPDATE:Dd}=qe.PERMS_CRUD_ENUM,ZO=Object.values(qe.PERMS_CRUD_ENUM),zO=[aa,Md,Dd];function LW(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Hs[t]&&Hs[t].key===s)return Hs[t].perms;let n=yW(e,r);return Hs[t]?Hs[t].key=s:Hs[t]=CW(s),Hs[t].perms=n,n}catch(r){if(!e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw yd.error(s),yd.debug(r),YO(new Error,bW.OUTDATED_PERMS_TRANSLATION_ERROR,wW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
8
|
${r.stack}`;throw yd.error(s),YO(new Error)}}}a(LW,"getRolePermissions");function yW(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[qe.SYSTEM_SCHEMA_NAME]=s[qe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=UW(t[i]);return}r[i]=JO(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=MW(c,_);r[i].describe||ZO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Ud()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Ud()})}),r}a(yW,"translateRolePermissions");function UW(e){let t=JO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Ud(!0,!0,!0,!0,!0)}),t}a(UW,"createStructureUserPermissions");function MW(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return qe.TIME_STAMP_NAMES.includes(E)&&(d=WO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=KO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=jO(l),n.attribute_permissions.push(l),c||DW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=WO(u):l=KO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=QO(n),n}else return e.describe=QO(e),e}a(MW,"getTableAttrPerms");function QO(e){return ZO.filter(t=>e[t]).length>0}a(QO,"getSchemaTableDescribePerm");function jO(e){return zO.filter(t=>e[t]).length>0}a(jO,"getAttributeDescribePerm");function DW(e,t){zO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(DW,"checkForHashPerms")});var cI=f((wj,oI)=>{"use strict";var he=require("joi"),rI=require("fs-extra"),sI=require("path"),yn=te(),nI=B(),iI=m(),aI=I(),{hdb_errors:PW}=L(),{HDB_ERROR_MSGS:et}=PW,rs=/^[a-zA-Z0-9-_]+$/;oI.exports={getDropCustomFunctionValidator:vW,setCustomFunctionValidator:HW,addCustomFunctionProjectValidator:qW,dropCustomFunctionProjectValidator:GW,packageCustomFunctionProjectValidator:FW,deployCustomFunctionProjectValidator:xW};function oa(e,t,r){try{let s=nI.get(iI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=sI.join(s,t);return rI.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return aI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function BW(e,t,r,s){try{let n=nI.get(iI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=sI.join(n,e,t,r+".js");return rI.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return aI.error(n),s.message(et.VALIDATION_ERR)}}a(BW,"checkFileExists");function vW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).custom(BW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return yn.validateBySchema(e,t)}a(vW,"getDropCustomFunctionValidator");function HW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return yn.validateBySchema(e,t)}a(HW,"setCustomFunctionValidator");function qW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!1)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return yn.validateBySchema(e,t)}a(qW,"addCustomFunctionProjectValidator");function GW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return yn.validateBySchema(e,t)}a(GW,"dropCustomFunctionProjectValidator");function FW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return yn.validateBySchema(e,t)}a(FW,"packageCustomFunctionProjectValidator");function xW(e){let t=he.object({project:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),payload:he.string().required().messages({"string.pattern.base":et.BAD_PACKAGE})});return yn.validateBySchema(e,t)}a(xW,"deployCustomFunctionProjectValidator")});var qd=f((Lj,lI)=>{"use strict";var we=require("fs-extra"),Pd=require("fast-glob"),ee=require("path"),_I=require("tar-fs"),uI=require("uuid").v4,Bd=require("normalize-path"),qs=cI(),ge=I(),ft=m(),St=B(),{PACKAGE_ROOT:VW}=m(),{handleHDBError:Ge,hdb_errors:kW}=L(),{HDB_ERROR_MSGS:ss,HTTP_STATUS_CODES:Fe}=kW,$W=ee.join(VW,"custom_function_template"),vd=ee.join(St.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Hd(){let e=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,ss.NOT_ENABLED,Fe.BAD_REQUEST,void 0,void 0,!0)}a(Hd,"isCFEnabled");function YW(){ge.trace("getting custom api status");let e={};try{e={is_enabled:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,ss.FUNCTION_STATUS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,t)}return e}a(YW,"customFunctionsStatus");function KW(){ge.trace("getting custom api endpoints");let e={},t=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Pd.sync(Bd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Pd.sync(Bd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Pd.sync(Bd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,ss.GET_FUNCTIONS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,r)}return e}a(KW,"getCustomFunctions");function WW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("getting custom api endpoint file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ee.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,ss.GET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(WW,"getCustomFunction");function QW(e){Hd(),e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("setting custom function file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ee.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,ss.SET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(QW,"setCustomFunction");function JW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function file");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ee.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,ss.DROP_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,o)}}a(JW,"dropCustomFunction");function XW(e){Hd(),e.project&&(e.project=ee.parse(e.project).name);let t=qs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("adding custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync($W,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,ss.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(XW,"addCustomFunctionProject");function ZW(e){e.project&&(e.project=ee.parse(e.project).name);let t=qs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,ss.DROP_FUNCTION_PROJECT,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(ZW,"dropCustomFunctionProject");async function zW(e){e.project&&(e.project=ee.parse(e.project).name);let t=qs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("packaging custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ee.join(r,s),i=uI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw ge.error(l),l}we.ensureDirSync(vd);let c=ee.join(vd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ee.join(n,"node_modules"))}),_I.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(zW,"packageCustomFunctionProject");async function jW(e){Hd(),e.project&&(e.project=ee.parse(e.project).name);let t=qs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("deploying custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=ee.join(r,s);await we.ensureDir(i);let o,c;do o=ee.join(vd,uI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(_I.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(jW,"deployCustomFunctionProject");lI.exports={customFunctionsStatus:YW,getCustomFunctions:KW,getCustomFunction:WW,setCustomFunction:QW,dropCustomFunction:JW,addCustomFunctionProject:XW,dropCustomFunctionProject:ZW,packageCustomFunctionProject:zW,deployCustomFunctionProject:jW}});var Gd=f((Uj,dI)=>{"use strict";var nr=require("joi"),EI=te();dI.exports={readTransactionLogValidator:eQ,deleteTransactionLogsBeforeValidator:tQ};function eQ(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),from:nr.date().timestamp(),to:nr.date().timestamp(),limit:nr.number().min(1)});return EI.validateBySchema(e,t)}a(eQ,"readTransactionLogValidator");function tQ(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return EI.validateBySchema(e,t)}a(tQ,"deleteTransactionLogsBeforeValidator")});var O_=f((Dj,mI)=>{"use strict";var Fd=m(),N_=be(),hI=b(),fI=B(),SI=xr(),{handleHDBError:Un,hdb_errors:rQ}=L(),{HTTP_STATUS_CODES:Mn}=rQ,{readTransactionLogValidator:sQ,deleteTransactionLogsBeforeValidator:nQ}=Gd(),TI="This operation relies on clustering and cannot run with it disable.",iQ="Logs successfully deleted from transaction log.",aQ="All logs successfully deleted from transaction log.";mI.exports={readTransactionLog:oQ,deleteTransactionLogsBefore:cQ};async function*oQ(e){let t=sQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!fI.get(Fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,TI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=hI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=SI.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===Fd.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(oQ,"readTransactionLog");async function cQ(e){let t=nQ(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!fI.get(Fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,TI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=hI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=SI.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),_=await N_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=iQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=aQ):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(cQ,"deleteTransactionLogsBefore")});var Vd=f((Bj,CI)=>{"use strict";var I_=require("joi"),b_=require("path"),RI=require("fs-extra"),{exec:_Q}=require("child_process"),uQ=require("util"),AI=uQ.promisify(_Q),lQ=m(),{handleHDBError:Dn,hdb_errors:EQ}=L(),{HTTP_STATUS_CODES:Pn}=EQ,pI=B(),dQ=te(),w_=I();pI.initSync();var xd=pI.get(lQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),gI="npm install --omit=dev --json",hQ=`${gI} --dry-run`;CI.exports={installModules:fQ,auditModules:SQ};async function NI(e,t=void 0){let{stdout:r,stderr:s}=await AI(e,{cwd:t});if(s)throw new Error(s.replace(`
|