harperdb 4.2.0-alpha.12 → 4.2.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  `,C0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},U0=["*","%"],D0="unauthorized_access",L0="func_val",M0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},P0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},v0={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"},B0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},H0={HTTP:"http"},F0={STOPPED:"stopped",ONLINE:"online"},q0="3.x.x",G0={SUCCESS:"success",FAILURE:"failure"},x0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};fR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:nR,HDB_SUPPORT_URL:oR,HDB_PRICING_URL:_H,SUPPORT_HELP_MSG:dH,LICENSE_HELP_MSG:aR,HDB_PROC_NAME:rR,HDB_PROC_DESCRIPTOR:dE,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu,CLUSTERING_HUB_PROC_DESCRIPTOR:cu,SYSTEM_SCHEMA_NAME:DH,HASH_FOLDER_NAME:LH,HDB_HOME_DIR_NAME:MH,UPDATE_FILE_NAME:HH,LICENSE_KEY_DIR_NAME:vH,BOOT_PROPS_FILE_NAME:BH,JOB_TYPE_ENUM:E0,JOB_STATUS_ENUM:i0,SYSTEM_TABLE_NAMES:jH,SYSTEM_TABLE_HASH_ATTRIBUTES:e0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:o0,S3_BUCKET_AUTH_KEYS:a0,VALID_SQL_OPS_ENUM:c0,GEO_CONVERSION_ENUM:l0,HDB_SETTINGS_NAMES:lR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:_0,SERVICE_ACTIONS_ENUM:u0,CLUSTER_MESSAGE_TYPE_ENUM:f0,CLUSTER_CONNECTION_DIRECTION_ENUM:h0,CLUSTER_EVENTS_DEFS_ENUM:p0,PERIOD_REGEX:TH,DOUBLE_PERIOD_REGEX:RH,UNICODE_PERIOD:gH,FORWARD_SLASH_REGEX:AH,UNICODE_FORWARD_SLASH:OH,ESCAPED_FORWARD_SLASH_REGEX:NH,ESCAPED_PERIOD_REGEX:bH,ESCAPED_DOUBLE_PERIOD_REGEX:yH,REG_KEY_FILE_NAME:s0,RESTART_TIMEOUT_MS:GH,HDB_FILE_PERMISSIONS:xH,DATABASES_DIR_NAME:$H,LEGACY_DATABASES_DIR_NAME:YH,TRANSACTIONS_DIR_NAME:KH,LIMIT_COUNT_NAME:WH,ID_ATTRIBUTE_STRING:QH,INSERT_MODULE_ENUM:XH,UPGRADE_JSON_FIELD_NAMES_ENUM:ZH,RESTART_CODE:FH,RESTART_CODE_NUM:qH,CLUSTER_OPERATIONS:Ko,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:r0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:t0,CLUSTERING_MESSAGE_TYPES:y0,HDB_FILE_SUFFIX:PH,BLOB_FOLDER_NAME:kH,HDB_TRASH_DIR:VH,ORIGINATOR_SET_VALUE:I0,LICENSE_VALUES:m0,RAM_ALLOCATION_ENUM:S0,TIME_STAMP_NAMES_ENUM:dR,TIME_STAMP_NAMES:O0,PERMS_UPDATE_RELEASE_TIMESTAMP:N0,SEARCH_NOT_FOUND_MESSAGE:EH,SEARCH_ATTRIBUTE_NOT_FOUND:fH,LICENSE_ROLE_DENIED_RESPONSE:hH,LICENSE_MAX_CONNS_REACHED:mH,BASIC_LICENSE_MAX_NON_CU_ROLES:iR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:lH,VALUE_SEARCH_COMPARATORS:ER,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:b0,LICENSE_FILE_NAME:n0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:T0,NEW_LINE:w0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:pH,MOMENT_DAYS_TAG:IH,API_TURNOVER_SEC:wH,LOOPBACK:SH,CODE_EXTENSION:au,WILDCARD_SEARCH_VALUE:CH,NODE_ERROR_CODES:R0,JAVASCRIPT_EXTENSION:tR,PERMS_CRUD_ENUM:C0,UNAUTHORIZED_PERMISSION_NAME:D0,SEARCH_WILDCARDS:U0,FUNC_VAL:L0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:M0,JWT_ENUM:P0,CLUSTERING_FLAG:A0,ITC_EVENT_TYPES:v0,CUSTOM_FUNCTION_PROC_NAME:sR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ou,SERVICES:B0,THREAD_TYPES:H0,MEM_SETTING_KEY:UH,HDB_RESTART_SCRIPT:zB,PROCESS_DESCRIPTORS:tH,SERVICE_SERVERS:oH,SERVICE_SERVERS_CWD:_E,PROCESS_DESCRIPTORS_VALIDATE:nH,LAUNCH_SERVICE_SCRIPTS:aH,LOG_LEVELS:sH,PROCESS_NAME_ENV_PROP:zH,LOG_NAMES:rH,PM2_PROCESS_STATUSES:F0,CONFIG_PARAM_MAP:_R,CONFIG_PARAMS:g,HDB_CONFIG_FILE:KB,HDB_DEFAULT_CONFIG_FILE:WB,ROLE_TYPES_ENUM:cH,BOOT_PROP_PARAMS:cR,INSTALL_PROMPTS:JH,HDB_ROOT_DIR_NAME:QB,CLUSTERING_PROCESSES:iH,FOREGROUND_PID_FILE:ZB,PACKAGE_ROOT:an,PRE_4_0_0_VERSION:q0,SCHEMAS_PARAM_CONFIG:d0,METADATA_PROPERTY:g0,AUTH_AUDIT_STATUS:G0,AUTH_AUDIT_TYPES:x0,HDB_PID_FILE:jB,DEFAULT_DATABASE_NAME:eH};eR()});var EE=m((pte,SR)=>{"use strict";var hR=require("minimist");SR.exports=k0;function k0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=mR(process.env),s=mR(hR(process.argv))):(r=process.env,s=hR(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(k0,"assignCMDENVVariables");function mR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(mR,"objKeysToLowerCase")});var x=m((Rte,RE)=>{"use strict";var qn=require("fs-extra"),{workerData:V0,threadId:$0}=require("worker_threads"),ws=require("path"),RR=require("yaml"),gR=require("properties-reader"),et=A(),pR=EE(),Y0=require("os"),{PACKAGE_ROOT:hE}=A(),{_assignPackageExport:K0}=require("../index"),Qo={};for(let e in console)Qo[e]||(Qo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},AR={STDOUT:"stdOut",STDERR:"stdErr"},W0=ws.join(hE,"logs"),Q0=ws.join(hE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),z0=1e4,ys,Is,Lt,lu,_u,zo,Pi,Wo;Wo===void 0&&OR();RE.exports={notify:yR,fatal:IR,error:Jo,warn:TE,info:du,debug:pE,trace:SE,setLogLevel:rF,log_level:Lt,loggerWithTag:J0,suppressLogging:X0,initLogSettings:OR,setupConsoleLogging:NR,logCustomLevel:eF,closeLogFile:mE,getLogFilePath:()=>zo,OUTPUTS:AR,AuthAuditLog:iF};K0("logger",RE.exports);function OR(e=!1){try{if(Wo===void 0||e){mE();let t=tF(),r=pR(["ROOTPATH"]);try{Wo=gR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!qn.pathExistsSync(ws.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:_u,to_file:ys,to_stream:Is}=sF(r.ROOTPATH?ws.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Wo.get("settings_path"))),lu=et.LOG_NAMES.HDB,zo=ws.join(_u,lu)}}catch(t){if(Wo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=pR(Object.keys(et.CONFIG_PARAM_MAP),!0);for(let o in r){let c=et.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===et.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===et.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=nF();ys=ys===void 0?n:ys,ys=TR(ys),Is=Is===void 0?i:Is,Is=TR(Is),Lt=Lt===void 0?s:Lt,_u=W0,lu=et.LOG_NAMES.INSTALL,zo=ws.join(_u,lu);return}throw Jo("Error initializing log settings"),Jo(t),t}NR()}a(OR,"initLogSettings");var fE=!0;function NR(){Mi("error",Jo),Mi("warn",TE),Mi("log",du),Mi("info",du),Mi("debug",pE),Mi("trace",SE)}a(NR,"setupConsoleLogging");function Mi(e,t){console[e]=function(...r){if(fE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Qo[e](...r)}}a(Mi,"logConsole");function J0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(yR),fatal:r(IR),error:r(Jo),warn:r(TE),info:r(du),debug:r(pE),trace:r(SE)};function r(s){return function(...n){return s(t,...n)}}}a(J0,"loggerWithTag");function X0(e){try{fE=!1,e()}finally{fE=!0}}a(X0,"suppressLogging");var Z0=V0?.name?.replace(/ /g,"-")||"main";function Cs(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Z0+"/"+$0);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
3
  `}a(Cs,"createLogRecord");function Xo(e){ys&&bR(e),Is&&process.stdout.write(e)}a(Xo,"logStdOut");function Eu(e){ys&&bR(e),Is&&process.stderr.write(e)}a(Eu,"logStdErr");function bR(e){j0(),Pi?qn.appendFileSync(Pi,e):Qo.log(e)}a(bR,"logToFile");function mE(){try{qn.closeSync(Pi)}catch{}Pi=null}a(mE,"closeLogFile");function j0(){if(!Pi){try{if(!zo)debugger;Pi=qn.openSync(zo,"a")}catch(e){Qo.error(e)}setTimeout(()=>{mE()},z0).unref()}}a(j0,"openLogFile");function du(...e){Mt[Lt]<=Mt.info&&Xo(Cs("info",e))}a(du,"info");function SE(...e){Mt[Lt]<=Mt.trace&&Xo(Cs("trace",e))}a(SE,"trace");function Jo(...e){Mt[Lt]<=Mt.error&&Eu(Cs("error",e))}a(Jo,"error");function pE(...e){Mt[Lt]<=Mt.debug&&Xo(Cs("debug",e))}a(pE,"debug");function yR(...e){Mt[Lt]<=Mt.notify&&Xo(Cs("notify",e))}a(yR,"notify");function IR(...e){Mt[Lt]<=Mt.fatal&&Eu(Cs("fatal",e))}a(IR,"fatal");function TE(...e){Mt[Lt]<=Mt.warn&&Eu(Cs("warn",e))}a(TE,"warn");function eF(e,t,...r){t===AR.STDERR?Eu(Cs(e,r)):Xo(Cs(e,r))}a(eF,"logCustomLevel");function tF(){let e;try{e=Y0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return qn.existsSync(t)||(t=ws.join(hE,"utility/hdb_boot_properties.file")),t}a(tF,"getPropsFilePath");function rF(e){Lt=e}a(rF,"setLogLevel");function TR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TR,"autoCastBoolean");function sF(e){try{if(e.includes("config/settings.js")){let o=gR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=RR.parseDocument(qn.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===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(sF,"getLogConfig");function nF(){try{let e=RR.parseDocument(qn.readFileSync(Q0,"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(nF,"getDefaultConfig");function iF(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(iF,"AuthAuditLog")});var CR=m((Ate,wR)=>{"use strict";var oF=require("util"),aF=require("path"),cF=require("child_process"),uF=oF.promisify(cF.execFile),lF=1e3*1e3*10;wR.exports={findPs:_F};async function _F(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await uF("ps",["wwxo",`pid,${r}`],{maxBuffer:lF});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:aF.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(_F,"findPs")});var xe=m((Nte,DR)=>{"use strict";var dF="__dbis__",EF="__txns__",fF="__environment_name__",hF="__dbi_defintion__",mF={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"},SF=["__createdtime__","__updatedtime__"],pF="\uFFFF",UR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},TF=Object.values(UR);DR.exports={AUDIT_STORE_NAME:EF,INTERNAL_DBIS_NAME:dF,DBI_DEFINITION_NAME:hF,SEARCH_TYPES:mF,TIMESTAMP_NAMES:SF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:fF,TRANSACTIONS_DBI_NAMES_ENUM:UR,TRANSACTIONS_DBIS:TF,OVERFLOW_MARKER:pF}});var rr=m((bte,GR)=>{"use strict";var LR=A(),MR=xe(),PR={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},vR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),BR={500:vR("There was an error processing your request."),400:"Invalid request"},RF=BR[PR.INTERNAL_SERVER_ERROR],gF={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.`},AF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},OF={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"},NF={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 ${MR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${MR.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"},bF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${LR.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 ${LR.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"},HR={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"},yF={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database 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' database, tables and records are used internally by HarperDB and cannot be updated or removed."},IF={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 database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.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`},wF={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=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},CF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},UF={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`},FR={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.`},qR={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}`},DF={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 fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},LF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},MF={...HR,...OF,...gF,...yF,...IF,...wF,...CF,...UF,...bF,...FR,...qR,...DF,...LF,...AF};GR.exports={CHECK_LOGS_WRAPPER:vR,HDB_ERROR_MSGS:MF,DEFAULT_ERROR_MSGS:BR,DEFAULT_ERROR_RESP:RF,HTTP_STATUS_CODES:PR,LMDB_ERRORS_ENUM:NF,AUTHENTICATION_ERROR_MSGS:HR,VALIDATION_ERROR_MSGS:FR,ITC_ERRORS:qR}});var W=m((Ite,VR)=>{"use strict";var vi=rr(),PF=x(),vF=A(),fu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,xR),this.statusCode=s||vi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vi.DEFAULT_ERROR_MSGS[s]?vi.DEFAULT_ERROR_MSGS[s]:vi.DEFAULT_ERROR_MSGS[vi.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&&PF[n](i)}},gE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},AE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function xR(e,t,r,s=vF.LOG_LEVELS.ERROR,n=null,i=!1){if(kR(e))return e;let o=new fu(e,t,r,s,n);return i&&delete o.stack,o}a(xR,"handleHDBError");function kR(e){return e.__proto__.constructor.name===fu.name}a(kR,"isHDBError");VR.exports={isHDBError:kR,handleHDBError:xR,ClientError:gE,ServerError:AE,hdb_errors:vi}});var we=m((Cte,JR)=>{"use strict";var ra=A(),BF=V(),Pt=Q(),sa=require("path"),HF=require("minimist"),$R=require("fs-extra"),YR=require("lodash");Pt.initSync();var{CONFIG_PARAMS:cn,SCHEMAS_PARAM_CONFIG:Zo,SYSTEM_SCHEMA_NAME:hu}=ra,jo,ea,ta;function KR(){if(jo!==void 0)return jo;if(Pt.getHdbBasePath()!==void 0)return jo=Pt.get(cn.STORAGE_PATH)||sa.join(Pt.getHdbBasePath(),ra.DATABASES_DIR_NAME),jo}a(KR,"getBaseSchemaPath");function WR(){if(ea!==void 0)return ea;if(Pt.getHdbBasePath()!==void 0)return ea=zR(hu),ea}a(WR,"getSystemSchemaPath");function QR(){if(ta!==void 0)return ta;if(Pt.getHdbBasePath()!==void 0)return ta=Pt.get(ra.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||sa.join(Pt.getHdbBasePath(),ra.TRANSACTIONS_DIR_NAME),ta}a(QR,"getTransactionAuditStoreBasePath");function FF(e,t){let r=Pt.get(cn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||sa.join(QR(),e.toString())}a(FF,"getTransactionAuditStorePath");function zR(e,t){e=e.toString(),t=t&&t.toString();let r=Pt.get(ra.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||sa.join(KR(),e)}a(zR,"getSchemaPath");function qF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,HF(process.argv));let s=r[cn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!BF.isObject(s))throw o;i=s}for(let o of i){let c=o[hu];if(!c)continue;let u=Pt.get(cn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[Zo.PATH];if(l)return YR.set(u,[hu,Zo.TABLES,t,Zo.PATH],l),Pt.setProperty(cn.SCHEMAS,u),l;let _=c?.[Zo.PATH];if(_)return YR.set(u,[hu,Zo.PATH],_),Pt.setProperty(cn.SCHEMAS,u),_}}let n=r[cn.STORAGE_PATH.toUpperCase()];if(n){if(!$R.pathExistsSync(n))throw new Error(n+" does not exist");let i=sa.join(n,e);return $R.mkdirsSync(i),Pt.setProperty(cn.STORAGE_PATH,n),i}return WR()}a(qF,"initSystemSchemaPaths");function GF(){jo=void 0,ea=void 0,ta=void 0}a(GF,"resetPaths");JR.exports={getBaseSchemaPath:KR,getSystemSchemaPath:WR,getTransactionAuditStorePath:FF,getTransactionAuditStoreBasePath:QR,getSchemaPath:zR,initSystemSchemaPaths:qF,resetPaths:GF}});var vt=m((Mte,tg)=>{"use strict";var xF=rr().LMDB_ERRORS_ENUM,Dte=require("lmdb"),kF=xe(),Lte=require("buffer").Buffer,{OVERFLOW_MARKER:XR,MAX_SEARCH_KEY_LENGTH:mu}=kF,ZR=["number","string","symbol","boolean","bigint"];function VF(e){if(e=e?.primaryStore||e,!e)throw new Error(xF.ENV_REQUIRED)}a(VF,"validateEnv");function $F(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($F,"stringifyData");function YF(e){return e instanceof Date?e.valueOf():e}a(YF,"convertKeyValueToWrite");function KF(e){if(e==null)return;if(ZR.includes(typeof e))return e.length>mu?[e.slice(0,mu)+XR]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(ZR.includes(typeof n))n.length>mu?t.push(n.slice(0,mu)+XR):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(KF,"getIndexedValues");var Su=0,jR=0;function eg(){jR=Date.now()-performance.now()}a(eg,"adjustStartTime");eg();var WF=6e4;setInterval(eg,WF).unref();function QF(){let e=performance.now()+jR;return e>Su?(Su=e,e):(Su+=488e-6,Su)}a(QF,"getNextMonotonicTime");tg.exports={validateEnv:VF,stringifyData:$F,convertKeyValueToWrite:YF,getNextMonotonicTime:QF,getIndexedValues:KF}});var rg,Jr,OE,na=Se(()=>{rg=require("events"),Jr=class extends rg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new OE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},OE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function ia(e){return e[ft]||(e[ft]=Object.create(null))}function Au(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ft];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=sg(_,o);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){ia(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,pu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ia(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,pu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ia(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ft];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new pu.ClientError("Can not add a property to a sealed table schema");ia(this)[o]=c}),i("deleteProperty",function(o){ia(this)[o]=void 0}),i("toJSON",function(){let o=this[ft],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function sg(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ce]=n}},Au(r,t)),new r(e)):new Tu(e);case Array:let s=new gu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=sg(o,t?.elements)),s[n]=o}return s}}function Ou(e){let t=e[ft],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Ou(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function oa(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=oa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ft];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=oa(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Ru(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Gn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(Ru(i))return!0}else return!0}}else{let r=e[ft];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(Ru(n))return!0}else return!0}else return!0}}return!1}var pu,ft,Tu,Gn,gu,Nu=Se(()=>{Xr();pu=C(W()),ft=Symbol("own-data");a(ia,"getChanges");a(Au,"assignTrackedAccessors");a(sg,"trackObject");Tu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Au(Tu,{});a(Ou,"collapseData");a(oa,"deepFreeze");a(Ru,"hasChanges");Gn=Symbol.for("has-array-changes"),gu=class extends Array{static{a(this,"TrackedArray")}[Gn];constructor(t){super(t)}splice(...t){return this[Gn]=!0,super.splice(...t)}push(...t){return this[Gn]=!0,super.push(...t)}pop(){return this[Gn]=!0,super.pop()}unshift(...t){return this[Gn]=!0,super.unshift(...t)}shift(){return this[Gn]=!0,super.shift()}};gu.prototype.constructor=Array});function Ye(e,t){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let r=e.transaction=new NE;e.timestamp&&(r.timestamp=e.timestamp),r[Ae]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var ng,ig,NE,xn=Se(()=>{ng=C(vt()),ig=require("../index");Xr();a(Ye,"transaction");(0,ig._assignPackageExport)("transaction",Ye);Ye.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ye.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};NE=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,ng.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function IE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(JF[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=jr.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case lt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new bE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=wE(e);if(!p)throw new bE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(k=>setImmediate(()=>k(p(O)?R:ag.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:p})=>p)}function wE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case lt.SEARCH_TYPES.EQUALS:case void 0:return Zr(r,n=>n===s);case lt.SEARCH_TYPES.CONTAINS:return Zr(r,n=>n?.toString().includes(s));case lt.SEARCH_TYPES.ENDS_WITH:case lt.SEARCH_TYPES._ENDS_WITH:return Zr(r,n=>n?.toString().endsWith(s));case lt.SEARCH_TYPES.STARTS_WITH:case lt.SEARCH_TYPES._STARTS_WITH:return Zr(r,n=>typeof n=="string"&&n.startsWith(s));case lt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Zr(r,n=>(0,jr.compareKeys)(n,s[0])>=0&&(0,jr.compareKeys)(n,s[1])<=0);case"gt":case lt.SEARCH_TYPES.GREATER_THAN:case lt.SEARCH_TYPES._GREATER_THAN:return Zr(r,n=>(0,jr.compareKeys)(n,s)>0);case"ge":case lt.SEARCH_TYPES.GREATER_THAN_EQUAL:case lt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Zr(r,n=>(0,jr.compareKeys)(n,s)>=0);case lt.SEARCH_TYPES.LESS_THAN:case"lt":case lt.SEARCH_TYPES._LESS_THAN:return Zr(r,n=>(0,jr.compareKeys)(n,s)<0);case"le":case lt.SEARCH_TYPES.LESS_THAN_EQUAL:case lt.SEARCH_TYPES._LESS_THAN_EQUAL:return Zr(r,n=>(0,jr.compareKeys)(n,s)<=0);case"ne":return Zr(r,n=>(0,jr.compareKeys)(n,s)!==0);default:return}}function Zr(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function bu(e){if(!e)return;let t=new yE,r,s,n,i,o;for(;r=og.exec(e);){i=og.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=zF[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var bE,lt,jr,ag,og,zF,JF,yE,yu=Se(()=>{bE=C(W()),lt=C(xe()),jr=require("ordered-binary"),ag=require("lmdb"),og=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,zF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(IE,"idsForCondition");JF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(wE,"filterByType");a(Zr,"attributeComparator");a(bu,"parseQuery");yE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var DE={};je(DE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Us,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Eg,snake_case:()=>ZF});function ZF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function cg(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new UE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ye(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[Eg]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new Iu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Iu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Tr(e,t){let r=new dg.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function CE(e){let t=e[ce];if(t){let r=e[ft];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function ug(e){if(typeof e=="string")return t=>CE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=CE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=CE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var lg,_g,dg,Ae,ae,Us,Eg,ce,XF,ht,Iu,UE,Xr=Se(()=>{lg=require("crypto");na();_g=require("../index"),dg=C(W());Nu();xn();yu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Us=Symbol("is-collection"),Eg=Symbol("save-updates"),ce=Symbol("stored-record"),XF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=ug(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=pr(function(t,r,s,n){if(Array.isArray(n)&&t[Us]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):Tr(t,"put")},{hasContent:!0,type:"update"});static delete=pr(function(t,r,s,n){return t.delete?t.delete(r):Tr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,lg.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ye(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Tr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Tr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=pr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=pr(function(t,r,s,n){return t.connect?t.connect(r):Tr(t,"connect")},{type:"read"});static subscribe=pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Tr(t,"subscribe")},{type:"read"});static publish=pr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Tr(t,"publish")},{hasContent:!0,type:"create"});static search=pr(function(t,r,s,n){let i=t.search?t.search(s):Tr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=ug(o);return i.map(c)}return i},{type:"read"});static query=pr(function(t,r,s,n){return t.search?t.search(n,r):Tr(t,"search")},{hasContent:!0,type:"read"});static copy=pr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Tr(t,"copy")},{type:"create"});static move=pr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Tr(t,"move")},{type:"delete"});post(t){if(this[Us])return this.constructor.create(this[ae],t,this[Ae]);Tr(this,"post")}static isCollection(t){return t?.[Us]}static coerceId(t){return t}static parseQuery(t){return bu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&XF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:cg(t,this)}}return cg(t,this)}static getResource(t,r,s){let n,i=r[Ae],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[Us]=!0),n}connect(t){let r=new Jr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ae]}getContext(){return this[Ae]}};ht.prototype[Ae]=null;(0,_g._assignPackageExport)("Resource",ht);a(ZF,"snake_case");Iu=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(cg,"pathToId");UE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(pr,"transactional");a(Tr,"missingMethod");a(CE,"selectFromObject");a(ug,"transformForSelect")});var wu={};je(wu,{server:()=>tt});var fg,tt,es=Se(()=>{fg=require("../index"),tt={};(0,fg._assignPackageExport)("server",tt)});var PE={};je(PE,{loadGQLSchema:()=>eq,start:()=>ME,startOnMainThread:()=>jF});function ME({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let F of P.arguments)F.name.value==="role"&&z.push(F.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,LE.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,LE.dirname)(s)+"/"+T.name,p.tableClass)}}}var LE,jF,eq,hg=Se(()=>{LE=require("path");de();a(ME,"start");jF=ME,eq=ME({ensureTable:rt}).handleFile});async function Cu(e){return tq?(aa||(aa=rq(nq)),(await(await aa).import(e)).namespace):import(e)}async function rq(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),aa=new Compartment({console,Math,Date,fetch:sq,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Sg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:ht,tables:sr,databases:Pe})}};let s=await(0,mg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),aa}function sq(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function nq(){return{Resource:ht,tables:sr}}var mg,Sg,tq,aa,vE=Se(()=>{Xr();de();mg=require("fs/promises"),Sg=require("path"),tq=!1;a(Cu,"secureImport");a(rq,"getCompartment");a(sq,"secureOnlyFetch");a(nq,"getGlobalVars")});var HE={};je(HE,{handleFile:()=>iq});async function iq(e,t,r,s){let n=new Map,i=(0,pg.pathToFileURL)(r).toString(),o=await Cu(i);u(o.default)&&s.set((0,BE.dirname)(t),o.default),c(o,(0,BE.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var pg,BE,Tg=Se(()=>{pg=require("url");vE();BE=require("path");a(iq,"handleFile")});var qE={};je(qE,{start:()=>oq});function oq({resources:e}){e.set("login",FE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FE,Rg=Se(()=>{Xr();a(oq,"start");FE=class extends ht{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var xE=m((are,Og)=>{"use strict";var{Readable:aq}=require("stream"),cq=1e4;Og.exports={streamAsJSON(e){return new GE({value:e})}};var GE=class extends aq{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),gg)}catch(n){yield gg(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Ag(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>cq?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return Ag(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};function gg(e){return console.error(e),JSON.stringify(e.toString())}a(gg,"handleError");function Ag(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Ag,"when")});var Bg=m((lre,vg)=>{"use strict";var kE=require("recursive-iterator"),uq=require("alasql"),VE=require("clone"),Ng=V(),{handleHDBError:bg,hdb_errors:lq}=W(),{HDB_ERROR_MSGS:yg,HTTP_STATUS_CODES:Ig}=lq,{getDatabases:_q}=(de(),re(Ne)),dq=["DISTINCT_ARRAY"],wg=Symbol("validateTables"),$E=Symbol("validateTable"),ure=Symbol("getAllColumns"),Cg=Symbol("validateAllColumns"),Uu=Symbol("findColumn"),Ug=Symbol("validateOrderBy"),ca=Symbol("validateSegment"),YE=Symbol("validateColumn"),Dg=Symbol("setColumnsForTable"),Lg=Symbol("checkColumnsForAsterisk"),Mg=Symbol("validateGroupBy"),Pg=Symbol("hasColumns"),KE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wg](),this[Lg](),this[Cg]()}[wg](){if(this[Pg]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[$E](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[$E](t.table)})}}[Pg](){let t=!1,r=new kE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[$E](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=_q();if(!r[t.databaseid])throw bg(new Error,yg.SCHEMA_NOT_FOUND(t.databaseid),Ig.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw bg(new Error,yg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ig.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=VE(n);i.table=VE(t),this.attributes.push(i)})}[Uu](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)}[Lg](){let t=new kE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Dg](r.tableid)}[Dg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new uq.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Cg](){this[ca](this.statement.columns,!1),this[ca](this.statement.joins,!1),this[ca](this.statement.where,!1),this[Mg](this.statement.group,!1),this[ca](this.statement.order,!0)}[ca](t,r){if(!t)return;let s=new kE(t),n=[];for(let{node:i,path:o}of s)!Ng.isEmpty(i)&&!Ng.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Ug](i):n.push(this[YE](i)));return n}[Mg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&dq.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=VE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Uu](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[Uu](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`}[Ug](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[YE](t)}[YE](t){let r=this[Uu](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]}};vg.exports=KE});var Fg=m((dre,Hg)=>{"use strict";var WE=class{static{a(this,"BridgeMethods")}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")}};Hg.exports=WE});var Gg=m((fre,qg)=>{"use strict";var QE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qg.exports=QE});var Du=m((mre,xg)=>{"use strict";var JE=Q(),XE=A();JE.initSync();var Eq=JE.get(XE.CONFIG_PARAMS.STORAGE_COMPRESSION),fq=JE.get(XE.CONFIG_PARAMS.STORAGE_CACHING)!==!1,hq=XE.UPDATES_PROPERTY,zE=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Eq&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=fq&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===hq)}};xg.exports=zE});var Mu=m((pre,Vg)=>{"use strict";var Bi=Q(),ua=A();Bi.initSync();var mq=Bi.get(ua.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Bi.get(ua.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Bi.get(ua.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kg=Bi.get(ua.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Sq=Bi.get(ua.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Lu=class{static{a(this,"OpenEnvironmentObject")}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=mq,this.noFSAccess=!0,kg!==void 0&&(this.overlappingSync=kg),this.noReadAhead=Sq}};Vg.exports=Lu;Lu.MAX_DBS=1e4});var ye=m((Rre,jg)=>{"use strict";var jE=require("lmdb"),Pr=require("fs-extra"),nr=require("path"),Pu=vt(),Kg=x(),Bt=rr().LMDB_ERRORS_ENUM,vu=Gg(),ef=Du(),Wg=Mu(),un=xe(),$g=A(),{table:pq,resetDatabases:Tq}=(de(),re(Ne)),Yg=Q(),vr=un.INTERNAL_DBIS_NAME,Qg=un.DBI_DEFINITION_NAME,Rq="data.mdb",gq="lock.mdb",la=".mdb",Aq="-lock",ZE=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Rr(t,r),this.key_type=this.dbi[un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new jE.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bu(e,t){if(e===void 0)throw new Error(Bt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Bt.ENV_NAME_REQUIRED)}a(Bu,"pathEnvNameValidation");async function tf(e,t,r=!0){try{await Pr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Bt.INVALID_BASE_PATH):s}try{let s=nr.join(e,t+la);return await Pr.access(s,Pr.constants.R_OK|Pr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Pr.access(nr.join(e,t,Rq),Pr.constants.R_OK|Pr.constants.F_OK),nr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Bt.INVALID_ENVIRONMENT)}else throw new Error(Bt.INVALID_ENVIRONMENT);throw s}}a(tf,"validateEnvironmentPath");function Hu(e,t){if(Pu.validateEnv(e),t===void 0)throw new Error(Bt.DBI_NAME_REQUIRED)}a(Hu,"validateEnvDBIName");async function Oq(e,t,r=!1,s=!1){Bu(e,t);let n=nr.basename(e);t=t.toString();let i=Yg.get($g.CONFIG_PARAMS.SCHEMAS);i||Yg.setProperty($g.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await tf(e,t,s),zg(e,t,r)}catch(o){if(o.message===Bt.INVALID_ENVIRONMENT){let c=nr.join(e,t);await Pr.mkdirp(s?c:e);let u=new Wg(s?c:c+la,!1),l=jE.open(u);l.dbis=Object.create(null);let _=new ef(!1);l.openDB(vr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=rf(e,t,r);return l[un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Oq,"createEnvironment");async function Nq(e,t,r,s=!0){Bu(e,t),t=t.toString();let n=nr.join(e,t);return pq({table:t,database:nr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Nq,"copyEnvironment");async function zg(e,t,r=!1){Bu(e,t),t=t.toString();let s=rf(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 tf(e,t),i=nr.join(e,t+la),o=n!=i,c=new Wg(n,o),u=jE.open(c);u.dbis=Object.create(null);let l=Xg(u);for(let _=0;_<l.length;_++)Rr(u,l[_]);return u[un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(zg,"openEnvironment");async function bq(e,t,r=!1){Bu(e,t),t=t.toString();let s=nr.join(e,t+la),n=await tf(e,t);if(global.lmdb_map!==void 0){let i=rf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Jg(o),delete global.lmdb_map[i]}}await Pr.remove(n),await Pr.remove(n===s?n+Aq:nr.join(nr.dirname(n),gq))}a(bq,"deleteEnvironment");async function Jg(e){Pu.validateEnv(e);let t=e[un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Jg,"closeEnvironment");function rf(e,t,r=!1){let n=`${nr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(rf,"getCachedEnvironmentName");function yq(e){Pu.validateEnv(e);let t=Object.create(null),r=Rr(e,vr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==vr)try{t[s]=Object.assign(new vu,n)}catch{Kg.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(yq,"listDBIDefinitions");function Xg(e){Pu.validateEnv(e);let t=[],r=Rr(e,vr);for(let{key:s}of r.getRange({start:!1}))s!==vr&&t.push(s);return t}a(Xg,"listDBIs");function Iq(e,t){let s=Rr(e,vr).getEntry(t),n=new vu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Kg.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Iq,"getDBIDefinition");function Zg(e,t,r,s=!r){if(Hu(e,t),t=t.toString(),t===vr)throw new Error(Bt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Rr(e,t)}catch(n){if(n.message===Bt.DBI_DOES_NOT_EXIST){let i=new ef(r,s===!0),o=e.openDB(t,i),c=new vu(r===!0,s);return o[Qg]=c,Rr(e,vr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Zg,"createDBI");function Rr(e,t){if(Hu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==vr?r=Iq(e,t):r=new vu,r===void 0)throw new Error(Bt.DBI_DOES_NOT_EXIST);let s;try{let n=new ef(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(Bt.DBI_DOES_NOT_EXIST):n}return s[Qg]=r,e.dbis[t]=s,s}a(Rr,"openDBI");function wq(e,t){Hu(e,t),t=t.toString();let r=Rr(e,t),s=r.getStats();return r[un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wq,"statDBI");async function Cq(e,t){try{let r=nr.join(e,t+la);return(await Pr.stat(r)).size}catch{throw new Error(Bt.INVALID_ENVIRONMENT)}}a(Cq,"environmentDataSize");function Uq(e,t){if(Hu(e,t),t=t.toString(),t===vr)throw new Error(Bt.CANNOT_DROP_INTERNAL_DBIS_NAME);Rr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Rr(e,vr).removeSync(t)}a(Uq,"dropDBI");function Dq(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Rr(e,i)}catch(o){if(o.message===Bt.DBI_DOES_NOT_EXIST)Zg(e,i,i!==t,i===t),s=!0;else throw o}}s&&Tq()}a(Dq,"initializeDBIs");jg.exports={openDBI:Rr,openEnvironment:zg,createEnvironment:Oq,listDBIs:Xg,listDBIDefinitions:yq,createDBI:Zg,dropDBI:Uq,statDBI:wq,deleteEnvironment:bq,initializeDBIs:Dq,TransactionCursor:ZE,environmentDataSize:Cq,copyEnvironment:Nq,closeEnvironment:Jg}});var tA=m((Are,eA)=>{"use strict";var sf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};eA.exports=sf});var sA=m((Nre,rA)=>{"use strict";var nf=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};rA.exports=nf});var iA=m((yre,nA)=>{"use strict";var of=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};nA.exports=of});var Hi=m((Dre,cA)=>{"use strict";var Lq=ye(),Mq=tA(),Pq=sA(),vq=iA(),ts=vt(),_a=rr().LMDB_ERRORS_ENUM,Bq=xe(),Ds=A(),Hq=V(),Fq=require("uuid"),wre=require("lmdb"),{handleHDBError:qq,hdb_errors:Gq}=W(),{OVERFLOW_MARKER:Cre,MAX_SEARCH_KEY_LENGTH:Ure}=Bq,oA=Q();oA.initSync();var Fu=oA.get(Ds.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),af=Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME,kn=Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xq(e,t,r,s,n=ts.getNextMonotonicTime()){_f(e,t,r,s),cf(e,t,r);let i=new Mq,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];aA(l,!0,n);let _=kq(e,t,r,l),d=l[t];o.push(_),c.push(d)}return uf(o,c,s,i,n)}a(xq,"insertRecords");function kq(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 _=c([[{}]]);Array.isArray(_)&&(c=_[0][Ds.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Fu&&l.prefetch(u.map(_=>({key:_,value:n})),qu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Fu&&e.dbis[t].prefetch([n],qu),e.dbis[t].put(n,s,s[kn])})}a(kq,"insertRecord");function Vq(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Vq,"removeSkippedRecords");function aA(e,t,r){let s=r>0;(s||!Number.isInteger(e[kn]))&&(e[kn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[af]))&&(e[af]=r||ts.getNextMonotonicTime()):delete e[af]}a(aA,"setTimestamps");function cf(e,t,r){r.indexOf(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Lq.initializeDBIs(e,t,r)}a(cf,"initializeTransaction");async function $q(e,t,r,s,n=ts.getNextMonotonicTime()){_f(e,t,r,s),cf(e,t,r);let i=new Pq,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=lf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return uf(c,u,s,i,n,o)}a($q,"updateRecords");async function Yq(e,t,r,s,n=ts.getNextMonotonicTime()){try{_f(e,t,r,s)}catch(u){throw qq(u,u.message,Gq.HTTP_STATUS_CODES.BAD_REQUEST)}cf(e,t,r);let i=new vq,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;Hq.isEmpty(l[t])?(_=Fq.v4(),l[t]=_):_=l[t];let d=lf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return uf(o,c,s,i,n)}a(Yq,"upsertRecords");async function uf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ts.getNextMonotonicTime(),Vq(r,i),s}a(uf,"finalizeWrite");function lf(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(aA(r,!_,o),Number.isInteger(r[kn])&&l[kn]>r[kn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][Ds.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ts.getIndexedValues(R);if(O){Fu&&p.prefetch(O.map(k=>({key:k,value:s})),qu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Fu&&p.prefetch(O.map(k=>({key:k,value:s})),qu);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[kn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:lf(e,t,r,s,n,i,o))}a(lf,"updateUpsertRecord");function Kq(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(_a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(_a.WRITE_ATTRIBUTES_REQUIRED):new Error(_a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Kq,"validateBasic");function _f(e,t,r,s){if(Kq(e,t,r),!Array.isArray(s))throw s===void 0?new Error(_a.RECORDS_REQUIRED):new Error(_a.RECORDS_MUST_BE_ARRAY)}a(_f,"validateWrite");function qu(){}a(qu,"noop");cA.exports={insertRecords:xq,updateRecords:$q,upsertRecords:Yq}});var Vn=m((Mre,Wq)=>{Wq.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var rs=m((Pre,_A)=>{"use strict";var lA=V(),uA=A(),Fi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ls=require("joi"),ln={schema_format:{pattern:Fi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Qq=Ls.alternatives(Ls.string().min(1).max(ln.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+ln.schema_format.message}),Ls.number()).required(),zq=Ls.alternatives(Ls.string().min(1).max(ln.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+ln.schema_format.message}),Ls.number()),Jq=Ls.alternatives(Ls.string().min(1).max(ln.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+ln.schema_format.message}),Ls.number()).required();function Xq(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ln.schema_length.maximum?`'${e}' maximum of 250 characters`:Fi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Xq,"checkValidTable");function Zq(e,t){return lA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Zq,"validateSchemaExists");function jq(e,t){let r=t.state.ancestors[0].schema;return lA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(jq,"validateTableExists");function eG(e,t){return e.toLowerCase()===uA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${uA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(eG,"validateSchemaName");_A.exports={common_validators:ln,schema_regex:Fi,hdb_schema_table:Qq,validateSchemaExists:Zq,validateTableExists:jq,validateSchemaName:eG,checkValidTable:Xq,hdb_database:zq,hdb_table:Jq}});var ve=m((Bre,dA)=>{"use strict";var Ht=require("validate.js");Ht.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ht.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ht.validators.type.checks={Object:function(e){return Ht.isObject(e)&&!Ht.isArray(e)},Array:Ht.isArray,Integer:Ht.isInteger,Number:Ht.isNumber,String:Ht.isString,Date:Ht.isDate,Boolean:function(e){return typeof e=="boolean"}};Ht.validators.hasValidFileExt=function(e,t){return Ht.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};dA.exports={validateObject:tG,validateObjectAsync:rG,validateBySchema:sG};function tG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ht(e,t,{format:"flat"});return r?new Error(r):null}a(tG,"validateObject");async function rG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ht.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(rG,"validateObjectAsync");function sG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(sG,"validateBySchema")});var Gu=m((Fre,EA)=>{var{common_validators:ss}=rs(),Ea=ve(),da="is required",Ke={database:{presence:!1,format:ss.schema_format,length:ss.schema_length},schema:{presence:!1,format:ss.schema_format,length:ss.schema_length},table:{presence:!0,format:ss.schema_format,length:ss.schema_length},attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length},hash_attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length}};function fa(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(fa,"makeAttributesStrings");function nG(e){return e=fa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,Ea.validateObject(e,Ke)}a(nG,"schema_object");function iG(e){return e=fa(e),Ke.table.presence={message:da},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,Ea.validateObject(e,Ke)}a(iG,"table_object");function oG(e){return e=fa(e),Ke.table.presence={message:da},Ke.attribute.presence=!1,Ea.validateObject(e,Ke)}a(oG,"create_table_object");function aG(e){return e=fa(e),Ke.table.presence={message:da},Ke.attribute.presence={message:da},Ke.hash_attribute.presence=!1,Ea.validateObject(e,Ke)}a(aG,"attribute_object");function cG(e){return e=fa(e),Ke.table.presence={message:da},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,Ea.validateObject(e,Ke)}a(cG,"describe_table");function uG(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(uG,"validateTableResidence");EA.exports={schema_object:nG,create_table_object:oG,table_object:iG,attribute_object:aG,describe_table:cG,validateTableResidence:uG}});var hA=m((Gre,fA)=>{"use strict";var lG=require("uuid"),df=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||lG.v4(),this.schema_table=`${this.schema}.${this.table}`}};fA.exports=df});var xu=m((kre,mA)=>{"use strict";var _G=hA(),Ef=class extends _G{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};mA.exports=Ef});var pA=m(($re,SA)=>{"use strict";SA.exports=EG;var dG="inserted";function EG(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===dG?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(EG,"returnObject")});var ku=m((Kre,OA)=>{"use strict";var fG=A(),ff=ye(),hG=Hi(),{getSystemSchemaPath:mG,getSchemaPath:SG}=we(),pG=Vn(),TG=Gu(),RG=xu(),gG=pA(),{handleHDBError:TA,hdb_errors:gA}=W(),RA=V(),{HTTP_STATUS_CODES:AG}=gA,hf=pG.hdb_attribute,AA=[];for(let e=0;e<hf.attributes.length;e++)AA.push(hf.attributes[e].attribute);var OG="inserted";OA.exports=NG;async function NG(e){let t=TG.attribute_object(e);if(t)throw TA(new Error,t.message,gA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&RA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw TA(new Error,r,AG.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=RA.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 RG(e.schema,e.table,e.attribute,e.id);try{let i=await ff.openEnvironment(SG(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}`);ff.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ff.openEnvironment(mG(),fG.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await hG.insertRecords(o,hf.hash_attribute,AA,[n]);return gG(OG,c,{records:[n]},u)}catch(i){throw i}}a(NG,"lmdbCreateAttribute")});var Sf=m((Qre,bA)=>{var{hdb_table:bG,hdb_database:NA}=rs(),yG=ve(),mf=require("joi"),IG={undefined:"undefined",null:"null"},wG=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||IG[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"),CG=mf.object({database:NA,schema:NA,table:bG,records:mf.array().items(mf.object().custom(wG)).required()});bA.exports=function(e){return yG.validateBySchema(e,CG)}});var ha=m((Xre,IA)=>{"use strict";var Ms=V(),yA=x(),Jre=Sf(),{getDatabases:UG}=(de(),re(Ne)),{ClientError:$n}=W();IA.exports=DG;function DG(e){if(Ms.isEmpty(e))throw new $n("invalid update parameters defined.");if(Ms.isEmptyOrZeroLength(e.schema))throw new $n("invalid schema specified.");if(Ms.isEmptyOrZeroLength(e.table))throw new $n("invalid table specified.");if(!Array.isArray(e.records))throw new $n("records must be an array");let t=UG()[e.schema]?.[e.table];if(Ms.isEmpty(t))throw new $n(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Ms.isEmptyOrZeroLength(o[r]))throw yA.error("a valid hash attribute must be provided with update record:",o),new $n("a valid hash attribute must be provided with update record, check log for more info");if(!Ms.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw yA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $n(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ms.isEmpty(o[r])&&o[r]!==""&&s.has(Ms.autoCast(o[r]))&&(o.skip=!0),s.add(Ms.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(DG,"insertUpdateValidate")});var ma=m((jre,wA)=>{"use strict";var LG=A().OPERATIONS_ENUM,pf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=LG.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};wA.exports=pf});var Ra=m((rse,CA)=>{"use strict";var tse=ma(),Vu=A(),Rf=V(),Tf=x(),MG=require("uuid"),{handleHDBError:Sa,hdb_errors:PG}=W(),{HDB_ERROR_MSGS:pa,HTTP_STATUS_CODES:Ta}=PG;CA.exports=vG;function vG(e,t,r){for(let n=0;n<t.length;n++)BG(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];HG(i,r,e.operation)}}a(vG,"processRows");function BG(e){if(Buffer.byteLength(String(e))>Vu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sa(new Error,pa.ATTR_NAME_LENGTH_ERR(e),Ta.BAD_REQUEST,void 0,void 0,!0);if(Rf.isEmptyOrZeroLength(e)||Rf.isEmpty(e.trim()))throw Sa(new Error,pa.ATTR_NAME_NULLISH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0)}a(BG,"validateAttribute");function HG(e,t,r){if(!e.hasOwnProperty(t)||Rf.isEmptyOrZeroLength(e[t])){if(r===Vu.OPERATIONS_ENUM.INSERT||r===Vu.OPERATIONS_ENUM.UPSERT){e[t]=MG.v4();return}throw Tf.error("Update transaction aborted due to record with no hash value:",e),Sa(new Error,pa.RECORD_MISSING_HASH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Tf.error(e),Sa(new Error,pa.HASH_VAL_LENGTH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Tf.error(e),Sa(new Error,pa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0)}a(HG,"validateHash")});var DA=m((nse,UA)=>{"use strict";var gf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UA.exports=gf});var PA=m((ose,MA)=>{"use strict";var Af=ye(),FG=x(),LA=rr().LMDB_ERRORS_ENUM;MA.exports=qG;async function qG(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 Af.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Af.closeEnvironment(global.lmdb_map[s]),await Af.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LA.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){FG.error(t)}}a(qG,"cleanLMDBMap")});var Ps=m((cse,FA)=>{"use strict";var ga=require("crypto"),GG=Q(),{CONFIG_PARAMS:xG}=A(),BA="aes-256-cbc",kG=32,VG=16,Of=64,HA=32,$G=Of+HA,vA=new Map;FA.exports={encrypt:YG,decrypt:KG,createNatsTableStreamName:WG};function YG(e){let t=ga.randomBytes(kG),r=ga.randomBytes(VG),s=ga.createCipheriv(BA,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(YG,"encrypt");function KG(e){let t=e.substr(0,Of),r=e.substr(Of,HA),s=e.substr($G,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ga.createDecipheriv(BA,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(KG,"decrypt");function WG(e,t){let r=GG.get(xG.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=vA.get(r);return s||(s=ga.createHash("md5").update(r).digest("hex"),vA.set(r,s)),s}a(WG,"createNatsTableStreamName")});var Yn=m((_se,GA)=>{"use strict";var lse=gr(),$u=x(),qA=Gu(),QG=Ps(),Yu=V(),{handleHDBError:Ku,hdb_errors:zG}=W(),{HDB_ERROR_MSGS:Wu,HTTP_STATUS_CODES:Nf}=zG,JG=Q();JG.initSync();var{getDatabases:bf}=(de(),re(Ne));GA.exports={describeAll:XG,describeTable:Qu,describeSchema:ZG};async function XG(e){try{let t=Yu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=bf(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await Qu({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await Qu({schema:l,table:d},f)}E&&c.push(E)}catch(E){$u.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return $u.error("Got an error in describeAll"),$u.error(t),Ku(new Error,Wu.DESCRIBE_ALL_ERR)}}a(XG,"describeAll");async function Qu(e,t){Yu.transformReq(e);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=qA.describe_table(e);if(i)throw i;let c=bf()[r];if(!c)throw Ku(new Error,Wu.SCHEMA_NOT_FOUND(e.schema),Nf.NOT_FOUND);let u=c[s];if(!u)throw Ku(new Error,Wu.TABLE_NOT_FOUND(e.schema,e.table),Nf.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=QG.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){$u.warn(`unable to stat table dbi due to ${d}`)}return _}a(Qu,"descTable");async function ZG(e){Yu.transformReq(e);let t=qA.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(),i=bf()[s];if(!i)throw Ku(new Error,Wu.SCHEMA_NOT_FOUND(e.schema),Nf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yu.isEmpty(u)||u.describe){let l=await Qu({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(ZG,"describeSchema")});var _n=m((hse,YA)=>{var jG=Vn(),{callbackify:kA,promisify:ex}=require("util"),{getDatabases:VA}=(de(),re(Ne));YA.exports={setSchemaDataToGlobal:xA,getTableSchema:tx,getSystemSchema:rx,setSchemaDataToGlobalAsync:ex(xA)};var $A=Yn(),Ese=kA($A.describeAll),fse=kA($A.describeTable);function xA(e){global.hdb_schema=VA(),e&&e()}a(xA,"setSchemaDataToGlobal");function tx(e,t,r){let s=VA()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(tx,"getTableSchema");function rx(){return jG}a(rx,"getSystemSchema")});var Ar=m((Sse,zA)=>{"use strict";var Ju=Sf(),mt=V(),sx=require("util"),Xu=Br(),nx=_n(),KA=x(),{handleHDBError:Kn,hdb_errors:ix}=W(),{HTTP_STATUS_CODES:Wn}=ix,ox=sx.promisify(nx.getTableSchema),ax="updated",WA="inserted",QA="upserted";zA.exports={insert:ux,update:lx,upsert:_x,validation:cx,flush:dx};async function cx(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(mt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ox(e.schema,e.table),r=Ju(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&&mt.isEmptyOrZeroLength(c[s]))throw KA.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(!mt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw KA.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!mt.isEmpty(c[s])&&c[s]!==""&&n.has(mt.autoCast(c[s]))&&(c.skip=!0),n.add(mt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(cx,"validation");async function ux(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ju(e);if(t)throw Kn(new Error,t.message,Wn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Kn(new Error,r,Wn.BAD_REQUEST);let s=await Xu.createRecords(e);return zu(WA,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(ux,"insertData");async function lx(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ju(e);if(t)throw Kn(new Error,t.message,Wn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Kn(new Error,r,Wn.BAD_REQUEST);let s=await Xu.updateRecords(e);return mt.isEmpty(s.existing_rows)?zu(ax,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zu(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(lx,"updateData");async function _x(e){if(e.operation!=="upsert")throw Kn(new Error,"invalid operation, must be upsert",Wn.INTERNAL_SERVER_ERROR);let t=Ju(e);if(t)throw Kn(new Error,t.message,Wn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Kn(new Error,r,Wn.BAD_REQUEST);let s=await Xu.upsertRecords(e);return zu(QA,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(_x,"upsertData");function zu(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===WA?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===QA?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zu,"returnObject");function dx(e){return mt.transformReq(e),Xu.flush(e.schema,e.table)}a(dx,"flush")});var If=m((Tse,ZA)=>{var Ex=ve(),yf=require("joi"),{hdb_table:fx,hdb_database:JA}=rs(),XA={schema:JA,database:JA,table:fx},hx={date:yf.date().iso().required()},mx={timestamp:yf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ZA.exports=function(e,t){let r=t==="timestamp"?{...XA,...mx}:{...XA,...hx},s=yf.object(r);return Ex.validateBySchema(e,s)}});var tO=m((Rse,eO)=>{var Sx=ve(),wf=require("joi"),{hdb_table:px,hdb_database:jA}=rs(),Tx=wf.object({schema:jA,database:jA,table:px,hash_values:wf.array().required(),ids:wf.array()});eO.exports=function(e){return Sx.validateBySchema(e,Tx)}});var sO=m((gse,rO)=>{"use strict";var Cf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Uf=class{static{a(this,"NoSQLSeachObject")}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}},Df=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};rO.exports={InsertObject:Cf,NoSQLSeachObject:Uf,DeleteResponseObject:Df}});var Jn=m((Ose,cO)=>{"use strict";var iO=If(),Rx=tO(),Qn=V(),nO=require("moment"),oO=x(),{promisify:gx,callbackify:Ax}=require("util"),zn=A(),Ox=_n(),Lf=gx(Ox.getTableSchema),Mf=Br(),{DeleteResponseObject:Nx}=sO(),{handleHDBError:dn,hdb_errors:bx}=W(),{HDB_ERROR_MSGS:Zu,HTTP_STATUS_CODES:En}=bx,yx="records successfully deleted",Ix=Ax(aO);cO.exports={delete:Ix,deleteRecord:aO,deleteFilesBefore:wx,deleteAuditLogsBefore:Cx};async function wx(e){let t=iO(e,"date");if(t)throw dn(t,t.message,En.BAD_REQUEST,void 0,void 0,!0);if(Qn.transformReq(e),!nO(e.date,nO.ISO_8601).isValid())throw dn(new Error,Zu.INVALID_DATE,En.BAD_REQUEST,zn.LOG_LEVELS.ERROR,Zu.INVALID_DATE,!0);let s=Qn.checkSchemaTableExist(e.schema,e.table);if(s)throw dn(new Error,s,En.NOT_FOUND,zn.LOG_LEVELS.ERROR,s,!0);let n=await Mf.deleteRecordsBefore(e);if(await Lf(e.schema,e.table),oO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(wx,"deleteFilesBefore");async function Cx(e){let t=iO(e,"timestamp");if(t)throw dn(t,t.message,En.BAD_REQUEST,void 0,void 0,!0);if(Qn.transformReq(e),isNaN(e.timestamp))throw dn(new Error,Zu.INVALID_VALUE("Timestamp"),En.BAD_REQUEST,zn.LOG_LEVELS.ERROR,Zu.INVALID_VALUE("Timestamp"),!0);let r=Qn.checkSchemaTableExist(e.schema,e.table);if(r)throw dn(new Error,r,En.NOT_FOUND,zn.LOG_LEVELS.ERROR,r,!0);let s=await Mf.deleteAuditLogsBefore(e);return await Lf(e.schema,e.table),oO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Cx,"deleteAuditLogsBefore");async function aO(e){e.ids&&(e.hash_values=e.ids);let t=Rx(e);if(t)throw dn(t,t.message,En.BAD_REQUEST,void 0,void 0,!0);Qn.transformReq(e);let r=Qn.checkSchemaTableExist(e.schema,e.table);if(r)throw dn(new Error,r,En.NOT_FOUND,zn.LOG_LEVELS.ERROR,r,!0);try{await Lf(e.schema,e.table);let s=await Mf.deleteRecords(e);return Qn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${yx}`),s}catch(s){if(s.message===zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Nx;return n.message=zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(aO,"deleteRecord")});var ju=m((bse,_O)=>{var Ux=require("crypto"),uO=9;function Dx(e){let t=Mx(uO),r=lO(e+t);return t+r}a(Dx,"createHash");function Lx(e,t){let r=e.substr(0,uO),s=r+lO(t+r);return e===s}a(Lx,"validateHash");function Mx(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(Mx,"generateSalt");function lO(e){return Ux.createHash("md5").update(e).digest("hex")}a(lO,"md5");_O.exports={hash:Dx,validate:Lx}});var EO=m((Ise,dO)=>{var Pf=ve(),It={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 Px(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Pf.validateObject(e,It)}a(Px,"addUserValidation");function vx(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Pf.validateObject(e,It)}a(vx,"alterUserValidation");function Bx(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Pf.validateObject(e,It)}a(Bx,"dropUserValidation");dO.exports={addUserValidation:Px,alterUserValidation:vx,dropUserValidation:Bx}});var Be=m((Use,hO)=>{"use strict";var{platform:Cse}=require("os"),Hx="nats-server.zip",vf="nats-server",Fx=process.platform==="win32"?`${vf}.exe`:vf,Bf="HDB",qx=/^[^\s.,*>]+$/,fO="__request__",Gx=a(e=>`${e}.${fO}`,"REQUEST_SUBJECT"),xx={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},kx={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Vx={HUB:"hub.pid",LEAF:"leaf.pid"},$x={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Yx={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Bf,deliver_subject:"__HDB__.WORKQUEUE"},Kx={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Bf,deliver_subject:"HDB.SCHEMAQUEUE"},Wx={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Bf,deliver_subject:"HDB.USERQUEUE"},Qx={SUCCESS:"success",ERROR:"error"},zx={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Jx={TXN:"txn",MSGID:"msgid"},qi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Xx={[qi.ERR]:1,[qi.WRN]:2,[qi.INF]:3,[qi.DBG]:4,[qi.TRC]:5},Zx={debug:"-D",trace:"-DVV"};hO.exports={NATS_SERVER_ZIP:Hx,NATS_SERVER_NAME:vf,NATS_BINARY_NAME:Fx,PID_FILES:Vx,NATS_CONFIG_FILES:kx,SERVER_SUFFIX:$x,WORK_QUEUE_CONSUMER_NAMES:Yx,SCHEMA_QUEUE_CONSUMER_NAMES:Kx,USER_QUEUE_CONSUMER_NAMES:Wx,NATS_TERM_CONSTRAINTS_RX:qx,REQUEST_SUFFIX:fO,UPDATE_REMOTE_RESPONSE_STATUSES:Qx,CLUSTER_STATUS_STATUSES:zx,REQUEST_SUBJECT:Gx,SUBJECT_PREFIXES:Jx,MSG_HEADERS:xx,LOG_LEVELS:qi,LOG_LEVEL_FLAGS:Zx,LOG_LEVEL_HIERARCHY:Xx}});var SO=m((Lse,mO)=>{"use strict";var jx={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))},ek="certificate.pem",tk="privateKey.pem",rk="ca.pem";mO.exports={CERTIFICATE_VALUES:jx,CERTIFICATE_PEM_NAME:ek,PRIVATEKEY_PEM_NAME:tk,CA_PEM_NAME:rk}});var Ff=m((Pse,OO)=>{"use strict";var gO=require("fs-extra"),ee=require("joi"),sk=require("os"),{boolean:pe,string:Bs,number:ir,array:Hf}=ee.types(),{totalmem:pO}=require("os"),Gi=require("path"),nk=x(),tl=V(),Mse=SO(),TO=A(),ik=ve(),RO="log",ok="components",ak="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ck="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",uk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",lk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",_k="rootPath config parameter is undefined",dk="clustering.enabled config parameter is undefined",vs=ir.min(0).required(),rl=Hf.items({host:Bs.required(),port:vs}).empty(null),Hs;OO.exports={configValidator:Ek,routesValidator:Tk,route_constraints:rl};function Ek(e){if(Hs=e.rootPath,tl.isEmpty(Hs))throw _k;let t=pe.required(),r=ee.valid("production","development").required(),s=ir.min(0).max(1e3).empty(null).default(pk),n=Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),i=ee.custom(fk).messages({"any.custom":"{:#label} {:#error}"}),o=Bs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(el),u=ee.custom(hk).empty(null).default(el),l=e.clustering?.enabled;if(tl.isEmpty(l))throw dk;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:vs,routes:rl}).required()}).required(),leafNodes:ee.object({network:ee.object({port:vs}).required()}).required(),network:ee.object({port:vs}).required()}).required(),leafServer:ee.object({network:ee.object({port:vs,routes:rl}).required(),streams:ee.object({maxAge:ir.min(120).allow(null).optional(),maxBytes:ir.min(1).allow(null).optional(),maxMsgs:ir.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Bs.optional().empty(null)}).required():_=ee.object({enabled:t,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),ee.object({authentication:ee.object({authorizeLocal:pe,cacheTTL:ir.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:ir}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:Hf.required(),headersTimeout:ir.min(1).required(),https:pe.required(),keepAliveTimeout:ir.min(1).required(),port:vs,timeout:ir.min(1).required()}),nodeEnv:r,root:n,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ee.object({enabled:t}).required(),logging:ee.object({auditAuthEvents:ee.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ee.object({enabled:pe.optional(),compress:pe.optional(),interval:Bs.custom(Sk).optional().empty(null),maxSize:Bs.custom(mk).optional().empty(null),path:Bs.optional().empty(null).default(el)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:Hf.required(),headersTimeout:ir.min(1).required(),https:pe.required(),keepAliveTimeout:ir.min(1).required(),port:vs,timeout:ir.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:vs,securePort:vs}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:ee.object({threads:s}).required(),storage:ee.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Ek,"configValidator");function AO(e){return gO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AO,"doesPathExist");function fk(e,t){if(e===null)return;let r=AO(e);return r?t.message(r):e}a(fk,"validatePemFile");function hk(e,t){ee.assert(e,Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AO(e);if(r)return t.message(r)}a(hk,"validatePath");function mk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ak);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(uk):e}a(mk,"validateRotationMaxSize");function Sk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(ck);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(lk):e}a(Sk,"validateRotationInterval");function pk(e,t){let r=t.state.path.join("."),s=sk.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||pO();return i=Math.round(Math.min(i,pO())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),nk.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(pk,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(Hs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Gi.join(Hs,ok);case"logging.root":return Gi.join(Hs,RO);case"clustering.leafServer.streams.path":return Gi.join(Hs,"clustering","leaf");case"storage.path":let s=Gi.join(Hs,TO.LEGACY_DATABASES_DIR_NAME);return gO.existsSync(s)?s:Gi.join(Hs,TO.DATABASES_DIR_NAME);case"logging.rotation.path":return Gi.join(Hs,RO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function Tk(e){let t=ee.object({routes:rl});return ik.validateBySchema({routes:e},t)}a(Tk,"routesValidator")});var Nr=m((Hse,MO)=>{"use strict";var Or=A(),_t=V(),st=x(),{configValidator:Rk,routesValidator:NO}=Ff(),Ft=require("fs-extra"),gk=require("yaml"),Hr=require("path"),Ak=require("is-number"),yO=require("properties-reader"),Ok=require("lodash"),{handleHDBError:Nk}=W(),{HTTP_STATUS_CODES:bk,HDB_ERROR_MSGS:sl}=rr(),Bse=require("minimist"),{server:yk}=(es(),re(wu)),{SCHEMAS_PARAM_CONFIG:Aa,CONFIG_PARAMS:fn,CONFIG_PARAM_MAP:Fs}=Or,Ik="Unable to get config value because config is uninitialized",wk="Config successfully initialized",Ck="Error backing up config file",Uk="Empty parameter sent to getConfigValue",IO=Hr.join(Or.PACKAGE_ROOT,"config","yaml",Or.HDB_DEFAULT_CONFIG_FILE),Dk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",bO={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"},nl,St;MO.exports={createConfigFile:Lk,getDefaultConfig:Mk,getConfigValue:CO,initConfig:UO,flattenConfig:Zn,updateConfigValue:DO,updateConfigObject:vk,getConfiguration:Fk,setConfiguration:qk,readConfigFile:xf,getClusteringRoutes:Gk,initOldConfig:LO,getConfigFromFile:xk,getConfigFilePath:Xn,addConfig:kk,deleteConfigFromFile:Vk};function Lk(e){let t=hn(IO);nl=Zn(t.toJSON());let r;for(let o in e){let c=Fs[o.toLowerCase()];if(c===fn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=qf(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){st.error(_)}}}r&&wO(t,r),Gf(t);let s=t.toJSON();St=Zn(s);let n=t.getIn(["rootPath"]),i=Hr.join(n,Or.HDB_CONFIG_FILE);Ft.createFileSync(i),Ft.writeFileSync(i,String(t)),st.trace(`Config file written to ${i}`)}a(Lk,"createConfigFile");function wO(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Aa.TABLES))for(let i in s[n][Aa.TABLES])for(let o in s[n][Aa.TABLES][i]){let c=s[n][Aa.TABLES][i][o],u=[fn.SCHEMAS,n,Aa.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[fn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){st.error("Error parsing schemas CLI/env config arguments",s)}}a(wO,"setSchemasConfig");function Mk(e){if(nl===void 0){let r=hn(IO);nl=Zn(r.toJSON())}let t=Fs[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(Mk,"getDefaultConfig");function CO(e){if(e==null){st.error(Uk);return}if(St===void 0){st.trace(Ik);return}let t=Fs[e.toLowerCase()];if(t!==void 0)return St[t.toLowerCase()]}a(CO,"getConfigValue");function Xn(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?Hr.join(t,Or.HDB_CONFIG_FILE):yO(e).get(Or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Xn,"getConfigFilePath");function UO(e=!1){if(St===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{Ft.accessSync(t,Ft.constants.F_OK|Ft.constants.R_OK)}catch(i){throw st.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Xn(t),s;if(r.includes("config/settings.js"))try{LO(r);return}catch(i){if(i.code!==Or.NODE_ERROR_CODES.ENOENT)throw i}try{s=hn(r)}catch(i){if(i.code===Or.NODE_ERROR_CODES.ENOENT){st.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 st.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Pk(s,r),Gf(s);let n=s.toJSON();if(yk.config=n,St=Zn(n),St.logging_rotation_rotate)for(let i in bO)St[i]&&st.error(`Config ${bO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(wk)}}a(UO,"initConfig");function Pk(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Hr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Hr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Hr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(st.trace("Updating config file with missing config params"),Ft.writeFileSync(t,String(e)))}a(Pk,"checkForUpdatedConfig");function Gf(e){let t=e.toJSON(),r=Rk(t);if(r.error)throw sl.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(Gf,"validateConfig");function vk(e,t){St===void 0&&(St={});let r=Fs[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(vk,"updateConfigObject");function DO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&UO();let o=CO(Fs.hdb_root),c=Hr.join(o,Or.HDB_CONFIG_FILE),u=hn(c),l;if(r===void 0&&e.toLowerCase()===fn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Fs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=qf(E,t);u.setIn([...f],h)}else for(let E in r){let f=Fs[E.toLowerCase()];if(f===fn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=qf(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){st.error(p)}}}l&&wO(u,l),Gf(u);let _=u.getIn(["rootPath"]),d=Hr.join(_,Or.HDB_CONFIG_FILE);s===!0&&Bk(c,_),Ft.writeFileSync(d,String(u)),n&&(St=Zn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(DO,"updateConfigValue");function Bk(e,t){try{let r=Hr.join(t,"backup",`${Or.HDB_CONFIG_FILE}.bak`);Ft.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(Ck),st.error(r)}}a(Bk,"backupConfigFile");var Hk=["schemas"];function Zn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Hk.includes(r)){let s=Zn(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(Zn,"flattenConfig");function qf(e,t){if(e===fn.CLUSTERING_NODENAME||e===fn.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(Ak(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(qf,"castConfigValue");function Fk(){let e=_t.getPropsFilePath(),t=Xn(e);return hn(t).toJSON()}a(Fk,"getConfiguration");async function qk(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return DO(void 0,void 0,n,!0),Dk}catch(i){throw typeof i=="string"||i instanceof String?Nk(i,i,bk.BAD_REQUEST,void 0,void 0,!0):i}}a(qk,"setConfiguration");function xf(){let e=_t.getPropsFilePath();try{Ft.accessSync(e,Ft.constants.F_OK|Ft.constants.R_OK)}catch(s){if(!_t.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xn(e);return hn(t).toJSON()}a(xf,"readConfigFile");function hn(e){return gk.parseDocument(Ft.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hn,"parseYamlDoc");function Gk(){let e=xf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=NO(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=NO(s);if(n)throw sl.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Gk,"getClusteringRoutes");function LO(e){let t=yO(e);St={};for(let r in Fs){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Fs[r].toLowerCase();n===fn.LOGGING_ROOT?St[n]=Hr.dirname(s):St[n]=s}return St}a(LO,"initOldConfig");function xk(e){let t=xf();return Ok.get(t,e.replaceAll("_","."))}a(xk,"getConfigFromFile");async function kk(e,t){let r=hn(Xn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ft.writeFile(Xn(),String(r))}a(kk,"addConfig");function Vk(e){let t=Xn(_t.getPropsFilePath()),r=hn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Hr.join(s,Or.HDB_CONFIG_FILE);Ft.writeFileSync(n,String(r))}a(Vk,"deleteConfigFromFile")});var vO=m((qse,PO)=>{"use strict";var il=A(),ol=class{static{a(this,"BaseLicense")}constructor(t=0,r=il.RAM_ALLOCATION_ENUM.DEFAULT,s=il.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},kf=class extends ol{static{a(this,"ExtendedLicense")}constructor(t=0,r=il.RAM_ALLOCATION_ENUM.DEFAULT,s=il.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};PO.exports={BaseLicense:ol,ExtendedLicense:kf}});var Oa=m((xse,xO)=>{"use strict";var ki=require("fs-extra"),BO=ju(),HO=require("crypto"),$k=require("moment"),Yk=require("uuid").v4,wt=x(),$f=require("path"),Kk=V(),mn=A(),Wk=vO().ExtendedLicense,xi="invalid license key format",Qk="061183",zk="mofi25",Jk="aes-256-cbc",Xk=16,Zk=32,FO=Q();FO.initSync();var Vf;xO.exports={validateLicense:qO,generateFingerPrint:eV,licenseSearch:GO,getLicense:sV};function Yf(){return $f.join(FO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Yf,"getLicenseDirPath");function jk(){let e=Yf();return $f.join(e,mn.LICENSE_FILE_NAME)}a(jk,"getLicenseFilePath");function Kf(){let e=Yf();return $f.join(e,mn.REG_KEY_FILE_NAME)}a(Kf,"getFingerPrintFilePath");async function eV(){let e=Kf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await tV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(eV,"generateFingerPrint");async function tV(){let e=Yk(),t=BO.hash(e),r=Kf();try{await ki.mkdirp(Yf()),await ki.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(tV,"writeFingerprint");function qO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Kf(),n=!1;try{n=ki.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=ki.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(zk),c=o[1];c=Buffer.concat([Buffer.from(c)],Xk);let u=Buffer.concat([Buffer.from(i)],Zk),l=HO.createDecipheriv(Jk,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=rV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xi),wt.error(xi),new Error(xi)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(xi),wt.error(xi),new Error(xi)}else r.exp_date=_;r.exp_date<$k().valueOf()&&(r.valid_date=!1),BO.validate(o[1],`${Qk}${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||wt.error("Invalid licence"),r}a(qO,"validateLicense");function rV(e,t){try{let r=HO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(rV,"checkOldLicense");function GO(){let e=new Wk,t=[];try{t=ki.readFileSync(jk(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Kk.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qO(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.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Vf=e,e}a(GO,"licenseSearch");async function sV(){return Vf||await GO(),Vf}a(sV,"getLicense")});var br=m((Kse,sN)=>{"use strict";var KO="username is required",WO="nothing to update, must supply active, role or password to update",QO="password cannot be an empty string",zO="If role is specified, it cannot be empty.",JO="active must be true or false";sN.exports={addUser:dV,alterUser:EV,dropUser:hV,getSuperUser:TV,userInfo:mV,listUsers:cl,listUsersExternal:SV,setUsersToGlobal:$i,findAndValidateUser:rN,getClusterUser:RV,USERNAME_REQUIRED:KO,ALTERUSER_NOTHING_TO_UPDATE:WO,EMPTY_PASSWORD:QO,EMPTY_ROLE:zO,ACTIVE_BOOLEAN:JO};var XO=Ar(),nV=Jn(),Qf=ju(),ZO=EO(),jO=gr(),zf=qs(),or=V(),eN=require("validate.js"),ue=x(),{promisify:iV}=require("util"),Jf=Ps(),kO=A(),VO=Be(),oV=Nr(),Vse=Q(),$se=Oa(),aV=Vn(),{table:Yse}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:cV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Wf,HDB_ERROR_MSGS:Vi}=cV,{UserEventMsg:Xf}=Fr(),$O=require("lodash"),{_assignPackageExport:uV}=require("../index");uV("getUser",rN);var tN={username:!0,active:!0,role:!0,password:!0},YO=new Map,al=jO.searchByValue,lV=jO.searchByHash,_V=iV(nV.delete);async function dV(e){let t=eN.cleanAttributes(e,tN),r=ZO.addUserValidation(t);if(r)throw ns(new Error,r.message,is.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 al(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,Vi.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,Vi.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Jf.encrypt(t.password)),t.password=Qf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XO.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await $i()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw ns(new Error,Vi.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],zf.signalUserChange(new Xf(process.pid)),`${c.username} successfully added`}a(dV,"addUser");async function EV(e){let t=eN.cleanAttributes(e,tN);if(or.isEmptyOrZeroLength(t.username))throw new Error(KO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(WO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(QO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(JO);let r=fV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Jf.encrypt(t.password)),t.password=Qf.hash(t.password)),t.role==="")throw new Error(zO);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 al(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Vi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.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 XO.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await $i()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return zf.signalUserChange(new Xf(process.pid)),n}a(EV,"alterUser");function fV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(fV,"isClusterUser");async function hV(e){try{let t=ZO.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,Vi.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await _V(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await $i()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return zf.signalUserChange(new Xf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(hV,"dropUser");async function mV(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 lV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(mV,"userInfo");async function SV(){let e;try{e=await cl()}catch(t){throw ue.error("Got an error listing users."),ue.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(SV,"listUsersExternal");async function cl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await al(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=$O.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 al(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=$O.cloneDeep(o),o.role=r[o.role],pV(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),or.errorizeMessage(e)}return null}a(cl,"listUsers");function pV(e){try{if(!e){ue.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(aV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(pV,"appendSystemTablesToRole");async function $i(){try{let e=await cl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a($i,"setUsersToGlobal");async function rN(e,t,r=!0){global.hdb_users||await $i();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Wf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Wf.USER_INACTIVE,is.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(YO.get(t)===s.password)return n;if(Qf.validate(s.password,t))YO.set(t,s.password);else throw ns(new Error,Wf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(rN,"findAndValidateUser");async function TV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(TV,"getSuperUser");async function RV(){let e=await cl(),t=oV.getConfigFromFile(kO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===kO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Jf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+VO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VO.SERVER_SUFFIX.ADMIN,r}a(RV,"getClusterUser")});var ba=m((Jse,aN)=>{"use strict";var jn=x(),ar=A(),gV=PA(),Qse=_n(),zse=Yn(),AV=br(),{validateEvent:nN}=Fr(),Na=Br(),OV=require("process"),{resetDatabases:NV}=(de(),re(Ne)),bV={[ar.ITC_EVENT_TYPES.SCHEMA]:yV,[ar.ITC_EVENT_TYPES.USER]:oN};async function yV(e){let t=nN(e);if(t){jn.error(t);return}jn.trace("ITC schemaHandler received schema event:",e),await gV(e.message),await IV(e.message)}a(yV,"schemaHandler");async function IV(e){try{Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=NV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){jn.error(t)}}a(IV,"syncSchemaMetadata");var iN=[];async function oN(e){try{try{Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){jn.warn(r)}let t=nN(e);if(t){jn.error(t);return}jn.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${OV.pid} received user event:`,e),await AV.setUsersToGlobal();for(let r of iN)r()}catch(t){jn.error(t)}}a(oN,"userHandler");oN.addListener=function(e){iN.push(e)};aN.exports=bV});var Fr=m((rne,uN)=>{"use strict";var Zse=x(),Zf=V(),wV=A(),{ITC_ERRORS:ya}=rr(),{parentPort:jse,threadId:CV,isMainThread:UV,workerData:ene}=require("worker_threads"),{onMessageFromWorkers:DV,broadcast:tne,broadcastWithAcknowledgement:LV}=dt();uN.exports={sendItcEvent:MV,validateEvent:cN,SchemaEventMsg:PV,UserEventMsg:vV};var ul;DV(async(e,t)=>{ul=ul||ba(),cN(e),ul[e.type]&&await ul[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function MV(e){return!UV&&e.message&&(e.message.originator=CV),LV(e)}a(MV,"sendItcEvent");function cN(e){if(typeof e!="object")return ya.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Zf.isEmpty(e.type))return ya.MISSING_TYPE;if(!e.hasOwnProperty("message")||Zf.isEmpty(e.message))return ya.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Zf.isEmpty(e.message.originator))return ya.MISSING_ORIGIN;if(wV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ya.INVALID_EVENT(e.type)}a(cN,"validateEvent");function PV(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(PV,"SchemaEventMsg");function vV(e){this.originator=e}a(vV,"UserEventMsg")});var qs=m((ine,EN)=>{"use strict";var lN=A(),nne=V(),ll=x(),_N=DA(),Yi,{sendItcEvent:dN}=Fr();function BV(e){try{ll.trace("signalSchemaChange called with message:",e),Yi=Yi||ba();let t=new _N(lN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),dN(t)}catch(t){ll.error(t)}}a(BV,"signalSchemaChange");function HV(e){try{ll.trace("signalUserChange called with message:",e),Yi=Yi||ba();let t=new _N(lN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),dN(t)}catch(t){ll.error(t)}}a(HV,"signalUserChange");EN.exports={signalSchemaChange:BV,signalUserChange:HV}});var _l=m((ane,hN)=>{"use strict";var fN=V(),FV=A(),qV=x(),GV=ku(),xV=xu(),kV=qs(),{SchemaEventMsg:VV}=Fr(),$V="already exists in";hN.exports=YV;async function YV(e,t,r){if(fN.isEmptyOrZeroLength(r))return r;let s=[];fN.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 KV(e,t.schema,t.name,i)})),n}a(YV,"lmdbCheckForNewAttributes");async function KV(e,t,r,s){let n=new xV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await WV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes($V))qV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(KV,"createNewAttribute");async function WV(e){let t;return t=await GV(e),kV.signalSchemaChange(new VV(process.pid,FV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(WV,"createAttribute")});var Ki=m((une,mN)=>{"use strict";var jf=class{static{a(this,"LMDBTransactionObject")}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}};mN.exports=jf});var pN=m((_ne,SN)=>{"use strict";var QV=Ki(),zV=A().OPERATIONS_ENUM,eh=class extends QV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(zV.INSERT,r,s,n,i),this.records=t}};SN.exports=eh});var RN=m((Ene,TN)=>{"use strict";var JV=Ki(),XV=A().OPERATIONS_ENUM,th=class extends JV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(XV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};TN.exports=th});var AN=m((hne,gN)=>{"use strict";var ZV=Ki(),jV=A().OPERATIONS_ENUM,rh=class extends ZV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(jV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};gN.exports=rh});var NN=m((Sne,ON)=>{"use strict";var e$=Ki(),t$=A().OPERATIONS_ENUM,sh=class extends e${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(t$.DELETE,s,n,t,i),this.original_records=r}};ON.exports=sh});var Ia=m((Rne,wN)=>{"use strict";var Tne=require("path"),bN=ye(),r$=pN(),s$=RN(),n$=AN(),i$=NN(),Wi=xe(),yN=V(),{CONFIG_PARAMS:o$}=A(),IN=Q();IN.initSync();var dl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:a$}=we();wN.exports=c$;async function c$(e,t){if(IN.get(o$.LOGGING_AUDITLOG)===!1)return;let r=a$(e.schema,e.table),s=await bN.openEnvironment(r,e.table,!0),n=u$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){bN.initializeDBIs(s,Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),yN.isEmpty(n.user_name)||s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(c$,"writeTransaction");function u$(e,t){let r=yN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===dl.INSERT)return new r$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPDATE)return new s$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPSERT)return new n$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.DELETE)return new i$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(u$,"createTransactionObject")});var nh=m((One,CN)=>{"use strict";var l$=ha(),Ane=ma(),wa=A(),_$=Ra(),d$=Hi().insertRecords,E$=ye(),f$=x(),h$=_l(),{getSchemaPath:m$}=we(),S$=Ia();CN.exports=p$;async function p$(e){try{let{schema_table:t,attributes:r}=l$(e);_$(e,r,t.hash_attribute),e.schema!==wa.SYSTEM_SCHEMA_NAME&&(r.includes(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await h$(e.hdb_auth_header,t,r),n=m$(e.schema,e.table),i=await E$.openEnvironment(n,e.table),o=await d$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await S$(e,o)}catch(c){f$.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(p$,"lmdbCreateRecords")});var LN=m((bne,DN)=>{"use strict";var UN=A(),T$=nh(),R$=ma(),g$=require("fs-extra"),{getSchemaPath:A$}=we();DN.exports=O$;async function O$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new R$(UN.SYSTEM_SCHEMA_NAME,UN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await T$(r),await g$.mkdirp(A$(e.schema))}a(O$,"lmdbCreateSchema")});var PN=m((Ine,MN)=>{"use strict";var ih=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};MN.exports=ih});var FN=m((Lne,HN)=>{"use strict";var vN=ye(),oh=vt(),ah=rr().LMDB_ERRORS_ENUM,N$=xe(),BN=x(),Cne=V(),b$=require("lmdb"),y$=PN(),I$=A(),{OVERFLOW_MARKER:Une,MAX_SEARCH_KEY_LENGTH:Dne}=N$,w$=I$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function C$(e,t,r,s){if(oh.validateEnv(e),t===void 0)throw new Error(ah.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ah.IDS_REQUIRED):new Error(ah.IDS_MUST_BE_ITERABLE);try{let n=vN.listDBIs(e);vN.initializeDBIs(e,t,n);let i=new y$,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[w$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,b$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],k=h[R];if(k!=null)try{let $=oh.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{BN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){BN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=oh.getNextMonotonicTime(),i}catch(n){throw n}}a(C$,"deleteRecords");HN.exports={deleteRecords:C$}});var Ca=m((Pne,GN)=>{"use strict";var Qi=V(),U$=FN(),D$=ye(),{getSchemaPath:L$}=we(),M$=Ia(),P$=x();GN.exports=v$;async function v$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Qi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Qi.isEmptyOrZeroLength(e.hash_values)&&!Qi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Qi.isEmpty(u)||e.hash_values.push(u)}}if(Qi.isEmptyOrZeroLength(e.hash_values))return qN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Qi.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=L$(e.schema,e.table),i=await D$.openEnvironment(n,e.table),o=await U$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await M$(e,o)}catch(c){P$.error(`unable to write transaction due to ${c.message}`)}return qN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(v$,"lmdbDeleteRecords");function qN(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(qN,"createDeleteResponse")});var uh=m((Hne,xN)=>{"use strict";var B$=A(),Bne=vt();function ch(e,t){let r=Object.create(null);if(t.length===1&&B$.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(ch,"parseRow");function H$(e,t,r,s){let n=ch(r,e);s.push(n)}a(H$,"searchAll");function F$(e,t,r,s){let n=ch(r,e);s[t]=n}a(F$,"searchAllToMap");function q$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(q$,"iterateDBI");function ei(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(ei,"pushResults");function G$(e,t,r,s,n,i){t.toString().endsWith(e)&&ei(t,r,s,n,i)}a(G$,"endsWith");function x$(e,t,r,s,n,i){t.toString().includes(e)&&ei(t,r,s,n,i)}a(x$,"contains");function k$(e,t,r,s,n,i){t>e&&ei(t,r,s,n,i)}a(k$,"greaterThanCompare");function V$(e,t,r,s,n,i){t>=e&&ei(t,r,s,n,i)}a(V$,"greaterThanEqualCompare");function $$(e,t,r,s,n,i){t<e&&ei(t,r,s,n,i)}a($$,"lessThanCompare");function Y$(e,t,r,s,n,i){t<=e&&ei(t,r,s,n,i)}a(Y$,"lessThanEqualCompare");xN.exports={parseRow:ch,searchAll:H$,searchAllToMap:F$,iterateDBI:q$,endsWith:G$,contains:x$,greaterThanCompare:k$,greaterThanEqualCompare:V$,lessThanCompare:$$,lessThanEqualCompare:Y$,pushResults:ei}});var zi=m((kne,QN)=>{"use strict";var Sn=ye(),qne=x(),cr=vt(),El=xe(),ke=rr().LMDB_ERRORS_ENUM,Gne=V(),K$=A(),fl=uh(),{parseRow:W$}=fl,xne=require("lmdb"),{OVERFLOW_MARKER:kN,MAX_SEARCH_KEY_LENGTH:Q$}=El;function VN(e,t,r,s=!1,n=void 0,i=void 0){return ti(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(VN,"iterateFullIndex");function Ua(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ti(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Ua,"iterateRangeBetween");function ti(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[El.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.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(ti,"setupTransaction");function $N(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(kN)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[El.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a($N,"getOverflowCheck");function z$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ti(e,t,t,(o,c,u)=>(hl(r),r=Da(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>W$(l.value,r))))}a(z$,"searchAll");function J$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);hl(r),r=Da(e.database||e,r);let o=new Map;for(let{key:c,value:u}of VN(e,t,t,s,n,i))o.set(c,fl.parseRow(u,r));return o}a(J$,"searchAllToMap");function X$(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=VN(e,void 0,t,r,s,n),c=o.transaction,u=$N(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(X$,"iterateDBI");function Z$(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(Z$,"countAll");function j$(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,t,r,(c,u,l,_)=>(s=cr.convertKeyValueToWrite(s),_===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(j$,"equals");function eY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(eY,"count");function tY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,null,r,(c,u)=>{s=cr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(tY,"startsWith");function rY(e,t,r,s,n=!1,i=void 0,o=void 0){return YN(e,t,r,s,n,i,o,!0)}a(rY,"endsWith");function YN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ti(e,null,r,(u,l,_,d)=>{let E=$N(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(kN)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[El.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(YN,"contains");function sY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!0,!1)}a(sY,"greaterThan");function nY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!1,!1)}a(nY,"greaterThanEqual");function iY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!0)}a(iY,"lessThan");function oY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!1)}a(oY,"lessThanEqual");function aY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ua(e,t,r,s,n,i,o,c)}a(aY,"between");function cY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(r),r=Da(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=fl.parseRow(c,r)),o}a(cY,"searchByHash");function uY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(uY,"checkHashExists");function lY(e,t,r,s,n=[]){return WN(e,t,r,s,n),KN(e,t,r,s,n).map(i=>i[1])}a(lY,"batchSearchByHash");function _Y(e,t,r,s,n=[]){WN(e,t,r,s,n);let i=new Map;for(let[o,c]of KN(e,t,r,s,n))i.set(o,c);return i}a(_Y,"batchSearchByHashToMap");function KN(e,t,r,s,n=[]){return ti(e,t,t,(i,o,c)=>{r=Da(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,fl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(KN,"batchHashSearch");function WN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(WN,"initializeBatchSearchByHash");function hl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(hl,"validateFetchAttributes");function pn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>Q$)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function Da(e,t){return t.length===1&&K$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(Da,"setGetWholeRowAttributes");QN.exports={searchAll:z$,searchAllToMap:J$,count:eY,countAll:Z$,equals:j$,startsWith:tY,endsWith:rY,contains:YN,searchByHash:cY,setGetWholeRowAttributes:Da,batchSearchByHash:lY,batchSearchByHashToMap:_Y,checkHashExists:uY,iterateDBI:X$,greaterThan:sY,greaterThanEqual:nY,lessThan:iY,lessThanEqual:oY,between:aY}});var Ji=m(($ne,jN)=>{var zN=require("lodash"),JN=ve(),Ce=require("joi"),dY=V(),{hdb_schema_table:ml,checkValidTable:XN,hdb_table:ZN,hdb_database:Sl}=rs(),{handleHDBError:EY,hdb_errors:fY}=W(),{getDatabases:hY}=(de(),re(Ne)),{HTTP_STATUS_CODES:mY}=fY,SY=Ce.object({database:Sl,schema:Sl,table:ZN,search_attribute:ml,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(ml).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),pY=Ce.object({database:Sl,schema:Sl,table:ZN,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(ml).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:ml,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});jN.exports=function(e,t){let r=null;switch(t){case"value":r=JN.validateBySchema(e,SY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(XN("database",e.schema)),i(XN("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=JN.validateBySchema(e,pY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=dY.checkGlobalSchemaTable(e.schema,e.table);if(n)return EY(new Error,n,mY.NOT_FOUND);let o=hY()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=zN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!zN.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var lh=m((Kne,eb)=>{"use strict";var TY=ye(),RY=Ji(),{getSchemaPath:gY}=we();eb.exports=AY;function AY(e){let t=RY(e,"hashes");if(t)throw t;let r=gY(e.schema,e.table);return TY.openEnvironment(r,e.table)}a(AY,"initialize")});var _h=m((Qne,tb)=>{"use strict";var OY=zi(),NY=lh();tb.exports=bY;async function bY(e){let t=await NY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return OY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(bY,"lmdbGetDataByHash")});var Xi=m((Jne,rb)=>{"use strict";var dh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};rb.exports=dh});var nb=m((jne,sb)=>{"use strict";var Zne=Xi(),yY=zi(),IY=lh();sb.exports=wY;async function wY(e){let t=await IY(e),r=global.hdb_schema[e.schema][e.table];return yY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(wY,"lmdbSearchByHash")});var os=m((tie,ib)=>{"use strict";var Eh=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=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=u,this.limit=l,this.offset=_}};ib.exports=Eh});var pl=m((sie,_b)=>{"use strict";var Ct=zi(),CY=ye(),UY=V(),ie=xe(),ri=A(),DY=Vn(),ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:LY}=we(),Gs=ri.SEARCH_WILDCARDS;async function MY(e,t,r){let s;e.schema===ri.SYSTEM_SCHEMA_NAME?s=DY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=lb(e,s.hash_attribute,r,t);return cb(e,n,s.hash_attribute,r)}a(MY,"prepSearch");async function cb(e,t,r,s){let n=LY(e.schema,e.table),i=await CY.openEnvironment(n,e.table),o=ub(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(PY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?ab(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?ab(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(cb,"executeSearch");function ub(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ie.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(ub,"searchByType");function ab(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(ab,"createMapFromIterable");function PY(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(PY,"checkToFetchMore");function lb(e,t,r,s){if(UY.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),Gs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Gs[0])<0&&n.indexOf(Gs[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if(Gs.indexOf(i)>=0&&Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(Gs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(Gs[0])||n.includes(Gs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ri.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ri.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ri.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ri.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ri.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ob.UNKNOWN_SEARCH_TYPE)}}a(lb,"createSearchTypeFromSearchObject");_b.exports={executeSearch:cb,createSearchTypeFromSearchObject:lb,prepSearch:MY,searchByType:ub}});var Eb=m((oie,db)=>{"use strict";var iie=os(),vY=Ji(),BY=V(),HY=A(),FY=pl();db.exports=qY;function qY(e,t){if(!BY.isEmpty(t)&&HY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vY(e,"value");if(s)throw s;let n=!0;return FY.prepSearch(e,t,n)}a(qY,"lmdbGetDataByValue")});var La=m((uie,fb)=>{"use strict";var cie=os(),GY=Ji(),xY=V(),kY=A(),VY=pl();fb.exports=$Y;async function $Y(e,t){if(!xY.isEmpty(t)&&kY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=GY(e,"value");if(s)throw s;return VY.prepSearch(e,t,!1)}a($Y,"lmdbSearchByValue")});var mb=m((die,hb)=>{"use strict";var _ie=xe(),fh=class{static{a(this,"SearchByConditionsObject")}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}},hh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},mh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};hb.exports={SearchByConditionsObject:fh,SearchCondition:hh,SortAttribute:mh}});var gb=m((mie,Rb)=>{"use strict";var fie=mb().SearchByConditionsObject,YY=os(),KY=Ji(),Sh=zi(),Tl=xe(),{Resource:hie}=(Xr(),re(DE)),Tb=pl(),WY=uh(),QY=require("lodash"),{getSchemaPath:zY}=we(),Sb=ye(),{handleHDBError:JY,hdb_errors:XY}=W(),{HTTP_STATUS_CODES:ZY}=XY,jY=1e8;Rb.exports=eK;async function eK(e){let t=KY(e,"conditions");if(t)throw JY(t,t.message,ZY.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=zY(e.schema,e.table),s=await Sb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Sb.openDBI(s,l.search_attribute);let i=QY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Tl.SEARCH_TYPES.EQUALS?l.estimated_count=Sh.count(s,l.search_attribute,l.search_value):_===Tl.SEARCH_TYPES.CONTAINS||_===Tl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=jY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await pb(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(Tb.filterByType),d=_.length,E=Sh.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>WY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await pb(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=Sh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(eK,"lmdbSearchByConditions");async function pb(e,t,r,s){let n=new YY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Tl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Tb.searchByType(e,n,i,s).map(o=>o.value)}a(pb,"executeConditionSearch")});var Ma=m((pie,Ab)=>{"use strict";var tK=A().OPERATIONS_ENUM,ph=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=tK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ab.exports=ph});var Th=m((Rie,Ub)=>{"use strict";var yb=os(),Ib=Ma(),wb=La(),Cb=Ca(),qt=A(),Ob=V(),Nb=ye(),{getTransactionAuditStorePath:rK,getSchemaPath:sK}=we(),bb=x();Ub.exports=nK;async function nK(e){try{if(Ob.isEmpty(global.hdb_schema[e.schema])||Ob.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await iK(e),await oK(e);let t=sK(e.schema,e.table);try{await Nb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=rK(e.schema,e.table);await Nb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(nK,"lmdbDropTable");async function iK(e){let t=new yb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await wb(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 Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Cb(n)}a(iK,"deleteAttributesFromSystem");async function oK(e){let t=new yb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await wb(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 Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Cb(n)}catch(i){throw i}}a(oK,"dropTableFromSystem")});var Lb=m((Aie,Db)=>{"use strict";var aK=require("fs-extra"),cK=os(),uK=Xi(),lK=Ma(),_K=Th(),dK=Ca(),EK=_h(),fK=La(),xs=A(),{getSchemaPath:hK}=we(),{handleHDBError:mK,hdb_errors:SK}=W(),{HDB_ERROR_MSGS:pK,HTTP_STATUS_CODES:TK}=SK;Db.exports=RK;async function RK(e){let t;try{t=await gK(e.schema);let r=new cK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await fK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await _K(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new lK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await dK(n);let i=hK(t);await aK.remove(i)}catch(r){throw r}}a(RK,"lmdbDropSchema");async function gK(e){let t=new uK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await EK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw mK(new Error,pK.SCHEMA_NOT_FOUND(e),TK.NOT_FOUND,void 0,void 0,!0);return s}a(gK,"validateDropSchema")});var gh=m((Nie,Mb)=>{"use strict";var Rh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Mb.exports=Rh});var vb=m((Iie,Pb)=>{"use strict";var AK=require("fs-extra"),Rl=ye(),{getTransactionAuditStorePath:OK}=we(),Ah=xe(),yie=gh();Pb.exports=NK;async function NK(e){let t;try{let r=OK(e.schema,e.table);await AK.mkdirp(r),t=await Rl.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{Rl.createDBI(t,Ah.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Rl.createDBI(t,Ah.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Rl.createDBI(t,Ah.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(NK,"createTransactionsAuditEnvironment")});var qb=m((Cie,Fb)=>{"use strict";var Oh=A(),Bb=ye(),bK=Hi(),{getSystemSchemaPath:yK,getSchemaPath:IK}=we(),wK=Vn(),CK=ku(),Nh=xu(),UK=x(),DK=vb(),yh=wK.hdb_table,Hb=[];for(let e=0;e<yh.attributes.length;e++)Hb.push(yh.attributes[e].attribute);Fb.exports=LK;async function LK(e,t){let r=IK(t.schema,t.table),s=new Nh(t.schema,t.table,Oh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Nh(t.schema,t.table,Oh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Nh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Bb.createEnvironment(r,t.table),e!==void 0){let o=await Bb.openEnvironment(yK(),Oh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await bK.insertRecords(o,yh.hash_attribute,Hb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await bh(s),await bh(n),await bh(i)}await DK(t)}catch(o){throw o}}a(LK,"lmdbCreateTable");async function bh(e){try{await CK(e)}catch(t){UK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(bh,"createAttribute")});var xb=m((Die,Gb)=>{"use strict";var MK=ha(),PK=Ra(),vK=_l(),Pa=A(),BK=Hi().updateRecords,HK=ye(),{getSchemaPath:FK}=we(),qK=Ia(),GK=x();Gb.exports=xK;async function xK(e){try{let{schema_table:t,attributes:r}=MK(e);PK(e,r,t.hash_attribute),e.schema!==Pa.SYSTEM_SCHEMA_NAME&&(r.includes(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vK(e.hdb_auth_header,t,r),n=FK(e.schema,e.table),i=await HK.openEnvironment(n,e.table),o=await BK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qK(e,o)}catch(c){GK.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(xK,"lmdbUpdateRecords")});var Vb=m((Mie,kb)=>{"use strict";var kK=A().OPERATIONS_ENUM,Ih=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=kK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kb.exports=Ih});var Yb=m((Bie,$b)=>{"use strict";var vie=Vb(),VK=ha(),$K=Ra(),YK=_l(),va=A(),KK=Hi().upsertRecords,WK=ye(),{getSchemaPath:QK}=we(),zK=Ia(),JK=x(),{handleHDBError:XK,hdb_errors:ZK}=W();$b.exports=jK;async function jK(e){let t;try{t=VK(e)}catch(u){throw XK(u,u.message,ZK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;$K(e,s,r.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(s.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await YK(e.hdb_auth_header,r,s),i=QK(e.schema,e.table),o=await WK.openEnvironment(i,e.table),c=await KK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await zK(e,c)}catch(u){JK.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(jK,"lmdbUpsertRecords")});var Wb=m((Fie,Kb)=>{"use strict";var wh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Kb.exports=wh});var zb=m((Gie,Qb)=>{"use strict";var Ch=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};Qb.exports=Ch});var Zb=m((Vie,Xb)=>{"use strict";var Uh=ye(),{getTransactionAuditStorePath:e1}=we(),kie=Wb(),Ba=xe(),t1=V(),Jb=zb(),r1=require("util").promisify,s1=r1(setTimeout),n1=1e4,i1=100;Xb.exports=o1;async function o1(e){let t=e1(e.schema,e.table),r=await Uh.openEnvironment(t,e.table,!0),s=Uh.listDBIs(r);Uh.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Jb;do n=await a1(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 s1(i1);while(n.transactions_deleted>0);return i}a(o1,"deleteAuditLogsBefore");async function a1(e,t){let r=new Jb;try{let s=e.dbis[Ba.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[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];t1.isEmpty(c)||(n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>n1)break}return await n,r}catch(s){throw s}}a(a1,"deleteTransactions")});var ey=m((Yie,jb)=>{"use strict";var Dh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};jb.exports=Dh});var ry=m((Qie,ty)=>{"use strict";var c1=os(),u1=Ma(),Wie=ey(),as=A(),l1=V(),Lh=ye(),_1=Vn(),d1=La(),E1=Ca(),{getSchemaPath:f1}=we();ty.exports=h1;async function h1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=_1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await S1(e),n=f1(e.schema,e.table),i=await Lh.openEnvironment(n,e.table);return t===!0&&await m1(e,i,r.hash_attribute),Lh.dropDBI(i,e.attribute),s}a(h1,"lmdbDropAttribute");async function m1(e,t,r){let s=Lh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(m1,"removeAttributeFromAllObjects");async function S1(e){let t=new c1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await d1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(l1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new u1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return E1(i)}a(S1,"dropAttributeFromSystem")});var cy=m((Xie,ay)=>{"use strict";var Mh=ye(),Zi=xe(),Jie=vt(),Ph=A(),sy=V(),{getTransactionAuditStorePath:p1}=we(),T1=zi(),gl=Ki(),R1=x();ay.exports=g1;async function g1(e){let t=p1(e.schema,e.table),r=await Mh.openEnvironment(t,e.table,!0),s=Mh.listDBIs(r);Mh.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ny(r,e.search_values);case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,O1(r,e.search_values,n);case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return A1(r,e.search_values);default:return ny(r)}}a(g1,"readAuditLog");function ny(e,t=[0,Date.now()]){sy.isEmpty(t[0])&&(t[0]=0),sy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zi.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 gl,n))}a(ny,"searchTransactionsByTimestamp");function A1(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[Zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,oy(e,i))}return Object.fromEntries(r)}a(A1,"searchTransactionsByUsername");function O1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=T1.equals(e,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);iy(u,"records",r,_,o),iy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(O1,"searchTransactionsByHashValues");function iy(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],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new gl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new gl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(iy,"loopRecords");function oy(e,t){let r=[];try{let s=e.dbis[Zi.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 gl,i);r.push(o)}}catch(i){R1.warn(i)}return r}catch(s){throw s}}a(oy,"batchSearchTransactions")});var ly=m((toe,uy)=>{"use strict";var{getSchemaPath:jie}=we(),eoe=ye(),{database:N1}=(de(),re(Ne));uy.exports={writeTransaction:b1};async function b1(e,t,r){return N1({database:e,table:t}).transaction(r)}a(b1,"writeTransaction")});var fy=m((soe,Ey)=>{"use strict";var{getSchemaPath:_y}=we(),dy=ye();Ey.exports={flush:y1,resetReadTxn:I1};async function y1(e,t){return(await dy.openEnvironment(_y(e,t),t.toString())).flushed}a(y1,"flush");async function I1(e,t){try{(await dy.openEnvironment(_y(e,t),t.toString())).resetReadTxn()}catch{}}a(I1,"resetReadTxn")});var py=m((ioe,Sy)=>{"use strict";var{Readable:w1}=require("stream"),{getDatabases:C1}=(de(),re(Ne)),{readSync:U1,openSync:D1,createReadStream:hy}=require("fs"),{open:L1}=require("lmdb"),my=Du(),M1=Mu(),{INTERNAL_DBIS_NAME:P1}=xe();Sy.exports=B1;var vh=32768,v1=100;async function B1(e){let t=e.database||e.schema||"data",r=C1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=L1({noSync:!0,maxDbs:M1.MAX_DBS}),E,f=d.openDB(P1,new my(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>R.startsWith?.(k+"/"))){f.put(R,O);let[,k]=R.split("/"),$=!k,U=new my(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:F,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,F),T++%v1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=hy(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=D1(o.path);return o.transaction(()=>{let l=Buffer.alloc(vh);U1(c,l,0,vh);let _=o.useReadTransaction(),d=hy(null,{fd:c,start:vh}),E=new w1.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(B1,"getBackup")});var gy=m((aoe,Ry)=>{"use strict";var H1=x(),{handleHDBError:F1}=W(),q1=Fg(),G1=ku(),x1=nh(),k1=LN(),V1=Ca(),$1=_h(),Y1=nb(),K1=Eb(),W1=La(),Q1=gb(),z1=Lb(),J1=qb(),X1=xb(),Z1=Yb(),j1=Zb(),eW=Th(),tW=ry(),rW=cy(),sW=ly(),Ty=fy(),nW=py(),Bh=class extends q1{static{a(this,"LMDBBridge")}async searchByConditions(t){return Q1(t)}async getDataByHash(t){return await $1(t)}async searchByHash(t){return await Y1(t)}async getDataByValue(t,r){return await K1(t,r)}async searchByValue(t){return await W1(t)}async createSchema(t){return await k1(t)}async dropSchema(t){return await z1(t)}async createTable(t,r){return await J1(t,r)}async dropTable(t){return await eW(t)}async createAttribute(t){return await G1(t)}async createRecords(t){return await x1(t)}async updateRecords(t){return await X1(t)}async upsertRecords(t){try{return await Z1(t)}catch(r){throw F1(r,null,null,H1.ERR,r)}}async deleteRecords(t){return await V1(t)}async dropAttribute(t){return await tW(t)}async deleteAuditLogsBefore(t){return await j1(t)}async readAuditLog(t){return await rW(t)}writeTransaction(t,r,s){return sW.writeTransaction(t,r,s)}flush(t,r){return Ty.flush(t,r)}resetReadTxn(t,r){return Ty.resetReadTxn(t,r)}getBackup(t){return nW(t)}};Ry.exports=Bh});var Uy={};je(Uy,{ResourceBridge:()=>qh});function Gh({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Oy(e,t){let r=cs(e),s=Gh(e,r);if(!r)throw new qr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ye(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Ou(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||oW,r=Gr()[t];if(!r)throw(0,qr.handleHDBError)(new Error,iW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Ny(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}}async function*by(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,timestamp:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var yy,Al,qr,Iy,wy,xr,Hh,Fh,Cy,iW,oW,aW,cW,Ay,qh,Dy=Se(()=>{"use strict";yy=C(gy()),Al=C(Ji()),qr=C(W());de();Iy=C(ha()),wy=C(Ra()),xr=C(A()),Hh=C(qs()),Fh=C(Fr()),Cy=C(V());xn();Nu();({HDB_ERROR_MSGS:iW}=qr.hdb_errors),oW="data",aW=1e4,cW=10,qh=class extends yy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ay=this}async searchByConditions(t){let r=(0,Al.default)(t,"conditions");if(r)throw(0,qr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new qr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Gh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new qr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}rt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){cs(t).dropTable()}createSchema(t){return Ha({database:t.schema,table:null}),Hh.signalSchemaChange(new Fh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xh(t.schema),Hh.signalSchemaChange(new Fh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Ay.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Iy.default)(t);(0,wy.default)(t,s,r.primaryKey);let n,i=Gr()[t.schema][t.table],o={user:t.hdb_user};return Ye(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Ou(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=Gr()[t.schema][t.table],s={user:t.hdb_user};return Ye(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return Ny(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Gr()[t.schema][t.table];if(!r.createdTimeProperty)throw new qr.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:xr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,Cy.async_set_timeout)(cW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%aW===0&&await l();return u.length>0&&await l(),n?Ny(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Al.default)(t,"hashes");if(r)throw r;return Oy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Oy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&xr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Al.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new qr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===xr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Gh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of by(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return by(r,t.search_values?.[0],t.search_values?.[1])}}};a(Gh,"getSelect");a(Oy,"getRecords");a(cs,"getTable");a(Ny,"createDeleteResponse");a(by,"groupRecordsInHistory")});var Br=m((Eoe,Ly)=>{"use strict";var{ResourceBridge:uW}=(Dy(),re(Uy)),lW=Q();lW.initSync();var Ol;function _W(){return Ol||(Ol=new uW,Ol)}a(_W,"getBridge");Ly.exports=_W()});var By=m((hoe,vy)=>{"use strict";var My=require("lodash"),Fa=require("mathjs"),dW=require("jsonata"),Py=V();vy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?My.uniqWith(e,My.isEqual):e,searchJSON:EW,mad:qa.bind(null,Fa.mad),mean:qa.bind(null,Fa.mean),mode:qa.bind(null,Fa.mode),prod:qa.bind(null,Fa.prod),median:qa.bind(null,Fa.median)};function qa(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(qa,"aggregateFunction");function EW(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(Py.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Py.isEmpty(this.__ala__.res[r])){let s=dW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(EW,"searchJSON")});var Fy=m((Soe,Hy)=>{"use strict";var We=require("moment"),kh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;Hy.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format(kh),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format(kh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(kh)}});var ky=m((poe,xy)=>{"use strict";var fW=require("@turf/area"),hW=require("@turf/length"),mW=require("@turf/circle"),SW=require("@turf/difference"),pW=require("@turf/distance"),TW=require("@turf/boolean-contains"),RW=require("@turf/boolean-equal"),gW=require("@turf/boolean-disjoint"),AW=require("@turf/helpers"),qy=A(),le=V();xy.exports={geoArea:OW,geoLength:NW,geoCircle:bW,geoDifference:yW,geoDistance:Gy,geoNear:IW,geoContains:wW,geoEqual:CW,geoCrosses:UW,geoConvert:DW};var Vh="geo1 is required",$h="geo2 is required";function OW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),fW.default(e)}a(OW,"geoArea");function NW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),hW.default(e,{units:t||"kilometers"})}a(NW,"geoLength");function bW(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),mW.default(e,t,{units:r||"kilometers"})}a(bW,"geoCircle");function yW(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),SW(e,t)}a(yW,"geoDifference");function Gy(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),pW.default(e,t,{units:r||"kilometers"})}a(Gy,"geoDistance");function IW(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Gy(e,t,s)<=r}a(IW,"geoNear");function wW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),TW.default(e,t)}a(wW,"geoContains");function CW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),RW.default(e,t)}a(CW,"geoEqual");function UW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!gW.default(e,t)}a(UW,"geoCrosses");function DW(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(qy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qy.GEO_CONVERSION_ENUM).join(",")}`);return AW[t](e,r)}a(DW,"geoConvert")});var Nl=m((Roe,Vy)=>{var si=By(),ur=Fy(),us=ky();Vy.exports=e=>{e.aggr.mad=e.aggr.MAD=si.mad,e.aggr.mean=e.aggr.MEAN=si.mean,e.aggr.mode=e.aggr.MODE=si.mode,e.aggr.prod=e.aggr.PROD=si.prod,e.aggr.median=e.aggr.MEDIAN=si.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=si.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=si.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var Wy=m((goe,Ky)=>{"use strict";var Ga=require("lodash"),pt=require("alasql");pt.options.cache=!1;var LW=Nl(),$y=require("clone"),bl=require("recursive-iterator"),se=x(),ne=V(),ji=Br(),MW=A(),{hdb_errors:PW}=W(),{getDatabases:Yy}=(de(),re(Ne)),vW="IS NULL",kr="There was a problem performing this search. Please check the logs and try again.";LW(pt);var Yh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(kr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(kr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(kr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(kr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(kr)}}_getColumns(){let t=new bl(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($y(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ga.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=Yy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new bl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new bl(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(!ne.isEmpty(MW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.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(ne.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"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&Ga.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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($y(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(ne.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(vW)>-1&&this.tables.forEach(n=>{let i={columnid:Yy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ga.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]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ji.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(kr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await ji.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(kr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await ji.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(kr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ji.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(kr)}}}_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 pt.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 pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.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 pt.yy.FuncValue:new pt.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=Ga.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new bl(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=Ga.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(kr)}}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 _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ji.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.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,u=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===u}).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();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(PW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.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 u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});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 ji.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(kr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ky.exports=Yh});var gr=m((Ooe,Qy)=>{"use strict";var BW=Bg();Qy.exports={searchByConditions:FW,searchByHash:qW,searchByValue:GW,search:xW};var Kh=Br(),{transformReq:Wh}=V(),HW=Wy();async function FW(e){return Wh(e),Kh.searchByConditions(e)}a(FW,"searchByConditions");async function qW(e){Wh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Kh.searchByHash(e))r&&t.push(r);return t}a(qW,"searchByHash");async function GW(e){Wh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Kh.searchByValue(e))t.push(r);return t}a(GW,"searchByValue");function xW(e,t){try{let r=new BW(e);r.validate(),new HW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(xW,"search")});var yl=m((boe,zy)=>{"use strict";var kW=Br();zy.exports={writeTransaction:VW};function VW(e,t,r){return kW.writeTransaction(e,t,r)}a(VW,"writeTransaction")});var jy=m((woe,Zy)=>{"use strict";var $W=gr(),YW=_n(),Jy=x(),KW=Ar(),Ioe=yl(),WW=require("clone"),zh=require("alasql"),QW=Nl(),Xy=require("util"),zW=Xy.promisify(YW.getTableSchema),JW=Xy.promisify($W.search),XW=A(),Qh=V();QW(zh);Zy.exports={update:jW};var ZW="There was a problem performing this update. Please check the logs and try again.";async function jW({statement:e,hdb_user:t}){let r=await zW(e.table.databaseid,e.table.tableid),s=eQ(e.columns);Qh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=WW(n),c=Qh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=zh.parse(u).statements[0],_=await JW(l),d=tQ(s,_);return rQ(o,d,t)}a(jW,"update");function eQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zh.compile(`SELECT ${r.expression.toString()} AS [${XW.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Jy.error(t),new Error(ZW)}}a(eQ,"createUpdateRecord");function tQ(e,t){return Qh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(tQ,"buildUpdateRecords");async function rQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await KW.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Jy.error(`Error delete new_attributes from update response: ${i}`)}return n}a(rQ,"updateRecords")});var tI=m((Loe,eI)=>{var sQ=require("alasql"),nQ=gr(),iQ=x(),oQ=Br(),Xh=require("util"),Jh=V(),aQ=A(),cQ=_n(),Uoe=yl(),Doe=Ar(),uQ="record",lQ="successfully deleted",_Q=Xh.callbackify(hQ),dQ=Xh.promisify(nQ.search),EQ=Xh.promisify(cQ.getTableSchema);eI.exports={convertDelete:_Q};function fQ(e){return`${e.deleted_hashes.length} ${uQ}${e.deleted_hashes.length===1?"":"s"} ${lQ}`}a(fQ,"generateReturnMessage");async function hQ({statement:e,hdb_user:t}){let r=await EQ(e.table.databaseid,e.table.tableid);Jh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Jh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=sQ.parse(o).statements[0],u={operation:aQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await dQ(c);let l=await oQ.deleteRecords(u);return Jh.isEmptyOrZeroLength(l.message)&&(l.message=fQ(l)),delete l.txn_time,l}catch(l){throw iQ.error(l),l.hdb_code?l.message:l}}a(hQ,"convertDelete")});var oI=m((Poe,iI)=>{"use strict";var mQ=Yn(),{hdb_errors:rI}=W(),{getDatabases:sI}=(de(),re(Ne));iI.exports={checkSchemaExists:nI,checkSchemaTableExists:SQ,schema_describe:mQ};async function nI(e){if(!sI()[e])return rI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nI,"checkSchemaExists");async function SQ(e,t){let r=await nI(e);if(r)return r;if(!sI()[e][t])return rI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(SQ,"checkSchemaTableExists")});var Ul=m((Hoe,lI)=>{"use strict";var eo=Gu(),to=oI(),pQ=x(),TQ=require("uuid").v4,Boe=require("clone"),wl=qs(),ro=A(),RQ=require("util"),Tn=Br(),{handleHDBError:Gt,hdb_errors:gQ}=W(),{HDB_ERROR_MSGS:Il,HTTP_STATUS_CODES:xt}=gQ,{SchemaEventMsg:Cl}=Fr(),aI=nt(),{getDatabases:AQ}=(de(),re(Ne)),{transformReq:so}=V();lI.exports={createSchema:OQ,createSchemaStructure:cI,createTable:NQ,createTableStructure:uI,createAttribute:CQ,dropSchema:bQ,dropTable:yQ,dropAttribute:IQ,getBackup:UQ};async function OQ(e){let t=await cI(e);return wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),t}a(OQ,"createSchema");async function cI(e){let t=eo.schema_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);if(so(e),!await to.checkSchemaExists(e.schema))throw Gt(new Error,Il.SCHEMA_EXISTS_ERR(e.schema),xt.BAD_REQUEST,ro.LOG_LEVELS.ERROR,Il.SCHEMA_EXISTS_ERR(e.schema),!0);return await Tn.createSchema(e),`database '${e.schema}' successfully created`}a(cI,"createSchemaStructure");async function NQ(e){return so(e),await uI(e)}a(NQ,"createTable");async function uI(e){let t=eo.create_table_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);if(eo.validateTableResidence(e.residence),!await to.checkSchemaTableExists(e.schema,e.table))throw Gt(new Error,Il.TABLE_EXISTS_ERR(e.schema,e.table),xt.BAD_REQUEST,ro.LOG_LEVELS.ERROR,Il.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:TQ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Tn.createTable(s,e);else throw Gt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",xt.BAD_REQUEST);else await Tn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(uI,"createTableStructure");async function bQ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=eo.schema_object(e),s=t??r;if(s)throw Gt(s,s.message,xt.BAD_REQUEST,void 0,void 0,!0);so(e);let n=await to.checkSchemaExists(e.schema);if(n)throw Gt(new Error,n,xt.NOT_FOUND,ro.LOG_LEVELS.ERROR,n,!0);let i=await to.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Tn.dropSchema(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),await aI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(bQ,"dropSchema");async function yQ(e){let t=eo.table_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);so(e);let r=await to.checkSchemaTableExists(e.schema,e.table);if(r)throw Gt(new Error,r,xt.NOT_FOUND,ro.LOG_LEVELS.ERROR,r,!0);return await Tn.dropTable(e),await aI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(yQ,"dropTable");async function IQ(e){let t=eo.attribute_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);so(e);let r=await to.checkSchemaTableExists(e.schema,e.table);if(r)throw Gt(new Error,r,xt.NOT_FOUND,ro.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Gt(new Error,"You cannot drop a hash attribute",xt.BAD_REQUEST,void 0,void 0,!0);if(ro.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Gt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,xt.BAD_REQUEST,void 0,void 0,!0);try{return await Tn.dropAttribute(e),wQ(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw pQ.error(`Got an error deleting attribute ${RQ.inspect(e)}.`),s}}a(IQ,"dropAttribute");function wQ(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(wQ,"dropAttributeFromGlobal");async function CQ(e){so(e);let t=AQ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Gt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,xt.BAD_REQUEST,void 0,void 0,!0);return await Tn.createAttribute(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(CQ,"createAttribute");function UQ(e){return Tn.getBackup(e)}a(UQ,"getBackup")});var dI=m((qoe,_I)=>{"use strict";var{OPERATIONS_ENUM:DQ}=A(),Zh=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=DQ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};_I.exports=Zh});var jh=m((koe,SI)=>{"use strict";var LQ=Br(),xoe=dI(),Dl=V(),Ll=A(),MQ=Q(),{handleHDBError:EI,hdb_errors:PQ}=W(),{HDB_ERROR_MSGS:fI,HTTP_STATUS_CODES:hI}=PQ,vQ=Object.values(Ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mI="To use this operation audit log must be enabled in harperdb-config.yaml";SI.exports=BQ;async function BQ(e){if(Dl.isEmpty(e.schema))throw new Error(fI.SCHEMA_REQUIRED_ERR);if(Dl.isEmpty(e.table))throw new Error(fI.TABLE_REQUIRED_ERR);if(!MQ.get(Ll.CONFIG_PARAMS.LOGGING_AUDITLOG))throw EI(new Error,mI,hI.BAD_REQUEST,Ll.LOG_LEVELS.ERROR,mI,!0);let t=Dl.checkSchemaTableExist(e.schema,e.table);if(t)throw EI(new Error,t,hI.NOT_FOUND,Ll.LOG_LEVELS.ERROR,t,!0);if(!Dl.isEmpty(e.search_type)&&vQ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await LQ.readAuditLog(e)}a(BQ,"readAuditLog")});var TI=m(($oe,pI)=>{"use strict";var{OPERATIONS_ENUM:HQ}=A(),em=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=HQ.GET_BACKUP,this.schema=t,this.table=r}};pI.exports=em});var AI=m((Qoe,gI)=>{"use strict";var FQ=Br(),Koe=TI(),tm=V(),qQ=A(),Woe=Q(),{handleHDBError:GQ,hdb_errors:xQ}=W(),{HDB_ERROR_MSGS:RI,HTTP_STATUS_CODES:kQ}=xQ;gI.exports=VQ;async function VQ(e){if(tm.isEmpty(e.schema))throw new Error(RI.SCHEMA_REQUIRED_ERR);if(tm.isEmpty(e.table))throw new Error(RI.TABLE_REQUIRED_ERR);let t=tm.checkSchemaTableExist(e.schema,e.table);if(t)throw GQ(new Error,t,kQ.NOT_FOUND,qQ.LOG_LEVELS.ERROR,t,!0);return await FQ.getBackup(read_audit_log_object)}a(VQ,"getBackup")});var wI=m((Joe,II)=>{var Rn=require("validate.js"),NI=ve(),no=A(),{handleHDBError:$Q,hdb_errors:YQ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:KQ}=YQ,rm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),WQ={STRUCTURE_USER:"structure_user"},OI=Object.values(no.ROLE_TYPES_ENUM),QQ="attribute_permissions",zQ="attribute_name",{PERMS_CRUD_ENUM:io}=no,JQ=[QQ,...Object.values(io)],bI=[io.READ,io.INSERT,io.UPDATE],XQ=[zQ,...bI];function ZQ(e){let t=rm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yI(e,t)}a(ZQ,"addRoleValidation");function jQ(e){let t=rm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yI(e,t)}a(jQ,"alterRoleValidation");function ez(e){let t=rm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,NI.validateObject(e,t)}a(ez,"dropRoleValidation");var tz=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yI(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)tz.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=NI.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=rz(e);o&&Qe(o,r),OI.forEach(c=>{e.permission[c]&&!Rn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(OI.indexOf(o)<0){if(o===WQ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{JQ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(io).forEach(_=>{Rn.isDefined(l[_])?Rn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),Rn.isDefined(l.attribute_permissions)){if(!Rn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!XQ.includes(T)&&T!==io.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!Rn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}bI.forEach(T=>{Rn.isDefined(f[T])?Rn.isBoolean(f[T])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return sz(r)}a(yI,"customValidate");II.exports={addRoleValidation:ZQ,alterRoleValidation:jQ,dropRoleValidation:ez};function rz(e){let{operation:t,permission:r}=e;if(t===no.OPERATIONS_ENUM.ADD_ROLE||t===no.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 Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?no.ROLE_TYPES_ENUM.SUPER_USER:no.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(rz,"validateNoSUPerms");function sz(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return $Q(new Error,s,KQ.BAD_REQUEST)}else return null}a(sz,"generateRolePermResponse");function Qe(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(Qe,"addPermError")});var cm=m((Zoe,LI)=>{"use strict";var CI=Ar(),UI=gr(),nz=Jn(),nm=wI(),im=qs(),iz=require("uuid").v4,oz=require("util"),Ml=A(),az=V(),om=UI.searchByValue,cz=UI.searchByHash,uz=oz.promisify(nz.delete),lz=os(),_z=Xi(),{hdb_errors:dz,handleHDBError:oo}=W(),{HDB_ERROR_MSGS:DI,HTTP_STATUS_CODES:Pl}=dz,{UserEventMsg:am}=Fr();LI.exports={addRole:Ez,alterRole:fz,dropRole:hz,listRoles:mz};function sm(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(sm,"scrubRoleDetails");async function Ez(e){let t=nm.addRoleValidation(e);if(t)throw t;e=sm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await om(r)||[])}catch(i){throw oo(i)}if(s&&s.length>0)throw oo(new Error,DI.ROLE_ALREADY_EXISTS(e.role),Pl.CONFLICT,void 0,void 0,!0);e.id||(e.id=iz());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await CI.insert(n),im.signalUserChange(new am(process.pid)),e=sm(e),e}a(Ez,"addRole");async function fz(e){let t=nm.alterRoleValidation(e);if(t)throw t;e=sm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await CI.update(r)}catch(n){throw oo(n)}if(s&&s?.message==="updated 0 of 1 records")throw oo(new Error,"Invalid role id",Pl.BAD_REQUEST,void 0,void 0,!0);return await im.signalUserChange(new am(process.pid)),e}a(fz,"alterRole");async function hz(e){let t=nm.dropRoleValidation(e);if(t)throw oo(new Error,t,Pl.BAD_REQUEST,void 0,void 0,!0);let r=new _z(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await cz(r));if(s.length===0)throw oo(new Error,DI.ROLE_NOT_FOUND,Pl.NOT_FOUND,void 0,void 0,!0);let n=new lz(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await om(n)),o=!1;if(az.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].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 uz(c),im.signalUserChange(new am(process.pid)),`${s[0].role} successfully deleted`}a(hz,"dropRole");async function mz(){return om({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(mz,"listRoles")});var BI=m((eae,vI)=>{"use strict";var Sz=Q(),gn=require("joi"),pz=ve(),MI=require("moment"),Tz=require("fs-extra"),um=require("path"),Rz=require("lodash"),xa=A(),{LOG_LEVELS:ni}=A(),gz="YYYY-MM-DD hh:mm:ss",Az=um.resolve(__dirname,"../logs");vI.exports=function(e){return pz.validateBySchema(e,Oz)};var Oz=gn.object({from:gn.custom(PI),until:gn.custom(PI),level:gn.valid(ni.NOTIFY,ni.FATAL,ni.ERROR,ni.WARN,ni.INFO,ni.DEBUG,ni.TRACE),order:gn.valid("asc","desc"),limit:gn.number().min(1),start:gn.number().min(0),log_name:gn.custom(Nz)});function PI(e,t){if(MI(e,MI.ISO_8601).format(gz)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(PI,"validateDatetime");function Nz(e,t){if(Rz.invert(xa.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Sz.get(xa.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?xa.LOG_NAMES.HDB:e,i=n===xa.LOG_NAMES.INSTALL?um.join(Az,xa.LOG_NAMES.INSTALL):um.join(s,n);return Tz.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Nz,"validateReadLogPath")});var _m=m((rae,FI)=>{"use strict";var vl=A(),bz=x(),yz=Q(),Iz=BI(),lm=require("path"),HI=require("fs-extra"),{once:wz}=require("events"),{handleHDBError:Cz,hdb_errors:Uz}=W(),{PACKAGE_ROOT:Dz}=A(),Lz=lm.join(Dz,"logs"),Mz=1e3,Pz=200;FI.exports=vz;async function vz(e){let t=Iz(e);if(t)throw Cz(t,t.message,Uz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yz.get(vl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?vl.LOG_NAMES.HDB:e.log_name,n=s===vl.LOG_NAMES.INSTALL?lm.join(Lz,vl.LOG_NAMES.INSTALL):lm.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?Mz:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(HI.statSync(n).size-(h+5)*Pz,0));let p=HI.createReadStream(n,{start:T});p.on("error",b=>{bz.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,F;for(;(F=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,F.index),U($));let[Oe,Ze,iu]=F,Li=iu.split("] ["),Vo=Li[0],Fn=Li[1];Li.splice(0,2),$={timestamp:Ze,thread:Vo,level:Fn,tags:Li,message:""},z=F.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,F;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),b.level===o&&P>=z&&P<=F&&R<f?R++:b.level===o&&P>=z&&P<=F&&(An(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(An(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),F=new Date(_),b.level===o&&P<=F&&R<f?R++:b.level===o&&P<=F&&(An(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),P>=z&&P<=F&&R<f?R++:P>=z&&P<=F&&(An(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(An(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(An(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),F=new Date(_),P<=F&&R<f?R++:P<=F&&R>=f&&(An(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(An(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await wz(p,"close"),O}a(vz,"readLog");function An(e,t,r){t==="desc"?Bz(e,r):t==="asc"?Hz(e,r):r.push(e)}a(An,"pushLineToResult");function Bz(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(Bz,"insertDescending");function Hz(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(Hz,"insertAscending")});var Hl=m((aae,kI)=>{"use strict";var dm=require("joi"),{string:Bl,boolean:qI,date:Fz}=dm.types(),qz=ve(),{validateSchemaExists:nae,validateTableExists:iae,validateSchemaName:oae}=rs(),Gz=A(),xz=Be(),GI=Q();GI.initSync();var kz=Bl.invalid(GI.get(Gz.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(xz.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(),xI={operation:Bl.valid("add_node","update_node"),node_name:kz,subscriptions:dm.array().items({table:Bl.optional(),schema:Bl.required(),subscribe:qI.required(),publish:qI.required().custom($z),start_time:Fz.iso()}).min(1).required()};function Vz(e){return qz.validateBySchema(e,dm.object(xI))}a(Vz,"addUpdateNodeValidator");function $z(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($z,"checkForFalsy");kI.exports={addUpdateNodeValidator:Vz,validation_schema:xI}});var $I=m((uae,VI)=>{var Yz=ve(),Kz={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VI.exports=function(e){return Yz.validateObject(e,Kz)}});var fm=m((lae,YI)=>{"use strict";var Wz=A().OPERATIONS_ENUM,Em=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=Wz.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};YI.exports=Em});var WI=m((dae,KI)=>{"use strict";var Qz={OPERATION:"operation",REFRESH:"refresh"},hm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},mm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};KI.exports={JWTTokens:hm,TOKEN_TYPE_ENUM:Qz,JWTRSAKeys:mm}});var $a=m((fae,XI)=>{"use strict";var Va=require("jsonwebtoken"),Sm=require("fs-extra"),pm=V(),yr=A(),{handleHDBError:kt,hdb_errors:zz}=W(),{HTTP_STATUS_CODES:Vt,AUTHENTICATION_ERROR_MSGS:$t}=zz,ka=x(),QI=ju(),gm=br(),Jz=Ar().update,Xz=fm(),Zz=qs(),{UserEventMsg:jz}=Fr(),On=Q();On.initSync();var Tm=require("path"),{JWTTokens:eJ,JWTRSAKeys:tJ,TOKEN_TYPE_ENUM:Fl}=WI(),rJ=On.get(yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?On.get(yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",sJ=On.get(yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?On.get(yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ql="RS256",Rm;XI.exports={createTokens:nJ,validateOperationToken:oJ,refreshOperationToken:iJ,validateRefreshToken:JI};async function nJ(e){if(pm.isEmpty(e)||typeof e!="object")throw kt(new Error,$t.INVALID_AUTH_OBJECT,Vt.BAD_REQUEST,void 0,void 0,!0);if(pm.isEmpty(e.username))throw kt(new Error,$t.USERNAME_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);if(pm.isEmpty(e.password))throw kt(new Error,$t.PASSWORD_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await gm.findAndValidateUser(e.username,e.password),!t)throw kt(new Error,$t.INVALID_CREDENTIALS,Vt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ka.error(E),kt(new Error,$t.INVALID_CREDENTIALS,Vt.UNAUTHORIZED,void 0,void 0,!0)}let r=await Gl(),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 zI(i,r.private_key,r.passphrase),c=await Va.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:sJ,algorithm:ql,subject:Fl.REFRESH}),u=QI.hash(c),l=new Xz(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await Jz(l)}catch(E){ka.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw kt(new Error,$t.REFRESH_TOKEN_SAVE_FAILED,Vt.INTERNAL_SERVER_ERROR);return Zz.signalUserChange(new jz(process.pid)),new eJ(o,c)}a(nJ,"createTokens");async function zI(e,t,r){return await Va.sign(e,{key:t,passphrase:r},{expiresIn:rJ,algorithm:ql,subject:Fl.OPERATION})}a(zI,"signOperationToken");async function Gl(){if(Rm===void 0)try{let e=Tm.join(On.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Tm.join(On.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Tm.join(On.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Sm.readFile(e)).toString(),n=(await Sm.readFile(t)).toString(),i=(await Sm.readFile(r)).toString();Rm=new tJ(i,n,s)}catch(e){throw ka.error(e),kt(new Error,$t.NO_ENCRYPTION_KEYS,Vt.INTERNAL_SERVER_ERROR)}return Rm}a(Gl,"getJWTRSAKeys");async function iJ(e){if(!e)throw kt(new Error,$t.INVALID_BODY,Vt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw kt(new Error,$t.REFRESH_TOKEN_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);await JI(e.refresh_token);let t=await Gl(),r=await Va.decode(e.refresh_token);return{operation_token:await zI({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(iJ,"refreshOperationToken");async function oJ(e){try{let t=await Gl(),r=await Va.verify(e,t.public_key,{algorithms:ql,subject:Fl.OPERATION});return await gm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ka.warn(t),t.name&&t.name==="TokenExpiredError"?kt(new Error,$t.TOKEN_EXPIRED,Vt.FORBIDDEN):kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED)}}a(oJ,"validateOperationToken");async function JI(e){let t;try{let r=await Gl(),s=await Va.verify(e,r.public_key,{algorithms:ql,subject:Fl.REFRESH});t=await gm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ka.warn(r),r.name&&r.name==="TokenExpiredError"?kt(new Error,$t.TOKEN_EXPIRED,Vt.FORBIDDEN):kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED)}if(!QI.validate(t.refresh_token,e))throw kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED);return t}a(JI,"validateRefreshToken")});var Am=m((Sae,ew)=>{"use strict";var aJ=$I(),ao=require("passport"),cJ=require("passport-local").Strategy,uJ=require("passport-http").BasicStrategy,lJ=require("util"),_J=br(),jI=lJ.callbackify(_J.findAndValidateUser),mae=rr(),dJ=A(),ZI=$a();ao.use(new cJ(function(e,t,r){jI(e,t,r)}));ao.use(new uJ(function(e,t,r){jI(e,t,r)}));ao.serializeUser(function(e,t){t(null,e)});ao.deserializeUser(function(e,t){t(null,e)});function EJ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(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("Must login")}switch(a(i,"handleResponse"),s){case"Basic":ao.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===dJ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZI.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):ZI.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ao.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(EJ,"authorize");function fJ(e,t){let r=aJ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!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(fJ,"checkPermissions");ew.exports={authorize:EJ,checkPermissions:fJ}});var co=m((Tae,tw)=>{"use strict";var Om=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Nm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};tw.exports={Node:Om,NodeSubscription:Nm}});var sw=m((gae,rw)=>{"use strict";var hJ=A().OPERATIONS_ENUM,bm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=hJ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rw.exports=bm});var Ya=m((Oae,nw)=>{"use strict";var ym=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Im=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};nw.exports={RemotePayloadObject:ym,RemotePayloadSubscription:Im}});var ow=m((bae,iw)=>{"use strict";var wm=class{static{a(this,"TableSizeObject")}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}};iw.exports=wm});var uw=m((Uae,cw)=>{"use strict";var mJ=ow(),Iae=xe(),aw=ye(),SJ=x(),{getSchemaPath:wae,getTransactionAuditStorePath:Cae}=we(),{getDatabases:pJ}=(de(),re(Ne));cw.exports=TJ;async function TJ(e){let t=new mJ;try{let r=pJ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await aw.environmentDataSize(schema_path,e.name),o=await aw.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){SJ.warn(`unable to stat table dbi due to ${r}`)}return t}a(TJ,"lmdbGetTableSize")});var _w=m((Lae,lw)=>{"use strict";var Cm=class{static{a(this,"SystemInformationObject")}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}};lw.exports=Cm});var uo=m((Bae,hw)=>{"use strict";var RJ=require("fs-extra"),gJ=require("path"),Ut=require("systeminformation"),Nn=x(),AJ=nt(),Um=Be(),kl=A(),OJ=uw(),fw=Yn(),{getThreadInfo:dw}=dt(),Gm=Q();Gm.initSync();var NJ=_w(),{openEnvironment:Pae}=ye(),{getSchemaPath:vae}=we(),{database:bJ}=(de(),re(Ne)),xl;hw.exports={getHDBProcessInfo:Pm,getNetworkInfo:Bm,getDiskInfo:vm,getMemoryInfo:Mm,getCPUInfo:Lm,getTimeInfo:Dm,getSystemInformation:Hm,systemInformation:yJ,getTableSize:Fm,getMetrics:qm};function Dm(){return Ut.time()}a(Dm,"getTimeInfo");async function Lm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:F,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return Nn.error(`error in getCPUInfo: ${e}`),{}}}a(Lm,"getCPUInfo");async function Mm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Nn.error(`error in getMemoryInfo: ${e}`),{}}}a(Mm,"getMemoryInfo");async function Pm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await RJ.readFile(gJ.join(Gm.get(kl.CONFIG_PARAMS.ROOTPATH),kl.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===kl.NODE_ERROR_CODES.ENOENT)Nn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Nn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Pm,"getHDBProcessInfo");async function vm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Nn.error(`error in getDiskInfo: ${t}`),e}}a(vm,"getDiskInfo");async function Bm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Nn.error(`error in getNetworkInfo: ${t}`),e}}a(Bm,"getNetworkInfo");async function Hm(){if(xl!==void 0)return xl;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,xl=e,xl}catch(t){return Nn.error(`error in getSystemInformation: ${t}`),e}}a(Hm,"getSystemInformation");async function Fm(){let e=[],t=await fw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await OJ(s));return e}a(Fm,"getTableSize");async function qm(){let e=await fw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=bJ({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Nn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(qm,"getMetrics");async function Ew(){if(Gm.get(kl.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await AJ.getNATSReferences(),r=await t.streams.info(Um.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Um.WORK_QUEUE_CONSUMER_NAMES.stream_name,Um.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(Ew,"getNatsStreamInfo");async function yJ(e){let t=new NJ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Hm(),t.time=Dm(),t.cpu=await Lm(),t.memory=await Mm(),t.disk=await vm(),t.network=await Bm(),t.harperdb_processes=await Pm(),t.table_size=await Fm(),t.metrics=await qm(),t.threads=await dw(),t.replication=await Ew(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Hm();break;case"time":t.time=Dm();break;case"cpu":t.cpu=await Lm();break;case"memory":t.memory=await Mm();break;case"disk":t.disk=await vm();break;case"network":t.network=await Bm();break;case"harperdb_processes":t.harperdb_processes=await Pm();break;case"table_size":t.table_size=await Fm();break;case"database_metrics":case"metrics":t.metrics=await qm();break;case"threads":t.threads=await dw();break;case"replication":t.replication=await Ew();break;default:break}return t}a(yJ,"systemInformation")});var Ka=m((Fae,IJ)=>{IJ.exports={name:"harperdb",version:"4.2.0-alpha.12",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.12","nats-server":"2.9.21"},exports:{".":"./index.js"},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/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../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.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@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.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",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",eventsource:"^2.0.2","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",mqtt:"~4.3.7",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","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var xm=m((xae,mw)=>{"use strict";var qae=require("fs-extra"),Gae=x();mw.exports={version:wJ,printVersion:UJ,nodeVersion:CJ};var bn=Ka();function wJ(){if(bn)return bn.version}a(wJ,"version");function CJ(){if(bn&&bn.engines&&bn.engines["preferred-node"])return bn.engines["preferred-node"]}a(CJ,"nodeVersion");function UJ(){bn&&console.log(`HarperDB Version ${bn.version}`)}a(UJ,"printVersion")});var ks=m((Yae,Rw)=>{"use strict";var DJ=Ar(),km=V(),LJ=require("util"),ii=A(),Sw=Q();Sw.initSync();var MJ=Am(),pw=gr(),{Node:Vae,NodeSubscription:$ae}=co(),PJ=Xi(),vJ=sw(),{RemotePayloadObject:BJ,RemotePayloadSubscription:HJ}=Ya(),{handleHDBError:FJ,hdb_errors:qJ}=W(),{HTTP_STATUS_CODES:GJ,HDB_ERROR_MSGS:xJ}=qJ,kJ=os(),VJ=uo(),$J=xm(),{getDatabases:YJ}=(de(),re(Ne)),KJ=LJ.promisify(MJ.authorize),WJ=pw.searchByHash,QJ=pw.searchByValue;Rw.exports={authHeaderToUser:zJ,isEmpty:JJ,getNodeRecord:XJ,upsertNodeRecord:ZJ,buildNodePayloads:jJ,checkClusteringEnabled:e2,getAllNodeRecords:t2,getSystemInfo:r2,reverseSubscription:Tw};async function zJ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await KJ(t,null),e}a(zJ,"authHeaderToUser");function JJ(e){return e==null}a(JJ,"isEmpty");async function XJ(e){let t=new PJ(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return WJ(t)}a(XJ,"getNodeRecord");async function ZJ(e){let t=new vJ(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return DJ.upsert(t)}a(ZJ,"upsertNodeRecord");function Tw(e){if(km.isEmpty(e.subscribe)||km.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(Tw,"reverseSubscription");function jJ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=km.getTableHashAttribute(u,l),{subscribe:d,publish:E}=Tw(c),f=YJ()[u]?.[l],h=new HJ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new BJ(r,t,n,s)}a(jJ,"buildNodePayloads");function e2(){if(!Sw.get(ii.CONFIG_PARAMS.CLUSTERING_ENABLED))throw FJ(new Error,xJ.CLUSTERING_NOT_ENABLED,GJ.BAD_REQUEST,void 0,void 0,!0)}a(e2,"checkClusteringEnabled");async function t2(){let e=new kJ(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await QJ(e))}a(t2,"getAllNodeRecords");async function r2(){let e=await VJ.getSystemInformation();return{hdb_version:$J.version(),node_version:e.node_version,platform:e.platform}}a(r2,"getSystemInfo")});var Vm=m((Wae,ww)=>{"use strict";var Vl=nt(),gw=V(),Aw=Be(),Ow=A(),$l=x(),Nw=Ul(),s2=gh(),{RemotePayloadObject:n2}=Ya(),{handleHDBError:bw,hdb_errors:i2}=W(),{HTTP_STATUS_CODES:yw}=i2,{NodeSubscription:Iw}=co();ww.exports=o2;async function o2(e,t){let r;try{r=await Vl.request(`${t}.${Aw.REQUEST_SUFFIX}`,new n2(Ow.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),$l.trace("Response from remote describe all request:",r)}catch(o){$l.error(`addNode received error from describe all request to remote node: ${o}`);let c=Vl.requestErrorHandler(o,"add_node",t);throw bw(new Error,c,yw.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Aw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw bw(new Error,o,yw.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===Ow.SYSTEM_SCHEMA_NAME){await Vl.createLocalTableStream(c,u);let h=new Iw(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=gw.doesSchemaExist(c),_=s[c]!==void 0,d=u?gw.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&($l.trace(`addNode creating schema: ${c}`),await Nw.createSchema({operation:"create_schema",schema:c})),!d&&E){$l.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new s2(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await Nw.createTable(h)}await Vl.createLocalTableStream(c,u);let f=new Iw(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(o2,"reviewSubscriptions")});var Wl=m((zae,Dw)=>{"use strict";var{handleHDBError:Yl,hdb_errors:a2}=W(),{HTTP_STATUS_CODES:Kl}=a2,{addUpdateNodeValidator:c2}=Hl(),Wa=x(),Uw=A(),Cw=Be(),u2=V(),$m=nt(),Qa=ks(),l2=Q(),_2=Vm(),{Node:d2,NodeSubscription:E2}=co(),{broadcast:f2}=dt(),h2="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",m2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",S2=l2.get(Uw.CONFIG_PARAMS.CLUSTERING_NODENAME);Dw.exports=p2;async function p2(e,t=!1){Wa.trace("addNode called with:",e),Qa.checkClusteringEnabled();let r=c2(e);if(r)throw Yl(r,r.message,Kl.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Qa.getNodeRecord(s);if(!u2.isEmptyOrZeroLength(d))throw Yl(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Kl.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await _2(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=h2,o;let c=Qa.buildNodePayloads(n,S2,Uw.OPERATIONS_ENUM.ADD_NODE,await Qa.getSystemInfo());Wa.trace("addNode sending remote payload:",c);let u;try{u=await $m.request(`${s}.${Cw.REQUEST_SUFFIX}`,c)}catch(d){Wa.error(`addNode received error from request: ${d}`);let E=$m.requestErrorHandler(d,"add_node",s);throw Yl(new Error,E,Kl.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===Cw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Yl(new Error,d,Kl.INTERNAL_SERVER_ERROR,"error",d)}Wa.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Wa.trace("Add node updating work stream for node:",s,"subscriptions:",f),await $m.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new E2(f.schema,f.table,f.publish,f.subscribe))}let _=new d2(s,l,u.system_info);return await Qa.upsertNodeRecord(_),f2({type:"nats_update"}),i.length>0?o.message=m2:o.message=`Successfully added '${s}' to manifest`,o}a(p2,"addNode")});var Km=m((Xae,Pw)=>{"use strict";var{handleHDBError:Ql,hdb_errors:T2}=W(),{HTTP_STATUS_CODES:zl}=T2,{addUpdateNodeValidator:R2}=Hl(),za=x(),Mw=A(),Lw=Be(),g2=V(),Ym=nt(),Ja=ks(),A2=Q(),{cloneDeep:O2}=require("lodash"),N2=Vm(),{NodeSubscription:b2}=co(),{broadcast:y2}=dt(),I2="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",w2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",C2=A2.get(Mw.CONFIG_PARAMS.CLUSTERING_NODENAME);Pw.exports=U2;async function U2(e){za.trace("updateNode called with:",e),Ja.checkClusteringEnabled();let t=R2(e);if(t)throw Ql(t,t.message,zl.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=O2(await Ja.getNodeRecord(r));if(g2.isEmptyOrZeroLength(s))throw Ql(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,zl.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await N2(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=I2,o;let c=Ja.buildNodePayloads(n,C2,Mw.OPERATIONS_ENUM.UPDATE_NODE,await Ja.getSystemInfo());za.trace("updateNode sending remote payload:",c);let u;try{u=await Ym.request(`${r}.${Lw.REQUEST_SUFFIX}`,c)}catch(l){za.error(`updateNode received error from request: ${l}`);let _=Ym.requestErrorHandler(l,"update_node",r);throw Ql(new Error,_,zl.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===Lw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw Ql(new Error,l,zl.INTERNAL_SERVER_ERROR,"error",l)}za.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];za.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await Ym.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await D2(s[0],n,u.system_info),i.length>0?o.message=w2:o.message=`Successfully updated '${r}'`,o}a(U2,"updateNode");async function D2(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new b2(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Ja.upsertNodeRecord(s),y2({type:"nats_update"})}a(D2,"updateNodeTable")});var qw=m((jae,Fw)=>{"use strict";var Hw=require("joi"),{string:vw}=Hw.types(),L2=ve(),Bw=A(),M2=Q(),P2=Be();Fw.exports=v2;function v2(e){let t=vw.invalid(M2.get(Bw.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(P2.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=Hw.object({operation:vw.valid(Bw.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return L2.validateBySchema(e,r)}a(v2,"removeNodeValidator")});var Xl=m((tce,Yw)=>{"use strict";var{handleHDBError:Gw,hdb_errors:B2}=W(),{HTTP_STATUS_CODES:xw}=B2,H2=qw(),Xa=x(),kw=ks(),F2=V(),Jl=A(),Vw=Be(),$w=nt(),q2=Q(),{RemotePayloadObject:G2}=Ya(),{NodeSubscription:x2}=co(),k2=Ma(),V2=Jn(),{broadcast:$2}=dt(),Y2=q2.get(Jl.CONFIG_PARAMS.CLUSTERING_NODENAME);Yw.exports=K2;async function K2(e){Xa.trace("removeNode called with:",e),kw.checkClusteringEnabled();let t=H2(e);if(t)throw Gw(t,t.message,xw.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await kw.getNodeRecord(r);if(F2.isEmptyOrZeroLength(s))throw Gw(new Error,`Node '${r}' was not found.`,xw.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new G2(Jl.OPERATIONS_ENUM.REMOVE_NODE,Y2,[]),i,o=!1;try{i=await $w.request(`${r}.${Vw.REQUEST_SUFFIX}`,n),Xa.trace("Remove node reply from remote node:",r,i)}catch(u){Xa.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Xa.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new x2(_.schema,_.table,!1,!1);await $w.updateWorkStream(d,r)}let c=new k2(Jl.SYSTEM_SCHEMA_NAME,Jl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await V2.deleteRecord(c),$2({type:"nats_update"}),i?.status===Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Xa.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(K2,"removeNode")});var Qw=m((sce,Ww)=>{"use strict";var Kw=require("joi"),{string:W2,array:Q2}=Kw.types(),z2=ve(),J2=Hl();Ww.exports=X2;function X2(e){let t=Kw.object({operation:W2.valid("configure_cluster").required(),connections:Q2.items(J2.validation_schema).required()});return z2.validateBySchema(e,t)}a(X2,"configureClusterValidator")});var Wm=m((ice,jw)=>{"use strict";var Z2=A(),Zl=x(),j2=V(),e3=Xl(),t3=Wl(),zw=ks(),r3=Qw(),{handleHDBError:Jw,hdb_errors:s3}=W(),{HTTP_STATUS_CODES:Xw}=s3,n3="Configure cluster complete.",i3="Failed to configure the cluster. Check the logs for more details.",o3="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";jw.exports=a3;async function a3(e){Zl.trace("configure cluster called with:",e),zw.checkClusteringEnabled();let t=r3(e);if(t)throw Jw(t,t.message,Xw.BAD_REQUEST,void 0,void 0,!0);let r=await zw.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(Zw(e3,{operation:Z2.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);Zl.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(Zw(t3,f,f.node_name))}let c=await Promise.allSettled(i);Zl.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(Zl.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(j2.isEmptyOrZeroLength(u))return{message:n3,connections:l};if(_)return{message:o3,failed_nodes:u,connections:l};throw Jw(new Error,i3,Xw.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(a3,"configureCluster");async function Zw(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(Zw,"functionWrapper")});var tC=m((ace,eC)=>{"use strict";var jl=require("joi"),c3=ve(),{validateSchemaExists:u3,validateTableExists:l3,validateSchemaName:_3}=rs(),d3=jl.object({operation:jl.string().valid("purge_stream"),schema:jl.string().custom(u3).custom(_3).required(),table:jl.string().custom(l3).required()});function E3(e){return c3.validateBySchema(e,d3)}a(E3,"purgeStreamValidator");eC.exports=E3});var Qm=m((uce,rC)=>{"use strict";var{handleHDBError:f3,hdb_errors:h3}=W(),{HTTP_STATUS_CODES:m3}=h3,S3=tC(),p3=nt(),T3=ks();rC.exports=R3;async function R3(e){let t=S3(e);if(t)throw f3(t,t.message,m3.BAD_REQUEST,void 0,void 0,!0);T3.checkClusteringEnabled();let{schema:r,table:s}=e;return await p3.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(R3,"purgeStream")});var Xm=m((_ce,cC)=>{"use strict";var Jm=ks(),g3=nt(),iC=Q(),e_=A(),oi=Be(),A3=V(),zm=x(),{RemotePayloadObject:O3}=Ya(),{ErrorCode:sC}=require("nats"),nC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED),oC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_NODENAME);cC.exports={clusterStatus:N3,buildNodeStatus:aC};async function N3(){let e={node_name:oC,is_enabled:nC,connections:[]};if(!nC)return e;let t=await Jm.getAllNodeRecords();if(A3.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(aC(t[s],e.connections));return await Promise.allSettled(r),e}a(N3,"clusterStatus");async function aC(e,t){let r=e.name,s=new O3(e_.OPERATIONS_ENUM.CLUSTER_STATUS,oC,void 0,await Jm.getSystemInfo()),n,i,o=oi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await g3.request(oi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===oi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=oi.CLUSTER_STATUS_STATUSES.CLOSED,zm.error(`Error getting node status from ${r} `,n))}catch(u){zm.warn(`Error getting node status from ${r}`,u),u.code===sC.NoResponders?o=oi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===sC.Timeout?o=oi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=oi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new b3(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==e_.PRE_4_0_0_VERSION&&await Jm.upsertNodeRecord(u)}catch(u){zm.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(aC,"buildNodeStatus");function b3(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(b3,"NodeStatusObject")});var jm=m((Ece,uC)=>{"use strict";var{handleHDBError:y3,hdb_errors:I3}=W(),{HTTP_STATUS_CODES:w3}=I3,C3=nt(),U3=ks(),Zm=V(),t_=require("joi"),D3=ve(),L3=2e3,M3=t_.object({timeout:t_.number().min(1),connected_nodes:t_.boolean(),routes:t_.boolean()});uC.exports=P3;async function P3(e){U3.checkClusteringEnabled();let t=D3.validateBySchema(e,M3);if(t)throw y3(t,t.message,w3.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||Zm.autoCastBoolean(s),o=n===void 0||Zm.autoCastBoolean(n),c={nodes:[]},u=await C3.getServerList(r??L3),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:Zm.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(P3,"clusterNetwork")});var EC=m((hce,dC)=>{"use strict";var eS=require("joi"),lC=ve(),{route_constraints:_C}=Ff();dC.exports={setRoutesValidator:v3,deleteRoutesValidator:B3};function v3(e){let t=eS.object({server:eS.valid("hub","leaf").required(),routes:_C.required()});return lC.validateBySchema(e,t)}a(v3,"setRoutesValidator");function B3(e){let t=eS.object({routes:_C.required()});return lC.validateBySchema(e,t)}a(B3,"deleteRoutesValidator")});var rS=m((Sce,SC)=>{"use strict";var ai=Nr(),tS=V(),r_=A(),fC=EC(),{handleHDBError:hC,hdb_errors:H3}=W(),{HTTP_STATUS_CODES:mC}=H3,F3="cluster routes successfully set",q3="cluster routes successfully deleted";SC.exports={setRoutes:G3,getRoutes:x3,deleteRoutes:k3};function G3(e){let t=fC.setRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=ai.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,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=tS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:F3,set:o,skipped:i}}a(G3,"setRoutes");function x3(){let e=ai.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(x3,"getRoutes");function k3(e){let t=fC.deleteRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=ai.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=tS.isEmptyOrZeroLength(s)?null:s,ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=tS.isEmptyOrZeroLength(n)?null:n,ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:q3,deleted:i,skipped:o}}a(k3,"deleteRoutes")});var TC=m((Tce,pC)=>{"use strict";var Za=require("alasql"),ci=require("recursive-iterator"),Vr=x(),V3=V(),ja=A(),sS=class{static{a(this,"sql_statement_bucket")}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,Y3(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=>ja.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=>!ja.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][ja.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=$3(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!ja.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Za.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function $3(e){return e.filter(t=>t[ja.PERMS_CRUD_ENUM.READ])}a($3,"filterReadRestrictedAttrs");function Y3(e,t,r,s,n){K3(e,t,r,s,n)}a(Y3,"interpretAST");function ec(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(ec,"addSchemaTableToMap");function K3(e,t,r,s,n){if(!e){Vr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Za.yy.Insert?J3(e,t,r):e instanceof Za.yy.Select?W3(e,t,r,s,n):e instanceof Za.yy.Update?Q3(e,t,r):e instanceof Za.yy.Delete?z3(e,t,r):Vr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(K3,"getRecordAttributesAST");function W3(e,t,r,s,n){if(!e){Vr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(V3.isEmptyOrZeroLength(i)){Vr.error("No schema specified");return}e.from.forEach(c=>{ec(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ec(c.table,t,r,s,n)});let o=new ci(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.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{Vr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new ci(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Vr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ci(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Vr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new ci(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Vr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(W3,"getSelectAttributes");function Q3(e,t,r){if(!e){Vr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ci(e.columns),n=e.table.databaseid;ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nS(e.table.tableid,n,i.columnid,t,r)}a(Q3,"getUpdateAttributes");function z3(e,t,r){if(!e){Vr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ci(e.where),n=e.table.databaseid;ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nS(e.table.tableid,n,i.columnid,t,r)}a(z3,"getDeleteAttributes");function J3(e,t,r){if(!e){Vr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ci(e.columns),n=e.into.databaseid;ec(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&nS(e.into.tableid,n,i.columnid,t,r)}a(J3,"getInsertAttributes");function nS(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(nS,"pushAttribute");pC.exports=sS});var aS=m((gce,OC)=>{var s_=Oa(),RC=require("chalk"),lr=x(),gC=require("prompt"),{promisify:X3}=require("util"),iS=A(),Z3=require("fs-extra"),j3=require("path"),eX=V(),tX=xm(),AC=Q();AC.initSync();var rX=require("moment"),sX=X3(gC.get),nX=j3.join(AC.getHdbBasePath(),iS.LICENSE_KEY_DIR_NAME,iS.LICENSE_FILE_NAME,iS.LICENSE_FILE_NAME);OC.exports={getFingerprint:oX,setLicense:iX,parseLicense:oS,register:aX,getRegistrationInfo:uX};async function iX(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await oS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw lr.error(r),lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(iX,"setLicense");async function oX(){let e={};try{e=await s_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(oX,"getFingerprint");async function oS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=s_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await Z3.writeFile(nX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(oS,"parseLicense");async function aX(){let e=await cX();return oS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(aX,"register");async function cX(){let e=await s_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:RC.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:RC.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gC.start()}catch(s){lr.error(s)}let r;try{r=await sX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(cX,"promptForRegistration");async function uX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await s_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(eX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=tX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=rX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(uX,"getRegistrationInfo")});var bC=m((Oce,NC)=>{"use strict";var lX=Be(),cS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+lX.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};NC.exports=cS});var wC=m((bce,IC)=>{"use strict";var yC=Be(),uS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d){this.port=t,d===null&&(d=void 0),this.server_name=r+yC.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+yC.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};IC.exports=uS});var UC=m((Ice,CC)=>{"use strict";var lS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CC.exports=lS});var LC=m((Cce,DC)=>{"use strict";var _X=Be(),_S=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+_X.SERVER_SUFFIX.ADMIN,this.password=r}};DC.exports=_S});var fS=m((Dce,vC)=>{"use strict";var tc=require("path"),a_=require("fs-extra"),dX=bC(),EX=wC(),fX=UC(),hX=LC(),dS=br(),lo=V(),Yt=Nr(),o_=A(),n_=Be(),{CONFIG_PARAMS:ze}=o_,sc=x(),c_=Q(),MC=Ps(),ES=nt(),rc="clustering",mX=1e4,PC=5;vC.exports={generateNatsConfig:SX,removeNatsConfig:pX};async function SX(e=!1,t=void 0){c_.initSync();let r=c_.get(ze.ROOTPATH),s=tc.join(r,rc,n_.PID_FILES.HUB),n=tc.join(r,rc,n_.PID_FILES.LEAF),i=Yt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=tc.join(r,rc,n_.NATS_CONFIG_FILES.HUB_SERVER),c=tc.join(r,rc,n_.NATS_CONFIG_FILES.LEAF_SERVER),u=Yt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Yt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Yt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Yt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Yt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Yt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ES.checkNATSServerInstalled()||u_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await dS.listUsers(),p=Yt.getConfigFromFile(ze.CLUSTERING_USER),R=await dS.getClusterUser();(lo.isEmpty(R)||R.active!==!0)&&u_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await i_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await i_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await i_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await i_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of T.entries())Ze.role.role===o_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new hX(Ze.username,MC.decrypt(Ze.hash))),k.push(new fX(Ze.username,MC.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Yt.getClusteringRoutes();if(!lo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new dX(Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=lo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await a_.writeJson(o,b),sc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new EX(Yt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete F.tls.ca_file,(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await a_.writeJson(c,F),sc.trace(`Leaf server config written to ${c}`))}a(SX,"generateNatsConfig");async function i_(e){let t=c_.get(e);return lo.isEmpty(t)&&u_(`port undefined for '${e}'`),await lo.isPortTaken(t)&&u_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(i_,"isPortAvailable");function u_(e){let t=`Error generating clustering config: ${e}`;sc.error(t),console.error(t),process.exit(1)}a(u_,"generateNatsConfigError");async function pX(e){let{port:t,config_file:r}=ES.getServerConfig(e),{username:s,decrypt_hash:n}=await dS.getClusterUser(),i=0,o=500;for(;i<PC;){try{let l=await ES.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){sc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=PC)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 lo.async_set_timeout(o*i)}let c="0".repeat(mX),u=tc.join(c_.get(ze.ROOTPATH),rc,r);await a_.writeFile(u,c),await a_.remove(u),sc.notify(e,"started.")}a(pX,"removeNatsConfig")});var xC=m((Mce,GC)=>{"use strict";var _r=Q(),TX=Oa(),oe=A(),nc=Be(),Vs=require("path"),{PACKAGE_ROOT:__}=A(),BC=Q(),l_=V(),_o="/dev/null",RX=Vs.join(__,"launchServiceScripts"),HC=Vs.join(__,"utility/scripts"),gX=Vs.join(HC,oe.HDB_RESTART_SCRIPT),FC=Vs.resolve(__,"dependencies",`${process.platform}-${process.arch}`,nc.NATS_BINARY_NAME);function qC(){let t=TX.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return l_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:__}}a(qC,"generateMainServerConfig");var AX=9930;function OX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Vs.join(e,"clustering",nc.NATS_CONFIG_FILES.HUB_SERVER),r=Vs.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=BC.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=nc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==AX?"-"+s:""),script:FC,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=_o,i.error_file=_o),i}a(OX,"generateNatsHubServerConfig");var NX=9940;function bX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Vs.join(e,"clustering",nc.NATS_CONFIG_FILES.LEAF_SERVER),r=Vs.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=BC.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=nc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==NX?"-"+s:""),script:FC,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=_o,i.error_file=_o),i}a(bX,"generateNatsLeafServerConfig");function yX(){_r.initSync();let e=Vs.join(_r.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:RX,autorestart:!1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=_o,t.error_file=_o),t}a(yX,"generateClusteringUpgradeV4ServiceConfig");function IX(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return l_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:HC},script:gX}}a(IX,"generateRestart");function wX(){return{apps:[qC()]}}a(wX,"generateAllServiceConfigs");GC.exports={generateAllServiceConfigs:wX,generateMainServerConfig:qC,generateRestart:IX,generateNatsHubServerConfig:OX,generateNatsLeafServerConfig:bX,generateClusteringUpgradeV4ServiceConfig:yX}});var rU=m((Gce,tU)=>{"use strict";var Te=A(),CX=V(),ic=fS(),oc=nt(),ls=Be(),yn=xC(),d_=Q(),$s=x(),UX=ks(),{startWorker:kC,onMessageFromWorkers:DX}=dt(),LX=uo(),MX=require("util"),$C=require("child_process"),{execFile:PX}=$C,vce=MX.promisify($C.exec),Bce=require("systeminformation"),fe;tU.exports={enterPM2Mode:vX,start:ui,stop:hS,reload:YC,restart:KC,list:mS,describe:QC,connect:Ys,kill:GX,startAllServices:xX,startService:SS,getUniqueServicesList:zC,restartAllServices:kX,isServiceRegistered:JC,reloadStopStart:XC,restartHdb:WC,deleteProcess:FX,startClusteringProcesses:jC,startClusteringThreads:eU,isHdbRestartRunning:qX,isClusteringRunning:$X,stopClustering:VX,reloadClustering:YX};var{PACKAGE_ROOT:Hce}=A(),Fce=A(),{loggerWithTag:qce}=$s,ac=!1;DX(e=>{e.type==="restart"&&d_.initSync(!0)});function vX(){ac=!0}a(vX,"enterPM2Mode");function Ys(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{$s.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ys,"connect");var Kt,BX=10,VC;function ui(e){if(ac)return HX(e);let t=PX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Kt.indexOf(t);i>-1&&Kt.splice(i,1),!VC&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<BX&&ui(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=d_.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ls.LOG_LEVEL_HIERARCHY[i]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?$s.OUTPUTS.STDERR:$s.OUTPUTS.STDOUT;$s.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ls.LOG_LEVELS[d]}if(ls.LOG_LEVEL_HIERARCHY[i]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?$s.OUTPUTS.STDERR:$s.OUTPUTS.STDOUT;$s.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Kt){Kt=[];let n=a(()=>{VC=!0,Kt&&(Kt.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)}Kt.push(t)}a(ui,"start");function HX(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(HX,"startWithPM2");function hS(e){if(!ac){for(let t of Kt||[])t.name===e&&(Kt.splice(Kt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(hS,"stop");function YC(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(YC,"reload");function KC(e){if(!ac)for(let t of Kt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(KC,"restart");function FX(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(FX,"deleteProcess");async function WC(){await ui(yn.generateRestart())}a(WC,"restartHdb");async function qX(){let e=await mS();for(let t in e)if(e[t].name===Te.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(qX,"isHdbRestartRunning");function mS(){return new Promise(async(e,t)=>{try{await Ys()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(mS,"list");function QC(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(QC,"describe");function GX(){if(!ac){for(let e of Kt||[])e.kill();Kt=[];return}return new Promise(async(e,t)=>{try{await Ys()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(GX,"kill");async function xX(){try{await jC(),await eU(),await ui(yn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(xX,"startAllServices");async function SS(e){try{let t;switch(e=e.toLowerCase(),e){case Te.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=yn.generateMainServerConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=yn.generateNatsIngestServiceConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=yn.generateNatsReplyServiceConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=yn.generateNatsHubServerConfig(),await ui(t),await ic.removeNatsConfig(e);return;case Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=yn.generateNatsLeafServerConfig(),await ui(t),await ic.removeNatsConfig(e);return;case Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=yn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ui(t)}catch(t){throw fe.disconnect(),t}}a(SS,"startService");async function zC(){try{let e=await mS(),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 fe.disconnect(),e}}a(zC,"getUniqueServicesList");async function kX(e=[]){try{let t=!1,r=await zC();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Te.PROCESS_DESCRIPTORS.HDB?t=!0:await KC(o))}t&&await XC(Te.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(kX,"restartAllServices");async function JC(e){if(Kt?.find(r=>r.name===e))return!0;let t=await LX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(JC,"isServiceRegistered");async function XC(e){let t=e===Te.PROCESS_DESCRIPTORS.HDB?d_.get(Te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):d_.get(Te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await QC(e),s=CX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await hS(e),await SS(e)):e===Te.PROCESS_DESCRIPTORS.HDB?await WC():await YC(e)}a(XC,"reloadStopStart");var ZC;async function jC(){for(let e in Te.CLUSTERING_PROCESSES){let t=Te.CLUSTERING_PROCESSES[e];await SS(t)}}a(jC,"startClusteringProcesses");async function eU(){ZC=kC(Te.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Te.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await oc.createWorkQueueStream(ls.WORK_QUEUE_CONSUMER_NAMES),await oc.updateIngestStreamConsumer(),await oc.updateLocalStreams();let e=await UX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Te.PRE_4_0_0_VERSION){$s.info("Starting clustering upgrade 4.0.0 process"),kC(Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(eU,"startClusteringThreads");async function VX(){for(let e in Te.CLUSTERING_PROCESSES)if(e!==Te.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Te.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await ZC.terminate();else{let t=Te.CLUSTERING_PROCESSES[e];await hS(t)}}a(VX,"stopClustering");async function $X(){for(let e in Te.CLUSTERING_PROCESSES){let t=Te.CLUSTERING_PROCESSES[e];if(await JC(t)===!1)return!1}return!0}a($X,"isClusteringRunning");async function YX(){await ic.generateNatsConfig(!0),await oc.reloadNATSHub(),await oc.reloadNATSLeaf(),await ic.removeNatsConfig(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ic.removeNatsConfig(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(YX,"reloadClustering")});var NS=m((kce,cU)=>{"use strict";var KX=require("minimist"),{isMainThread:RS,parentPort:iU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:cc}=He,_s=x(),gS=V(),E_=fS(),Eo=nt(),pS=Be(),oU=Nr(),ds=rU(),sU=uo(),WX=EE(),{restartWorkers:f_,onMessageByType:QX}=dt(),{handleHDBError:zX,hdb_errors:JX}=W(),{HTTP_STATUS_CODES:XX}=JX,h_=Q();h_.initSync();var uc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,ZX="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",nU="Clustering is not enabled so cannot be restarted",jX="Invalid service",li,$r;cU.exports={restart:aU,restartService:AS};RS&&QX(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?AS({service:e.workerType}):aU({operation:"restart"})});async function aU(e){$r=Object.keys(e).length===0,li=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=KX(process.argv);if(t.service){await AS(t);return}if($r&&!li){console.error(ZX);return}if($r&&console.log(uc),li){ds.enterPM2Mode(),_s.notify(uc);let r=WX(Object.keys(He.CONFIG_PARAM_MAP),!0);return gS.isEmptyOrZeroLength(Object.keys(r))||oU.updateConfigValue(void 0,void 0,r,!0,!0),t4(),uc}return RS?(_s.notify(uc),await OS(),setTimeout(()=>{f_()},50)):iU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),uc}a(aU,"restart");async function AS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw zX(new Error,jX,XX.BAD_REQUEST,void 0,void 0,!0);if(li=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!RS)return iU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case cc.clustering:if(!h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}$r&&console.log("Restarting clustering"),_s.notify("Restarting clustering"),await OS();break;case cc.clustering_config:case cc["clustering config"]:if(!h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}$r&&console.log("Restarting clustering_config"),_s.notify("Restarting clustering_config"),await ds.reloadClustering();break;case"custom_functions":case"custom functions":case cc.harperdb:case cc.http_workers:if($r&&!li){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}$r&&console.log("Restarting http_workers"),_s.notify("Restarting http_workers"),li?await ds.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{f_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(_s.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(AS,"restartService");async function e4(){await Eo.publishToStream(`${pS.SUBJECT_PREFIXES.TXN}.${pS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,pS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Eo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(e4,"postDummyNatsMsg");async function t4(){await OS(),await ds.restart(He.HDB_PROC_DESCRIPTOR),await gS.async_set_timeout(2e3),h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await TS(),$r&&(await Eo.closeConnection(),process.exit(0))}a(t4,"restartPM2Mode");async function OS(){if(!oU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await sU.getHDBProcessInfo()).clustering.length===0)_s.trace("Clustering not running, restart will start clustering services"),await E_.generateNatsConfig(!0),await ds.startClusteringProcesses(),await ds.startClusteringThreads(),await TS(),$r&&await Eo.closeConnection();else{await e4(),await E_.generateNatsConfig(!0),li?(_s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ds.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ds.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await sU.getHDBProcessInfo()).clustering.forEach(n=>{_s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await gS.async_set_timeout(3e3),await TS(),await Eo.updateLocalStreams(),$r&&await Eo.closeConnection(),_s.trace("Restart clustering restarting ingest and reply service threads");let t=f_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=f_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(OS,"restartClustering");async function TS(){await E_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await E_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(TS,"removeNatsConfig")});var TU=m((Yce,pU)=>{"use strict";var $ce=require("lodash"),Wt=A(),{handleHDBError:uU,hdb_errors:r4}=W(),{HDB_ERROR_MSGS:s4,HTTP_STATUS_CODES:n4}=r4,bS=x();pU.exports={getRolePermissions:o4};var _i=Object.create(null),i4=a(e=>({key:e,perms:{}}),"perms_template_obj"),EU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),fU=a((e=!1,t=!1,r=!1,s=!1)=>({[Wt.PERMS_CRUD_ENUM.READ]:e,[Wt.PERMS_CRUD_ENUM.INSERT]:t,[Wt.PERMS_CRUD_ENUM.UPDATE]:r,[Wt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),yS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...fU(t,r,s,n)}),"table_perms_template"),lU=a((e,t=fU())=>({attribute_name:e,describe:SU(t),[lc]:t[lc],[IS]:t[IS],[wS]:t[wS]}),"attr_perms_template"),_U=a((e,t=!1)=>({attribute_name:e,describe:t,[lc]:t}),"timestamp_attr_perms_template"),{READ:lc,INSERT:IS,UPDATE:wS}=Wt.PERMS_CRUD_ENUM,hU=Object.values(Wt.PERMS_CRUD_ENUM),mU=[lc,IS,wS];function o4(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[Wt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(_i[t]&&_i[t].key===s)return _i[t].perms;let n=a4(e,r);return _i[t]?_i[t].key=s:_i[t]=i4(s),_i[t].perms=n,n}catch(r){if(!e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Wt.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 bS.error(s),bS.debug(r),uU(new Error,s4.OUTDATED_PERMS_TRANSLATION_ERROR,n4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw st.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Pk(s,r),Gf(s);let n=s.toJSON();if(yk.config=n,St=Zn(n),St.logging_rotation_rotate)for(let i in bO)St[i]&&st.error(`Config ${bO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(wk)}}a(UO,"initConfig");function Pk(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Hr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Hr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Hr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(st.trace("Updating config file with missing config params"),Ft.writeFileSync(t,String(e)))}a(Pk,"checkForUpdatedConfig");function Gf(e){let t=e.toJSON(),r=Rk(t);if(r.error)throw sl.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(Gf,"validateConfig");function vk(e,t){St===void 0&&(St={});let r=Fs[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(vk,"updateConfigObject");function DO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&UO();let o=CO(Fs.hdb_root),c=Hr.join(o,Or.HDB_CONFIG_FILE),u=hn(c),l;if(r===void 0&&e.toLowerCase()===fn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Fs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=qf(E,t);u.setIn([...f],h)}else for(let E in r){let f=Fs[E.toLowerCase()];if(f===fn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=qf(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){st.error(p)}}}l&&wO(u,l),Gf(u);let _=u.getIn(["rootPath"]),d=Hr.join(_,Or.HDB_CONFIG_FILE);s===!0&&Bk(c,_),Ft.writeFileSync(d,String(u)),n&&(St=Zn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(DO,"updateConfigValue");function Bk(e,t){try{let r=Hr.join(t,"backup",`${Or.HDB_CONFIG_FILE}.bak`);Ft.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(Ck),st.error(r)}}a(Bk,"backupConfigFile");var Hk=["schemas"];function Zn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Hk.includes(r)){let s=Zn(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(Zn,"flattenConfig");function qf(e,t){if(e===fn.CLUSTERING_NODENAME||e===fn.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(Ak(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(qf,"castConfigValue");function Fk(){let e=_t.getPropsFilePath(),t=Xn(e);return hn(t).toJSON()}a(Fk,"getConfiguration");async function qk(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return DO(void 0,void 0,n,!0),Dk}catch(i){throw typeof i=="string"||i instanceof String?Nk(i,i,bk.BAD_REQUEST,void 0,void 0,!0):i}}a(qk,"setConfiguration");function xf(){let e=_t.getPropsFilePath();try{Ft.accessSync(e,Ft.constants.F_OK|Ft.constants.R_OK)}catch(s){if(!_t.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xn(e);return hn(t).toJSON()}a(xf,"readConfigFile");function hn(e){return gk.parseDocument(Ft.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hn,"parseYamlDoc");function Gk(){let e=xf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=NO(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=NO(s);if(n)throw sl.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Gk,"getClusteringRoutes");function LO(e){let t=yO(e);St={};for(let r in Fs){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Fs[r].toLowerCase();n===fn.LOGGING_ROOT?St[n]=Hr.dirname(s):St[n]=s}return St}a(LO,"initOldConfig");function xk(e){let t=xf();return Ok.get(t,e.replaceAll("_","."))}a(xk,"getConfigFromFile");async function kk(e,t){let r=hn(Xn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ft.writeFile(Xn(),String(r))}a(kk,"addConfig");function Vk(e){let t=Xn(_t.getPropsFilePath()),r=hn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Hr.join(s,Or.HDB_CONFIG_FILE);Ft.writeFileSync(n,String(r))}a(Vk,"deleteConfigFromFile")});var vO=m((qse,PO)=>{"use strict";var il=A(),ol=class{static{a(this,"BaseLicense")}constructor(t=0,r=il.RAM_ALLOCATION_ENUM.DEFAULT,s=il.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},kf=class extends ol{static{a(this,"ExtendedLicense")}constructor(t=0,r=il.RAM_ALLOCATION_ENUM.DEFAULT,s=il.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};PO.exports={BaseLicense:ol,ExtendedLicense:kf}});var Oa=m((xse,xO)=>{"use strict";var ki=require("fs-extra"),BO=ju(),HO=require("crypto"),$k=require("moment"),Yk=require("uuid").v4,wt=x(),$f=require("path"),Kk=V(),mn=A(),Wk=vO().ExtendedLicense,xi="invalid license key format",Qk="061183",zk="mofi25",Jk="aes-256-cbc",Xk=16,Zk=32,FO=Q();FO.initSync();var Vf;xO.exports={validateLicense:qO,generateFingerPrint:eV,licenseSearch:GO,getLicense:sV};function Yf(){return $f.join(FO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Yf,"getLicenseDirPath");function jk(){let e=Yf();return $f.join(e,mn.LICENSE_FILE_NAME)}a(jk,"getLicenseFilePath");function Kf(){let e=Yf();return $f.join(e,mn.REG_KEY_FILE_NAME)}a(Kf,"getFingerPrintFilePath");async function eV(){let e=Kf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await tV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(eV,"generateFingerPrint");async function tV(){let e=Yk(),t=BO.hash(e),r=Kf();try{await ki.mkdirp(Yf()),await ki.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(tV,"writeFingerprint");function qO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Kf(),n=!1;try{n=ki.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=ki.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(zk),c=o[1];c=Buffer.concat([Buffer.from(c)],Xk);let u=Buffer.concat([Buffer.from(i)],Zk),l=HO.createDecipheriv(Jk,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=rV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xi),wt.error(xi),new Error(xi)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(xi),wt.error(xi),new Error(xi)}else r.exp_date=_;r.exp_date<$k().valueOf()&&(r.valid_date=!1),BO.validate(o[1],`${Qk}${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||wt.error("Invalid licence"),r}a(qO,"validateLicense");function rV(e,t){try{let r=HO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(rV,"checkOldLicense");function GO(){let e=new Wk,t=[];try{t=ki.readFileSync(jk(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Kk.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qO(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.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Vf=e,e}a(GO,"licenseSearch");async function sV(){return Vf||await GO(),Vf}a(sV,"getLicense")});var br=m((Kse,sN)=>{"use strict";var KO="username is required",WO="nothing to update, must supply active, role or password to update",QO="password cannot be an empty string",zO="If role is specified, it cannot be empty.",JO="active must be true or false";sN.exports={addUser:dV,alterUser:EV,dropUser:hV,getSuperUser:TV,userInfo:mV,listUsers:cl,listUsersExternal:SV,setUsersToGlobal:$i,findAndValidateUser:rN,getClusterUser:RV,USERNAME_REQUIRED:KO,ALTERUSER_NOTHING_TO_UPDATE:WO,EMPTY_PASSWORD:QO,EMPTY_ROLE:zO,ACTIVE_BOOLEAN:JO};var XO=Ar(),nV=Jn(),Qf=ju(),ZO=EO(),jO=gr(),zf=qs(),or=V(),eN=require("validate.js"),ue=x(),{promisify:iV}=require("util"),Jf=Ps(),kO=A(),VO=Be(),oV=Nr(),Vse=Q(),$se=Oa(),aV=Vn(),{table:Yse}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:cV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Wf,HDB_ERROR_MSGS:Vi}=cV,{UserEventMsg:Xf}=Fr(),$O=require("lodash"),{_assignPackageExport:uV}=require("../index");uV("getUser",rN);var tN={username:!0,active:!0,role:!0,password:!0},YO=new Map,al=jO.searchByValue,lV=jO.searchByHash,_V=iV(nV.delete);async function dV(e){let t=eN.cleanAttributes(e,tN),r=ZO.addUserValidation(t);if(r)throw ns(new Error,r.message,is.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 al(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,Vi.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,Vi.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Jf.encrypt(t.password)),t.password=Qf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XO.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await $i()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw ns(new Error,Vi.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],zf.signalUserChange(new Xf(process.pid)),`${c.username} successfully added`}a(dV,"addUser");async function EV(e){let t=eN.cleanAttributes(e,tN);if(or.isEmptyOrZeroLength(t.username))throw new Error(KO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(WO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(QO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(JO);let r=fV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Jf.encrypt(t.password)),t.password=Qf.hash(t.password)),t.role==="")throw new Error(zO);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 al(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Vi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.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 XO.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await $i()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return zf.signalUserChange(new Xf(process.pid)),n}a(EV,"alterUser");function fV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(fV,"isClusterUser");async function hV(e){try{let t=ZO.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,Vi.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await _V(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await $i()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return zf.signalUserChange(new Xf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(hV,"dropUser");async function mV(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 lV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(mV,"userInfo");async function SV(){let e;try{e=await cl()}catch(t){throw ue.error("Got an error listing users."),ue.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(SV,"listUsersExternal");async function cl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await al(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=$O.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 al(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=$O.cloneDeep(o),o.role=r[o.role],pV(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),or.errorizeMessage(e)}return null}a(cl,"listUsers");function pV(e){try{if(!e){ue.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(aV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(pV,"appendSystemTablesToRole");async function $i(){try{let e=await cl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a($i,"setUsersToGlobal");async function rN(e,t,r=!0){global.hdb_users||await $i();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Wf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Wf.USER_INACTIVE,is.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(YO.get(t)===s.password)return n;if(Qf.validate(s.password,t))YO.set(t,s.password);else throw ns(new Error,Wf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(rN,"findAndValidateUser");async function TV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(TV,"getSuperUser");async function RV(){let e=await cl(),t=oV.getConfigFromFile(kO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===kO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Jf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+VO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VO.SERVER_SUFFIX.ADMIN,r}a(RV,"getClusterUser")});var ba=m((Jse,aN)=>{"use strict";var jn=x(),ar=A(),gV=PA(),Qse=_n(),zse=Yn(),AV=br(),{validateEvent:nN}=Fr(),Na=Br(),OV=require("process"),{resetDatabases:NV}=(de(),re(Ne)),bV={[ar.ITC_EVENT_TYPES.SCHEMA]:yV,[ar.ITC_EVENT_TYPES.USER]:oN};async function yV(e){let t=nN(e);if(t){jn.error(t);return}jn.trace("ITC schemaHandler received schema event:",e),await gV(e.message),await IV(e.message)}a(yV,"schemaHandler");async function IV(e){try{Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=NV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){jn.error(t)}}a(IV,"syncSchemaMetadata");var iN=[];async function oN(e){try{try{Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){jn.warn(r)}let t=nN(e);if(t){jn.error(t);return}jn.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${OV.pid} received user event:`,e),await AV.setUsersToGlobal();for(let r of iN)r()}catch(t){jn.error(t)}}a(oN,"userHandler");oN.addListener=function(e){iN.push(e)};aN.exports=bV});var Fr=m((rne,uN)=>{"use strict";var Zse=x(),Zf=V(),wV=A(),{ITC_ERRORS:ya}=rr(),{parentPort:jse,threadId:CV,isMainThread:UV,workerData:ene}=require("worker_threads"),{onMessageFromWorkers:DV,broadcast:tne,broadcastWithAcknowledgement:LV}=dt();uN.exports={sendItcEvent:MV,validateEvent:cN,SchemaEventMsg:PV,UserEventMsg:vV};var ul;DV(async(e,t)=>{ul=ul||ba(),cN(e),ul[e.type]&&await ul[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function MV(e){return!UV&&e.message&&(e.message.originator=CV),LV(e)}a(MV,"sendItcEvent");function cN(e){if(typeof e!="object")return ya.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Zf.isEmpty(e.type))return ya.MISSING_TYPE;if(!e.hasOwnProperty("message")||Zf.isEmpty(e.message))return ya.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Zf.isEmpty(e.message.originator))return ya.MISSING_ORIGIN;if(wV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ya.INVALID_EVENT(e.type)}a(cN,"validateEvent");function PV(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(PV,"SchemaEventMsg");function vV(e){this.originator=e}a(vV,"UserEventMsg")});var qs=m((ine,EN)=>{"use strict";var lN=A(),nne=V(),ll=x(),_N=DA(),Yi,{sendItcEvent:dN}=Fr();function BV(e){try{ll.trace("signalSchemaChange called with message:",e),Yi=Yi||ba();let t=new _N(lN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),dN(t)}catch(t){ll.error(t)}}a(BV,"signalSchemaChange");function HV(e){try{ll.trace("signalUserChange called with message:",e),Yi=Yi||ba();let t=new _N(lN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),dN(t)}catch(t){ll.error(t)}}a(HV,"signalUserChange");EN.exports={signalSchemaChange:BV,signalUserChange:HV}});var _l=m((ane,hN)=>{"use strict";var fN=V(),FV=A(),qV=x(),GV=ku(),xV=xu(),kV=qs(),{SchemaEventMsg:VV}=Fr(),$V="already exists in";hN.exports=YV;async function YV(e,t,r){if(fN.isEmptyOrZeroLength(r))return r;let s=[];fN.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 KV(e,t.schema,t.name,i)})),n}a(YV,"lmdbCheckForNewAttributes");async function KV(e,t,r,s){let n=new xV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await WV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes($V))qV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(KV,"createNewAttribute");async function WV(e){let t;return t=await GV(e),kV.signalSchemaChange(new VV(process.pid,FV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(WV,"createAttribute")});var Ki=m((une,mN)=>{"use strict";var jf=class{static{a(this,"LMDBTransactionObject")}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}};mN.exports=jf});var pN=m((_ne,SN)=>{"use strict";var QV=Ki(),zV=A().OPERATIONS_ENUM,eh=class extends QV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(zV.INSERT,r,s,n,i),this.records=t}};SN.exports=eh});var RN=m((Ene,TN)=>{"use strict";var JV=Ki(),XV=A().OPERATIONS_ENUM,th=class extends JV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(XV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};TN.exports=th});var AN=m((hne,gN)=>{"use strict";var ZV=Ki(),jV=A().OPERATIONS_ENUM,rh=class extends ZV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(jV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};gN.exports=rh});var NN=m((Sne,ON)=>{"use strict";var e$=Ki(),t$=A().OPERATIONS_ENUM,sh=class extends e${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(t$.DELETE,s,n,t,i),this.original_records=r}};ON.exports=sh});var Ia=m((Rne,wN)=>{"use strict";var Tne=require("path"),bN=ye(),r$=pN(),s$=RN(),n$=AN(),i$=NN(),Wi=xe(),yN=V(),{CONFIG_PARAMS:o$}=A(),IN=Q();IN.initSync();var dl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:a$}=we();wN.exports=c$;async function c$(e,t){if(IN.get(o$.LOGGING_AUDITLOG)===!1)return;let r=a$(e.schema,e.table),s=await bN.openEnvironment(r,e.table,!0),n=u$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){bN.initializeDBIs(s,Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),yN.isEmpty(n.user_name)||s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(c$,"writeTransaction");function u$(e,t){let r=yN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===dl.INSERT)return new r$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPDATE)return new s$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPSERT)return new n$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.DELETE)return new i$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(u$,"createTransactionObject")});var nh=m((One,CN)=>{"use strict";var l$=ha(),Ane=ma(),wa=A(),_$=Ra(),d$=Hi().insertRecords,E$=ye(),f$=x(),h$=_l(),{getSchemaPath:m$}=we(),S$=Ia();CN.exports=p$;async function p$(e){try{let{schema_table:t,attributes:r}=l$(e);_$(e,r,t.hash_attribute),e.schema!==wa.SYSTEM_SCHEMA_NAME&&(r.includes(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await h$(e.hdb_auth_header,t,r),n=m$(e.schema,e.table),i=await E$.openEnvironment(n,e.table),o=await d$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await S$(e,o)}catch(c){f$.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(p$,"lmdbCreateRecords")});var LN=m((bne,DN)=>{"use strict";var UN=A(),T$=nh(),R$=ma(),g$=require("fs-extra"),{getSchemaPath:A$}=we();DN.exports=O$;async function O$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new R$(UN.SYSTEM_SCHEMA_NAME,UN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await T$(r),await g$.mkdirp(A$(e.schema))}a(O$,"lmdbCreateSchema")});var PN=m((Ine,MN)=>{"use strict";var ih=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};MN.exports=ih});var FN=m((Lne,HN)=>{"use strict";var vN=ye(),oh=vt(),ah=rr().LMDB_ERRORS_ENUM,N$=xe(),BN=x(),Cne=V(),b$=require("lmdb"),y$=PN(),I$=A(),{OVERFLOW_MARKER:Une,MAX_SEARCH_KEY_LENGTH:Dne}=N$,w$=I$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function C$(e,t,r,s){if(oh.validateEnv(e),t===void 0)throw new Error(ah.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ah.IDS_REQUIRED):new Error(ah.IDS_MUST_BE_ITERABLE);try{let n=vN.listDBIs(e);vN.initializeDBIs(e,t,n);let i=new y$,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[w$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,b$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],k=h[R];if(k!=null)try{let $=oh.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{BN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){BN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=oh.getNextMonotonicTime(),i}catch(n){throw n}}a(C$,"deleteRecords");HN.exports={deleteRecords:C$}});var Ca=m((Pne,GN)=>{"use strict";var Qi=V(),U$=FN(),D$=ye(),{getSchemaPath:L$}=we(),M$=Ia(),P$=x();GN.exports=v$;async function v$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Qi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Qi.isEmptyOrZeroLength(e.hash_values)&&!Qi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Qi.isEmpty(u)||e.hash_values.push(u)}}if(Qi.isEmptyOrZeroLength(e.hash_values))return qN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Qi.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=L$(e.schema,e.table),i=await D$.openEnvironment(n,e.table),o=await U$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await M$(e,o)}catch(c){P$.error(`unable to write transaction due to ${c.message}`)}return qN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(v$,"lmdbDeleteRecords");function qN(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(qN,"createDeleteResponse")});var uh=m((Hne,xN)=>{"use strict";var B$=A(),Bne=vt();function ch(e,t){let r=Object.create(null);if(t.length===1&&B$.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(ch,"parseRow");function H$(e,t,r,s){let n=ch(r,e);s.push(n)}a(H$,"searchAll");function F$(e,t,r,s){let n=ch(r,e);s[t]=n}a(F$,"searchAllToMap");function q$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(q$,"iterateDBI");function ei(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(ei,"pushResults");function G$(e,t,r,s,n,i){t.toString().endsWith(e)&&ei(t,r,s,n,i)}a(G$,"endsWith");function x$(e,t,r,s,n,i){t.toString().includes(e)&&ei(t,r,s,n,i)}a(x$,"contains");function k$(e,t,r,s,n,i){t>e&&ei(t,r,s,n,i)}a(k$,"greaterThanCompare");function V$(e,t,r,s,n,i){t>=e&&ei(t,r,s,n,i)}a(V$,"greaterThanEqualCompare");function $$(e,t,r,s,n,i){t<e&&ei(t,r,s,n,i)}a($$,"lessThanCompare");function Y$(e,t,r,s,n,i){t<=e&&ei(t,r,s,n,i)}a(Y$,"lessThanEqualCompare");xN.exports={parseRow:ch,searchAll:H$,searchAllToMap:F$,iterateDBI:q$,endsWith:G$,contains:x$,greaterThanCompare:k$,greaterThanEqualCompare:V$,lessThanCompare:$$,lessThanEqualCompare:Y$,pushResults:ei}});var zi=m((kne,QN)=>{"use strict";var Sn=ye(),qne=x(),cr=vt(),El=xe(),ke=rr().LMDB_ERRORS_ENUM,Gne=V(),K$=A(),fl=uh(),{parseRow:W$}=fl,xne=require("lmdb"),{OVERFLOW_MARKER:kN,MAX_SEARCH_KEY_LENGTH:Q$}=El;function VN(e,t,r,s=!1,n=void 0,i=void 0){return ti(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(VN,"iterateFullIndex");function Ua(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ti(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Ua,"iterateRangeBetween");function ti(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[El.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.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(ti,"setupTransaction");function $N(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(kN)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[El.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a($N,"getOverflowCheck");function z$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ti(e,t,t,(o,c,u)=>(hl(r),r=Da(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>W$(l.value,r))))}a(z$,"searchAll");function J$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);hl(r),r=Da(e.database||e,r);let o=new Map;for(let{key:c,value:u}of VN(e,t,t,s,n,i))o.set(c,fl.parseRow(u,r));return o}a(J$,"searchAllToMap");function X$(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=VN(e,void 0,t,r,s,n),c=o.transaction,u=$N(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(X$,"iterateDBI");function Z$(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(Z$,"countAll");function j$(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,t,r,(c,u,l,_)=>(s=cr.convertKeyValueToWrite(s),_===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(j$,"equals");function eY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(eY,"count");function tY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,null,r,(c,u)=>{s=cr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(tY,"startsWith");function rY(e,t,r,s,n=!1,i=void 0,o=void 0){return YN(e,t,r,s,n,i,o,!0)}a(rY,"endsWith");function YN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ti(e,null,r,(u,l,_,d)=>{let E=$N(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(kN)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[El.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(YN,"contains");function sY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!0,!1)}a(sY,"greaterThan");function nY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!1,!1)}a(nY,"greaterThanEqual");function iY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!0)}a(iY,"lessThan");function oY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!1)}a(oY,"lessThanEqual");function aY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ua(e,t,r,s,n,i,o,c)}a(aY,"between");function cY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(r),r=Da(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=fl.parseRow(c,r)),o}a(cY,"searchByHash");function uY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(uY,"checkHashExists");function lY(e,t,r,s,n=[]){return WN(e,t,r,s,n),KN(e,t,r,s,n).map(i=>i[1])}a(lY,"batchSearchByHash");function _Y(e,t,r,s,n=[]){WN(e,t,r,s,n);let i=new Map;for(let[o,c]of KN(e,t,r,s,n))i.set(o,c);return i}a(_Y,"batchSearchByHashToMap");function KN(e,t,r,s,n=[]){return ti(e,t,t,(i,o,c)=>{r=Da(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,fl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(KN,"batchHashSearch");function WN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(WN,"initializeBatchSearchByHash");function hl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(hl,"validateFetchAttributes");function pn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>Q$)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function Da(e,t){return t.length===1&&K$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(Da,"setGetWholeRowAttributes");QN.exports={searchAll:z$,searchAllToMap:J$,count:eY,countAll:Z$,equals:j$,startsWith:tY,endsWith:rY,contains:YN,searchByHash:cY,setGetWholeRowAttributes:Da,batchSearchByHash:lY,batchSearchByHashToMap:_Y,checkHashExists:uY,iterateDBI:X$,greaterThan:sY,greaterThanEqual:nY,lessThan:iY,lessThanEqual:oY,between:aY}});var Ji=m(($ne,jN)=>{var zN=require("lodash"),JN=ve(),Ce=require("joi"),dY=V(),{hdb_schema_table:ml,checkValidTable:XN,hdb_table:ZN,hdb_database:Sl}=rs(),{handleHDBError:EY,hdb_errors:fY}=W(),{getDatabases:hY}=(de(),re(Ne)),{HTTP_STATUS_CODES:mY}=fY,SY=Ce.object({database:Sl,schema:Sl,table:ZN,search_attribute:ml,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(ml).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),pY=Ce.object({database:Sl,schema:Sl,table:ZN,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(ml).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:ml,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});jN.exports=function(e,t){let r=null;switch(t){case"value":r=JN.validateBySchema(e,SY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(XN("database",e.schema)),i(XN("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=JN.validateBySchema(e,pY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=dY.checkGlobalSchemaTable(e.schema,e.table);if(n)return EY(new Error,n,mY.NOT_FOUND);let o=hY()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=zN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!zN.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var lh=m((Kne,eb)=>{"use strict";var TY=ye(),RY=Ji(),{getSchemaPath:gY}=we();eb.exports=AY;function AY(e){let t=RY(e,"hashes");if(t)throw t;let r=gY(e.schema,e.table);return TY.openEnvironment(r,e.table)}a(AY,"initialize")});var _h=m((Qne,tb)=>{"use strict";var OY=zi(),NY=lh();tb.exports=bY;async function bY(e){let t=await NY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return OY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(bY,"lmdbGetDataByHash")});var Xi=m((Jne,rb)=>{"use strict";var dh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};rb.exports=dh});var nb=m((jne,sb)=>{"use strict";var Zne=Xi(),yY=zi(),IY=lh();sb.exports=wY;async function wY(e){let t=await IY(e),r=global.hdb_schema[e.schema][e.table];return yY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(wY,"lmdbSearchByHash")});var os=m((tie,ib)=>{"use strict";var Eh=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=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=u,this.limit=l,this.offset=_}};ib.exports=Eh});var pl=m((sie,_b)=>{"use strict";var Ct=zi(),CY=ye(),UY=V(),ie=xe(),ri=A(),DY=Vn(),ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:LY}=we(),Gs=ri.SEARCH_WILDCARDS;async function MY(e,t,r){let s;e.schema===ri.SYSTEM_SCHEMA_NAME?s=DY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=lb(e,s.hash_attribute,r,t);return cb(e,n,s.hash_attribute,r)}a(MY,"prepSearch");async function cb(e,t,r,s){let n=LY(e.schema,e.table),i=await CY.openEnvironment(n,e.table),o=ub(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(PY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?ab(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?ab(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(cb,"executeSearch");function ub(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ie.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(ub,"searchByType");function ab(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(ab,"createMapFromIterable");function PY(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(PY,"checkToFetchMore");function lb(e,t,r,s){if(UY.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),Gs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Gs[0])<0&&n.indexOf(Gs[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if(Gs.indexOf(i)>=0&&Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(Gs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(Gs[0])||n.includes(Gs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ri.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ri.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ri.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ri.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ri.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ob.UNKNOWN_SEARCH_TYPE)}}a(lb,"createSearchTypeFromSearchObject");_b.exports={executeSearch:cb,createSearchTypeFromSearchObject:lb,prepSearch:MY,searchByType:ub}});var Eb=m((oie,db)=>{"use strict";var iie=os(),vY=Ji(),BY=V(),HY=A(),FY=pl();db.exports=qY;function qY(e,t){if(!BY.isEmpty(t)&&HY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vY(e,"value");if(s)throw s;let n=!0;return FY.prepSearch(e,t,n)}a(qY,"lmdbGetDataByValue")});var La=m((uie,fb)=>{"use strict";var cie=os(),GY=Ji(),xY=V(),kY=A(),VY=pl();fb.exports=$Y;async function $Y(e,t){if(!xY.isEmpty(t)&&kY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=GY(e,"value");if(s)throw s;return VY.prepSearch(e,t,!1)}a($Y,"lmdbSearchByValue")});var mb=m((die,hb)=>{"use strict";var _ie=xe(),fh=class{static{a(this,"SearchByConditionsObject")}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}},hh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},mh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};hb.exports={SearchByConditionsObject:fh,SearchCondition:hh,SortAttribute:mh}});var gb=m((mie,Rb)=>{"use strict";var fie=mb().SearchByConditionsObject,YY=os(),KY=Ji(),Sh=zi(),Tl=xe(),{Resource:hie}=(Xr(),re(DE)),Tb=pl(),WY=uh(),QY=require("lodash"),{getSchemaPath:zY}=we(),Sb=ye(),{handleHDBError:JY,hdb_errors:XY}=W(),{HTTP_STATUS_CODES:ZY}=XY,jY=1e8;Rb.exports=eK;async function eK(e){let t=KY(e,"conditions");if(t)throw JY(t,t.message,ZY.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=zY(e.schema,e.table),s=await Sb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Sb.openDBI(s,l.search_attribute);let i=QY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Tl.SEARCH_TYPES.EQUALS?l.estimated_count=Sh.count(s,l.search_attribute,l.search_value):_===Tl.SEARCH_TYPES.CONTAINS||_===Tl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=jY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await pb(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(Tb.filterByType),d=_.length,E=Sh.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>WY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await pb(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=Sh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(eK,"lmdbSearchByConditions");async function pb(e,t,r,s){let n=new YY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Tl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Tb.searchByType(e,n,i,s).map(o=>o.value)}a(pb,"executeConditionSearch")});var Ma=m((pie,Ab)=>{"use strict";var tK=A().OPERATIONS_ENUM,ph=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=tK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ab.exports=ph});var Th=m((Rie,Ub)=>{"use strict";var yb=os(),Ib=Ma(),wb=La(),Cb=Ca(),qt=A(),Ob=V(),Nb=ye(),{getTransactionAuditStorePath:rK,getSchemaPath:sK}=we(),bb=x();Ub.exports=nK;async function nK(e){try{if(Ob.isEmpty(global.hdb_schema[e.schema])||Ob.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await iK(e),await oK(e);let t=sK(e.schema,e.table);try{await Nb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=rK(e.schema,e.table);await Nb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(nK,"lmdbDropTable");async function iK(e){let t=new yb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await wb(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 Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Cb(n)}a(iK,"deleteAttributesFromSystem");async function oK(e){let t=new yb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await wb(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 Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Cb(n)}catch(i){throw i}}a(oK,"dropTableFromSystem")});var Lb=m((Aie,Db)=>{"use strict";var aK=require("fs-extra"),cK=os(),uK=Xi(),lK=Ma(),_K=Th(),dK=Ca(),EK=_h(),fK=La(),xs=A(),{getSchemaPath:hK}=we(),{handleHDBError:mK,hdb_errors:SK}=W(),{HDB_ERROR_MSGS:pK,HTTP_STATUS_CODES:TK}=SK;Db.exports=RK;async function RK(e){let t;try{t=await gK(e.schema);let r=new cK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await fK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await _K(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new lK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await dK(n);let i=hK(t);await aK.remove(i)}catch(r){throw r}}a(RK,"lmdbDropSchema");async function gK(e){let t=new uK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await EK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw mK(new Error,pK.SCHEMA_NOT_FOUND(e),TK.NOT_FOUND,void 0,void 0,!0);return s}a(gK,"validateDropSchema")});var gh=m((Nie,Mb)=>{"use strict";var Rh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Mb.exports=Rh});var vb=m((Iie,Pb)=>{"use strict";var AK=require("fs-extra"),Rl=ye(),{getTransactionAuditStorePath:OK}=we(),Ah=xe(),yie=gh();Pb.exports=NK;async function NK(e){let t;try{let r=OK(e.schema,e.table);await AK.mkdirp(r),t=await Rl.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{Rl.createDBI(t,Ah.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Rl.createDBI(t,Ah.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Rl.createDBI(t,Ah.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(NK,"createTransactionsAuditEnvironment")});var qb=m((Cie,Fb)=>{"use strict";var Oh=A(),Bb=ye(),bK=Hi(),{getSystemSchemaPath:yK,getSchemaPath:IK}=we(),wK=Vn(),CK=ku(),Nh=xu(),UK=x(),DK=vb(),yh=wK.hdb_table,Hb=[];for(let e=0;e<yh.attributes.length;e++)Hb.push(yh.attributes[e].attribute);Fb.exports=LK;async function LK(e,t){let r=IK(t.schema,t.table),s=new Nh(t.schema,t.table,Oh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Nh(t.schema,t.table,Oh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Nh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Bb.createEnvironment(r,t.table),e!==void 0){let o=await Bb.openEnvironment(yK(),Oh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await bK.insertRecords(o,yh.hash_attribute,Hb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await bh(s),await bh(n),await bh(i)}await DK(t)}catch(o){throw o}}a(LK,"lmdbCreateTable");async function bh(e){try{await CK(e)}catch(t){UK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(bh,"createAttribute")});var xb=m((Die,Gb)=>{"use strict";var MK=ha(),PK=Ra(),vK=_l(),Pa=A(),BK=Hi().updateRecords,HK=ye(),{getSchemaPath:FK}=we(),qK=Ia(),GK=x();Gb.exports=xK;async function xK(e){try{let{schema_table:t,attributes:r}=MK(e);PK(e,r,t.hash_attribute),e.schema!==Pa.SYSTEM_SCHEMA_NAME&&(r.includes(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vK(e.hdb_auth_header,t,r),n=FK(e.schema,e.table),i=await HK.openEnvironment(n,e.table),o=await BK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qK(e,o)}catch(c){GK.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(xK,"lmdbUpdateRecords")});var Vb=m((Mie,kb)=>{"use strict";var kK=A().OPERATIONS_ENUM,Ih=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=kK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kb.exports=Ih});var Yb=m((Bie,$b)=>{"use strict";var vie=Vb(),VK=ha(),$K=Ra(),YK=_l(),va=A(),KK=Hi().upsertRecords,WK=ye(),{getSchemaPath:QK}=we(),zK=Ia(),JK=x(),{handleHDBError:XK,hdb_errors:ZK}=W();$b.exports=jK;async function jK(e){let t;try{t=VK(e)}catch(u){throw XK(u,u.message,ZK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;$K(e,s,r.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(s.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await YK(e.hdb_auth_header,r,s),i=QK(e.schema,e.table),o=await WK.openEnvironment(i,e.table),c=await KK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await zK(e,c)}catch(u){JK.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(jK,"lmdbUpsertRecords")});var Wb=m((Fie,Kb)=>{"use strict";var wh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Kb.exports=wh});var zb=m((Gie,Qb)=>{"use strict";var Ch=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};Qb.exports=Ch});var Zb=m((Vie,Xb)=>{"use strict";var Uh=ye(),{getTransactionAuditStorePath:e1}=we(),kie=Wb(),Ba=xe(),t1=V(),Jb=zb(),r1=require("util").promisify,s1=r1(setTimeout),n1=1e4,i1=100;Xb.exports=o1;async function o1(e){let t=e1(e.schema,e.table),r=await Uh.openEnvironment(t,e.table,!0),s=Uh.listDBIs(r);Uh.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Jb;do n=await a1(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 s1(i1);while(n.transactions_deleted>0);return i}a(o1,"deleteAuditLogsBefore");async function a1(e,t){let r=new Jb;try{let s=e.dbis[Ba.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[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];t1.isEmpty(c)||(n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>n1)break}return await n,r}catch(s){throw s}}a(a1,"deleteTransactions")});var ey=m((Yie,jb)=>{"use strict";var Dh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};jb.exports=Dh});var ry=m((Qie,ty)=>{"use strict";var c1=os(),u1=Ma(),Wie=ey(),as=A(),l1=V(),Lh=ye(),_1=Vn(),d1=La(),E1=Ca(),{getSchemaPath:f1}=we();ty.exports=h1;async function h1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=_1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await S1(e),n=f1(e.schema,e.table),i=await Lh.openEnvironment(n,e.table);return t===!0&&await m1(e,i,r.hash_attribute),Lh.dropDBI(i,e.attribute),s}a(h1,"lmdbDropAttribute");async function m1(e,t,r){let s=Lh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(m1,"removeAttributeFromAllObjects");async function S1(e){let t=new c1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await d1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(l1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new u1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return E1(i)}a(S1,"dropAttributeFromSystem")});var cy=m((Xie,ay)=>{"use strict";var Mh=ye(),Zi=xe(),Jie=vt(),Ph=A(),sy=V(),{getTransactionAuditStorePath:p1}=we(),T1=zi(),gl=Ki(),R1=x();ay.exports=g1;async function g1(e){let t=p1(e.schema,e.table),r=await Mh.openEnvironment(t,e.table,!0),s=Mh.listDBIs(r);Mh.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ny(r,e.search_values);case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,O1(r,e.search_values,n);case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return A1(r,e.search_values);default:return ny(r)}}a(g1,"readAuditLog");function ny(e,t=[0,Date.now()]){sy.isEmpty(t[0])&&(t[0]=0),sy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zi.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 gl,n))}a(ny,"searchTransactionsByTimestamp");function A1(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[Zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,oy(e,i))}return Object.fromEntries(r)}a(A1,"searchTransactionsByUsername");function O1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=T1.equals(e,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);iy(u,"records",r,_,o),iy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(O1,"searchTransactionsByHashValues");function iy(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],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new gl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new gl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(iy,"loopRecords");function oy(e,t){let r=[];try{let s=e.dbis[Zi.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 gl,i);r.push(o)}}catch(i){R1.warn(i)}return r}catch(s){throw s}}a(oy,"batchSearchTransactions")});var ly=m((toe,uy)=>{"use strict";var{getSchemaPath:jie}=we(),eoe=ye(),{database:N1}=(de(),re(Ne));uy.exports={writeTransaction:b1};async function b1(e,t,r){return N1({database:e,table:t}).transaction(r)}a(b1,"writeTransaction")});var fy=m((soe,Ey)=>{"use strict";var{getSchemaPath:_y}=we(),dy=ye();Ey.exports={flush:y1,resetReadTxn:I1};async function y1(e,t){return(await dy.openEnvironment(_y(e,t),t.toString())).flushed}a(y1,"flush");async function I1(e,t){try{(await dy.openEnvironment(_y(e,t),t.toString())).resetReadTxn()}catch{}}a(I1,"resetReadTxn")});var py=m((ioe,Sy)=>{"use strict";var{Readable:w1}=require("stream"),{getDatabases:C1}=(de(),re(Ne)),{readSync:U1,openSync:D1,createReadStream:hy}=require("fs"),{open:L1}=require("lmdb"),my=Du(),M1=Mu(),{INTERNAL_DBIS_NAME:P1}=xe();Sy.exports=B1;var vh=32768,v1=100;async function B1(e){let t=e.database||e.schema||"data",r=C1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=L1({noSync:!0,maxDbs:M1.MAX_DBS}),E,f=d.openDB(P1,new my(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>R.startsWith?.(k+"/"))){f.put(R,O);let[,k]=R.split("/"),$=!k,U=new my(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:F,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,F),T++%v1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=hy(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=D1(o.path);return o.transaction(()=>{let l=Buffer.alloc(vh);U1(c,l,0,vh);let _=o.useReadTransaction(),d=hy(null,{fd:c,start:vh}),E=new w1.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(B1,"getBackup")});var gy=m((aoe,Ry)=>{"use strict";var H1=x(),{handleHDBError:F1}=W(),q1=Fg(),G1=ku(),x1=nh(),k1=LN(),V1=Ca(),$1=_h(),Y1=nb(),K1=Eb(),W1=La(),Q1=gb(),z1=Lb(),J1=qb(),X1=xb(),Z1=Yb(),j1=Zb(),eW=Th(),tW=ry(),rW=cy(),sW=ly(),Ty=fy(),nW=py(),Bh=class extends q1{static{a(this,"LMDBBridge")}async searchByConditions(t){return Q1(t)}async getDataByHash(t){return await $1(t)}async searchByHash(t){return await Y1(t)}async getDataByValue(t,r){return await K1(t,r)}async searchByValue(t){return await W1(t)}async createSchema(t){return await k1(t)}async dropSchema(t){return await z1(t)}async createTable(t,r){return await J1(t,r)}async dropTable(t){return await eW(t)}async createAttribute(t){return await G1(t)}async createRecords(t){return await x1(t)}async updateRecords(t){return await X1(t)}async upsertRecords(t){try{return await Z1(t)}catch(r){throw F1(r,null,null,H1.ERR,r)}}async deleteRecords(t){return await V1(t)}async dropAttribute(t){return await tW(t)}async deleteAuditLogsBefore(t){return await j1(t)}async readAuditLog(t){return await rW(t)}writeTransaction(t,r,s){return sW.writeTransaction(t,r,s)}flush(t,r){return Ty.flush(t,r)}resetReadTxn(t,r){return Ty.resetReadTxn(t,r)}getBackup(t){return nW(t)}};Ry.exports=Bh});var Uy={};je(Uy,{ResourceBridge:()=>qh});function Gh({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Oy(e,t){let r=cs(e),s=Gh(e,r);if(!r)throw new qr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ye(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Ou(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||oW,r=Gr()[t];if(!r)throw(0,qr.handleHDBError)(new Error,iW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Ny(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}}async function*by(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,timestamp:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var yy,Al,qr,Iy,wy,xr,Hh,Fh,Cy,iW,oW,aW,cW,Ay,qh,Dy=Se(()=>{"use strict";yy=C(gy()),Al=C(Ji()),qr=C(W());de();Iy=C(ha()),wy=C(Ra()),xr=C(A()),Hh=C(qs()),Fh=C(Fr()),Cy=C(V());xn();Nu();({HDB_ERROR_MSGS:iW}=qr.hdb_errors),oW="data",aW=1e4,cW=10,qh=class extends yy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ay=this}async searchByConditions(t){let r=(0,Al.default)(t,"conditions");if(r)throw(0,qr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new qr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Gh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new qr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}rt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){cs(t).dropTable()}createSchema(t){return Ha({database:t.schema,table:null}),Hh.signalSchemaChange(new Fh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xh(t.schema),Hh.signalSchemaChange(new Fh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Ay.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Iy.default)(t);(0,wy.default)(t,s,r.primaryKey);let n,i=Gr()[t.schema][t.table],o={user:t.hdb_user};return Ye(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Ou(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=Gr()[t.schema][t.table],s={user:t.hdb_user};return Ye(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return Ny(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Gr()[t.schema][t.table];if(!r.createdTimeProperty)throw new qr.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:xr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,Cy.async_set_timeout)(cW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%aW===0&&await l();return u.length>0&&await l(),n?Ny(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Al.default)(t,"hashes");if(r)throw r;return Oy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Oy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&xr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Al.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new qr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===xr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Gh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of by(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return by(r,t.search_values?.[0],t.search_values?.[1])}}};a(Gh,"getSelect");a(Oy,"getRecords");a(cs,"getTable");a(Ny,"createDeleteResponse");a(by,"groupRecordsInHistory")});var Br=m((Eoe,Ly)=>{"use strict";var{ResourceBridge:uW}=(Dy(),re(Uy)),lW=Q();lW.initSync();var Ol;function _W(){return Ol||(Ol=new uW,Ol)}a(_W,"getBridge");Ly.exports=_W()});var By=m((hoe,vy)=>{"use strict";var My=require("lodash"),Fa=require("mathjs"),dW=require("jsonata"),Py=V();vy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?My.uniqWith(e,My.isEqual):e,searchJSON:EW,mad:qa.bind(null,Fa.mad),mean:qa.bind(null,Fa.mean),mode:qa.bind(null,Fa.mode),prod:qa.bind(null,Fa.prod),median:qa.bind(null,Fa.median)};function qa(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(qa,"aggregateFunction");function EW(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(Py.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Py.isEmpty(this.__ala__.res[r])){let s=dW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(EW,"searchJSON")});var Fy=m((Soe,Hy)=>{"use strict";var We=require("moment"),kh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;Hy.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format(kh),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format(kh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(kh)}});var ky=m((poe,xy)=>{"use strict";var fW=require("@turf/area"),hW=require("@turf/length"),mW=require("@turf/circle"),SW=require("@turf/difference"),pW=require("@turf/distance"),TW=require("@turf/boolean-contains"),RW=require("@turf/boolean-equal"),gW=require("@turf/boolean-disjoint"),AW=require("@turf/helpers"),qy=A(),le=V();xy.exports={geoArea:OW,geoLength:NW,geoCircle:bW,geoDifference:yW,geoDistance:Gy,geoNear:IW,geoContains:wW,geoEqual:CW,geoCrosses:UW,geoConvert:DW};var Vh="geo1 is required",$h="geo2 is required";function OW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),fW.default(e)}a(OW,"geoArea");function NW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),hW.default(e,{units:t||"kilometers"})}a(NW,"geoLength");function bW(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),mW.default(e,t,{units:r||"kilometers"})}a(bW,"geoCircle");function yW(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),SW(e,t)}a(yW,"geoDifference");function Gy(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),pW.default(e,t,{units:r||"kilometers"})}a(Gy,"geoDistance");function IW(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Gy(e,t,s)<=r}a(IW,"geoNear");function wW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),TW.default(e,t)}a(wW,"geoContains");function CW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),RW.default(e,t)}a(CW,"geoEqual");function UW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!gW.default(e,t)}a(UW,"geoCrosses");function DW(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(qy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qy.GEO_CONVERSION_ENUM).join(",")}`);return AW[t](e,r)}a(DW,"geoConvert")});var Nl=m((Roe,Vy)=>{var si=By(),ur=Fy(),us=ky();Vy.exports=e=>{e.aggr.mad=e.aggr.MAD=si.mad,e.aggr.mean=e.aggr.MEAN=si.mean,e.aggr.mode=e.aggr.MODE=si.mode,e.aggr.prod=e.aggr.PROD=si.prod,e.aggr.median=e.aggr.MEDIAN=si.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=si.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=si.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var Wy=m((goe,Ky)=>{"use strict";var Ga=require("lodash"),pt=require("alasql");pt.options.cache=!1;var LW=Nl(),$y=require("clone"),bl=require("recursive-iterator"),se=x(),ne=V(),ji=Br(),MW=A(),{hdb_errors:PW}=W(),{getDatabases:Yy}=(de(),re(Ne)),vW="IS NULL",kr="There was a problem performing this search. Please check the logs and try again.";LW(pt);var Yh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(kr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(kr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(kr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(kr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(kr)}}_getColumns(){let t=new bl(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($y(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ga.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=Yy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new bl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new bl(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(!ne.isEmpty(MW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.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(ne.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"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&Ga.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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($y(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(ne.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(vW)>-1&&this.tables.forEach(n=>{let i={columnid:Yy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ga.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]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ji.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(kr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await ji.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(kr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await ji.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(kr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ji.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(kr)}}}_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 pt.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 pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.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 pt.yy.FuncValue:new pt.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=Ga.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new bl(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=Ga.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(kr)}}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 _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ji.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.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,u=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===u}).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();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(PW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.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 u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});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 ji.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(kr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ky.exports=Yh});var gr=m((Ooe,Qy)=>{"use strict";var BW=Bg();Qy.exports={searchByConditions:FW,searchByHash:qW,searchByValue:GW,search:xW};var Kh=Br(),{transformReq:Wh}=V(),HW=Wy();async function FW(e){return Wh(e),Kh.searchByConditions(e)}a(FW,"searchByConditions");async function qW(e){Wh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Kh.searchByHash(e))r&&t.push(r);return t}a(qW,"searchByHash");async function GW(e){Wh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Kh.searchByValue(e))t.push(r);return t}a(GW,"searchByValue");function xW(e,t){try{let r=new BW(e);r.validate(),new HW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(xW,"search")});var yl=m((boe,zy)=>{"use strict";var kW=Br();zy.exports={writeTransaction:VW};function VW(e,t,r){return kW.writeTransaction(e,t,r)}a(VW,"writeTransaction")});var jy=m((woe,Zy)=>{"use strict";var $W=gr(),YW=_n(),Jy=x(),KW=Ar(),Ioe=yl(),WW=require("clone"),zh=require("alasql"),QW=Nl(),Xy=require("util"),zW=Xy.promisify(YW.getTableSchema),JW=Xy.promisify($W.search),XW=A(),Qh=V();QW(zh);Zy.exports={update:jW};var ZW="There was a problem performing this update. Please check the logs and try again.";async function jW({statement:e,hdb_user:t}){let r=await zW(e.table.databaseid,e.table.tableid),s=eQ(e.columns);Qh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=WW(n),c=Qh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=zh.parse(u).statements[0],_=await JW(l),d=tQ(s,_);return rQ(o,d,t)}a(jW,"update");function eQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zh.compile(`SELECT ${r.expression.toString()} AS [${XW.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Jy.error(t),new Error(ZW)}}a(eQ,"createUpdateRecord");function tQ(e,t){return Qh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(tQ,"buildUpdateRecords");async function rQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await KW.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Jy.error(`Error delete new_attributes from update response: ${i}`)}return n}a(rQ,"updateRecords")});var tI=m((Loe,eI)=>{var sQ=require("alasql"),nQ=gr(),iQ=x(),oQ=Br(),Xh=require("util"),Jh=V(),aQ=A(),cQ=_n(),Uoe=yl(),Doe=Ar(),uQ="record",lQ="successfully deleted",_Q=Xh.callbackify(hQ),dQ=Xh.promisify(nQ.search),EQ=Xh.promisify(cQ.getTableSchema);eI.exports={convertDelete:_Q};function fQ(e){return`${e.deleted_hashes.length} ${uQ}${e.deleted_hashes.length===1?"":"s"} ${lQ}`}a(fQ,"generateReturnMessage");async function hQ({statement:e,hdb_user:t}){let r=await EQ(e.table.databaseid,e.table.tableid);Jh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Jh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=sQ.parse(o).statements[0],u={operation:aQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await dQ(c);let l=await oQ.deleteRecords(u);return Jh.isEmptyOrZeroLength(l.message)&&(l.message=fQ(l)),delete l.txn_time,l}catch(l){throw iQ.error(l),l.hdb_code?l.message:l}}a(hQ,"convertDelete")});var oI=m((Poe,iI)=>{"use strict";var mQ=Yn(),{hdb_errors:rI}=W(),{getDatabases:sI}=(de(),re(Ne));iI.exports={checkSchemaExists:nI,checkSchemaTableExists:SQ,schema_describe:mQ};async function nI(e){if(!sI()[e])return rI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nI,"checkSchemaExists");async function SQ(e,t){let r=await nI(e);if(r)return r;if(!sI()[e][t])return rI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(SQ,"checkSchemaTableExists")});var Ul=m((Hoe,lI)=>{"use strict";var eo=Gu(),to=oI(),pQ=x(),TQ=require("uuid").v4,Boe=require("clone"),wl=qs(),ro=A(),RQ=require("util"),Tn=Br(),{handleHDBError:Gt,hdb_errors:gQ}=W(),{HDB_ERROR_MSGS:Il,HTTP_STATUS_CODES:xt}=gQ,{SchemaEventMsg:Cl}=Fr(),aI=nt(),{getDatabases:AQ}=(de(),re(Ne)),{transformReq:so}=V();lI.exports={createSchema:OQ,createSchemaStructure:cI,createTable:NQ,createTableStructure:uI,createAttribute:CQ,dropSchema:bQ,dropTable:yQ,dropAttribute:IQ,getBackup:UQ};async function OQ(e){let t=await cI(e);return wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),t}a(OQ,"createSchema");async function cI(e){let t=eo.schema_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);if(so(e),!await to.checkSchemaExists(e.schema))throw Gt(new Error,Il.SCHEMA_EXISTS_ERR(e.schema),xt.BAD_REQUEST,ro.LOG_LEVELS.ERROR,Il.SCHEMA_EXISTS_ERR(e.schema),!0);return await Tn.createSchema(e),`database '${e.schema}' successfully created`}a(cI,"createSchemaStructure");async function NQ(e){return so(e),await uI(e)}a(NQ,"createTable");async function uI(e){let t=eo.create_table_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);if(eo.validateTableResidence(e.residence),!await to.checkSchemaTableExists(e.schema,e.table))throw Gt(new Error,Il.TABLE_EXISTS_ERR(e.schema,e.table),xt.BAD_REQUEST,ro.LOG_LEVELS.ERROR,Il.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:TQ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Tn.createTable(s,e);else throw Gt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",xt.BAD_REQUEST);else await Tn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(uI,"createTableStructure");async function bQ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=eo.schema_object(e),s=t??r;if(s)throw Gt(s,s.message,xt.BAD_REQUEST,void 0,void 0,!0);so(e);let n=await to.checkSchemaExists(e.schema);if(n)throw Gt(new Error,n,xt.NOT_FOUND,ro.LOG_LEVELS.ERROR,n,!0);let i=await to.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Tn.dropSchema(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),await aI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(bQ,"dropSchema");async function yQ(e){let t=eo.table_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);so(e);let r=await to.checkSchemaTableExists(e.schema,e.table);if(r)throw Gt(new Error,r,xt.NOT_FOUND,ro.LOG_LEVELS.ERROR,r,!0);return await Tn.dropTable(e),await aI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(yQ,"dropTable");async function IQ(e){let t=eo.attribute_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);so(e);let r=await to.checkSchemaTableExists(e.schema,e.table);if(r)throw Gt(new Error,r,xt.NOT_FOUND,ro.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Gt(new Error,"You cannot drop a hash attribute",xt.BAD_REQUEST,void 0,void 0,!0);if(ro.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Gt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,xt.BAD_REQUEST,void 0,void 0,!0);try{return await Tn.dropAttribute(e),wQ(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw pQ.error(`Got an error deleting attribute ${RQ.inspect(e)}.`),s}}a(IQ,"dropAttribute");function wQ(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(wQ,"dropAttributeFromGlobal");async function CQ(e){so(e);let t=AQ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Gt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,xt.BAD_REQUEST,void 0,void 0,!0);return await Tn.createAttribute(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(CQ,"createAttribute");function UQ(e){return Tn.getBackup(e)}a(UQ,"getBackup")});var dI=m((qoe,_I)=>{"use strict";var{OPERATIONS_ENUM:DQ}=A(),Zh=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=DQ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};_I.exports=Zh});var jh=m((koe,SI)=>{"use strict";var LQ=Br(),xoe=dI(),Dl=V(),Ll=A(),MQ=Q(),{handleHDBError:EI,hdb_errors:PQ}=W(),{HDB_ERROR_MSGS:fI,HTTP_STATUS_CODES:hI}=PQ,vQ=Object.values(Ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mI="To use this operation audit log must be enabled in harperdb-config.yaml";SI.exports=BQ;async function BQ(e){if(Dl.isEmpty(e.schema))throw new Error(fI.SCHEMA_REQUIRED_ERR);if(Dl.isEmpty(e.table))throw new Error(fI.TABLE_REQUIRED_ERR);if(!MQ.get(Ll.CONFIG_PARAMS.LOGGING_AUDITLOG))throw EI(new Error,mI,hI.BAD_REQUEST,Ll.LOG_LEVELS.ERROR,mI,!0);let t=Dl.checkSchemaTableExist(e.schema,e.table);if(t)throw EI(new Error,t,hI.NOT_FOUND,Ll.LOG_LEVELS.ERROR,t,!0);if(!Dl.isEmpty(e.search_type)&&vQ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await LQ.readAuditLog(e)}a(BQ,"readAuditLog")});var TI=m(($oe,pI)=>{"use strict";var{OPERATIONS_ENUM:HQ}=A(),em=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=HQ.GET_BACKUP,this.schema=t,this.table=r}};pI.exports=em});var AI=m((Qoe,gI)=>{"use strict";var FQ=Br(),Koe=TI(),tm=V(),qQ=A(),Woe=Q(),{handleHDBError:GQ,hdb_errors:xQ}=W(),{HDB_ERROR_MSGS:RI,HTTP_STATUS_CODES:kQ}=xQ;gI.exports=VQ;async function VQ(e){if(tm.isEmpty(e.schema))throw new Error(RI.SCHEMA_REQUIRED_ERR);if(tm.isEmpty(e.table))throw new Error(RI.TABLE_REQUIRED_ERR);let t=tm.checkSchemaTableExist(e.schema,e.table);if(t)throw GQ(new Error,t,kQ.NOT_FOUND,qQ.LOG_LEVELS.ERROR,t,!0);return await FQ.getBackup(read_audit_log_object)}a(VQ,"getBackup")});var wI=m((Joe,II)=>{var Rn=require("validate.js"),NI=ve(),no=A(),{handleHDBError:$Q,hdb_errors:YQ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:KQ}=YQ,rm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),WQ={STRUCTURE_USER:"structure_user"},OI=Object.values(no.ROLE_TYPES_ENUM),QQ="attribute_permissions",zQ="attribute_name",{PERMS_CRUD_ENUM:io}=no,JQ=[QQ,...Object.values(io)],bI=[io.READ,io.INSERT,io.UPDATE],XQ=[zQ,...bI];function ZQ(e){let t=rm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yI(e,t)}a(ZQ,"addRoleValidation");function jQ(e){let t=rm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yI(e,t)}a(jQ,"alterRoleValidation");function ez(e){let t=rm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,NI.validateObject(e,t)}a(ez,"dropRoleValidation");var tz=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yI(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)tz.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=NI.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=rz(e);o&&Qe(o,r),OI.forEach(c=>{e.permission[c]&&!Rn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(OI.indexOf(o)<0){if(o===WQ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{JQ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(io).forEach(_=>{Rn.isDefined(l[_])?Rn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),Rn.isDefined(l.attribute_permissions)){if(!Rn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!XQ.includes(T)&&T!==io.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!Rn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}bI.forEach(T=>{Rn.isDefined(f[T])?Rn.isBoolean(f[T])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return sz(r)}a(yI,"customValidate");II.exports={addRoleValidation:ZQ,alterRoleValidation:jQ,dropRoleValidation:ez};function rz(e){let{operation:t,permission:r}=e;if(t===no.OPERATIONS_ENUM.ADD_ROLE||t===no.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 Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?no.ROLE_TYPES_ENUM.SUPER_USER:no.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(rz,"validateNoSUPerms");function sz(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return $Q(new Error,s,KQ.BAD_REQUEST)}else return null}a(sz,"generateRolePermResponse");function Qe(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(Qe,"addPermError")});var cm=m((Zoe,LI)=>{"use strict";var CI=Ar(),UI=gr(),nz=Jn(),nm=wI(),im=qs(),iz=require("uuid").v4,oz=require("util"),Ml=A(),az=V(),om=UI.searchByValue,cz=UI.searchByHash,uz=oz.promisify(nz.delete),lz=os(),_z=Xi(),{hdb_errors:dz,handleHDBError:oo}=W(),{HDB_ERROR_MSGS:DI,HTTP_STATUS_CODES:Pl}=dz,{UserEventMsg:am}=Fr();LI.exports={addRole:Ez,alterRole:fz,dropRole:hz,listRoles:mz};function sm(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(sm,"scrubRoleDetails");async function Ez(e){let t=nm.addRoleValidation(e);if(t)throw t;e=sm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await om(r)||[])}catch(i){throw oo(i)}if(s&&s.length>0)throw oo(new Error,DI.ROLE_ALREADY_EXISTS(e.role),Pl.CONFLICT,void 0,void 0,!0);e.id||(e.id=iz());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await CI.insert(n),im.signalUserChange(new am(process.pid)),e=sm(e),e}a(Ez,"addRole");async function fz(e){let t=nm.alterRoleValidation(e);if(t)throw t;e=sm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await CI.update(r)}catch(n){throw oo(n)}if(s&&s?.message==="updated 0 of 1 records")throw oo(new Error,"Invalid role id",Pl.BAD_REQUEST,void 0,void 0,!0);return await im.signalUserChange(new am(process.pid)),e}a(fz,"alterRole");async function hz(e){let t=nm.dropRoleValidation(e);if(t)throw oo(new Error,t,Pl.BAD_REQUEST,void 0,void 0,!0);let r=new _z(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await cz(r));if(s.length===0)throw oo(new Error,DI.ROLE_NOT_FOUND,Pl.NOT_FOUND,void 0,void 0,!0);let n=new lz(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await om(n)),o=!1;if(az.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].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 uz(c),im.signalUserChange(new am(process.pid)),`${s[0].role} successfully deleted`}a(hz,"dropRole");async function mz(){return om({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(mz,"listRoles")});var BI=m((eae,vI)=>{"use strict";var Sz=Q(),gn=require("joi"),pz=ve(),MI=require("moment"),Tz=require("fs-extra"),um=require("path"),Rz=require("lodash"),xa=A(),{LOG_LEVELS:ni}=A(),gz="YYYY-MM-DD hh:mm:ss",Az=um.resolve(__dirname,"../logs");vI.exports=function(e){return pz.validateBySchema(e,Oz)};var Oz=gn.object({from:gn.custom(PI),until:gn.custom(PI),level:gn.valid(ni.NOTIFY,ni.FATAL,ni.ERROR,ni.WARN,ni.INFO,ni.DEBUG,ni.TRACE),order:gn.valid("asc","desc"),limit:gn.number().min(1),start:gn.number().min(0),log_name:gn.custom(Nz)});function PI(e,t){if(MI(e,MI.ISO_8601).format(gz)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(PI,"validateDatetime");function Nz(e,t){if(Rz.invert(xa.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Sz.get(xa.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?xa.LOG_NAMES.HDB:e,i=n===xa.LOG_NAMES.INSTALL?um.join(Az,xa.LOG_NAMES.INSTALL):um.join(s,n);return Tz.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Nz,"validateReadLogPath")});var _m=m((rae,FI)=>{"use strict";var vl=A(),bz=x(),yz=Q(),Iz=BI(),lm=require("path"),HI=require("fs-extra"),{once:wz}=require("events"),{handleHDBError:Cz,hdb_errors:Uz}=W(),{PACKAGE_ROOT:Dz}=A(),Lz=lm.join(Dz,"logs"),Mz=1e3,Pz=200;FI.exports=vz;async function vz(e){let t=Iz(e);if(t)throw Cz(t,t.message,Uz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yz.get(vl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?vl.LOG_NAMES.HDB:e.log_name,n=s===vl.LOG_NAMES.INSTALL?lm.join(Lz,vl.LOG_NAMES.INSTALL):lm.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?Mz:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(HI.statSync(n).size-(h+5)*Pz,0));let p=HI.createReadStream(n,{start:T});p.on("error",b=>{bz.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,F;for(;(F=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,F.index),U($));let[Oe,Ze,iu]=F,Li=iu.split("] ["),Vo=Li[0],Fn=Li[1];Li.splice(0,2),$={timestamp:Ze,thread:Vo,level:Fn,tags:Li,message:""},z=F.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,F;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),b.level===o&&P>=z&&P<=F&&R<f?R++:b.level===o&&P>=z&&P<=F&&(An(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(An(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),F=new Date(_),b.level===o&&P<=F&&R<f?R++:b.level===o&&P<=F&&(An(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),P>=z&&P<=F&&R<f?R++:P>=z&&P<=F&&(An(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(An(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(An(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),F=new Date(_),P<=F&&R<f?R++:P<=F&&R>=f&&(An(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(An(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await wz(p,"close"),O}a(vz,"readLog");function An(e,t,r){t==="desc"?Bz(e,r):t==="asc"?Hz(e,r):r.push(e)}a(An,"pushLineToResult");function Bz(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(Bz,"insertDescending");function Hz(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(Hz,"insertAscending")});var Hl=m((aae,kI)=>{"use strict";var dm=require("joi"),{string:Bl,boolean:qI,date:Fz}=dm.types(),qz=ve(),{validateSchemaExists:nae,validateTableExists:iae,validateSchemaName:oae}=rs(),Gz=A(),xz=Be(),GI=Q();GI.initSync();var kz=Bl.invalid(GI.get(Gz.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(xz.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(),xI={operation:Bl.valid("add_node","update_node"),node_name:kz,subscriptions:dm.array().items({table:Bl.optional(),schema:Bl.required(),subscribe:qI.required(),publish:qI.required().custom($z),start_time:Fz.iso()}).min(1).required()};function Vz(e){return qz.validateBySchema(e,dm.object(xI))}a(Vz,"addUpdateNodeValidator");function $z(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($z,"checkForFalsy");kI.exports={addUpdateNodeValidator:Vz,validation_schema:xI}});var $I=m((uae,VI)=>{var Yz=ve(),Kz={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VI.exports=function(e){return Yz.validateObject(e,Kz)}});var fm=m((lae,YI)=>{"use strict";var Wz=A().OPERATIONS_ENUM,Em=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=Wz.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};YI.exports=Em});var WI=m((dae,KI)=>{"use strict";var Qz={OPERATION:"operation",REFRESH:"refresh"},hm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},mm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};KI.exports={JWTTokens:hm,TOKEN_TYPE_ENUM:Qz,JWTRSAKeys:mm}});var $a=m((fae,XI)=>{"use strict";var Va=require("jsonwebtoken"),Sm=require("fs-extra"),pm=V(),yr=A(),{handleHDBError:kt,hdb_errors:zz}=W(),{HTTP_STATUS_CODES:Vt,AUTHENTICATION_ERROR_MSGS:$t}=zz,ka=x(),QI=ju(),gm=br(),Jz=Ar().update,Xz=fm(),Zz=qs(),{UserEventMsg:jz}=Fr(),On=Q();On.initSync();var Tm=require("path"),{JWTTokens:eJ,JWTRSAKeys:tJ,TOKEN_TYPE_ENUM:Fl}=WI(),rJ=On.get(yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?On.get(yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",sJ=On.get(yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?On.get(yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ql="RS256",Rm;XI.exports={createTokens:nJ,validateOperationToken:oJ,refreshOperationToken:iJ,validateRefreshToken:JI};async function nJ(e){if(pm.isEmpty(e)||typeof e!="object")throw kt(new Error,$t.INVALID_AUTH_OBJECT,Vt.BAD_REQUEST,void 0,void 0,!0);if(pm.isEmpty(e.username))throw kt(new Error,$t.USERNAME_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);if(pm.isEmpty(e.password))throw kt(new Error,$t.PASSWORD_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await gm.findAndValidateUser(e.username,e.password),!t)throw kt(new Error,$t.INVALID_CREDENTIALS,Vt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ka.error(E),kt(new Error,$t.INVALID_CREDENTIALS,Vt.UNAUTHORIZED,void 0,void 0,!0)}let r=await Gl(),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 zI(i,r.private_key,r.passphrase),c=await Va.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:sJ,algorithm:ql,subject:Fl.REFRESH}),u=QI.hash(c),l=new Xz(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await Jz(l)}catch(E){ka.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw kt(new Error,$t.REFRESH_TOKEN_SAVE_FAILED,Vt.INTERNAL_SERVER_ERROR);return Zz.signalUserChange(new jz(process.pid)),new eJ(o,c)}a(nJ,"createTokens");async function zI(e,t,r){return await Va.sign(e,{key:t,passphrase:r},{expiresIn:rJ,algorithm:ql,subject:Fl.OPERATION})}a(zI,"signOperationToken");async function Gl(){if(Rm===void 0)try{let e=Tm.join(On.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Tm.join(On.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Tm.join(On.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Sm.readFile(e)).toString(),n=(await Sm.readFile(t)).toString(),i=(await Sm.readFile(r)).toString();Rm=new tJ(i,n,s)}catch(e){throw ka.error(e),kt(new Error,$t.NO_ENCRYPTION_KEYS,Vt.INTERNAL_SERVER_ERROR)}return Rm}a(Gl,"getJWTRSAKeys");async function iJ(e){if(!e)throw kt(new Error,$t.INVALID_BODY,Vt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw kt(new Error,$t.REFRESH_TOKEN_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);await JI(e.refresh_token);let t=await Gl(),r=await Va.decode(e.refresh_token);return{operation_token:await zI({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(iJ,"refreshOperationToken");async function oJ(e){try{let t=await Gl(),r=await Va.verify(e,t.public_key,{algorithms:ql,subject:Fl.OPERATION});return await gm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ka.warn(t),t.name&&t.name==="TokenExpiredError"?kt(new Error,$t.TOKEN_EXPIRED,Vt.FORBIDDEN):kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED)}}a(oJ,"validateOperationToken");async function JI(e){let t;try{let r=await Gl(),s=await Va.verify(e,r.public_key,{algorithms:ql,subject:Fl.REFRESH});t=await gm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ka.warn(r),r.name&&r.name==="TokenExpiredError"?kt(new Error,$t.TOKEN_EXPIRED,Vt.FORBIDDEN):kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED)}if(!QI.validate(t.refresh_token,e))throw kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED);return t}a(JI,"validateRefreshToken")});var Am=m((Sae,ew)=>{"use strict";var aJ=$I(),ao=require("passport"),cJ=require("passport-local").Strategy,uJ=require("passport-http").BasicStrategy,lJ=require("util"),_J=br(),jI=lJ.callbackify(_J.findAndValidateUser),mae=rr(),dJ=A(),ZI=$a();ao.use(new cJ(function(e,t,r){jI(e,t,r)}));ao.use(new uJ(function(e,t,r){jI(e,t,r)}));ao.serializeUser(function(e,t){t(null,e)});ao.deserializeUser(function(e,t){t(null,e)});function EJ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(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("Must login")}switch(a(i,"handleResponse"),s){case"Basic":ao.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===dJ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZI.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):ZI.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ao.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(EJ,"authorize");function fJ(e,t){let r=aJ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!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(fJ,"checkPermissions");ew.exports={authorize:EJ,checkPermissions:fJ}});var co=m((Tae,tw)=>{"use strict";var Om=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Nm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};tw.exports={Node:Om,NodeSubscription:Nm}});var sw=m((gae,rw)=>{"use strict";var hJ=A().OPERATIONS_ENUM,bm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=hJ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rw.exports=bm});var Ya=m((Oae,nw)=>{"use strict";var ym=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Im=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};nw.exports={RemotePayloadObject:ym,RemotePayloadSubscription:Im}});var ow=m((bae,iw)=>{"use strict";var wm=class{static{a(this,"TableSizeObject")}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}};iw.exports=wm});var uw=m((Uae,cw)=>{"use strict";var mJ=ow(),Iae=xe(),aw=ye(),SJ=x(),{getSchemaPath:wae,getTransactionAuditStorePath:Cae}=we(),{getDatabases:pJ}=(de(),re(Ne));cw.exports=TJ;async function TJ(e){let t=new mJ;try{let r=pJ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await aw.environmentDataSize(schema_path,e.name),o=await aw.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){SJ.warn(`unable to stat table dbi due to ${r}`)}return t}a(TJ,"lmdbGetTableSize")});var _w=m((Lae,lw)=>{"use strict";var Cm=class{static{a(this,"SystemInformationObject")}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}};lw.exports=Cm});var uo=m((Bae,hw)=>{"use strict";var RJ=require("fs-extra"),gJ=require("path"),Ut=require("systeminformation"),Nn=x(),AJ=nt(),Um=Be(),kl=A(),OJ=uw(),fw=Yn(),{getThreadInfo:dw}=dt(),Gm=Q();Gm.initSync();var NJ=_w(),{openEnvironment:Pae}=ye(),{getSchemaPath:vae}=we(),{database:bJ}=(de(),re(Ne)),xl;hw.exports={getHDBProcessInfo:Pm,getNetworkInfo:Bm,getDiskInfo:vm,getMemoryInfo:Mm,getCPUInfo:Lm,getTimeInfo:Dm,getSystemInformation:Hm,systemInformation:yJ,getTableSize:Fm,getMetrics:qm};function Dm(){return Ut.time()}a(Dm,"getTimeInfo");async function Lm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:F,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return Nn.error(`error in getCPUInfo: ${e}`),{}}}a(Lm,"getCPUInfo");async function Mm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Nn.error(`error in getMemoryInfo: ${e}`),{}}}a(Mm,"getMemoryInfo");async function Pm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await RJ.readFile(gJ.join(Gm.get(kl.CONFIG_PARAMS.ROOTPATH),kl.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===kl.NODE_ERROR_CODES.ENOENT)Nn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Nn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Pm,"getHDBProcessInfo");async function vm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Nn.error(`error in getDiskInfo: ${t}`),e}}a(vm,"getDiskInfo");async function Bm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Nn.error(`error in getNetworkInfo: ${t}`),e}}a(Bm,"getNetworkInfo");async function Hm(){if(xl!==void 0)return xl;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,xl=e,xl}catch(t){return Nn.error(`error in getSystemInformation: ${t}`),e}}a(Hm,"getSystemInformation");async function Fm(){let e=[],t=await fw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await OJ(s));return e}a(Fm,"getTableSize");async function qm(){let e=await fw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=bJ({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Nn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(qm,"getMetrics");async function Ew(){if(Gm.get(kl.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await AJ.getNATSReferences(),r=await t.streams.info(Um.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Um.WORK_QUEUE_CONSUMER_NAMES.stream_name,Um.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(Ew,"getNatsStreamInfo");async function yJ(e){let t=new NJ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Hm(),t.time=Dm(),t.cpu=await Lm(),t.memory=await Mm(),t.disk=await vm(),t.network=await Bm(),t.harperdb_processes=await Pm(),t.table_size=await Fm(),t.metrics=await qm(),t.threads=await dw(),t.replication=await Ew(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Hm();break;case"time":t.time=Dm();break;case"cpu":t.cpu=await Lm();break;case"memory":t.memory=await Mm();break;case"disk":t.disk=await vm();break;case"network":t.network=await Bm();break;case"harperdb_processes":t.harperdb_processes=await Pm();break;case"table_size":t.table_size=await Fm();break;case"database_metrics":case"metrics":t.metrics=await qm();break;case"threads":t.threads=await dw();break;case"replication":t.replication=await Ew();break;default:break}return t}a(yJ,"systemInformation")});var Ka=m((Fae,IJ)=>{IJ.exports={name:"harperdb",version:"4.2.0-alpha.13",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.12","nats-server":"2.9.21"},exports:{".":"./index.js"},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/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../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.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@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.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",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",eventsource:"^2.0.2","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",mqtt:"~4.3.7",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","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var xm=m((xae,mw)=>{"use strict";var qae=require("fs-extra"),Gae=x();mw.exports={version:wJ,printVersion:UJ,nodeVersion:CJ};var bn=Ka();function wJ(){if(bn)return bn.version}a(wJ,"version");function CJ(){if(bn&&bn.engines&&bn.engines["preferred-node"])return bn.engines["preferred-node"]}a(CJ,"nodeVersion");function UJ(){bn&&console.log(`HarperDB Version ${bn.version}`)}a(UJ,"printVersion")});var ks=m((Yae,Rw)=>{"use strict";var DJ=Ar(),km=V(),LJ=require("util"),ii=A(),Sw=Q();Sw.initSync();var MJ=Am(),pw=gr(),{Node:Vae,NodeSubscription:$ae}=co(),PJ=Xi(),vJ=sw(),{RemotePayloadObject:BJ,RemotePayloadSubscription:HJ}=Ya(),{handleHDBError:FJ,hdb_errors:qJ}=W(),{HTTP_STATUS_CODES:GJ,HDB_ERROR_MSGS:xJ}=qJ,kJ=os(),VJ=uo(),$J=xm(),{getDatabases:YJ}=(de(),re(Ne)),KJ=LJ.promisify(MJ.authorize),WJ=pw.searchByHash,QJ=pw.searchByValue;Rw.exports={authHeaderToUser:zJ,isEmpty:JJ,getNodeRecord:XJ,upsertNodeRecord:ZJ,buildNodePayloads:jJ,checkClusteringEnabled:e2,getAllNodeRecords:t2,getSystemInfo:r2,reverseSubscription:Tw};async function zJ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await KJ(t,null),e}a(zJ,"authHeaderToUser");function JJ(e){return e==null}a(JJ,"isEmpty");async function XJ(e){let t=new PJ(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return WJ(t)}a(XJ,"getNodeRecord");async function ZJ(e){let t=new vJ(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return DJ.upsert(t)}a(ZJ,"upsertNodeRecord");function Tw(e){if(km.isEmpty(e.subscribe)||km.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(Tw,"reverseSubscription");function jJ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=km.getTableHashAttribute(u,l),{subscribe:d,publish:E}=Tw(c),f=YJ()[u]?.[l],h=new HJ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new BJ(r,t,n,s)}a(jJ,"buildNodePayloads");function e2(){if(!Sw.get(ii.CONFIG_PARAMS.CLUSTERING_ENABLED))throw FJ(new Error,xJ.CLUSTERING_NOT_ENABLED,GJ.BAD_REQUEST,void 0,void 0,!0)}a(e2,"checkClusteringEnabled");async function t2(){let e=new kJ(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await QJ(e))}a(t2,"getAllNodeRecords");async function r2(){let e=await VJ.getSystemInformation();return{hdb_version:$J.version(),node_version:e.node_version,platform:e.platform}}a(r2,"getSystemInfo")});var Vm=m((Wae,ww)=>{"use strict";var Vl=nt(),gw=V(),Aw=Be(),Ow=A(),$l=x(),Nw=Ul(),s2=gh(),{RemotePayloadObject:n2}=Ya(),{handleHDBError:bw,hdb_errors:i2}=W(),{HTTP_STATUS_CODES:yw}=i2,{NodeSubscription:Iw}=co();ww.exports=o2;async function o2(e,t){let r;try{r=await Vl.request(`${t}.${Aw.REQUEST_SUFFIX}`,new n2(Ow.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),$l.trace("Response from remote describe all request:",r)}catch(o){$l.error(`addNode received error from describe all request to remote node: ${o}`);let c=Vl.requestErrorHandler(o,"add_node",t);throw bw(new Error,c,yw.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Aw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw bw(new Error,o,yw.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===Ow.SYSTEM_SCHEMA_NAME){await Vl.createLocalTableStream(c,u);let h=new Iw(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=gw.doesSchemaExist(c),_=s[c]!==void 0,d=u?gw.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&($l.trace(`addNode creating schema: ${c}`),await Nw.createSchema({operation:"create_schema",schema:c})),!d&&E){$l.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new s2(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await Nw.createTable(h)}await Vl.createLocalTableStream(c,u);let f=new Iw(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(o2,"reviewSubscriptions")});var Wl=m((zae,Dw)=>{"use strict";var{handleHDBError:Yl,hdb_errors:a2}=W(),{HTTP_STATUS_CODES:Kl}=a2,{addUpdateNodeValidator:c2}=Hl(),Wa=x(),Uw=A(),Cw=Be(),u2=V(),$m=nt(),Qa=ks(),l2=Q(),_2=Vm(),{Node:d2,NodeSubscription:E2}=co(),{broadcast:f2}=dt(),h2="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",m2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",S2=l2.get(Uw.CONFIG_PARAMS.CLUSTERING_NODENAME);Dw.exports=p2;async function p2(e,t=!1){Wa.trace("addNode called with:",e),Qa.checkClusteringEnabled();let r=c2(e);if(r)throw Yl(r,r.message,Kl.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Qa.getNodeRecord(s);if(!u2.isEmptyOrZeroLength(d))throw Yl(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Kl.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await _2(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=h2,o;let c=Qa.buildNodePayloads(n,S2,Uw.OPERATIONS_ENUM.ADD_NODE,await Qa.getSystemInfo());Wa.trace("addNode sending remote payload:",c);let u;try{u=await $m.request(`${s}.${Cw.REQUEST_SUFFIX}`,c)}catch(d){Wa.error(`addNode received error from request: ${d}`);let E=$m.requestErrorHandler(d,"add_node",s);throw Yl(new Error,E,Kl.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===Cw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Yl(new Error,d,Kl.INTERNAL_SERVER_ERROR,"error",d)}Wa.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Wa.trace("Add node updating work stream for node:",s,"subscriptions:",f),await $m.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new E2(f.schema,f.table,f.publish,f.subscribe))}let _=new d2(s,l,u.system_info);return await Qa.upsertNodeRecord(_),f2({type:"nats_update"}),i.length>0?o.message=m2:o.message=`Successfully added '${s}' to manifest`,o}a(p2,"addNode")});var Km=m((Xae,Pw)=>{"use strict";var{handleHDBError:Ql,hdb_errors:T2}=W(),{HTTP_STATUS_CODES:zl}=T2,{addUpdateNodeValidator:R2}=Hl(),za=x(),Mw=A(),Lw=Be(),g2=V(),Ym=nt(),Ja=ks(),A2=Q(),{cloneDeep:O2}=require("lodash"),N2=Vm(),{NodeSubscription:b2}=co(),{broadcast:y2}=dt(),I2="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",w2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",C2=A2.get(Mw.CONFIG_PARAMS.CLUSTERING_NODENAME);Pw.exports=U2;async function U2(e){za.trace("updateNode called with:",e),Ja.checkClusteringEnabled();let t=R2(e);if(t)throw Ql(t,t.message,zl.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=O2(await Ja.getNodeRecord(r));if(g2.isEmptyOrZeroLength(s))throw Ql(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,zl.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await N2(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=I2,o;let c=Ja.buildNodePayloads(n,C2,Mw.OPERATIONS_ENUM.UPDATE_NODE,await Ja.getSystemInfo());za.trace("updateNode sending remote payload:",c);let u;try{u=await Ym.request(`${r}.${Lw.REQUEST_SUFFIX}`,c)}catch(l){za.error(`updateNode received error from request: ${l}`);let _=Ym.requestErrorHandler(l,"update_node",r);throw Ql(new Error,_,zl.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===Lw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw Ql(new Error,l,zl.INTERNAL_SERVER_ERROR,"error",l)}za.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];za.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await Ym.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await D2(s[0],n,u.system_info),i.length>0?o.message=w2:o.message=`Successfully updated '${r}'`,o}a(U2,"updateNode");async function D2(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new b2(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Ja.upsertNodeRecord(s),y2({type:"nats_update"})}a(D2,"updateNodeTable")});var qw=m((jae,Fw)=>{"use strict";var Hw=require("joi"),{string:vw}=Hw.types(),L2=ve(),Bw=A(),M2=Q(),P2=Be();Fw.exports=v2;function v2(e){let t=vw.invalid(M2.get(Bw.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(P2.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=Hw.object({operation:vw.valid(Bw.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return L2.validateBySchema(e,r)}a(v2,"removeNodeValidator")});var Xl=m((tce,Yw)=>{"use strict";var{handleHDBError:Gw,hdb_errors:B2}=W(),{HTTP_STATUS_CODES:xw}=B2,H2=qw(),Xa=x(),kw=ks(),F2=V(),Jl=A(),Vw=Be(),$w=nt(),q2=Q(),{RemotePayloadObject:G2}=Ya(),{NodeSubscription:x2}=co(),k2=Ma(),V2=Jn(),{broadcast:$2}=dt(),Y2=q2.get(Jl.CONFIG_PARAMS.CLUSTERING_NODENAME);Yw.exports=K2;async function K2(e){Xa.trace("removeNode called with:",e),kw.checkClusteringEnabled();let t=H2(e);if(t)throw Gw(t,t.message,xw.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await kw.getNodeRecord(r);if(F2.isEmptyOrZeroLength(s))throw Gw(new Error,`Node '${r}' was not found.`,xw.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new G2(Jl.OPERATIONS_ENUM.REMOVE_NODE,Y2,[]),i,o=!1;try{i=await $w.request(`${r}.${Vw.REQUEST_SUFFIX}`,n),Xa.trace("Remove node reply from remote node:",r,i)}catch(u){Xa.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Xa.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new x2(_.schema,_.table,!1,!1);await $w.updateWorkStream(d,r)}let c=new k2(Jl.SYSTEM_SCHEMA_NAME,Jl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await V2.deleteRecord(c),$2({type:"nats_update"}),i?.status===Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Xa.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(K2,"removeNode")});var Qw=m((sce,Ww)=>{"use strict";var Kw=require("joi"),{string:W2,array:Q2}=Kw.types(),z2=ve(),J2=Hl();Ww.exports=X2;function X2(e){let t=Kw.object({operation:W2.valid("configure_cluster").required(),connections:Q2.items(J2.validation_schema).required()});return z2.validateBySchema(e,t)}a(X2,"configureClusterValidator")});var Wm=m((ice,jw)=>{"use strict";var Z2=A(),Zl=x(),j2=V(),e3=Xl(),t3=Wl(),zw=ks(),r3=Qw(),{handleHDBError:Jw,hdb_errors:s3}=W(),{HTTP_STATUS_CODES:Xw}=s3,n3="Configure cluster complete.",i3="Failed to configure the cluster. Check the logs for more details.",o3="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";jw.exports=a3;async function a3(e){Zl.trace("configure cluster called with:",e),zw.checkClusteringEnabled();let t=r3(e);if(t)throw Jw(t,t.message,Xw.BAD_REQUEST,void 0,void 0,!0);let r=await zw.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(Zw(e3,{operation:Z2.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);Zl.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(Zw(t3,f,f.node_name))}let c=await Promise.allSettled(i);Zl.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(Zl.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(j2.isEmptyOrZeroLength(u))return{message:n3,connections:l};if(_)return{message:o3,failed_nodes:u,connections:l};throw Jw(new Error,i3,Xw.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(a3,"configureCluster");async function Zw(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(Zw,"functionWrapper")});var tC=m((ace,eC)=>{"use strict";var jl=require("joi"),c3=ve(),{validateSchemaExists:u3,validateTableExists:l3,validateSchemaName:_3}=rs(),d3=jl.object({operation:jl.string().valid("purge_stream"),schema:jl.string().custom(u3).custom(_3).required(),table:jl.string().custom(l3).required()});function E3(e){return c3.validateBySchema(e,d3)}a(E3,"purgeStreamValidator");eC.exports=E3});var Qm=m((uce,rC)=>{"use strict";var{handleHDBError:f3,hdb_errors:h3}=W(),{HTTP_STATUS_CODES:m3}=h3,S3=tC(),p3=nt(),T3=ks();rC.exports=R3;async function R3(e){let t=S3(e);if(t)throw f3(t,t.message,m3.BAD_REQUEST,void 0,void 0,!0);T3.checkClusteringEnabled();let{schema:r,table:s}=e;return await p3.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(R3,"purgeStream")});var Xm=m((_ce,cC)=>{"use strict";var Jm=ks(),g3=nt(),iC=Q(),e_=A(),oi=Be(),A3=V(),zm=x(),{RemotePayloadObject:O3}=Ya(),{ErrorCode:sC}=require("nats"),nC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED),oC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_NODENAME);cC.exports={clusterStatus:N3,buildNodeStatus:aC};async function N3(){let e={node_name:oC,is_enabled:nC,connections:[]};if(!nC)return e;let t=await Jm.getAllNodeRecords();if(A3.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(aC(t[s],e.connections));return await Promise.allSettled(r),e}a(N3,"clusterStatus");async function aC(e,t){let r=e.name,s=new O3(e_.OPERATIONS_ENUM.CLUSTER_STATUS,oC,void 0,await Jm.getSystemInfo()),n,i,o=oi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await g3.request(oi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===oi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=oi.CLUSTER_STATUS_STATUSES.CLOSED,zm.error(`Error getting node status from ${r} `,n))}catch(u){zm.warn(`Error getting node status from ${r}`,u),u.code===sC.NoResponders?o=oi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===sC.Timeout?o=oi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=oi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new b3(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==e_.PRE_4_0_0_VERSION&&await Jm.upsertNodeRecord(u)}catch(u){zm.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(aC,"buildNodeStatus");function b3(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(b3,"NodeStatusObject")});var jm=m((Ece,uC)=>{"use strict";var{handleHDBError:y3,hdb_errors:I3}=W(),{HTTP_STATUS_CODES:w3}=I3,C3=nt(),U3=ks(),Zm=V(),t_=require("joi"),D3=ve(),L3=2e3,M3=t_.object({timeout:t_.number().min(1),connected_nodes:t_.boolean(),routes:t_.boolean()});uC.exports=P3;async function P3(e){U3.checkClusteringEnabled();let t=D3.validateBySchema(e,M3);if(t)throw y3(t,t.message,w3.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||Zm.autoCastBoolean(s),o=n===void 0||Zm.autoCastBoolean(n),c={nodes:[]},u=await C3.getServerList(r??L3),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:Zm.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(P3,"clusterNetwork")});var EC=m((hce,dC)=>{"use strict";var eS=require("joi"),lC=ve(),{route_constraints:_C}=Ff();dC.exports={setRoutesValidator:v3,deleteRoutesValidator:B3};function v3(e){let t=eS.object({server:eS.valid("hub","leaf").required(),routes:_C.required()});return lC.validateBySchema(e,t)}a(v3,"setRoutesValidator");function B3(e){let t=eS.object({routes:_C.required()});return lC.validateBySchema(e,t)}a(B3,"deleteRoutesValidator")});var rS=m((Sce,SC)=>{"use strict";var ai=Nr(),tS=V(),r_=A(),fC=EC(),{handleHDBError:hC,hdb_errors:H3}=W(),{HTTP_STATUS_CODES:mC}=H3,F3="cluster routes successfully set",q3="cluster routes successfully deleted";SC.exports={setRoutes:G3,getRoutes:x3,deleteRoutes:k3};function G3(e){let t=fC.setRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=ai.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,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=tS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:F3,set:o,skipped:i}}a(G3,"setRoutes");function x3(){let e=ai.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(x3,"getRoutes");function k3(e){let t=fC.deleteRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=ai.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=tS.isEmptyOrZeroLength(s)?null:s,ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=tS.isEmptyOrZeroLength(n)?null:n,ai.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:q3,deleted:i,skipped:o}}a(k3,"deleteRoutes")});var TC=m((Tce,pC)=>{"use strict";var Za=require("alasql"),ci=require("recursive-iterator"),Vr=x(),V3=V(),ja=A(),sS=class{static{a(this,"sql_statement_bucket")}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,Y3(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=>ja.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=>!ja.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][ja.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=$3(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!ja.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Za.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function $3(e){return e.filter(t=>t[ja.PERMS_CRUD_ENUM.READ])}a($3,"filterReadRestrictedAttrs");function Y3(e,t,r,s,n){K3(e,t,r,s,n)}a(Y3,"interpretAST");function ec(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(ec,"addSchemaTableToMap");function K3(e,t,r,s,n){if(!e){Vr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Za.yy.Insert?J3(e,t,r):e instanceof Za.yy.Select?W3(e,t,r,s,n):e instanceof Za.yy.Update?Q3(e,t,r):e instanceof Za.yy.Delete?z3(e,t,r):Vr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(K3,"getRecordAttributesAST");function W3(e,t,r,s,n){if(!e){Vr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(V3.isEmptyOrZeroLength(i)){Vr.error("No schema specified");return}e.from.forEach(c=>{ec(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ec(c.table,t,r,s,n)});let o=new ci(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.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{Vr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new ci(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Vr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ci(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Vr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new ci(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Vr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(W3,"getSelectAttributes");function Q3(e,t,r){if(!e){Vr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ci(e.columns),n=e.table.databaseid;ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nS(e.table.tableid,n,i.columnid,t,r)}a(Q3,"getUpdateAttributes");function z3(e,t,r){if(!e){Vr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ci(e.where),n=e.table.databaseid;ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nS(e.table.tableid,n,i.columnid,t,r)}a(z3,"getDeleteAttributes");function J3(e,t,r){if(!e){Vr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ci(e.columns),n=e.into.databaseid;ec(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&nS(e.into.tableid,n,i.columnid,t,r)}a(J3,"getInsertAttributes");function nS(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(nS,"pushAttribute");pC.exports=sS});var aS=m((gce,OC)=>{var s_=Oa(),RC=require("chalk"),lr=x(),gC=require("prompt"),{promisify:X3}=require("util"),iS=A(),Z3=require("fs-extra"),j3=require("path"),eX=V(),tX=xm(),AC=Q();AC.initSync();var rX=require("moment"),sX=X3(gC.get),nX=j3.join(AC.getHdbBasePath(),iS.LICENSE_KEY_DIR_NAME,iS.LICENSE_FILE_NAME,iS.LICENSE_FILE_NAME);OC.exports={getFingerprint:oX,setLicense:iX,parseLicense:oS,register:aX,getRegistrationInfo:uX};async function iX(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await oS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw lr.error(r),lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(iX,"setLicense");async function oX(){let e={};try{e=await s_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(oX,"getFingerprint");async function oS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=s_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await Z3.writeFile(nX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(oS,"parseLicense");async function aX(){let e=await cX();return oS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(aX,"register");async function cX(){let e=await s_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:RC.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:RC.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gC.start()}catch(s){lr.error(s)}let r;try{r=await sX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(cX,"promptForRegistration");async function uX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await s_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(eX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=tX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=rX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(uX,"getRegistrationInfo")});var bC=m((Oce,NC)=>{"use strict";var lX=Be(),cS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+lX.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};NC.exports=cS});var wC=m((bce,IC)=>{"use strict";var yC=Be(),uS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d){this.port=t,d===null&&(d=void 0),this.server_name=r+yC.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+yC.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};IC.exports=uS});var UC=m((Ice,CC)=>{"use strict";var lS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CC.exports=lS});var LC=m((Cce,DC)=>{"use strict";var _X=Be(),_S=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+_X.SERVER_SUFFIX.ADMIN,this.password=r}};DC.exports=_S});var fS=m((Dce,vC)=>{"use strict";var tc=require("path"),a_=require("fs-extra"),dX=bC(),EX=wC(),fX=UC(),hX=LC(),dS=br(),lo=V(),Yt=Nr(),o_=A(),n_=Be(),{CONFIG_PARAMS:ze}=o_,sc=x(),c_=Q(),MC=Ps(),ES=nt(),rc="clustering",mX=1e4,PC=5;vC.exports={generateNatsConfig:SX,removeNatsConfig:pX};async function SX(e=!1,t=void 0){c_.initSync();let r=c_.get(ze.ROOTPATH),s=tc.join(r,rc,n_.PID_FILES.HUB),n=tc.join(r,rc,n_.PID_FILES.LEAF),i=Yt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=tc.join(r,rc,n_.NATS_CONFIG_FILES.HUB_SERVER),c=tc.join(r,rc,n_.NATS_CONFIG_FILES.LEAF_SERVER),u=Yt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Yt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Yt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Yt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Yt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Yt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ES.checkNATSServerInstalled()||u_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await dS.listUsers(),p=Yt.getConfigFromFile(ze.CLUSTERING_USER),R=await dS.getClusterUser();(lo.isEmpty(R)||R.active!==!0)&&u_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await i_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await i_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await i_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await i_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of T.entries())Ze.role.role===o_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new hX(Ze.username,MC.decrypt(Ze.hash))),k.push(new fX(Ze.username,MC.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Yt.getClusteringRoutes();if(!lo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new dX(Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=lo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await a_.writeJson(o,b),sc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new EX(Yt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete F.tls.ca_file,(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await a_.writeJson(c,F),sc.trace(`Leaf server config written to ${c}`))}a(SX,"generateNatsConfig");async function i_(e){let t=c_.get(e);return lo.isEmpty(t)&&u_(`port undefined for '${e}'`),await lo.isPortTaken(t)&&u_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(i_,"isPortAvailable");function u_(e){let t=`Error generating clustering config: ${e}`;sc.error(t),console.error(t),process.exit(1)}a(u_,"generateNatsConfigError");async function pX(e){let{port:t,config_file:r}=ES.getServerConfig(e),{username:s,decrypt_hash:n}=await dS.getClusterUser(),i=0,o=500;for(;i<PC;){try{let l=await ES.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){sc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=PC)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 lo.async_set_timeout(o*i)}let c="0".repeat(mX),u=tc.join(c_.get(ze.ROOTPATH),rc,r);await a_.writeFile(u,c),await a_.remove(u),sc.notify(e,"started.")}a(pX,"removeNatsConfig")});var xC=m((Mce,GC)=>{"use strict";var _r=Q(),TX=Oa(),oe=A(),nc=Be(),Vs=require("path"),{PACKAGE_ROOT:__}=A(),BC=Q(),l_=V(),_o="/dev/null",RX=Vs.join(__,"launchServiceScripts"),HC=Vs.join(__,"utility/scripts"),gX=Vs.join(HC,oe.HDB_RESTART_SCRIPT),FC=Vs.resolve(__,"dependencies",`${process.platform}-${process.arch}`,nc.NATS_BINARY_NAME);function qC(){let t=TX.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return l_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:__}}a(qC,"generateMainServerConfig");var AX=9930;function OX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Vs.join(e,"clustering",nc.NATS_CONFIG_FILES.HUB_SERVER),r=Vs.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=BC.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=nc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==AX?"-"+s:""),script:FC,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=_o,i.error_file=_o),i}a(OX,"generateNatsHubServerConfig");var NX=9940;function bX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Vs.join(e,"clustering",nc.NATS_CONFIG_FILES.LEAF_SERVER),r=Vs.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=BC.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=nc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==NX?"-"+s:""),script:FC,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=_o,i.error_file=_o),i}a(bX,"generateNatsLeafServerConfig");function yX(){_r.initSync();let e=Vs.join(_r.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:RX,autorestart:!1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=_o,t.error_file=_o),t}a(yX,"generateClusteringUpgradeV4ServiceConfig");function IX(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return l_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:HC},script:gX}}a(IX,"generateRestart");function wX(){return{apps:[qC()]}}a(wX,"generateAllServiceConfigs");GC.exports={generateAllServiceConfigs:wX,generateMainServerConfig:qC,generateRestart:IX,generateNatsHubServerConfig:OX,generateNatsLeafServerConfig:bX,generateClusteringUpgradeV4ServiceConfig:yX}});var rU=m((Gce,tU)=>{"use strict";var Te=A(),CX=V(),ic=fS(),oc=nt(),ls=Be(),yn=xC(),d_=Q(),$s=x(),UX=ks(),{startWorker:kC,onMessageFromWorkers:DX}=dt(),LX=uo(),MX=require("util"),$C=require("child_process"),{execFile:PX}=$C,vce=MX.promisify($C.exec),Bce=require("systeminformation"),fe;tU.exports={enterPM2Mode:vX,start:ui,stop:hS,reload:YC,restart:KC,list:mS,describe:QC,connect:Ys,kill:GX,startAllServices:xX,startService:SS,getUniqueServicesList:zC,restartAllServices:kX,isServiceRegistered:JC,reloadStopStart:XC,restartHdb:WC,deleteProcess:FX,startClusteringProcesses:jC,startClusteringThreads:eU,isHdbRestartRunning:qX,isClusteringRunning:$X,stopClustering:VX,reloadClustering:YX};var{PACKAGE_ROOT:Hce}=A(),Fce=A(),{loggerWithTag:qce}=$s,ac=!1;DX(e=>{e.type==="restart"&&d_.initSync(!0)});function vX(){ac=!0}a(vX,"enterPM2Mode");function Ys(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{$s.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ys,"connect");var Kt,BX=10,VC;function ui(e){if(ac)return HX(e);let t=PX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Kt.indexOf(t);i>-1&&Kt.splice(i,1),!VC&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<BX&&ui(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=d_.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ls.LOG_LEVEL_HIERARCHY[i]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?$s.OUTPUTS.STDERR:$s.OUTPUTS.STDOUT;$s.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ls.LOG_LEVELS[d]}if(ls.LOG_LEVEL_HIERARCHY[i]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?$s.OUTPUTS.STDERR:$s.OUTPUTS.STDOUT;$s.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Kt){Kt=[];let n=a(()=>{VC=!0,Kt&&(Kt.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)}Kt.push(t)}a(ui,"start");function HX(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(HX,"startWithPM2");function hS(e){if(!ac){for(let t of Kt||[])t.name===e&&(Kt.splice(Kt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(hS,"stop");function YC(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(YC,"reload");function KC(e){if(!ac)for(let t of Kt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(KC,"restart");function FX(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(FX,"deleteProcess");async function WC(){await ui(yn.generateRestart())}a(WC,"restartHdb");async function qX(){let e=await mS();for(let t in e)if(e[t].name===Te.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(qX,"isHdbRestartRunning");function mS(){return new Promise(async(e,t)=>{try{await Ys()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(mS,"list");function QC(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(QC,"describe");function GX(){if(!ac){for(let e of Kt||[])e.kill();Kt=[];return}return new Promise(async(e,t)=>{try{await Ys()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(GX,"kill");async function xX(){try{await jC(),await eU(),await ui(yn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(xX,"startAllServices");async function SS(e){try{let t;switch(e=e.toLowerCase(),e){case Te.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=yn.generateMainServerConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=yn.generateNatsIngestServiceConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=yn.generateNatsReplyServiceConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=yn.generateNatsHubServerConfig(),await ui(t),await ic.removeNatsConfig(e);return;case Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=yn.generateNatsLeafServerConfig(),await ui(t),await ic.removeNatsConfig(e);return;case Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=yn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ui(t)}catch(t){throw fe.disconnect(),t}}a(SS,"startService");async function zC(){try{let e=await mS(),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 fe.disconnect(),e}}a(zC,"getUniqueServicesList");async function kX(e=[]){try{let t=!1,r=await zC();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Te.PROCESS_DESCRIPTORS.HDB?t=!0:await KC(o))}t&&await XC(Te.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(kX,"restartAllServices");async function JC(e){if(Kt?.find(r=>r.name===e))return!0;let t=await LX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(JC,"isServiceRegistered");async function XC(e){let t=e===Te.PROCESS_DESCRIPTORS.HDB?d_.get(Te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):d_.get(Te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await QC(e),s=CX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await hS(e),await SS(e)):e===Te.PROCESS_DESCRIPTORS.HDB?await WC():await YC(e)}a(XC,"reloadStopStart");var ZC;async function jC(){for(let e in Te.CLUSTERING_PROCESSES){let t=Te.CLUSTERING_PROCESSES[e];await SS(t)}}a(jC,"startClusteringProcesses");async function eU(){ZC=kC(Te.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Te.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await oc.createWorkQueueStream(ls.WORK_QUEUE_CONSUMER_NAMES),await oc.updateIngestStreamConsumer(),await oc.updateLocalStreams();let e=await UX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Te.PRE_4_0_0_VERSION){$s.info("Starting clustering upgrade 4.0.0 process"),kC(Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(eU,"startClusteringThreads");async function VX(){for(let e in Te.CLUSTERING_PROCESSES)if(e!==Te.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Te.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await ZC.terminate();else{let t=Te.CLUSTERING_PROCESSES[e];await hS(t)}}a(VX,"stopClustering");async function $X(){for(let e in Te.CLUSTERING_PROCESSES){let t=Te.CLUSTERING_PROCESSES[e];if(await JC(t)===!1)return!1}return!0}a($X,"isClusteringRunning");async function YX(){await ic.generateNatsConfig(!0),await oc.reloadNATSHub(),await oc.reloadNATSLeaf(),await ic.removeNatsConfig(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ic.removeNatsConfig(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(YX,"reloadClustering")});var NS=m((kce,cU)=>{"use strict";var KX=require("minimist"),{isMainThread:RS,parentPort:iU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:cc}=He,_s=x(),gS=V(),E_=fS(),Eo=nt(),pS=Be(),oU=Nr(),ds=rU(),sU=uo(),WX=EE(),{restartWorkers:f_,onMessageByType:QX}=dt(),{handleHDBError:zX,hdb_errors:JX}=W(),{HTTP_STATUS_CODES:XX}=JX,h_=Q();h_.initSync();var uc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,ZX="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",nU="Clustering is not enabled so cannot be restarted",jX="Invalid service",li,$r;cU.exports={restart:aU,restartService:AS};RS&&QX(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?AS({service:e.workerType}):aU({operation:"restart"})});async function aU(e){$r=Object.keys(e).length===0,li=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=KX(process.argv);if(t.service){await AS(t);return}if($r&&!li){console.error(ZX);return}if($r&&console.log(uc),li){ds.enterPM2Mode(),_s.notify(uc);let r=WX(Object.keys(He.CONFIG_PARAM_MAP),!0);return gS.isEmptyOrZeroLength(Object.keys(r))||oU.updateConfigValue(void 0,void 0,r,!0,!0),t4(),uc}return RS?(_s.notify(uc),await OS(),setTimeout(()=>{f_()},50)):iU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),uc}a(aU,"restart");async function AS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw zX(new Error,jX,XX.BAD_REQUEST,void 0,void 0,!0);if(li=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!RS)return iU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case cc.clustering:if(!h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}$r&&console.log("Restarting clustering"),_s.notify("Restarting clustering"),await OS();break;case cc.clustering_config:case cc["clustering config"]:if(!h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}$r&&console.log("Restarting clustering_config"),_s.notify("Restarting clustering_config"),await ds.reloadClustering();break;case"custom_functions":case"custom functions":case cc.harperdb:case cc.http_workers:if($r&&!li){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}$r&&console.log("Restarting http_workers"),_s.notify("Restarting http_workers"),li?await ds.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{f_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(_s.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(AS,"restartService");async function e4(){await Eo.publishToStream(`${pS.SUBJECT_PREFIXES.TXN}.${pS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,pS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Eo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(e4,"postDummyNatsMsg");async function t4(){await OS(),await ds.restart(He.HDB_PROC_DESCRIPTOR),await gS.async_set_timeout(2e3),h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await TS(),$r&&(await Eo.closeConnection(),process.exit(0))}a(t4,"restartPM2Mode");async function OS(){if(!oU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await sU.getHDBProcessInfo()).clustering.length===0)_s.trace("Clustering not running, restart will start clustering services"),await E_.generateNatsConfig(!0),await ds.startClusteringProcesses(),await ds.startClusteringThreads(),await TS(),$r&&await Eo.closeConnection();else{await e4(),await E_.generateNatsConfig(!0),li?(_s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ds.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ds.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await sU.getHDBProcessInfo()).clustering.forEach(n=>{_s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await gS.async_set_timeout(3e3),await TS(),await Eo.updateLocalStreams(),$r&&await Eo.closeConnection(),_s.trace("Restart clustering restarting ingest and reply service threads");let t=f_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=f_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(OS,"restartClustering");async function TS(){await E_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await E_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(TS,"removeNatsConfig")});var TU=m((Yce,pU)=>{"use strict";var $ce=require("lodash"),Wt=A(),{handleHDBError:uU,hdb_errors:r4}=W(),{HDB_ERROR_MSGS:s4,HTTP_STATUS_CODES:n4}=r4,bS=x();pU.exports={getRolePermissions:o4};var _i=Object.create(null),i4=a(e=>({key:e,perms:{}}),"perms_template_obj"),EU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),fU=a((e=!1,t=!1,r=!1,s=!1)=>({[Wt.PERMS_CRUD_ENUM.READ]:e,[Wt.PERMS_CRUD_ENUM.INSERT]:t,[Wt.PERMS_CRUD_ENUM.UPDATE]:r,[Wt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),yS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...fU(t,r,s,n)}),"table_perms_template"),lU=a((e,t=fU())=>({attribute_name:e,describe:SU(t),[lc]:t[lc],[IS]:t[IS],[wS]:t[wS]}),"attr_perms_template"),_U=a((e,t=!1)=>({attribute_name:e,describe:t,[lc]:t}),"timestamp_attr_perms_template"),{READ:lc,INSERT:IS,UPDATE:wS}=Wt.PERMS_CRUD_ENUM,hU=Object.values(Wt.PERMS_CRUD_ENUM),mU=[lc,IS,wS];function o4(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[Wt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(_i[t]&&_i[t].key===s)return _i[t].perms;let n=a4(e,r);return _i[t]?_i[t].key=s:_i[t]=i4(s),_i[t].perms=n,n}catch(r){if(!e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Wt.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 bS.error(s),bS.debug(r),uU(new Error,s4.OUTDATED_PERMS_TRANSLATION_ERROR,n4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
6
6
  ${r.stack}`;throw bS.error(s),uU(new Error)}}}a(o4,"getRolePermissions");function a4(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Wt.SYSTEM_SCHEMA_NAME]=s[Wt.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]=c4(t[i]);return}r[i]=EU(),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],u=t[i][o],l=u4(c,u);r[i].describe||hU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=yS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=yS()})}),r}a(a4,"translateRolePermissions");function c4(e){let t=EU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=yS(!0,!0,!0,!0,!0)}),t}a(c4,"createStructureUserPermissions");function u4(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Wt.TIME_STAMP_NAMES.includes(d)&&(E=_U(d,_[lc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=lU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=SU(_),n.attribute_permissions.push(_),c||l4(_,u)}else if(l!==o){let _;Wt.TIME_STAMP_NAMES.includes(l)?_=_U(l):_=lU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=dU(n),n}else return e.describe=dU(e),e}a(u4,"getTableAttrPerms");function dU(e){return hU.filter(t=>e[t]).length>0}a(dU,"getSchemaTableDescribePerm");function SU(e){return mU.filter(t=>e[t]).length>0}a(SU,"getAttributeDescribePerm");function l4(e,t){mU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(l4,"checkForHashPerms")});var RU={};je(RU,{Resources:()=>m_,keyArrayToString:()=>fo,resetResources:()=>_4,resources:()=>In});function _4(){return In=new m_}function fo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var m_,In,_c=Se(()=>{xn();m_=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(_4,"resetResources");a(fo,"keyArrayToString")});var ho,CS=Se(()=>{ho=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var dc={};je(dc,{authentication:()=>yU,login:()=>R4,logout:()=>g4,start:()=>T4});async function yU(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?h4?f4:[]:E4?d4:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return S_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),S_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(S_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await AU.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new R_.AuthAuditLog(f,h,Tt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===Tt.AUTH_AUDIT_STATUS.SUCCESS?gU.notify(p):gU.error(p)},"authAuditLog"),_;if(s){if(_=mo.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await tt.auth(T,p):null;break;case"Bearer":try{_=await(0,T_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,T_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return p4&&(mo.get(h)||(mo.set(h,h),l(T,Tt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Ks({error:R.message},e)}}mo.set(s,_),S4&&l(_.username,Tt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):m4&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,p_.getSuperUser)());S_&&(e.session.update=function(f){if(!c){c=(0,NU.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):d?.headers?.set&&d.headers.set("Set-Cookie",T)}return f.id=c,AU.put(f)},e.login=async function(f,h){e.user=await tt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&In.loginPath?(d.status=302,d.headers.set("Location",In.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new ho);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function T4({server:e,port:t}){e.request(yU,{port:t||"all"}),OU||(OU=!0,setInterval(()=>{mo=new Map},Ir.get(Tt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),bU.user.addListener(()=>{mo=new Map}))}async function R4(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function g4(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var p_,T_,NU,Ir,Tt,R_,bU,gU,d4,E4,f4,h4,AU,S_,m4,S4,p4,mo,OU,g_=Se(()=>{p_=C(br());es();_c();T_=C($a());de();NU=require("uuid"),Ir=C(Q()),Tt=C(A()),R_=C(x());So();bU=C(ba());CS();gU=(0,R_.loggerWithTag)("auth-event");Ir.initSync();d4=Ir.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),E4=Ir.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),f4=Ir.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),h4=Ir.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=p_.findAndValidateUser;AU=rt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),S_=Ir.get(Tt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,m4=Ir.get(Tt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,S4=Ir.get(Tt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,p4=Ir.get(Tt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,mo=new Map;a(yU,"authentication");a(T4,"start");a(R4,"login");a(g4,"logout")});var MU=m((sue,LU)=>{"use strict";var he=require("joi"),IU=require("fs-extra"),wU=require("path"),Qs=ve(),CU=Q(),UU=A(),DU=x(),{hdb_errors:A4}=W(),{HDB_ERROR_MSGS:Dt}=A4,Ws=/^[a-zA-Z0-9-_]+$/;LU.exports={getDropCustomFunctionValidator:N4,setCustomFunctionValidator:b4,addComponentValidator:C4,dropCustomFunctionProjectValidator:U4,packageComponentValidator:D4,deployComponentValidator:L4,setComponentFileValidator:y4,getComponentFileValidator:w4,dropComponentFileValidator:I4};function A_(e,t,r){try{let s=CU.get(UU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=wU.join(s,t);return IU.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return DU.error(s),r.message(Dt.VALIDATION_ERR)}}a(A_,"checkProjectExists");function Ec(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Ec,"checkFilePath");function O4(e,t,r,s){try{let n=CU.get(UU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=wU.join(n,e,t,r+".js");return IU.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return DU.error(n),s.message(Dt.VALIDATION_ERR)}}a(O4,"checkFileExists");function N4(e){let t=he.object({project:he.string().pattern(Ws).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Ws).custom(O4.bind(null,e.project,e.type)).custom(Ec).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Qs.validateBySchema(e,t)}a(N4,"getDropCustomFunctionValidator");function b4(e){let t=he.object({project:he.string().pattern(Ws).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(Ec).required(),function_content:he.string().required()});return Qs.validateBySchema(e,t)}a(b4,"setCustomFunctionValidator");function y4(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Ec).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qs.validateBySchema(e,t)}a(y4,"setComponentFileValidator");function I4(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Ec).optional()});return Qs.validateBySchema(e,t)}a(I4,"dropComponentFileValidator");function w4(e){let t=he.object({project:he.string().required(),file:he.string().custom(Ec).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qs.validateBySchema(e,t)}a(w4,"getComponentFileValidator");function C4(e){let t=he.object({project:he.string().pattern(Ws).custom(A_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Qs.validateBySchema(e,t)}a(C4,"addComponentValidator");function U4(e){let t=he.object({project:he.string().pattern(Ws).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Qs.validateBySchema(e,t)}a(U4,"dropCustomFunctionProjectValidator");function D4(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Qs.validateBySchema(e,t)}a(D4,"packageComponentValidator");function L4(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Qs.validateBySchema(e,t)}a(L4,"deployComponentValidator")});var MS=m((iue,BU)=>{"use strict";var be=require("fs-extra"),US=require("fast-glob"),me=require("path"),PU=require("tar-fs"),M4=require("uuid").v4,DS=require("normalize-path"),Es=MU(),Rt=x(),Ie=A(),$e=Q(),O_=Nr(),P4=V(),{PACKAGE_ROOT:v4}=A(),{handleHDBError:it,hdb_errors:B4}=W(),{HDB_ERROR_MSGS:wn,HTTP_STATUS_CODES:ot}=B4,H4=me.join(v4,"application-template"),LS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function vU(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,wn.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(vU,"isCFEnabled");function F4(){Rt.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw it(new Error,wn.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,Rt.ERR,t)}return e}a(F4,"customFunctionsStatus");function q4(){Rt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{US.sync(DS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:US.sync(DS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:US.sync(DS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,wn.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,Rt.ERR,r)}return e}a(q4,"getCustomFunctions");function G4(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Es.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw it(new Error,wn.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,c)}}a(G4,"getCustomFunction");function x4(e){vU(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Es.setCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw it(new Error,wn.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,c)}}a(x4,"setCustomFunction");function k4(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Es.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw it(new Error,wn.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,o)}}a(k4,"dropCustomFunction");function V4(e){vU(),e.project&&(e.project=me.parse(e.project).name);let t=Es.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(H4,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,wn.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,n)}}a(V4,"addComponent");function $4(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!P4.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return O_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,wn.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,Rt.ERR,i)}}a($4,"dropCustomFunctionProject");async function Y4(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.packageComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;Rt.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(LS);let i=me.join(LS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),PU.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(Y4,"packageComponent");async function K4(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.deployComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(Rt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(LS,M4()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(PU.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return O_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(K4,"deployComponent");async function W4(){let e=O_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(W4,"getComponents");async function Q4(e){let t=Es.getComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(Q4,"getComponentFile");async function z4(e){let t=Es.setComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(z4,"setComponentFile");async function J4(e){let t=Es.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),O_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(J4,"dropComponent");BU.exports={customFunctionsStatus:F4,getCustomFunctions:q4,getCustomFunction:G4,setCustomFunction:x4,dropCustomFunction:k4,addComponent:V4,dropCustomFunctionProject:$4,packageComponent:Y4,deployComponent:K4,getComponents:W4,getComponentFile:Q4,setComponentFile:z4,dropComponent:J4}});var PS=m((aue,FU)=>{"use strict";var hs=require("joi"),HU=ve();FU.exports={readTransactionLogValidator:X4,deleteTransactionLogsBeforeValidator:Z4};function X4(e){let t=hs.object({schema:hs.string().required(),table:hs.string().required(),from:hs.date().timestamp(),to:hs.date().timestamp(),limit:hs.number().min(1)});return HU.validateBySchema(e,t)}a(X4,"readTransactionLogValidator");function Z4(e){let t=hs.object({schema:hs.string().required(),table:hs.string().required(),timestamp:hs.date().timestamp().required()});return HU.validateBySchema(e,t)}a(Z4,"deleteTransactionLogsBeforeValidator")});var b_=m((uue,VU)=>{"use strict";var vS=A(),N_=nt(),qU=V(),GU=Q(),xU=Ps(),{handleHDBError:po,hdb_errors:j4}=W(),{HTTP_STATUS_CODES:To}=j4,{readTransactionLogValidator:eZ,deleteTransactionLogsBeforeValidator:tZ}=PS(),kU="This operation relies on clustering and cannot run with it disable.",rZ="Logs successfully deleted from transaction log.",sZ="All logs successfully deleted from transaction log.";VU.exports={readTransactionLog:nZ,deleteTransactionLogsBefore:iZ};async function*nZ(e){let t=eZ(e);if(t)throw po(t,t.message,To.BAD_REQUEST,void 0,void 0,!0);if(!GU.get(vS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw po(new Error,kU,To.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qU.checkSchemaTableExist(r,s);if(n)throw po(new Error,n,To.NOT_FOUND,void 0,void 0,!0);let i=xU.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===vS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(nZ,"readTransactionLog");async function iZ(e){let t=tZ(e);if(t)throw po(t,t.message,To.BAD_REQUEST,void 0,void 0,!0);if(!GU.get(vS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw po(new Error,kU,To.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qU.checkSchemaTableExist(r,s);if(i)throw po(new Error,i,To.NOT_FOUND,void 0,void 0,!0);let o=xU.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),u=await N_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=rZ,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=sZ):d=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(iZ,"deleteTransactionLogsBefore")});var C_=m((_ue,JU)=>{"use strict";var y_=require("joi"),I_=require("path"),$U=require("fs-extra"),{exec:oZ}=require("child_process"),aZ=require("util"),YU=aZ.promisify(oZ),fc=A(),{handleHDBError:Ro,hdb_errors:cZ}=W(),{HTTP_STATUS_CODES:go}=cZ,mc=Q(),uZ=ve(),hc=x();mc.initSync();var BS=mc.get(fc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),KU="npm install --omit=dev --json",lZ=`${KU} --dry-run`;JU.exports={installModules:fZ,auditModules:hZ,installAllRootModules:_Z,uninstallRootModule:dZ,linkHarperdb:EZ};async function _Z(e=!1){await w_(),await Sc(e?"npm install --ignore-scripts":"npm install",mc.get(fc.CONFIG_PARAMS.ROOTPATH))}a(_Z,"installAllRootModules");async function dZ(e){await Sc(`npm uninstall ${e}`,mc.get(fc.CONFIG_PARAMS.ROOTPATH))}a(dZ,"uninstallRootModule");async function EZ(){await w_(),await Sc(`npm link ${fc.PACKAGE_ROOT}`,mc.get(fc.CONFIG_PARAMS.ROOTPATH))}a(EZ,"linkHarperdb");async function Sc(e,t=void 0){let{stdout:r,stderr:s}=await YU(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
7
7
  `,""));return hc.trace(r,s),r.replace(`
8
8
  `,"")}a(Sc,"runCommand");async function fZ(e){hc.info(`starting installModules for request: ${e}`);let t=zU(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?lZ:KU;await w_(),await QU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let l=I_.join(BS,u),_,d=null;try{let{stdout:E,stderr:f}=await YU(n,{cwd:l});_=E?E.replace(`
@@ -21,6 +21,6 @@
21
21
 
22
22
  `+Hp.readFileSync(o):"")},s.http2=!0}return s}a($8,"getServerOptions");OM.exports=$8});var IM=m((ble,yM)=>{"use strict";var Fp=Q();Fp.initSync();var{CONFIG_PARAMS:bM}=A();function Y8(){let e=Fp.get(bM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Fp.get(bM.CUSTOMFUNCTIONS_NETWORK_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Y8,"getCORSOptions");yM.exports=Y8});var UM=m((Ile,CM)=>{"use strict";var wM=Q();wM.initSync();var K8=A();function W8(){return wM.get(K8.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(W8,"getHeaderTimeoutConfig");CM.exports=W8});var xp={};je(xp,{customFunctionsServer:()=>J8,handleFile:()=>z8,ready:()=>j8});async function z8(e,t,r,s){if(!js){let c=qp.get(Gp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);js=VM(c),tt.http((await js).server)}let n=await js,i=(0,LM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),DM.has(i)||(DM.add(i),n.register(Z8(i,o)))}async function J8(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await X8();let e=qp.get(Gp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=js=await VM(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function X8(){try{Ue.info("Custom Functions starting configuration."),await FM.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function Z8(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,MM.existsSync)(e)&&r.register(HM.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function VM(e){Ue.info("Custom Functions starting buildServer.");let t=(0,qM.default)(e),r=(0,PM.default)(t);r.server.headersTimeout=(0,xM.default)(),r.setErrorHandler(kM.serverErrorHandler);let s=(0,GM.default)();return s&&r.register(vM.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(BM.default),await r.register(Q8),await r.after(),jS(r),Ue.info("Custom Functions completed buildServer."),r}function j8(){if(js)return js.then?js.then(e=>e.ready()):js.ready()}var LM,MM,PM,vM,BM,HM,qp,Gp,Ue,Q8,FM,qM,GM,xM,kM,js,DM,$M=Se(()=>{LM=require("path"),MM=require("fs"),PM=C(require("fastify")),vM=C(require("@fastify/cors")),BM=C(up()),HM=C(require("@fastify/autoload")),qp=C(Q()),Gp=C(A()),Ue=C(x()),Q8=C(AM()),FM=C(br()),qM=C(NM()),GM=C(IM()),xM=C(UM()),kM=C(Ed());So();es();DM=new Set;a(z8,"handleFile");a(J8,"customFunctionsServer");a(X8,"setUp");a(Z8,"buildRouteFolder");a(VM,"buildServer");a(j8,"ready")});var kp={};je(kp,{start:()=>e6});function e6(e){let t=e.root;return{handleFile(r,s,n){KM||(KM=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=YM.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,WM.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),YM.set(s,n)}}}var WM,YM,KM,QM=Se(()=>{WM=C(require("send")),YM=new Map;a(e6,"start")});function s6(e,t=1,r){if(Vp++,(0,Ri.startWorker)("server/threads/threadServer.js",{name:md.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===md.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});r6.push(n),await n,Uo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=hd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Uo.indexOf(s);o>-1&&Uo.splice(o,1)}if(a(i,"removeWorker"),Do){let o=Do;Do=[];for(let c of o)ZM[c.localPort](c)}}}),r){let s=setInterval(()=>{$p?$p=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ri.shutdownWorkers)(),Vp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function jM(e=0,t){if(typeof e=="string")try{(0,pd.existsSync)(e)&&(0,pd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=n6:r=i6(t):r=Yp;let s=(0,XM.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},ZM[e]=i=>{$p=!0,r(i,(o,c)=>{if(!o){zM?(zM.deliverSocket(i,e,c),i.resume()):Vp>0?(Do.length===0&&setTimeout(()=>{Do.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),Do.push(i)):(console.log("start up a dynamic thread to handle request"),s6(0));return}o.requests++;let u=i._handle.fd;Sd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):u6(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Ka();return Sd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function Yp(e,t){let r,s=0;for(let n of Uo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=fd)return fd=i,t(r);s=i}fd=0,t(r)}function n6(e,t){let r=e.remoteAddress,s=Lo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);Yp(e,i=>{Lo.set(r,{worker:i,lastUsed:n}),t(i)})}function i6(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Lo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);Yp(s,_=>{Lo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function a6(){fd=0;for(let e of Uo)e.expectedIdle=e.recentELU.idle+o6,e.requests=1;Uo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function u6(e,t,r){let s=c6++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),hd.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),hd.delete(s)),n.event=="destroy"&&(e.destroy(),hd.delete(s))})}var Ri,XM,md,Sd,pd,t6,Uo,Do,ZM,zM,Vp,r6,$p,fd,JM,Lo,o6,hd,c6,eP=Se(()=>{Ri=C(dt()),XM=require("net"),md=C(A()),Sd=C(x()),pd=require("fs"),{isMainThread:t6}=require("worker_threads"),Uo=[],Do=[],ZM=[],Vp=0,r6=[];t6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(s6,"startHTTPWorker");a(jM,"startSocketServer");fd=0;a(Yp,"findMostIdleWorker");JM=36e5,Lo=new Map;a(n6,"findByRemoteAddressAffinity");a(i6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Lo)r.lastUsed+JM<e&&Lo.delete(t)},JM).unref();o6=1e3;a(a6,"updateWorkerIdleness");(0,Ri.setMonitorListener)(a6);hd=new Map,c6=1;a(u6,"proxySocket")});var iP=m((Fle,nP)=>{"use strict";var l6=require("cluster"),Wr=Q();Wr.initSync();var rP=A(),vle=require("util"),en=x(),Kp=require("fs"),_6=require("fastify"),Ble=Ka(),d6=require("@fastify/cors"),E6=require("@fastify/compress"),f6=require("@fastify/static"),h6=up(),m6=require("path"),{PACKAGE_ROOT:S6}=A(),p6=_n(),T6=V(),R6=br(),g6=Oa(),{server:A6}=(es(),re(wu)),{authHandler:O6,handlePostRequest:N6,serverErrorHandler:b6,reqBodyValidationHandler:y6}=Ed(),Hle=require("net"),{registerContentHandlers:I6}=(So(),re(xD)),w6=1024*1024*1024,sP="TRUE",{HDB_SETTINGS_NAMES:Ai,CONFIG_PARAMS:C6}=rP,U6=Ai.CORS_ENABLED_KEY,D6="CORS_ACCESSLIST",L6=Ai.SERVER_TIMEOUT_KEY,M6=Ai.SERVER_KEEP_ALIVE_TIMEOUT_KEY,P6=Ai.SERVER_HEADERS_TIMEOUT_KEY,v6=Ai.PRIVATE_KEY_KEY,B6=Ai.CERT_KEY,H6=Ai.HTTP_SECURE_ENABLED_KEY,gi;nP.exports={hdbServer:tP,start:tP};async function tP(e){try{en.info("In Fastify server"+process.cwd()),en.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),en.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=l6.isMaster,await F6();let t=Wr.get(H6),r=t&&(t===!0||t.toUpperCase()===sP);gi=q6(r),await gi.ready(),e||(e={}),e.isOperationsServer=!0,gi.server.cantCleanupProperly=!0;try{A6.http(gi.server,e),gi.server.closeIdleConnections||await gi.listen({port:0,host:"::"})}catch(s){throw gi.close(),en.error(s),en.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),en.fatal(t),process.exit(1)}}a(tP,"operationsServer");async function F6(){en.trace("Configuring HarperDB process."),p6.setSchemaDataToGlobal(),await R6.setUsersToGlobal(),await g6.getLicense()}a(F6,"setUp");function q6(e){en.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=G6(e),r=_6(t);r.server.headersTimeout=k6(),r.setErrorHandler(b6);let s=x6();s&&r.register(d6,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(h6),r.register(E6),r.register(f6,{root:m6.join(S6,"docs")}),I6(r);let n=Wr.get(rP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!T6.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[y6,O6],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),N6(i,o)}),r.get("/health",()=>"HarperDB is running."),en.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(q6,"buildServer");function G6(e){let t=Wr.get(L6),r=Wr.get(M6),s={bodyLimit:w6,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Wr.get(v6),i=Wr.get(B6),o=Wr.get(C6.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:Kp.readFileSync(n),cert:Kp.readFileSync(i)+(o?`
23
23
 
24
- `+Kp.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(G6,"getServerOptions");function x6(){let e=Wr.get(U6),t=Wr.get(D6),r;return e&&(e===!0||e.toUpperCase()===sP)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(x6,"getCORSOpts");function k6(){return Wr.get(P6)}a(k6,"getHeaderTimeoutConfig")});var Zp={};je(Zp,{disableNATS:()=>$6,setNATSReplicator:()=>Wp,start:()=>V6});function V6(){Rd.default.get(gd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&K6()}function $6(e=!0){lP=e}function K6(){if(lP)return;let e=Gr(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Wp(n,r,i)}}jp((r,s)=>{Wp(r.tableName,r.databaseName,r),s&&dP(r)}),!oP&&(oP=!0)}function Wp(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){dP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Jr;return(0,aP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<Y6}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Td(i.transaction,i)),o.user=i.user):o=_P),o}a(n,"getNATSTransaction")}function dP(e){let t=Rd.default.get(gd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Xp.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var zp,Jp,Xp,aP,cP,Rd,gd,uP,lP,Y6,_P,oP,Td,Qp,EP=Se(()=>{de();Xr();zp=C(nt()),Jp=C(Be()),Xp=C(Ps());na();aP=C(eT()),cP=C(vt()),Rd=C(Q()),gd=C(A()),uP=C(x());a(V6,"start");a($6,"disableNATS");Y6=2;a(K6,"assignReplicationSource");a(Wp,"setNATSReplicator");a(dP,"publishSchema");Td=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Rd.default.get(gd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(uP.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Xp.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},Qp=class extends Td{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,cP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};_P=new Qp});async function hP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await tT.getResource(e,{});n=new sT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await tT.get(e);i&&i.delete()}n=new Od(e,t)}return n}function rT(){return Ad++,Ad>65500&&(Ad=1),Ad}var fP,Bc,tT,Ad,Od,sT,mP=Se(()=>{de();_c();fP=C(vt()),Bc=C(x());xn();tT=rt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(hP,"getSession");Ad=1;a(rT,"getNextMessageId");Od=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=In.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,p=h.Resource,R=await Ye(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=rT();let U=k.id;Array.isArray(U)&&(U=fo(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Bc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return rT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=In.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ye(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},sT=class extends Od{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=rT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Bc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,fP.getNextMonotonicTime)()),(0,Bc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),tT.put(this.sessionRecord)),t.qos}}});var oT={};je(oT,{start:()=>Q6});async function Q6({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:l,onClose:_}=TP(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,tn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;W6&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,RP.getSuperUser)());let{onMessage:u,onClose:l}=TP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,tn.info)("Socket error",_)})},{port:t,securePort:s})}function TP(e,t,r,s,n){pP||(pP=!0,np(_=>{_.push({metric:"mqtt-connections",connections:nT})})),nT++;let i,o={protocolVersion:4},c=(0,Nd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){nT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,iT.get)(rn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&SP.notify({username:s.username,status:rn.AUTH_AUDIT_STATUS.SUCCESS,type:rn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iT.get)(rn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&SP.error({username:s.username,status:rn.AUTH_AUDIT_STATUS.FAILURE,type:rn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=hP({user:s,..._}),i=await i}catch(O){return(0,tn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,tn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,tn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=Ao(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Nd.generate)(f,o);t(T),Ss(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ks(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Nd,RP,iT,rn,tn,SP,W6,pP,nT,gP=Se(()=>{Nd=require("mqtt-packet");mP();RP=C(br());So();hi();es();iT=C(Q()),rn=C(A()),tn=C(x()),SP=(0,tn.loggerWithTag)("auth-event"),W6=!0;a(Q6,"start");nT=0;a(TP,"onSocket")});var DP={};je(DP,{loadComponent:()=>bd,loadComponentDirectories:()=>UP});function UP(e,t){t&&(cT=t),e&&(uT=e);let r=[];if((0,Ts.existsSync)(aT)){let n=(0,Ts.readdirSync)(aT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lr.join)(aT,o);r.push(bd(c,cT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(bd(s,cT,s)),Promise.all(r).then(()=>{CP=!0})}async function bd(e,t,r,s,n){if(!OP.has(e)){OP.set(e,!0),n&&(uT=n);try{let i,o=(0,Lr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ts.existsSync)(o)?i=(0,NP.parseDocument)((0,Ts.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Z6;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Ts.existsSync)(f=(0,Lr.join)(E,"node_modules",u));)if(E=(0,Lr.dirname)(E),E.length<(0,wP.getHdbBasePath)().length){f=null;break}if(f)_=await bd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=X6[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,rt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Hc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!AP.includes(p)){AP.push(p);let R=lT.get(_T.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);jM(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),uT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,IP.handleHDBError)("Can not reference parent directories");let p=(0,Lr.join)(e,l.files);for(let R of await(0,bP.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Lr.relative)(e,O),U=(0,Lr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await J6(O);Hc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Hc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${k.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new Fc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Fc(E),null,!0)}}if(Hc.isMainThread&&!CP&&(0,yP.watchDir)(e,async()=>UP()),i.extensionModule)return await Cu((0,Lr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Fc(i))}}}var Ts,Lr,Hc,NP,lT,_T,bP,yP,IP,wP,z6,J6,aT,uT,CP,cT,X6,Z6,AP,OP,Fc,LP=Se(()=>{Ts=require("fs"),Lr=require("path"),Hc=require("worker_threads"),NP=require("yaml"),lT=C(Q()),_T=C(A());hg();Tg();Rg();iL();$M();QM();bP=C(require("fast-glob")),yP=C(dt());vE();es();IP=C(W());Xr();de();eP();wP=C(Q()),z6=C(iP());g_();EP();gP();({readFile:J6}=Ts.promises),aT=lT.get(_T.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),uT=new Map;a(UP,"loadComponentDirectories");X6={REST:cp,graphqlSchema:PE,jsResource:HE,fastifyRoutes:xp,login:qE,static:kp,operationsApi:z6,customFunctions:{},clustering:Zp,authentication:dc,mqtt:oT},Z6={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},AP=[],OP=new Map;a(bd,"loadComponent");Fc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var FP=m((d_e,HP)=>{"use strict";var wd=require("fs-extra"),dT=require("path"),yd=x(),MP=V(),Id=A(),BP=Q(),j6=Nr();HP.exports=e9;async function e9(){let e=t9(),t=BP.get(Id.CONFIG_PARAMS.ROOTPATH),r=dT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Id.PACKAGE_ROOT}},n=dT.join(t,"node_modules");await wd.ensureDir(n);let i,o=!0,c=!1;try{i=await wd.readJson(r)}catch(u){if(MP.isEmptyOrZeroLength(e))return;if(u.code!==Id.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!MP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await PP(l);s.dependencies[u]=_+l}if(!o){yd.notify("Installing components"),await vP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await PP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(yd.notify("Removing component",u),c=!0);c&&(yd.notify("Updating components."),await vP(r,s))}a(e9,"installComponents");function t9(){let e=j6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(t9,"getComponentsConfig");async function PP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":dT.extname(e)||await wd.pathExists(e)?"file:":"github:"}a(PP,"getPkgPrefix");async function vP(e,t){yd.trace("npm installing components package.json",t),await wd.writeFile(e,JSON.stringify(t,null," ")),await C_().installAllRootModules(BP.get(Id.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(vP,"installPackages")});var xP=m((f_e,GP)=>{var{isMainThread:qP}=require("worker_threads"),{getTables:r9}=(de(),re(Ne)),{loadComponentDirectories:s9,loadComponent:n9}=(LP(),re(DP)),{resetResources:i9}=(_c(),re(RU)),o9=FP(),a9=Nr(),{dirname:c9}=require("path"),{getConnection:u9}=nt(),l9=Q(),_9=A(),ET=new Map;async function d9(e=!1){!qP&&l9.get(_9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&u9(),qP&&await o9();let t=i9();r9(),t.isWorker=e,await n9(c9(a9.getConfigFilePath()),t,"hdb",!0,ET),await s9(ET,t);let r=[];for(let[s]of ET)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(d9,"loadRootComponents");GP.exports.loadRootComponents=d9});var dt=m((S_e,Pn)=>{"use strict";var{Worker:E9,MessageChannel:f9,parentPort:Rs,isMainThread:pT,threadId:h9,workerData:qc}=require("worker_threads"),{PACKAGE_ROOT:m9}=A(),{join:$P,isAbsolute:S9,extname:Ud}=require("path"),{server:p9}=(es(),re(wu)),{watch:T9,readdir:R9}=require("fs/promises"),{totalmem:kP}=require("os"),TT=A(),Oi=x(),m_e=A(),{randomBytes:g9}=require("crypto"),A9=1024*1024,Mn=[],Ln=[],O9=50,YP=1e4,N9="restart",KP="request_thread_info",WP="resource_report",QP="thread_info",zP="added-port",b9="ack",fT;Pn.exports={startWorker:hT,restartWorkers:RT,shutdownWorkers:C9,workers:Mn,setMonitorListener:H9,onMessageFromWorkers:U9,onMessageByType:D9,broadcast:L9,broadcastWithAcknowledgement:P9,setChildListenerByType:w9,getWorkerIndex:XP,getTicketKeys:ZP,setMainIsWorker:y9,restartNumber:qc?.restartNumber||1};var JP;function XP(){return qc?qc.workerIndex:JP?0:void 0}a(XP,"getWorkerIndex");function y9(e){JP=e}a(y9,"setMainIsWorker");var Cd;function ZP(){return Cd||(Cd=pT?g9(48):qc.ticketKeys,Cd)}a(ZP,"getTicketKeys");Object.defineProperty(p9,"workerIndex",{get(){return XP()}});var jP={[KP](e,t){v9(t)},[WP](e,t){B9(t,e)}};function hT(e,t={}){let r=process.constrainedMemory?.()||kP();r=Math.min(r,kP());let s=Math.max(Math.floor(r/A9/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new f9;c.postMessage({type:zP,port:u},[u]),i.push(l)}Ud(e)||(e+=".js");let o=new E9(S9(e)?e:$P(m9,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Pn.exports.restartNumber,ticketKeys:ZP()},transferList:i},t));return Ld(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{hT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Oi.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<O9?(t.unexpectedRestarts=o.unexpectedRestarts+1,hT(e,t)):Oi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{jP[c.type]?.(c,o)}),Mn.push(o),q9(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(hT,"startWorker");var I9=[TT.THREAD_TYPES.HTTP];async function RT(e=null,t=2,r=!0){if(pT){if(r){let{loadRootComponents:n}=xP();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:TT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=I9.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),YP*2).unref();n.on("exit",()=>{clearTimeout(u),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 Rs.postMessage({type:N9,workerType:e})}a(RT,"restartWorkers");function w9(e,t){jP[e]=t}a(w9,"setChildListenerByType");function C9(e){return RT(e,1/0,!1)}a(C9,"shutdownWorkers");var ev=[];function U9(e){ev.push(e)}a(U9,"onMessageFromWorkers");var mT=new Map;function D9(e,t){let r=mT.get(e);r||mT.set(e,r=[]),r.push(t)}a(D9,"onMessageByType");function L9(e){for(let t of Ln)try{t.postMessage(e)}catch(r){Oi.error("Unable to send message to worker",r)}}a(L9,"broadcast");var Dd=new Map,M9=1;function P9(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=M9++,i=a(()=>{Dd.delete(n),--r===0&&t(),s!==Rs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Dd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Dd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Oi.error("Unable to send message to worker",n)}r===0&&t()})}a(P9,"broadcastWithAcknowledgement");function v9(e){e.postMessage({type:QP,workers:tv()})}a(v9,"sendThreadInfo");function tv(){let e=Date.now();return Mn.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(tv,"getChildWorkerInfo");function B9(e,t){e.resources=t,e.resources.updated=Date.now()}a(B9,"recordResourceReport");var ST;function H9(e){ST=e}a(H9,"setMonitorListener");var F9=1e3,VP=!1;function q9(){VP||(VP=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}ST&&ST()},F9).unref())}a(q9,"startMonitoring");var G9=1e3;if(Rs){Ld(Rs);for(let e of qc.addPorts)Ld(e);setInterval(()=>{let e=process.memoryUsage();Rs.postMessage({type:WP,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},G9).unref(),fT=a(()=>new Promise((e,t)=>{Rs.on("message",r),Rs.postMessage({type:KP});function r(s){s.type===QP&&(Rs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else fT=tv;Pn.exports.getThreadInfo=fT;function Ld(e,t){Ln.push(e),e.on("message",r=>{if(r.type===zP)Ld(r.port);else if(r.type===b9){let s=Dd.get(r.id);s&&s()}else{for(let n of ev)n(r,e);let s=mT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Oi.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Ld,"addPort");if(pT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await R9(s,{withFileTypes:!0}))i.isDirectory()&&r($P(s,i.name));for await(let{filename:i}of T9(s,{persistent:!1}))(Ud(i)===".ts"||Ud(i)===".js"||Ud(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await RT(),Oi.info("Reloaded HarperDB components")},100))},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Rs.on("message",async e=>{let{type:t}=e;t===TT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,Rs.unref(),setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate",h9),process.exit(0)},YP).unref())})});function bT(e){let t=e.auditStore=e.openDB(ov.AUDIT_STORE_NAME,k9);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,cv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{AT||(AT=setTimeout(()=>{if(AT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-rv,0]})){if((n[0]&15)===NT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},rv/10).unref())}),t}function vd(e,t,r){let s=_v[r.type],n=3;if(t?t.length>80?(s|=Md,n=(0,sn.writeKey)(t,gs,e?14:6),gT.setUint16(2,n)):(n=(0,sn.writeKey)(t,gs,e?11:3),gs[1]=n):gs[1]=0,e){s|=lv;let i=s&Md?6:3;gT.setFloat64(i,e),t||(n=i+8)}return gs[0]=s,s&Md?gT.setUint16(4,0):gs[2]=0,r.value?Buffer.concat([gs.slice(0,n),r.value]):gs.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Md,i=n?6:3,o;r&lv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&OT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:_v[r&7],value:u,lastVersion:o,get user(){return c?(0,sn.readKey)(e,i,c):void 0}}}var sn,Pd,ov,av,cv,uv,gs,gT,x9,k9,rv,AT,OT,sv,NT,nv,iv,Md,lv,_v,Gc=Se(()=>{sn=require("ordered-binary"),Pd=C(Q()),ov=C(xe()),av=C(A()),cv=C(dt()),uv=C(V());(0,Pd.initSync)();gs=Buffer.alloc(1024),gT=new DataView(gs.buffer,gs.byteOffset,1024),x9={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,sn.writeKey)(e[2],t,r+12)}else return(0,sn.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,sn.readKey)(e,t+12,r)]}else return(0,sn.readKey)(e,t,r)}},k9={encoding:"binary",keyEncoder:x9},rv=(0,uv.convertToMS)((0,Pd.get)(av.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,AT=null;a(bT,"openAuditStore");OT=16,sv=1,NT=2,nv=3,iv=4,Md=128,lv=64,_v={put:sv|OT,[sv]:"put",delete:NT,[NT]:"delete",message:nv|OT,[nv]:"message",invalidate:iv,[iv]:"invalidate"};a(vd,"createAuditEntry");a(vn,"readAuditEntry")});var yT,Ni,V9,xc,Bd,dv=Se(()=>{yT=C(vt());Gc();Ni=Symbol("completion"),V9=100,xc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,yT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Ni]&&(i||(i=[]),i.push(d[Ni])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,vd(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<V9>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},Bd=class extends xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,yT.getNextMonotonicTime)())}getReadTxn(){}}});function mv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Po||((0,bi.onMessageByType)(fv,d=>{let E=d.auditIds;wT(d.path,E,d.txnId)}),(0,bi.onMessageByType)(hv,d=>{(0,As.trace)("confirming to proceed with txn",d.txnId)}),Po=Object.create(null));let c=Po[i]||(Po[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=fo(t);let l=new IT(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function wT(e,t,r,s){if(!Po)return;let n=Po[e];if(n){if(Mo&&Mo+1!==r){(0,As.trace)("Waiting to ensure latest txn id",Mo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Hd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c);if(Mo+1!==r){await(0,bi.broadcastWithAcknowledgement)({type:hv,txnId:r});for(let[o,c]of Hd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c)}Hd.delete(r),(0,As.trace)("Proceeding with txn id",r),Mo=r-1,wT(e,t,r,s)})();return Hd.set(r,i),i}(0,As.trace)("Notifying with txn id",r,s),Mo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,Ev.writeKey)(i,Y9,0);let _=i[3];_&&(i.length=3);let d,E=fo(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,As.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=vn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,As.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function Sv(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&$9)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,bi.broadcast)({type:fv,path:n,auditIds:l,txnId:c,start:u}),wT(n,l,c,!0))})}}var As,bi,Ev,fv,hv,$9,Po,Y9,IT,Mo,Hd,pv=Se(()=>{As=C(x()),bi=C(dt()),Ev=require("ordered-binary");na();_c();Gc();fv="transaction",hv="transaction-await",$9=67108864,Y9=Buffer.alloc(4096);a(mv,"addSubscription");IT=class extends Jr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Hd=new Map;a(wT,"notifyFromTransactionData");a(Sv,"listenToCommits")});var Np={};je(Np,{coerceType:()=>Fd,makeTable:()=>Gd,setServerUtilities:()=>J9});function Gd(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),Sv(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&JT();class F extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,q=w.table?Pe[c][w.table]:F;if(c===Qr.SYSTEM_SCHEMA_NAME&&(w.table===Qr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Qr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[q.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await q.getResource(w.id,w,kc);switch(w.type){case"put":return L._writeUpdate(v,kc);case"delete":return L._writeDelete(kc);case"publish":return L._writePublish(v,kc);case"invalidate":return L.invalidate(kc);default:wi.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ii.getWorkerIndex)()):(0,Ii.getWorkerIndex)()===0,q=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(q)for await(let L of q)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(rt({table:n,database:c,attributes:J,origin:"cluster"}),Yc.signalSchemaChange(new Kc.SchemaEventMsg(process.pid,Qr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&Yc.signalUserChange(new Kc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,q,G={transaction:w?.getReadTxn()},X;return iu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?q(Y):(y[ce]=J?.value,y[Xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,q=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ii.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&F.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,JT(),F.audit=!0}static coerceId(S){return S===""?null:Fd(S,k)}static async dropTable(){if(delete Pe[c][n],c===o){for(let S in r)_.remove(F.tableName+"/"+S),r[S].drop();_.remove(F.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Yc.signalSchemaChange(new Kc.SchemaEventMsg(process.pid,Qr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Us])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=CT(y,"read");N.select=w.filter(q=>v[q])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=CT(w,"update");for(let q in N)if(!v[q])return!1;if(D)for(let q of w){let L=q.attribute_name;!q.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=CT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ft],y&&(S=Object.assign(y,S)),this[ft]=y=S}return!this[ce]&&t&&!(y||(y=this[ft]))?.[t]&&(y||(y=this[ft]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=F.Source,q,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(q=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ni]:q}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,Iv.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,q=this[ae];y||(this[ce]={}),D.addWrite({key:q,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(q);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=oa(S);else{if(S[gv]&&(w=!Ru(S),w))return;t&&S[t]!==q&&(S[t]=q),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=oa(S);let Y=F.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(q,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(wi.trace("Checking timestamp for put",q,this[Xt]>L,this[Xt],L),this[Xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,vo.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[Ni]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(v,q)=>{let L=this[ce];if(q){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=F.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Xt]>v))return Ze(this[ae],L),wi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||zT(),q||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[Ni]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(on=>on.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,yi.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Fd(De,j)):Fd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,bv.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Vc.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let on=r[De];Y.estimated_count=on?on.getValuesCount(Y[1]??Y.value):1/0}}else j===Vc.SEARCH_TYPES.CONTAINS||j===Vc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Vc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=W9:Y.estimated_count=K9}return Y.estimated_count}));let v=N.getReadTxn();v.use();let q=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:q?.length<4}:{start:!1,transaction:v,lazy:q?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):vo.SKIP);else{let Y=IE(L,v,D,F,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(wE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let on=y[De],nE=IE(on,v,D,F,S.allowFullScan);Y=Y.concat(nE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,on={transaction:v,lazy:De>0||q?.length<4,alwaysPrefetch:!0};return Y.map(nE=>new Promise(iE=>iu(nE,X,on,null,!1,wB=>{let oE=wB?.value;if(!oE)return iE(vo.SKIP);for(let aE=0;aE<De;aE++)if(!j[aE](oE))return iE(vo.SKIP);iE(oE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||rt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=mv(F,this[ae]??null,function(v,q,L){try{this.send({id:v,timestamp:L,...q})}catch(G){console.error(G)}},S.startTime,this[Us]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Us]){if(w){if(y)throw new yi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:q}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=vn(q,i);(D==null||Nv(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:q,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=q;if(q.length>3&&(J=q.slice(2)),X!==s)continue;if(D==null||Nv(D,J)){let Y=vn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){wi.error("Error getting history entry",q,G)}for(let q=v.length;q>0;)N.send(v[--q]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:q,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,yv.MAXIMUM_KEY],versions:!0}))q&&N.send({id:v,timestamp:L,value:q})}else{y&&!w&&(w=0);let v=this[Xt];if(w<v){let q=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=vn(X,i);q.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=q.length;G>0;)N.send(q[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(q,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=F.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||zT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[Ni]:w};return!D.hasWrittenTime&&this[Xt]>q&&(q=X.newTxnTime=this[Xt]+.001),i.put(y,G??null,q),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new xc(i,S.user,u)),D}else return new Bd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(q=>typeof q=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new yi.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}wasLoadedFromSource(){return R?!!this[Av]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new yi.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new yi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return rt({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return rt({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Au(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,q]=D;D.length>3&&(q=D.slice(2)),v===s&&(N=i.remove(q))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,q]=D;if(D.length>3&&(q=D.slice(2)),v!==s)continue;let L=vn(y,i);L.id=q,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],q=u.get(v);if(q){let L=vn(q,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}F.updatedAttributes();let Oe=F.prototype;return Oe[gv]=!0,d&&F.setTTLExpiration(d/1e3),b&&IB(),F;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,q=N?.[y],L=S?.[y];if(q===L&&!v)continue;D=!0;let G=(0,$c.getIndexedValues)(L);if(G){Tv&&w.prefetch(G.map(X=>({key:X,value:Z})),Ov);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,$c.getIndexedValues)(q),G){Tv&&w.prefetch(G.map(X=>({key:X,value:Z})),Ov);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function iu(Z,S,N,D,y,w){let v=a(()=>{let q=N.transaction;if(q?.isDone)throw new Error("Invalid read transaction");let L;q&&!q.hasRunLoadRecord&&(L=!0,q.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(q)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&Oo(Y,"cache-hit",n),Y&&!y&&(D&&(D[Av]=!0),R))return Vo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(iu,"loadRecord");function Li(){P=new Set,(0,Ii.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Li,"setupCommitListeners");async function Vo(Z,S=null,N,D){if(N<0){let L;return P||Li(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G(Vo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Vo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},q=D?.responseHeaders;q&&(v.responseHeaders=q);try{let L=performance.now(),G=await F.Source.get(Z,v),X=performance.now()-L;Ss(X,"cache-resolution",n),q&&q.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,$c.getNextMonotonicTime)());let j=Ze(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],vd(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Vo,"getFromSource");function Fn(Z){T||(T=i.get([Rv,UT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([Rv,UT.threadId],T)},50))}a(Fn,"recordDeletion");function zT(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),Fn(-1)}}},F.getRecordCount()*100+z9).unref())}a(zT,"enqueueDeletionCleanup");function JT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(JT,"addDeleteRemoval");function IB(){(0,Ii.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&F.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){wi.error("Error in evicting old records",Z)}},Q9).unref()}a(IB,"runRecordExpirationEviction")}function CT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Ov(){}function J9(e){Iv=e}function Fd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!X9.test(e)&&(e+="Z"),new Date(e)):r?e:(0,qd.autoCast)(e)}function Nv(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var Qr,vo,$c,bv,UT,Vc,Wc,yi,Yc,Kc,wi,yv,Ii,qd,Iv,K9,W9,Q9,Tv,Rv,Xt,gv,G_e,Av,kc,z9,X9,nd=Se(()=>{Qr=C(A()),vo=require("lmdb"),$c=C(vt()),bv=require("lodash"),UT=require("worker_threads");Xr();dv();Vc=C(xe()),Wc=C(Q());pv();yi=C(W()),Yc=C(qs()),Kc=C(Fr());de();yu();wi=C(x());Nu();xn();yv=require("ordered-binary"),Ii=C(dt());Gc();qd=C(V());hi();K9=1e8,W9=1e7,Q9=6e4;Wc.initSync();Tv=Wc.get(Qr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rv=Symbol.for("deletions"),Xt=Symbol.for("version"),gv=Symbol.for("incremental-update"),G_e=Symbol("source-resource"),Av=Symbol("load-from-source"),kc={isNotification:!0,allowInvalidated:!0},z9=(0,qd.convertToMS)(Wc.get(Qr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Gd,"makeTable");a(CT,"attributesAsObject");a(Ov,"noop");a(J9,"setServerUtilities");X9=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Fd,"coerceType");a(Nv,"isDescendantId")});var Ne={};je(Ne,{database:()=>Ha,databases:()=>Pe,dropDatabase:()=>xh,dropTableMeta:()=>s7,getDatabases:()=>Gr,getTables:()=>Z9,onUpdatedTable:()=>jp,readMetaDb:()=>Qc,resetDatabases:()=>j9,table:()=>rt,tables:()=>sr});function Z9(){return $d||Gr(),sr||{}}function Gr(){if($d)return Pe;$d=!0,qo=new Map;let e=(0,bt.getHdbBasePath)()&&(0,Me.join)((0,bt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,bt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,bt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Qc((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,Fo.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,Fo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Fo.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Fo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);Qc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&Qc((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&Qc(u,o,r,null,!0)}}for(let r in Pe){let s=qo.get(r);if(s){let n=Pe[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete Pe[r],r==="data"){for(let n in sr)delete sr[n];delete sr[Yd]}}return qo=null,Pe}}function j9(){$d=!1;for(let[,e]of Bn)e.needsDeletion=!0;Gr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return Pe}function Qc(e,t,r=MT,s,n){let i=new DT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,xd.open)(i),Bn.set(e,o));let c=new Ci.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Bo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,xd.open)(i),l.isLegacy=!0):l=bT(o));let _=Dv(r),d=_[Yd],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let F of T)if(F.is_hash_attribute||F.isPrimaryKey){p=F;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,bt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(Ho)||0)&&u.putSync(Ho,$+1):(p.tableId=$=u.get(Ho),$||($=1),u.putSync(Ho,$+1),u.putSync(p.key,p));let F=new Ci.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,F),U.rootStore=o,U.tableId=$}for(let F of T){F.attribute=F.name;try{if(!F.is_hash_attribute&&(F.indexed||F.attribute&&!F.name)){if(!O[F.name]){let Ze=new Ci.default(!F.is_hash_attribute,F.is_hash_attribute);Le.trace(`openDB ${F.key} from ${r}`),O[F.name]=o.openDB(F.key,Ze)}let Oe=k.find(Ze=>Ze.name===F.name);Oe?k.splice(k.indexOf(Oe),1,F):k.push(F)}}catch(Oe){Le.error("Error trying to update attribute",F,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=Lv(_,f,Gd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let F of PT)F(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Dv(e){let t=Pe[e];if(t||(e==="data"?t=Pe[e]=sr:e==="system"?Object.defineProperty(Pe,"system",{value:t=Object.create(null),configurable:!0}):t=Pe[e]=Object.create(null)),qo&&!qo.has(e)){let r=new Set;t[Yd]=r,qo.set(e,r)}return t}function Lv(e,t,r){return e[t]=r,r}function Ha({database:e,table:t}){e||(e=MT),Gr();let r=Dv(e),s=(0,Me.join)((0,bt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,bt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,bt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Bn.get(i);if(!o){let c=new DT.default(i,!1);o=(0,xd.open)(c),Bn.set(i,o)}return o}async function xh(e){if(!Pe[e])throw new Error("Schema does not exist");let t=Pe[e];for(let r in t){let n=t[r].primaryStore.rootStore;Bn.delete(n.path),n.status==="open"&&(await n.close(),await wv.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[Yd]}delete Pe[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=MT);let u=Ha({database:t,table:e}),l=Pe[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Ci.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=bT(u)),E=s.find(F=>F.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,bt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new Ci.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Bo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Bo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(Ho),z.tableId||(z.tableId=1),h.putSync(Ho,z.tableId+1),E.tableId=z.tableId,_=Lv(l,e,Gd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${Bo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Bo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let F=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,F)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let F=new Ci.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,F);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<zc.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<zc.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=r7(_,k,O):p&&kd.signalSchemaChange(new Vd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of PT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function r7(e,t,r){try{let s=e.schemaVersion;await kd.signalSchemaChange(new Vd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,Cv.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),zc.workerData&&zc.workerData.restartNumber!==Uv.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>e7?await n:u>t7&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await kd.signalSchemaChange(new Vd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function s7({table:e,database:t}){let r=Ha({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function jp(e){PT.push(e)}var bt,Bo,xd,Me,fr,Fo,Ci,DT,Zt,wv,LT,Cv,kd,Vd,zc,Le,Uv,MT,Yd,sr,Pe,Ho,PT,$d,Bn,qo,e7,t7,de=Se(()=>{bt=C(Q()),Bo=C(xe()),xd=require("lmdb"),Me=require("path"),fr=require("fs"),Fo=C(we());nd();Ci=C(Du()),DT=C(Mu()),Zt=C(A()),wv=C(require("fs-extra")),LT=require("../index"),Cv=C(vt()),kd=C(qs()),Vd=C(Fr()),zc=require("worker_threads"),Le=C(x()),Uv=C(dt());Gc();MT="data",Yd=Symbol("defined-tables");(0,bt.initSync)();sr=Object.create(null),Pe=Object.create(null);(0,LT._assignPackageExport)("databases",Pe);(0,LT._assignPackageExport)("tables",sr);Ho=Symbol.for("next-table-id"),PT=[],Bn=new Map;a(Z9,"getTables");a(Gr,"getDatabases");a(j9,"resetDatabases");a(Qc,"readMetaDb");a(Dv,"ensureDB");a(Lv,"setTable");a(Ha,"database");a(xh,"dropDatabase");a(rt,"table");e7=1e3,t7=10;a(r7,"runIndexing");a(s7,"dropTableMeta");a(jp,"onUpdatedTable")});var V=m((z_e,Kv)=>{"use strict";var Hn=require("path"),Hv=require("fs-extra"),jt=x(),Mv=require("fs-extra"),Kd=require("os"),n7=require("net"),i7=require("recursive-iterator"),Ge=A(),o7=CR(),Pv=require("papaparse"),Wd=require("moment"),{inspect:a7}=require("util"),vv=require("is-number"),Q_e=require("lodash"),c7=require("minimist"),u7=require("https"),l7=require("http"),{hdb_errors:Qd}=W(),_7=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Fv=require("util").promisify(setTimeout),d7=100,E7=5,f7="",h7=4,Bv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Kv.exports={isEmpty:hr,isEmptyOrZeroLength:Os,arrayHasEmptyValues:p7,arrayHasEmptyOrZeroLengthValues:T7,buildFolderPath:R7,isBoolean:qv,errorizeMessage:m7,stripFileExtension:A7,autoCast:O7,autoCastJSON:Gv,autoCastJSONDeep:BT,removeDir:N7,compareVersions:b7,isCompatibleDataVersion:y7,escapeRawValue:I7,unescapeValue:w7,stringifyProps:C7,timeoutPromise:D7,isClusterOperation:M7,getClusterUser:v7,checkGlobalSchemaTable:P7,getHomeDir:kv,getPropsFilePath:U7,promisifyPapaParse:B7,removeBOM:Vv,createEventPromise:H7,checkProcessRunning:F7,checkSchemaTableExist:q7,checkSchemaExists:$v,checkTableExists:Yv,getStartOfTomorrowInSeconds:G7,getLimitKey:x7,isObject:g7,isNotEmptyAndHasValue:S7,autoCasterIsNumberCheck:xv,backtickASTSchemaItems:k7,isPortTaken:L7,createForkArgs:V7,autoCastBoolean:$7,async_set_timeout:Fv,getTableHashAttribute:Y7,doesSchemaExist:K7,doesTableExist:W7,stringifyObj:Q7,ms_to_time:z7,changeExtension:J7,getEnvCliRootPath:HT,noBootFile:X7,httpRequest:Z7,transformReq:j7,convertToMS:eee,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function m7(e){return e instanceof Error?e:new Error(e)}a(m7,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function S7(e){return!hr(e)&&(e||e===0||e===""||qv(e))}a(S7,"isNotEmptyAndHasValue");function Os(e){return hr(e)||e.length===0||e.size===0}a(Os,"isEmptyOrZeroLength");function p7(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(p7,"arrayHasEmptyValues");function T7(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(T7,"arrayHasEmptyOrZeroLengthValues");function R7(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(R7,"buildFolderPath");function qv(e){return hr(e)?!1:e===!0||e===!1}a(qv,"isBoolean");function g7(e){return hr(e)?!1:typeof e=="object"}a(g7,"isObject");function A7(e){return Os(e)?f7:e.slice(0,-h7)}a(A7,"stripFileExtension");function O7(e){return hr(e)||e===""||typeof e!="string"?e:Bv[e]!==void 0?Bv[e]:xv(e)===!0?Number(e):_7.test(e)?new Date(e):e}a(O7,"autoCast");function Gv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Gv,"autoCastJSON");function BT(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=BT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=BT(r);s!==r&&(e[t]=s)}return e}else return Gv(e)}a(BT,"autoCastJSONDeep");function xv(e){if(e.startsWith("0.")&&vv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vv(e))}a(xv,"autoCasterIsNumberCheck");async function N7(e){if(Os(e))throw new Error(`Directory path: ${e} does not exist`);try{await Mv.emptyDir(e),await Mv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(N7,"removeDir");function b7(e,t){if(Os(e)){jt.info("Invalid current version sent as parameter.");return}if(Os(t)){jt.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("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(b7,"compareVersions");function y7(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(y7,"isCompatibleDataVersion");function I7(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(I7,"escapeRawValue");function w7(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(w7,"unescapeValue");function C7(e,t){if(hr(e))return jt.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+Kd.EOL}!Os(s)&&s[0]===";"?r+=" "+s+n+Kd.EOL:Os(s)||(r+=s+"="+n+Kd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(C7,"stringifyProps");function kv(){let e;try{e=Kd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(kv,"getHomeDir");function U7(){let e=Hn.join(kv(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Hv.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(U7,"getPropsFilePath");function D7(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(D7,"timeoutPromise");async function L7(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=n7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(L7,"isPortTaken");function M7(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(M7,"isClusterOperation");function P7(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return Qd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Qd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(P7,"checkGlobalSchemaTable");function v7(e,t){if(hr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||Os(e)){jt.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){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(v7,"getClusterUser");function B7(){Pv.parsePromise=function(e,t,r){return new Promise(function(s,n){Pv.parse(e,{header:!0,transformHeader:Vv,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(B7,"promisifyPapaParse");function Vv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Vv,"removeBOM");function H7(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${a7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(H7,"createEventPromise");async function F7(e){let t=!0,r=0;do await Fv(d7*r++),(await o7.findPs(e)).length>0&&(t=!1);while(t&&r<E7);if(t)throw new Error(`process ${e} was not started`)}a(F7,"checkProcessRunning");function q7(e,t){let r=$v(e);if(r)return r;let s=Yv(e,t);if(s)return s}a(q7,"checkSchemaTableExist");function $v(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return Qd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a($v,"checkSchemaExists");function Yv(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return Qd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Yv,"checkTableExists");function G7(){let e=Wd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=Wd().utc().unix();return e-t}a(G7,"getStartOfTomorrowInSeconds");function x7(){return Wd().utc().format("DD-MM-YYYY")}a(x7,"getLimitKey");function k7(e){try{let t=new i7(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(k7,"backtickASTSchemaItems");function V7(e){return[e]}a(V7,"createForkArgs");function $7(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($7,"autoCastBoolean");function Y7(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Y7,"getTableHashAttribute");function K7(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(K7,"doesSchemaExist");function W7(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(W7,"doesTableExist");function Q7(e){try{return JSON.stringify(e)}catch{return e}}a(Q7,"stringifyObj");function z7(e){let t=Wd.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(z7,"ms_to_time");function J7(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(J7,"changeExtension");function HT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=c7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(HT,"getEnvCliRootPath");var vT;function X7(){if(vT)return vT;let e=HT();HT()&&Hv.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&(vT=!0)}a(X7,"noBootFile");function Z7(e,t){let r;return e.protocol==="http:"?r=l7:r=u7,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Z7,"httpRequest");function j7(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(j7,"transformReq");function eee(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(eee,"convertToMS")});var Q=m((X_e,zv)=>{"use strict";var FT=require("fs-extra"),zr=require("path"),Wv=require("os"),tee=require("properties-reader"),Jc=x(),Ui=V(),te=A(),zd=Nr(),ree="Error initializing environment manager",Jd="BOOT_PROPS_FILE_PATH",Qv=!1,see={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},nn={};zv.exports={BOOT_PROPS_FILE_PATH:Jd,getHdbBasePath:nee,setHdbBasePath:iee,get:oee,initSync:cee,setProperty:Ee,initTestEnvironment:uee};function nee(){return nn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nee,"getHdbBasePath");function iee(e){nn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(iee,"setHdbBasePath");function oee(e){let t=zd.getConfigValue(e);return t===void 0?nn[e]:t}a(oee,"get");function Ee(e,t){see[e]&&(nn[e]=t),zd.updateConfigObject(e,t)}a(Ee,"setProperty");function aee(){let e;try{e=Ui.getPropsFilePath(),FT.accessSync(e,FT.constants.F_OK|FT.constants.R_OK),Qv=!0;let t=tee(e);return nn[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),nn[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),nn[Jd]=e,!0}catch{return Jc.trace(`Environment manager found no properties file at ${e}`),!1}}a(aee,"doesPropFileExist");function cee(e=!1){try{(Qv||aee()||Ui.noBootFile())&&(zd.initConfig(e),nn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zd.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jc.error(ree),Jc.error(t),console.error(t),process.exit(1)}}a(cee,"initSync");function uee(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,u=zr.join(__dirname,"../../","unitTests");nn[Jd]=zr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,zr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,Wv.userInfo()?Wv.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,zr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,zr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,zr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,zr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,zr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,zr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,zr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ui.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ui.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ui.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Ui.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,zr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ui.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Jd}. Please check your boot props and settings files`;Jc.fatal(r),Jc.error(t)}}a(uee,"initTestEnvironment")});var nt=m((sde,fB)=>{"use strict";var yt=Q();yt.initSync();var lee=require("fs-extra"),_ee=require("semver"),eu=require("path"),{monotonicFactory:dee}=require("ulidx"),kT=dee(),Eee=require("util"),Xv=require("child_process"),fee=Eee.promisify(Xv.exec),hee=Xv.spawn,_e=Be(),Re=A(),Xd=V(),Mr=x(),Zd=Ps(),mee=yl(),Xc=Nr(),{Encoder:See,decode:VT}=require("msgpackr"),Zv=new See,{isEmpty:Di}=Xd,jv=br(),eB=12e10,pee=48*36e11,Tee=5e9,{connect:Ree,StorageType:tB,RetentionPolicy:rB,AckPolicy:jd,DeliverPolicy:eE,DiscardPolicy:gee,NatsConnection:j_e,JetStreamManager:ede,JetStreamClient:tde,StringCodec:rde,JSONCodec:Aee,createInbox:$T,headers:Oee,ErrorCode:Jv}=require("nats"),{PACKAGE_ROOT:Nee}=A(),bee=Ka(),{recordAction:yee}=(hi(),re(Y_)),sB=Aee(),Iee="clustering",wee=bee.engines[_e.NATS_SERVER_NAME],Cee=eu.join(Nee,"dependencies"),xT=eu.join(Cee,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qT,GT,Zc,Go,xo;fB.exports={runCommand:nB,checkNATSServerInstalled:Uee,createConnection:YT,getConnection:tE,getJetStreamManager:tu,getJetStream:iB,getNATSReferences:er,getServerList:Lee,createLocalStream:KT,listStreams:oB,deleteLocalStream:Mee,getServerConfig:ru,listRemoteStreams:Pee,viewStream:vee,viewStreamIterator:Bee,publishToStream:Hee,createWorkQueueStream:Fee,addSourceToWorkStream:cB,request:Gee,removeSourceFromWorkStream:lB,reloadNATS:WT,reloadNATSHub:xee,reloadNATSLeaf:kee,extractServerName:uB,requestErrorHandler:Vee,updateWorkStream:$ee,createLocalTableStream:dB,createTableStreams:Yee,purgeTableStream:EB,purgeSchemaTableStreams:Kee,getStreamInfo:Wee,updateLocalStreams:zee,closeConnection:Dee,getJsmServerName:su,addNatsMsgHeader:aB,updateIngestStreamConsumer:qee};async function nB(e,t=void 0){let{stdout:r,stderr:s}=await fee(e,{cwd:t});if(s)throw new Error(s.replace(`
24
+ `+Kp.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(G6,"getServerOptions");function x6(){let e=Wr.get(U6),t=Wr.get(D6),r;return e&&(e===!0||e.toUpperCase()===sP)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(x6,"getCORSOpts");function k6(){return Wr.get(P6)}a(k6,"getHeaderTimeoutConfig")});var Zp={};je(Zp,{disableNATS:()=>$6,setNATSReplicator:()=>Wp,start:()=>V6});function V6(){Rd.default.get(gd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&K6()}function $6(e=!0){lP=e}function K6(){if(lP)return;let e=Gr(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Wp(n,r,i)}}jp((r,s)=>{Wp(r.tableName,r.databaseName,r),s&&dP(r)}),!oP&&(oP=!0)}function Wp(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){dP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Jr;return(0,aP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<Y6}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Td(i.transaction,i)),o.user=i.user):o=_P),o}a(n,"getNATSTransaction")}function dP(e){let t=Rd.default.get(gd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Xp.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var zp,Jp,Xp,aP,cP,Rd,gd,uP,lP,Y6,_P,oP,Td,Qp,EP=Se(()=>{de();Xr();zp=C(nt()),Jp=C(Be()),Xp=C(Ps());na();aP=C(eT()),cP=C(vt()),Rd=C(Q()),gd=C(A()),uP=C(x());a(V6,"start");a($6,"disableNATS");Y6=2;a(K6,"assignReplicationSource");a(Wp,"setNATSReplicator");a(dP,"publishSchema");Td=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Rd.default.get(gd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(uP.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Xp.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},Qp=class extends Td{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,cP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};_P=new Qp});async function hP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await tT.getResource(e,{});n=new sT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await tT.get(e);i&&i.delete()}n=new Od(e,t)}return n}function rT(){return Ad++,Ad>65500&&(Ad=1),Ad}var fP,Bc,tT,Ad,Od,sT,mP=Se(()=>{de();_c();fP=C(vt()),Bc=C(x());xn();tT=rt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(hP,"getSession");Ad=1;a(rT,"getNextMessageId");Od=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=In.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,p=h.Resource,R=await Ye(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=rT();let U=k.id;Array.isArray(U)&&(U=fo(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Bc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return rT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=In.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ye(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},sT=class extends Od{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=rT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Bc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,fP.getNextMonotonicTime)()),(0,Bc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),tT.put(this.sessionRecord)),t.qos}}});var oT={};je(oT,{start:()=>Q6});async function Q6({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:l,onClose:_}=TP(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,tn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;W6&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,RP.getSuperUser)());let{onMessage:u,onClose:l}=TP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,tn.info)("Socket error",_)})},{port:t,securePort:s})}function TP(e,t,r,s,n){pP||(pP=!0,np(_=>{_.push({metric:"mqtt-connections",connections:nT})})),nT++;let i,o={protocolVersion:4},c=(0,Nd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){nT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,iT.get)(rn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&SP.notify({username:s.username,status:rn.AUTH_AUDIT_STATUS.SUCCESS,type:rn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iT.get)(rn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&SP.error({username:s.username,status:rn.AUTH_AUDIT_STATUS.FAILURE,type:rn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=hP({user:s,..._}),i=await i}catch(O){return(0,tn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,tn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,tn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=Ao(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Nd.generate)(f,o);t(T),Ss(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ks(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Nd,RP,iT,rn,tn,SP,W6,pP,nT,gP=Se(()=>{Nd=require("mqtt-packet");mP();RP=C(br());So();hi();es();iT=C(Q()),rn=C(A()),tn=C(x()),SP=(0,tn.loggerWithTag)("auth-event"),W6=!0;a(Q6,"start");nT=0;a(TP,"onSocket")});var DP={};je(DP,{loadComponent:()=>bd,loadComponentDirectories:()=>UP});function UP(e,t){t&&(cT=t),e&&(uT=e);let r=[];if((0,Ts.existsSync)(aT)){let n=(0,Ts.readdirSync)(aT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lr.join)(aT,o);r.push(bd(c,cT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(bd(s,cT,s)),Promise.all(r).then(()=>{CP=!0})}async function bd(e,t,r,s,n){if(!OP.has(e)){OP.set(e,!0),n&&(uT=n);try{let i,o=(0,Lr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ts.existsSync)(o)?i=(0,NP.parseDocument)((0,Ts.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Z6;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Ts.existsSync)(f=(0,Lr.join)(E,"node_modules",u));)if(E=(0,Lr.dirname)(E),E.length<(0,wP.getHdbBasePath)().length){f=null;break}if(f)_=await bd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=X6[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,rt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Hc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!AP.includes(p)){AP.push(p);let R=lT.get(_T.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);jM(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),uT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,IP.handleHDBError)("Can not reference parent directories");let p=(0,Lr.join)(e,l.files);for(let R of await(0,bP.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Lr.relative)(e,O),U=(0,Lr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await J6(O);Hc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Hc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${k.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new Fc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Fc(E),null,!0)}}if(Hc.isMainThread&&!CP&&(0,yP.watchDir)(e,async()=>UP()),i.extensionModule)return await Cu((0,Lr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Fc(i))}}}var Ts,Lr,Hc,NP,lT,_T,bP,yP,IP,wP,z6,J6,aT,uT,CP,cT,X6,Z6,AP,OP,Fc,LP=Se(()=>{Ts=require("fs"),Lr=require("path"),Hc=require("worker_threads"),NP=require("yaml"),lT=C(Q()),_T=C(A());hg();Tg();Rg();iL();$M();QM();bP=C(require("fast-glob")),yP=C(dt());vE();es();IP=C(W());Xr();de();eP();wP=C(Q()),z6=C(iP());g_();EP();gP();({readFile:J6}=Ts.promises),aT=lT.get(_T.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),uT=new Map;a(UP,"loadComponentDirectories");X6={REST:cp,graphqlSchema:PE,jsResource:HE,fastifyRoutes:xp,login:qE,static:kp,operationsApi:z6,customFunctions:{},clustering:Zp,authentication:dc,mqtt:oT},Z6={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},AP=[],OP=new Map;a(bd,"loadComponent");Fc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var FP=m((d_e,HP)=>{"use strict";var wd=require("fs-extra"),dT=require("path"),yd=x(),MP=V(),Id=A(),BP=Q(),j6=Nr();HP.exports=e9;async function e9(){let e=t9(),t=BP.get(Id.CONFIG_PARAMS.ROOTPATH),r=dT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Id.PACKAGE_ROOT}},n=dT.join(t,"node_modules");await wd.ensureDir(n);let i,o=!0,c=!1;try{i=await wd.readJson(r)}catch(u){if(MP.isEmptyOrZeroLength(e))return;if(u.code!==Id.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!MP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await PP(l);s.dependencies[u]=_+l}if(!o){yd.notify("Installing components"),await vP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await PP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(yd.notify("Removing component",u),c=!0);c&&(yd.notify("Updating components."),await vP(r,s))}a(e9,"installComponents");function t9(){let e=j6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(t9,"getComponentsConfig");async function PP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":dT.extname(e)||await wd.pathExists(e)?"file:":"github:"}a(PP,"getPkgPrefix");async function vP(e,t){yd.trace("npm installing components package.json",t),await wd.writeFile(e,JSON.stringify(t,null," ")),await C_().installAllRootModules(BP.get(Id.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(vP,"installPackages")});var xP=m((f_e,GP)=>{var{isMainThread:qP}=require("worker_threads"),{getTables:r9}=(de(),re(Ne)),{loadComponentDirectories:s9,loadComponent:n9}=(LP(),re(DP)),{resetResources:i9}=(_c(),re(RU)),o9=FP(),a9=Nr(),{dirname:c9}=require("path"),{getConnection:u9}=nt(),l9=Q(),_9=A(),ET=new Map;async function d9(e=!1){!qP&&l9.get(_9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&u9(),qP&&await o9();let t=i9();r9(),t.isWorker=e,await n9(c9(a9.getConfigFilePath()),t,"hdb",!0,ET),await s9(ET,t);let r=[];for(let[s]of ET)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(d9,"loadRootComponents");GP.exports.loadRootComponents=d9});var dt=m((S_e,Pn)=>{"use strict";var{Worker:E9,MessageChannel:f9,parentPort:Rs,isMainThread:pT,threadId:h9,workerData:qc}=require("worker_threads"),{PACKAGE_ROOT:m9}=A(),{join:$P,isAbsolute:S9,extname:Ud}=require("path"),{server:p9}=(es(),re(wu)),{watch:T9,readdir:R9}=require("fs/promises"),{totalmem:kP}=require("os"),TT=A(),Oi=x(),m_e=A(),{randomBytes:g9}=require("crypto"),A9=1024*1024,Mn=[],Ln=[],O9=50,YP=1e4,N9="restart",KP="request_thread_info",WP="resource_report",QP="thread_info",zP="added-port",b9="ack",fT;Pn.exports={startWorker:hT,restartWorkers:RT,shutdownWorkers:C9,workers:Mn,setMonitorListener:H9,onMessageFromWorkers:U9,onMessageByType:D9,broadcast:L9,broadcastWithAcknowledgement:P9,setChildListenerByType:w9,getWorkerIndex:XP,getTicketKeys:ZP,setMainIsWorker:y9,restartNumber:qc?.restartNumber||1};var JP;function XP(){return qc?qc.workerIndex:JP?0:void 0}a(XP,"getWorkerIndex");function y9(e){JP=e}a(y9,"setMainIsWorker");var Cd;function ZP(){return Cd||(Cd=pT?g9(48):qc.ticketKeys,Cd)}a(ZP,"getTicketKeys");Object.defineProperty(p9,"workerIndex",{get(){return XP()}});var jP={[KP](e,t){v9(t)},[WP](e,t){B9(t,e)}};function hT(e,t={}){let r=process.constrainedMemory?.()||kP();r=Math.min(r,kP());let s=Math.max(Math.floor(r/A9/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new f9;c.postMessage({type:zP,port:u},[u]),i.push(l)}Ud(e)||(e+=".js");let o=new E9(S9(e)?e:$P(m9,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Pn.exports.restartNumber,ticketKeys:ZP()},transferList:i},t));return Ld(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{hT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Oi.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<O9?(t.unexpectedRestarts=o.unexpectedRestarts+1,hT(e,t)):Oi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{jP[c.type]?.(c,o)}),Mn.push(o),q9(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(hT,"startWorker");var I9=[TT.THREAD_TYPES.HTTP];async function RT(e=null,t=2,r=!0){if(pT){if(r){let{loadRootComponents:n}=xP();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:TT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=I9.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),YP*2).unref();n.on("exit",()=>{clearTimeout(u),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 Rs.postMessage({type:N9,workerType:e})}a(RT,"restartWorkers");function w9(e,t){jP[e]=t}a(w9,"setChildListenerByType");function C9(e){return RT(e,1/0,!1)}a(C9,"shutdownWorkers");var ev=[];function U9(e){ev.push(e)}a(U9,"onMessageFromWorkers");var mT=new Map;function D9(e,t){let r=mT.get(e);r||mT.set(e,r=[]),r.push(t)}a(D9,"onMessageByType");function L9(e){for(let t of Ln)try{t.postMessage(e)}catch(r){Oi.error("Unable to send message to worker",r)}}a(L9,"broadcast");var Dd=new Map,M9=1;function P9(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=M9++,i=a(()=>{Dd.delete(n),--r===0&&t(),s!==Rs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Dd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Dd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Oi.error("Unable to send message to worker",n)}r===0&&t()})}a(P9,"broadcastWithAcknowledgement");function v9(e){e.postMessage({type:QP,workers:tv()})}a(v9,"sendThreadInfo");function tv(){let e=Date.now();return Mn.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(tv,"getChildWorkerInfo");function B9(e,t){e.resources=t,e.resources.updated=Date.now()}a(B9,"recordResourceReport");var ST;function H9(e){ST=e}a(H9,"setMonitorListener");var F9=1e3,VP=!1;function q9(){VP||(VP=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}ST&&ST()},F9).unref())}a(q9,"startMonitoring");var G9=1e3;if(Rs){Ld(Rs);for(let e of qc.addPorts)Ld(e);setInterval(()=>{let e=process.memoryUsage();Rs.postMessage({type:WP,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},G9).unref(),fT=a(()=>new Promise((e,t)=>{Rs.on("message",r),Rs.postMessage({type:KP});function r(s){s.type===QP&&(Rs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else fT=tv;Pn.exports.getThreadInfo=fT;function Ld(e,t){Ln.push(e),e.on("message",r=>{if(r.type===zP)Ld(r.port);else if(r.type===b9){let s=Dd.get(r.id);s&&s()}else{for(let n of ev)n(r,e);let s=mT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Oi.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Ld,"addPort");if(pT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await R9(s,{withFileTypes:!0}))i.isDirectory()&&r($P(s,i.name));for await(let{filename:i}of T9(s,{persistent:!1}))(Ud(i)===".ts"||Ud(i)===".js"||Ud(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await RT(),Oi.info("Reloaded HarperDB components")},100))},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Rs.on("message",async e=>{let{type:t}=e;t===TT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,Rs.unref(),setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate",h9),process.exit(0)},YP).unref())})});function bT(e){let t=e.auditStore=e.openDB(ov.AUDIT_STORE_NAME,k9);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,cv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{AT||(AT=setTimeout(()=>{if(AT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-rv,0]})){if((n[0]&15)===NT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},rv/10).unref())}),t}function vd(e,t,r){let s=_v[r.type],n=3;if(t?t.length>80?(s|=Md,n=(0,sn.writeKey)(t,gs,e?14:6),gT.setUint16(2,n)):(n=(0,sn.writeKey)(t,gs,e?11:3),gs[1]=n):gs[1]=0,e){s|=lv;let i=s&Md?6:3;gT.setFloat64(i,e),t||(n=i+8)}return gs[0]=s,s&Md?gT.setUint16(4,0):gs[2]=0,r.value?Buffer.concat([gs.slice(0,n),r.value]):gs.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Md,i=n?6:3,o;r&lv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&OT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:_v[r&7],value:u,lastVersion:o,get user(){return c?(0,sn.readKey)(e,i,c):void 0}}}var sn,Pd,ov,av,cv,uv,gs,gT,x9,k9,rv,AT,OT,sv,NT,nv,iv,Md,lv,_v,Gc=Se(()=>{sn=require("ordered-binary"),Pd=C(Q()),ov=C(xe()),av=C(A()),cv=C(dt()),uv=C(V());(0,Pd.initSync)();gs=Buffer.alloc(1024),gT=new DataView(gs.buffer,gs.byteOffset,1024),x9={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,sn.writeKey)(e[2],t,r+12)}else return(0,sn.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,sn.readKey)(e,t+12,r)]}else return(0,sn.readKey)(e,t,r)}},k9={encoding:"binary",keyEncoder:x9},rv=(0,uv.convertToMS)((0,Pd.get)(av.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,AT=null;a(bT,"openAuditStore");OT=16,sv=1,NT=2,nv=3,iv=4,Md=128,lv=64,_v={put:sv|OT,[sv]:"put",delete:NT,[NT]:"delete",message:nv|OT,[nv]:"message",invalidate:iv,[iv]:"invalidate"};a(vd,"createAuditEntry");a(vn,"readAuditEntry")});var yT,Ni,V9,xc,Bd,dv=Se(()=>{yT=C(vt());Gc();Ni=Symbol("completion"),V9=100,xc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,yT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Ni]&&(i||(i=[]),i.push(d[Ni])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,vd(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<V9>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},Bd=class extends xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,yT.getNextMonotonicTime)())}getReadTxn(){}}});function mv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Po||((0,bi.onMessageByType)(fv,d=>{let E=d.auditIds;wT(d.path,E,d.txnId)}),(0,bi.onMessageByType)(hv,d=>{(0,As.trace)("confirming to proceed with txn",d.txnId)}),Po=Object.create(null));let c=Po[i]||(Po[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=fo(t);let l=new IT(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function wT(e,t,r,s){if(!Po)return;let n=Po[e];if(n){if(Mo&&Mo+1!==r){(0,As.trace)("Waiting to ensure latest txn id",Mo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Hd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c);if(Mo+1!==r){await(0,bi.broadcastWithAcknowledgement)({type:hv,txnId:r});for(let[o,c]of Hd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c)}Hd.delete(r),(0,As.trace)("Proceeding with txn id",r),Mo=r-1,wT(e,t,r,s)})();return Hd.set(r,i),i}(0,As.trace)("Notifying with txn id",r,s),Mo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,Ev.writeKey)(i,Y9,0);let _=i[3];_&&(i.length=3);let d,E=fo(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,As.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=vn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,As.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function Sv(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&$9)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,bi.broadcast)({type:fv,path:n,auditIds:l,txnId:c,start:u}),wT(n,l,c,!0))})}}var As,bi,Ev,fv,hv,$9,Po,Y9,IT,Mo,Hd,pv=Se(()=>{As=C(x()),bi=C(dt()),Ev=require("ordered-binary");na();_c();Gc();fv="transaction",hv="transaction-await",$9=67108864,Y9=Buffer.alloc(4096);a(mv,"addSubscription");IT=class extends Jr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Hd=new Map;a(wT,"notifyFromTransactionData");a(Sv,"listenToCommits")});var Np={};je(Np,{coerceType:()=>Fd,makeTable:()=>Gd,setServerUtilities:()=>J9});function Gd(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),Sv(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&JT();class F extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,q=w.table?Pe[c][w.table]:F;if(c===Qr.SYSTEM_SCHEMA_NAME&&(w.table===Qr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Qr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[q.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await q.getResource(w.id,w,kc);switch(w.type){case"put":return L._writeUpdate(v,kc);case"delete":return L._writeDelete(kc);case"publish":return L._writePublish(v,kc);case"invalidate":return L.invalidate(kc);default:wi.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ii.getWorkerIndex)()):(0,Ii.getWorkerIndex)()===0,q=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(q)for await(let L of q)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(rt({table:n,database:c,attributes:J,origin:"cluster"}),Yc.signalSchemaChange(new Kc.SchemaEventMsg(process.pid,Qr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&Yc.signalUserChange(new Kc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,q,G={transaction:w?.getReadTxn()},X;return iu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?q(Y):(y[ce]=J?.value,y[Xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,q=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ii.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&F.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,JT(),F.audit=!0}static coerceId(S){return S===""?null:Fd(S,k)}static async dropTable(){if(delete Pe[c][n],c===o){for(let S in r)_.remove(F.tableName+"/"+S),r[S].drop();_.remove(F.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Yc.signalSchemaChange(new Kc.SchemaEventMsg(process.pid,Qr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Us])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=CT(y,"read");N.select=w.filter(q=>v[q])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=CT(w,"update");for(let q in N)if(!v[q])return!1;if(D)for(let q of w){let L=q.attribute_name;!q.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=CT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ft],y&&(S=Object.assign(y,S)),this[ft]=y=S}return!this[ce]&&t&&!(y||(y=this[ft]))?.[t]&&(y||(y=this[ft]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=F.Source,q,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(q=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ni]:q}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,Iv.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,q=this[ae];y||(this[ce]={}),D.addWrite({key:q,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(q);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=oa(S);else{if(S[gv]&&(w=!Ru(S),w))return;t&&S[t]!==q&&(S[t]=q),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=oa(S);let Y=F.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(q,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(wi.trace("Checking timestamp for put",q,this[Xt]>L,this[Xt],L),this[Xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,vo.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[Ni]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(v,q)=>{let L=this[ce];if(q){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=F.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Xt]>v))return Ze(this[ae],L),wi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||zT(),q||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[Ni]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(on=>on.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,yi.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Fd(De,j)):Fd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,bv.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Vc.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let on=r[De];Y.estimated_count=on?on.getValuesCount(Y[1]??Y.value):1/0}}else j===Vc.SEARCH_TYPES.CONTAINS||j===Vc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Vc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=W9:Y.estimated_count=K9}return Y.estimated_count}));let v=N.getReadTxn();v.use();let q=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:q?.length<4}:{start:!1,transaction:v,lazy:q?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):vo.SKIP);else{let Y=IE(L,v,D,F,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(wE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let on=y[De],nE=IE(on,v,D,F,S.allowFullScan);Y=Y.concat(nE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,on={transaction:v,lazy:De>0||q?.length<4,alwaysPrefetch:!0};return Y.map(nE=>new Promise(iE=>iu(nE,X,on,null,!1,wB=>{let oE=wB?.value;if(!oE)return iE(vo.SKIP);for(let aE=0;aE<De;aE++)if(!j[aE](oE))return iE(vo.SKIP);iE(oE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||rt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=mv(F,this[ae]??null,function(v,q,L){try{this.send({id:v,timestamp:L,...q})}catch(G){console.error(G)}},S.startTime,this[Us]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Us]){if(w){if(y)throw new yi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:q}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=vn(q,i);(D==null||Nv(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:q,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=q;if(q.length>3&&(J=q.slice(2)),X!==s)continue;if(D==null||Nv(D,J)){let Y=vn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){wi.error("Error getting history entry",q,G)}for(let q=v.length;q>0;)N.send(v[--q]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:q,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,yv.MAXIMUM_KEY],versions:!0}))q&&N.send({id:v,timestamp:L,value:q})}else{y&&!w&&(w=0);let v=this[Xt];if(w<v){let q=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=vn(X,i);q.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=q.length;G>0;)N.send(q[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(q,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=F.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||zT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[Ni]:w};return!D.hasWrittenTime&&this[Xt]>q&&(q=X.newTxnTime=this[Xt]+.001),i.put(y,G??null,q),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new xc(i,S.user,u)),D}else return new Bd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(q=>typeof q=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new yi.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}wasLoadedFromSource(){return R?!!this[Av]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new yi.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new yi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return rt({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return rt({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Au(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,q]=D;D.length>3&&(q=D.slice(2)),v===s&&(N=i.remove(q))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,q]=D;if(D.length>3&&(q=D.slice(2)),v!==s)continue;let L=vn(y,i);L.id=q,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],q=u.get(v);if(q){let L=vn(q,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}F.updatedAttributes();let Oe=F.prototype;return Oe[gv]=!0,d&&F.setTTLExpiration(d/1e3),b&&IB(),F;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,q=N?.[y],L=S?.[y];if(q===L&&!v)continue;D=!0;let G=(0,$c.getIndexedValues)(L);if(G){Tv&&w.prefetch(G.map(X=>({key:X,value:Z})),Ov);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,$c.getIndexedValues)(q),G){Tv&&w.prefetch(G.map(X=>({key:X,value:Z})),Ov);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function iu(Z,S,N,D,y,w){let v=a(()=>{let q=N.transaction;if(q?.isDone)throw new Error("Invalid read transaction");let L;q&&!q.hasRunLoadRecord&&(L=!0,q.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(q)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&Oo(Y,"cache-hit",n),Y&&!y&&(D&&(D[Av]=!0),R))return Vo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(iu,"loadRecord");function Li(){P=new Set,(0,Ii.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Li,"setupCommitListeners");async function Vo(Z,S=null,N,D){if(N<0){let L;return P||Li(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G(Vo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Vo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},q=D?.responseHeaders;q&&(v.responseHeaders=q);try{let L=performance.now(),G=await F.Source.get(Z,v),X=performance.now()-L;Ss(X,"cache-resolution",n),q&&q.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,$c.getNextMonotonicTime)());let j=Ze(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],vd(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Vo,"getFromSource");function Fn(Z){T||(T=i.get([Rv,UT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([Rv,UT.threadId],T)},50))}a(Fn,"recordDeletion");function zT(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),Fn(-1)}}},F.getRecordCount()*100+z9).unref())}a(zT,"enqueueDeletionCleanup");function JT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(JT,"addDeleteRemoval");function IB(){(0,Ii.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&F.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){wi.error("Error in evicting old records",Z)}},Q9).unref()}a(IB,"runRecordExpirationEviction")}function CT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Ov(){}function J9(e){Iv=e}function Fd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!X9.test(e)&&(e+="Z"),new Date(e)):r?e:(0,qd.autoCast)(e)}function Nv(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var Qr,vo,$c,bv,UT,Vc,Wc,yi,Yc,Kc,wi,yv,Ii,qd,Iv,K9,W9,Q9,Tv,Rv,Xt,gv,G_e,Av,kc,z9,X9,nd=Se(()=>{Qr=C(A()),vo=require("lmdb"),$c=C(vt()),bv=require("lodash"),UT=require("worker_threads");Xr();dv();Vc=C(xe()),Wc=C(Q());pv();yi=C(W()),Yc=C(qs()),Kc=C(Fr());de();yu();wi=C(x());Nu();xn();yv=require("ordered-binary"),Ii=C(dt());Gc();qd=C(V());hi();K9=1e8,W9=1e7,Q9=6e4;Wc.initSync();Tv=Wc.get(Qr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rv=Symbol.for("deletions"),Xt=Symbol.for("version"),gv=Symbol.for("incremental-update"),G_e=Symbol("source-resource"),Av=Symbol("load-from-source"),kc={isNotification:!0,allowInvalidated:!0},z9=(0,qd.convertToMS)(Wc.get(Qr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Gd,"makeTable");a(CT,"attributesAsObject");a(Ov,"noop");a(J9,"setServerUtilities");X9=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Fd,"coerceType");a(Nv,"isDescendantId")});var Ne={};je(Ne,{database:()=>Ha,databases:()=>Pe,dropDatabase:()=>xh,dropTableMeta:()=>s7,getDatabases:()=>Gr,getTables:()=>Z9,onUpdatedTable:()=>jp,readMetaDb:()=>Qc,resetDatabases:()=>j9,table:()=>rt,tables:()=>sr});function Z9(){return $d||Gr(),sr||{}}function Gr(){if($d)return Pe;$d=!0,qo=new Map;let e=(0,bt.getHdbBasePath)()&&(0,Me.join)((0,bt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,bt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,bt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Qc((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,Fo.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,Fo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Fo.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Fo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);Qc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&Qc((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&Qc(u,o,r,null,!0)}}for(let r in Pe){let s=qo.get(r);if(s){let n=Pe[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete Pe[r],r==="data"){for(let n in sr)delete sr[n];delete sr[Yd]}}return qo=null,Pe}}function j9(){$d=!1;for(let[,e]of Bn)e.needsDeletion=!0;Gr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return Pe}function Qc(e,t,r=MT,s,n){let i=new DT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,xd.open)(i),Bn.set(e,o));let c=new Ci.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Bo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,xd.open)(i),l.isLegacy=!0):l=bT(o));let _=Dv(r),d=_[Yd],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let F of T)if(F.is_hash_attribute||F.isPrimaryKey){p=F;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,bt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(Ho)||0)&&u.putSync(Ho,$+1):(p.tableId=$=u.get(Ho),$||($=1),u.putSync(Ho,$+1),u.putSync(p.key,p));let F=new Ci.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,F),U.rootStore=o,U.tableId=$}for(let F of T){F.attribute=F.name;try{if(!F.is_hash_attribute&&(F.indexed||F.attribute&&!F.name)){if(!O[F.name]){let Ze=new Ci.default(!F.is_hash_attribute,F.is_hash_attribute);Le.trace(`openDB ${F.key} from ${r}`),O[F.name]=o.openDB(F.key,Ze)}let Oe=k.find(Ze=>Ze.name===F.name);Oe?k.splice(k.indexOf(Oe),1,F):k.push(F)}}catch(Oe){Le.error("Error trying to update attribute",F,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=Lv(_,f,Gd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let F of PT)F(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Dv(e){let t=Pe[e];if(t||(e==="data"?t=Pe[e]=sr:e==="system"?Object.defineProperty(Pe,"system",{value:t=Object.create(null),configurable:!0}):t=Pe[e]=Object.create(null)),qo&&!qo.has(e)){let r=new Set;t[Yd]=r,qo.set(e,r)}return t}function Lv(e,t,r){return e[t]=r,r}function Ha({database:e,table:t}){e||(e=MT),Gr();let r=Dv(e),s=(0,Me.join)((0,bt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,bt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,bt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Bn.get(i);if(!o){let c=new DT.default(i,!1);o=(0,xd.open)(c),Bn.set(i,o)}return o}async function xh(e){if(!Pe[e])throw new Error("Schema does not exist");let t=Pe[e];for(let r in t){let n=t[r].primaryStore.rootStore;Bn.delete(n.path),n.status==="open"&&(await n.close(),await wv.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[Yd]}delete Pe[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=MT);let u=Ha({database:t,table:e}),l=Pe[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Ci.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=bT(u)),E=s.find(F=>F.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,bt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new Ci.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Bo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Bo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(Ho),z.tableId||(z.tableId=1),h.putSync(Ho,z.tableId+1),E.tableId=z.tableId,_=Lv(l,e,Gd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${Bo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Bo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let F=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,F)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let F=new Ci.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,F);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<zc.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<zc.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=r7(_,k,O):p&&kd.signalSchemaChange(new Vd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of PT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function r7(e,t,r){try{let s=e.schemaVersion;await kd.signalSchemaChange(new Vd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,Cv.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),zc.workerData&&zc.workerData.restartNumber!==Uv.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>e7?await n:u>t7&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await kd.signalSchemaChange(new Vd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function s7({table:e,database:t}){let r=Ha({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function jp(e){PT.push(e)}var bt,Bo,xd,Me,fr,Fo,Ci,DT,Zt,wv,LT,Cv,kd,Vd,zc,Le,Uv,MT,Yd,sr,Pe,Ho,PT,$d,Bn,qo,e7,t7,de=Se(()=>{bt=C(Q()),Bo=C(xe()),xd=require("lmdb"),Me=require("path"),fr=require("fs"),Fo=C(we());nd();Ci=C(Du()),DT=C(Mu()),Zt=C(A()),wv=C(require("fs-extra")),LT=require("../index"),Cv=C(vt()),kd=C(qs()),Vd=C(Fr()),zc=require("worker_threads"),Le=C(x()),Uv=C(dt());Gc();MT="data",Yd=Symbol("defined-tables");(0,bt.initSync)();sr=Object.create(null),Pe=Object.create(null);(0,LT._assignPackageExport)("databases",Pe);(0,LT._assignPackageExport)("tables",sr);Ho=Symbol.for("next-table-id"),PT=[],Bn=new Map;a(Z9,"getTables");a(Gr,"getDatabases");a(j9,"resetDatabases");a(Qc,"readMetaDb");a(Dv,"ensureDB");a(Lv,"setTable");a(Ha,"database");a(xh,"dropDatabase");a(rt,"table");e7=1e3,t7=10;a(r7,"runIndexing");a(s7,"dropTableMeta");a(jp,"onUpdatedTable")});var V=m((z_e,Kv)=>{"use strict";var Hn=require("path"),Hv=require("fs-extra"),jt=x(),Mv=require("fs-extra"),Kd=require("os"),n7=require("net"),i7=require("recursive-iterator"),Ge=A(),o7=CR(),Pv=require("papaparse"),Wd=require("moment"),{inspect:a7}=require("util"),vv=require("is-number"),Q_e=require("lodash"),c7=require("minimist"),u7=require("https"),l7=require("http"),{hdb_errors:Qd}=W(),_7=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Fv=require("util").promisify(setTimeout),d7=100,E7=5,f7="",h7=4,Bv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Kv.exports={isEmpty:hr,isEmptyOrZeroLength:Os,arrayHasEmptyValues:p7,arrayHasEmptyOrZeroLengthValues:T7,buildFolderPath:R7,isBoolean:qv,errorizeMessage:m7,stripFileExtension:A7,autoCast:O7,autoCastJSON:Gv,autoCastJSONDeep:BT,removeDir:N7,compareVersions:b7,isCompatibleDataVersion:y7,escapeRawValue:I7,unescapeValue:w7,stringifyProps:C7,timeoutPromise:D7,isClusterOperation:M7,getClusterUser:v7,checkGlobalSchemaTable:P7,getHomeDir:kv,getPropsFilePath:U7,promisifyPapaParse:B7,removeBOM:Vv,createEventPromise:H7,checkProcessRunning:F7,checkSchemaTableExist:q7,checkSchemaExists:$v,checkTableExists:Yv,getStartOfTomorrowInSeconds:G7,getLimitKey:x7,isObject:g7,isNotEmptyAndHasValue:S7,autoCasterIsNumberCheck:xv,backtickASTSchemaItems:k7,isPortTaken:L7,createForkArgs:V7,autoCastBoolean:$7,async_set_timeout:Fv,getTableHashAttribute:Y7,doesSchemaExist:K7,doesTableExist:W7,stringifyObj:Q7,ms_to_time:z7,changeExtension:J7,getEnvCliRootPath:HT,noBootFile:X7,httpRequest:Z7,transformReq:j7,convertToMS:eee,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function m7(e){return e instanceof Error?e:new Error(e)}a(m7,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function S7(e){return!hr(e)&&(e||e===0||e===""||qv(e))}a(S7,"isNotEmptyAndHasValue");function Os(e){return hr(e)||e.length===0||e.size===0}a(Os,"isEmptyOrZeroLength");function p7(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(p7,"arrayHasEmptyValues");function T7(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(T7,"arrayHasEmptyOrZeroLengthValues");function R7(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(R7,"buildFolderPath");function qv(e){return hr(e)?!1:e===!0||e===!1}a(qv,"isBoolean");function g7(e){return hr(e)?!1:typeof e=="object"}a(g7,"isObject");function A7(e){return Os(e)?f7:e.slice(0,-h7)}a(A7,"stripFileExtension");function O7(e){return hr(e)||e===""||typeof e!="string"?e:Bv[e]!==void 0?Bv[e]:xv(e)===!0?Number(e):_7.test(e)?new Date(e):e}a(O7,"autoCast");function Gv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Gv,"autoCastJSON");function BT(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=BT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=BT(r);s!==r&&(e[t]=s)}return e}else return Gv(e)}a(BT,"autoCastJSONDeep");function xv(e){if(e.startsWith("0.")&&vv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vv(e))}a(xv,"autoCasterIsNumberCheck");async function N7(e){if(Os(e))throw new Error(`Directory path: ${e} does not exist`);try{await Mv.emptyDir(e),await Mv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(N7,"removeDir");function b7(e,t){if(Os(e)){jt.info("Invalid current version sent as parameter.");return}if(Os(t)){jt.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("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(b7,"compareVersions");function y7(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(y7,"isCompatibleDataVersion");function I7(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(I7,"escapeRawValue");function w7(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(w7,"unescapeValue");function C7(e,t){if(hr(e))return jt.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+Kd.EOL}!Os(s)&&s[0]===";"?r+=" "+s+n+Kd.EOL:Os(s)||(r+=s+"="+n+Kd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(C7,"stringifyProps");function kv(){let e;try{e=Kd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(kv,"getHomeDir");function U7(){let e=Hn.join(kv(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Hv.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(U7,"getPropsFilePath");function D7(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(D7,"timeoutPromise");async function L7(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=n7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(L7,"isPortTaken");function M7(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(M7,"isClusterOperation");function P7(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return Qd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Qd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(P7,"checkGlobalSchemaTable");function v7(e,t){if(hr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||Os(e)){jt.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){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(v7,"getClusterUser");function B7(){Pv.parsePromise=function(e,t,r){return new Promise(function(s,n){Pv.parse(e,{header:!0,transformHeader:Vv,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(B7,"promisifyPapaParse");function Vv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Vv,"removeBOM");function H7(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${a7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(H7,"createEventPromise");async function F7(e){let t=!0,r=0;do await Fv(d7*r++),(await o7.findPs(e)).length>0&&(t=!1);while(t&&r<E7);if(t)throw new Error(`process ${e} was not started`)}a(F7,"checkProcessRunning");function q7(e,t){let r=$v(e);if(r)return r;let s=Yv(e,t);if(s)return s}a(q7,"checkSchemaTableExist");function $v(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return Qd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a($v,"checkSchemaExists");function Yv(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return Qd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Yv,"checkTableExists");function G7(){let e=Wd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=Wd().utc().unix();return e-t}a(G7,"getStartOfTomorrowInSeconds");function x7(){return Wd().utc().format("DD-MM-YYYY")}a(x7,"getLimitKey");function k7(e){try{let t=new i7(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(k7,"backtickASTSchemaItems");function V7(e){return[e]}a(V7,"createForkArgs");function $7(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($7,"autoCastBoolean");function Y7(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Y7,"getTableHashAttribute");function K7(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(K7,"doesSchemaExist");function W7(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(W7,"doesTableExist");function Q7(e){try{return JSON.stringify(e)}catch{return e}}a(Q7,"stringifyObj");function z7(e){let t=Wd.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(z7,"ms_to_time");function J7(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(J7,"changeExtension");function HT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=c7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(HT,"getEnvCliRootPath");var vT;function X7(){if(vT)return vT;let e=HT();HT()&&Hv.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&(vT=!0)}a(X7,"noBootFile");function Z7(e,t){let r;return e.protocol==="http:"?r=l7:r=u7,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Z7,"httpRequest");function j7(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(j7,"transformReq");function eee(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(eee,"convertToMS")});var Q=m((X_e,zv)=>{"use strict";var FT=require("fs-extra"),zr=require("path"),Wv=require("os"),tee=require("properties-reader"),Jc=x(),Ui=V(),te=A(),zd=Nr(),ree="Error initializing environment manager",Jd="BOOT_PROPS_FILE_PATH",Qv=!1,see={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},nn={};zv.exports={BOOT_PROPS_FILE_PATH:Jd,getHdbBasePath:nee,setHdbBasePath:iee,get:oee,initSync:cee,setProperty:Ee,initTestEnvironment:uee};function nee(){return nn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nee,"getHdbBasePath");function iee(e){nn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(iee,"setHdbBasePath");function oee(e){let t=zd.getConfigValue(e);return t===void 0?nn[e]:t}a(oee,"get");function Ee(e,t){see[e]&&(nn[e]=t),zd.updateConfigObject(e,t)}a(Ee,"setProperty");function aee(){let e;try{e=Ui.getPropsFilePath(),FT.accessSync(e,FT.constants.F_OK|FT.constants.R_OK),Qv=!0;let t=tee(e);return nn[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),nn[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),nn[Jd]=e,!0}catch{return Jc.trace(`Environment manager found no properties file at ${e}`),!1}}a(aee,"doesPropFileExist");function cee(e=!1){try{(Qv||aee()||Ui.noBootFile())&&(zd.initConfig(e),nn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zd.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jc.error(ree),Jc.error(t),console.error(t),process.exit(1)}}a(cee,"initSync");function uee(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,u=zr.join(__dirname,"../../","unitTests");nn[Jd]=zr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,zr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,Wv.userInfo()?Wv.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,zr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,zr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,zr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,zr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,zr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,zr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,zr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ui.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ui.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ui.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Ui.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,zr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ui.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Jd}. Please check your boot props and settings files`;Jc.fatal(r),Jc.error(t)}}a(uee,"initTestEnvironment")});var nt=m((sde,fB)=>{"use strict";var yt=Q();yt.initSync();var lee=require("fs-extra"),_ee=require("semver"),eu=require("path"),{monotonicFactory:dee}=require("ulidx"),kT=dee(),Eee=require("util"),Xv=require("child_process"),fee=Eee.promisify(Xv.exec),hee=Xv.spawn,_e=Be(),Re=A(),Xd=V(),Mr=x(),Zd=Ps(),mee=yl(),Xc=Nr(),{Encoder:See,decode:VT}=require("msgpackr"),Zv=new See,{isEmpty:Di}=Xd,jv=br(),eB=12e10,pee=48*36e11,Tee=5e9,{connect:Ree,StorageType:tB,RetentionPolicy:rB,AckPolicy:jd,DeliverPolicy:eE,DiscardPolicy:gee,NatsConnection:j_e,JetStreamManager:ede,JetStreamClient:tde,StringCodec:rde,JSONCodec:Aee,createInbox:$T,headers:Oee,ErrorCode:Jv}=require("nats"),{PACKAGE_ROOT:Nee}=A(),bee=Ka(),{recordAction:yee}=(hi(),re(Y_)),sB=Aee(),Iee="clustering",wee=bee.engines[_e.NATS_SERVER_NAME],Cee=eu.join(Nee,"dependencies"),xT=eu.join(Cee,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qT,GT,Zc,Go,xo;fB.exports={runCommand:nB,checkNATSServerInstalled:Uee,createConnection:YT,getConnection:tE,getJetStreamManager:tu,getJetStream:iB,getNATSReferences:er,getServerList:Lee,createLocalStream:KT,listStreams:oB,deleteLocalStream:Mee,getServerConfig:ru,listRemoteStreams:Pee,viewStream:vee,viewStreamIterator:Bee,publishToStream:Hee,createWorkQueueStream:Fee,addSourceToWorkStream:cB,request:Gee,removeSourceFromWorkStream:lB,reloadNATS:WT,reloadNATSHub:xee,reloadNATSLeaf:kee,extractServerName:uB,requestErrorHandler:Vee,updateWorkStream:$ee,createLocalTableStream:dB,createTableStreams:Yee,purgeTableStream:EB,purgeSchemaTableStreams:Kee,getStreamInfo:Wee,updateLocalStreams:zee,closeConnection:Dee,getJsmServerName:su,addNatsMsgHeader:aB,updateIngestStreamConsumer:qee};async function nB(e,t=void 0){let{stdout:r,stderr:s}=await fee(e,{cwd:t});if(s)throw new Error(s.replace(`
25
25
  `,""));return r.replace(`
26
26
  `,"")}a(nB,"runCommand");async function Uee(){try{await lee.access(xT)}catch{return!1}let e=await nB(`${xT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _ee.eq(t,wee)}a(Uee,"checkNATSServerInstalled");async function YT(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await jv.getClusterUser();if(Di(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Mr.trace("create nats connection called");let i=await Ree({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:yt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:yt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:yt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Mr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(YT,"createConnection");async function Dee(){Ns&&(await Ns.drain(),Ns=void 0,Go=void 0,xo=void 0,jc=void 0)}a(Dee,"closeConnection");var Ns,jc;async function tE(){return jc||(jc=YT(yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ns=await jc),Ns||jc}a(tE,"getConnection");async function tu(){if(Go)return Go;Di(Ns)&&await tE();let{domain:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Go=await Ns.jetstreamManager({domain:e}),Go}a(tu,"getJetStreamManager");async function iB(){if(xo)return xo;Di(Ns)&&await tE();let{domain:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xo=Ns.jetstream({domain:e}),xo}a(iB,"getJetStream");async function er(){let e=Ns||await tE(),t=Go||await tu(),r=xo||await iB();return{connection:e,jsm:t,js:r}}a(er,"getNATSReferences");async function Lee(e){let t=yt.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await jv.getClusterUser(),n=await YT(t,r,s),i=$T(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=sB.decode(_.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 Xd.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(Lee,"getServerList");async function KT(e,t){let{jsm:r}=await er(),s=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:tB.File,retention:rB.Limits,subjects:t,discard:gee.Old,duplicate_window:eB,max_msgs:n,max_bytes:i,max_age:s})}a(KT,"createLocalStream");async function oB(){let{jsm:e}=await er(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(oB,"listStreams");async function Mee(e){let{jsm:t}=await er();await t.streams.delete(e)}a(Mee,"deleteLocalStream");async function Pee(e){let{connection:t}=await er(),r=[],s=$T(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(sB.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(Pee,"listRemoteStreams");async function vee(e,t=void 0,r=void 0){let{jsm:s,js:n}=await er(),i=kT(),o={durable_name:i,ack_policy:jd.Explicit};t&&(o.deliver_policy=eE.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let l=[];for await(let _ of u){let d=VT(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(vee,"viewStream");async function*Bee(e,t=void 0,r=void 0){let{jsm:s,js:n}=await er(),i=kT(),o={durable_name:i,ack_policy:jd.Explicit};t&&(o.deliver_policy=eE.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let l of u){let _=VT(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(Bee,"viewStreamIterator");async function Hee(e,t,r,s){Mr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=aB(s,r);let{js:n}=await er(),i=await su(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Zv.encode(s);try{Mr.trace(`publishToStream publishing to subject: ${o}`),yee(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return _B(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Mr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await KT(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Hee,"publishToStream");function aB(e,t){t===void 0&&(t=Oee());let r=yt.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Xd.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${kT()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(aB,"addNatsMsgHeader");function ru(e){e=e.toLowerCase();let t=eu.join(yt.get(Re.CONFIG_PARAMS.ROOTPATH),Iee);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Di(GT)&&(GT={port:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:eu.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),GT;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Di(qT)&&(qT={port:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:eu.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),qT;Mr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ru,"getServerConfig");async function Fee(e){let{jsm:t}=await er(),r=await su();try{await t.streams.add({name:e.stream_name,storage:tB.File,retention:rB.Limits,duplicate_window:eB,max_age:pee,max_bytes:Tee,subjects:[`${_e.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:jd.Explicit,durable_name:e.durable_name,deliver_policy:eE.All,max_ack_pending:1e4});else throw s}}a(Fee,"createWorkQueueStream");async function qee(){let{jsm:e}=await er();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Mr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),Mr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:jd.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:eE.All,max_ack_pending:1e4}))}a(qee,"updateIngestStreamConsumer");async function cB(e,t,r){let{jsm:s}=await er(),n=await s.streams.info(t),i=uB(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Zd.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,p=n.config.sources.length;T<p;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(cB,"addSourceToWorkStream");function uB(e){return e.split(".")[1]}a(uB,"extractServerName");async function lB(e,t,r){let{schema:s,table:n}=r,i=Zd.createNatsTableStreamName(s,n),{jsm:o}=await er(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(lB,"removeSourceFromWorkStream");async function Gee(e,t,r=2e4,s=$T()){if(!Xd.isObject(t))throw new Error("data param must be an object");let n=Zv.encode(t),{connection:i}=await er(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return VT(c.data)}a(Gee,"request");function WT(e){return new Promise(async(t,r)=>{let s=hee(xT,["--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(WT,"reloadNATS");async function xee(){let{pid_file_path:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await WT(e)}a(xee,"reloadNATSHub");async function kee(){let{pid_file_path:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await WT(e)}a(kee,"reloadNATSLeaf");function Vee(e,t,r){let s;switch(e.code){case Jv.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Jv.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Vee,"requestErrorHandler");async function $ee(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await _B(async()=>{e.subscribe===!0?await cB(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await lB(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a($ee,"updateWorkStream");function _B(e){return mee.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_B,"exclusiveLock");async function dB(e,t){let r=Zd.createNatsTableStreamName(e,t),s=await su(),n=Qee(e,t,s);await KT(r,[n])}a(dB,"createLocalTableStream");async function Yee(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await dB(s,n)}}a(Yee,"createTableStreams");async function EB(e,t){if(yt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Zd.createNatsTableStreamName(e,t),{jsm:s}=await er();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Mr.warn(r);else throw r}}a(EB,"purgeTableStream");async function Kee(e,t){if(yt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await EB(e,t[r])}a(Kee,"purgeSchemaTableStreams");async function Wee(e){return(await tu()).streams.info(e)}a(Wee,"getStreamInfo");function Qee(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Qee,"createSubjectName");async function su(){if(Zc)return Zc;if(Zc=(await tu())?.nc?.info?.server_name,Zc===void 0)throw new Error("Unable to get jetstream manager server name");return Zc}a(su,"getJsmServerName");async function zee(){let e=await tu(),t=await su(),r=await oB();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Jee(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Mr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Mr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");Mr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(zee,"updateLocalStreams");function Jee(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=yt.get(Re.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(Jee,"updateStreamLimits")});var eT=m((ade,bB)=>{"use strict";var{decode:Xee}=require("msgpackr"),{isMainThread:Zee,parentPort:jee,threadId:ide}=require("worker_threads"),QT=nt(),ko=Be(),ete=A(),nu=x(),hB=Q(),pB=A();dt();var tte=Ps(),{recordAction:rte,recordActionBinary:ste}=(hi(),re(Y_)),{publishToStream:nte}=QT,ode={durable:ko.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:ko.WORK_QUEUE_CONSUMER_NAMES.deliver_group},ite,ote,ate,TB,RB;bB.exports={initialize:gB,workQueueListener:NB,setSubscription:cte,setIgnoreOrigin:lte,getDatabaseSubscriptions:ute};async function gB(){RB=!0,nu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await QT.getNATSReferences();ite=e,ote=e.info.server_name,ate=t,TB=r}a(gB,"initialize");var sE=new Map;function cte(e,t,r){let s=sE.get(e);s||sE.set(e,s=new Map),s.set(t,r),RB||gB().then(NB)}a(cte,"setSubscription");function ute(){return sE}a(ute,"getDatabaseSubscriptions");var AB;function lte(e){AB=e}a(lte,"setIgnoreOrigin");var OB=100,mB=new Array(OB),rE=0;async function NB(){let t=await(await TB.consumers.get(ko.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await mB[rE],mB[rE]=_te(r).catch(s=>{nu.error(s)}),++rE>=OB&&(rE=0)}a(NB,"workQueueListener");Zee||jee.on("message",async e=>{let{type:t}=e;t===pB.ITC_EVENT_TYPES.SHUTDOWN&&QT.closeConnection()});async function _te(e){let t=Xee(e.data);rte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(ko.MSG_HEADERS.ORIGIN)===hB.get(ete.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!AB;if(ste(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;nu.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),nu.trace(`messageProcessor nats msg id: ${e.headers.get(ko.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=sE.get(o)?.get(u);if(!p)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,p.send(t);else if(l.length===1&&!c)p.send({type:SB(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:SB(i),value:O,id:_?.[k],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}hB.get(pB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&nte(e.subject.split(".").slice(0,-1).join("."),tte.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){nu.error(i)}e.ack()}a(_te,"messageProcessor");function SB(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(SB,"convertOperation")});var yB=eT();(async()=>{try{await yB.initialize(),await yB.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();