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
  `,U0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},D0=["*","%"],L0="unauthorized_access",M0="func_val",P0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},v0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},B0={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"},H0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},F0={HTTP:"http"},q0={STOPPED:"stopped",ONLINE:"online"},G0="3.x.x",x0={SUCCESS:"success",FAILURE:"failure"},k0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};hR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:iR,HDB_SUPPORT_URL:aR,HDB_PRICING_URL:dH,SUPPORT_HELP_MSG:EH,LICENSE_HELP_MSG:cR,HDB_PROC_NAME:sR,HDB_PROC_DESCRIPTOR:dE,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu,CLUSTERING_HUB_PROC_DESCRIPTOR:cu,SYSTEM_SCHEMA_NAME:LH,HASH_FOLDER_NAME:MH,HDB_HOME_DIR_NAME:PH,UPDATE_FILE_NAME:FH,LICENSE_KEY_DIR_NAME:BH,BOOT_PROPS_FILE_NAME:HH,JOB_TYPE_ENUM:f0,JOB_STATUS_ENUM:o0,SYSTEM_TABLE_NAMES:e0,SYSTEM_TABLE_HASH_ATTRIBUTES:t0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:a0,S3_BUCKET_AUTH_KEYS:c0,VALID_SQL_OPS_ENUM:u0,GEO_CONVERSION_ENUM:_0,HDB_SETTINGS_NAMES:_R,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:d0,SERVICE_ACTIONS_ENUM:l0,CLUSTER_MESSAGE_TYPE_ENUM:h0,CLUSTER_CONNECTION_DIRECTION_ENUM:m0,CLUSTER_EVENTS_DEFS_ENUM:T0,PERIOD_REGEX:RH,DOUBLE_PERIOD_REGEX:gH,UNICODE_PERIOD:AH,FORWARD_SLASH_REGEX:OH,UNICODE_FORWARD_SLASH:NH,ESCAPED_FORWARD_SLASH_REGEX:bH,ESCAPED_PERIOD_REGEX:yH,ESCAPED_DOUBLE_PERIOD_REGEX:IH,REG_KEY_FILE_NAME:n0,RESTART_TIMEOUT_MS:xH,HDB_FILE_PERMISSIONS:kH,DATABASES_DIR_NAME:YH,LEGACY_DATABASES_DIR_NAME:KH,TRANSACTIONS_DIR_NAME:WH,LIMIT_COUNT_NAME:QH,ID_ATTRIBUTE_STRING:zH,INSERT_MODULE_ENUM:ZH,UPGRADE_JSON_FIELD_NAMES_ENUM:jH,RESTART_CODE:qH,RESTART_CODE_NUM:GH,CLUSTER_OPERATIONS:Ko,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:s0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:r0,CLUSTERING_MESSAGE_TYPES:I0,HDB_FILE_SUFFIX:vH,BLOB_FOLDER_NAME:VH,HDB_TRASH_DIR:$H,ORIGINATOR_SET_VALUE:w0,LICENSE_VALUES:S0,RAM_ALLOCATION_ENUM:p0,TIME_STAMP_NAMES_ENUM:ER,TIME_STAMP_NAMES:N0,PERMS_UPDATE_RELEASE_TIMESTAMP:b0,SEARCH_NOT_FOUND_MESSAGE:fH,SEARCH_ATTRIBUTE_NOT_FOUND:hH,LICENSE_ROLE_DENIED_RESPONSE:mH,LICENSE_MAX_CONNS_REACHED:SH,BASIC_LICENSE_MAX_NON_CU_ROLES:oR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:_H,VALUE_SEARCH_COMPARATORS:fR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:y0,LICENSE_FILE_NAME:i0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:R0,NEW_LINE:C0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:TH,MOMENT_DAYS_TAG:wH,API_TURNOVER_SEC:CH,LOOPBACK:pH,CODE_EXTENSION:au,WILDCARD_SEARCH_VALUE:UH,NODE_ERROR_CODES:g0,JAVASCRIPT_EXTENSION:rR,PERMS_CRUD_ENUM:U0,UNAUTHORIZED_PERMISSION_NAME:L0,SEARCH_WILDCARDS:D0,FUNC_VAL:M0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:P0,JWT_ENUM:v0,CLUSTERING_FLAG:O0,ITC_EVENT_TYPES:B0,CUSTOM_FUNCTION_PROC_NAME:nR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ou,SERVICES:H0,THREAD_TYPES:F0,MEM_SETTING_KEY:DH,HDB_RESTART_SCRIPT:JB,PROCESS_DESCRIPTORS:rH,SERVICE_SERVERS:aH,SERVICE_SERVERS_CWD:_E,PROCESS_DESCRIPTORS_VALIDATE:iH,LAUNCH_SERVICE_SCRIPTS:cH,LOG_LEVELS:nH,PROCESS_NAME_ENV_PROP:JH,LOG_NAMES:sH,PM2_PROCESS_STATUSES:q0,CONFIG_PARAM_MAP:dR,CONFIG_PARAMS:g,HDB_CONFIG_FILE:WB,HDB_DEFAULT_CONFIG_FILE:QB,ROLE_TYPES_ENUM:uH,BOOT_PROP_PARAMS:uR,INSTALL_PROMPTS:XH,HDB_ROOT_DIR_NAME:zB,CLUSTERING_PROCESSES:oH,FOREGROUND_PID_FILE:jB,PACKAGE_ROOT:an,PRE_4_0_0_VERSION:G0,SCHEMAS_PARAM_CONFIG:E0,METADATA_PROPERTY:A0,AUTH_AUDIT_STATUS:x0,AUTH_AUDIT_TYPES:k0,HDB_PID_FILE:eH,DEFAULT_DATABASE_NAME:tH};tR()});var EE=m((Tte,pR)=>{"use strict";var mR=require("minimist");pR.exports=V0;function V0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=SR(process.env),s=SR(mR(process.argv))):(r=process.env,s=mR(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(V0,"assignCMDENVVariables");function SR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(SR,"objKeysToLowerCase")});var x=m((gte,RE)=>{"use strict";var qn=require("fs-extra"),{workerData:$0,threadId:Y0}=require("worker_threads"),ws=require("path"),gR=require("yaml"),AR=require("properties-reader"),et=A(),TR=EE(),K0=require("os"),{PACKAGE_ROOT:hE}=A(),{_assignPackageExport:W0}=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},OR={STDOUT:"stdOut",STDERR:"stdErr"},Q0=ws.join(hE,"logs"),z0=ws.join(hE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),J0=1e4,ys,Is,Lt,lu,_u,zo,Pi,Wo;Wo===void 0&&NR();RE.exports={notify:IR,fatal:wR,error:Jo,warn:TE,info:du,debug:pE,trace:SE,setLogLevel:sF,log_level:Lt,loggerWithTag:X0,suppressLogging:Z0,initLogSettings:NR,setupConsoleLogging:bR,logCustomLevel:tF,closeLogFile:mE,getLogFilePath:()=>zo,OUTPUTS:OR,AuthAuditLog:oF};W0("logger",RE.exports);function NR(e=!1){try{if(Wo===void 0||e){mE();let t=rF(),r=TR(["ROOTPATH"]);try{Wo=AR(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}=nF(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=TR(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}=iF();ys=ys===void 0?n:ys,ys=RR(ys),Is=Is===void 0?i:Is,Is=RR(Is),Lt=Lt===void 0?s:Lt,_u=Q0,lu=et.LOG_NAMES.INSTALL,zo=ws.join(_u,lu);return}throw Jo("Error initializing log settings"),Jo(t),t}bR()}a(NR,"initLogSettings");var fE=!0;function bR(){Mi("error",Jo),Mi("warn",TE),Mi("log",du),Mi("info",du),Mi("debug",pE),Mi("trace",SE)}a(bR,"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 X0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(IR),fatal:r(wR),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(X0,"loggerWithTag");function Z0(e){try{fE=!1,e()}finally{fE=!0}}a(Z0,"suppressLogging");var j0=$0?.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||j0+"/"+Y0);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&&yR(e),Is&&process.stdout.write(e)}a(Xo,"logStdOut");function Eu(e){ys&&yR(e),Is&&process.stderr.write(e)}a(Eu,"logStdErr");function yR(e){eF(),Pi?qn.appendFileSync(Pi,e):Qo.log(e)}a(yR,"logToFile");function mE(){try{qn.closeSync(Pi)}catch{}Pi=null}a(mE,"closeLogFile");function eF(){if(!Pi){try{if(!zo)debugger;Pi=qn.openSync(zo,"a")}catch(e){Qo.error(e)}setTimeout(()=>{mE()},J0).unref()}}a(eF,"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 IR(...e){Mt[Lt]<=Mt.notify&&Xo(Cs("notify",e))}a(IR,"notify");function wR(...e){Mt[Lt]<=Mt.fatal&&Eu(Cs("fatal",e))}a(wR,"fatal");function TE(...e){Mt[Lt]<=Mt.warn&&Eu(Cs("warn",e))}a(TE,"warn");function tF(e,t,...r){t===OR.STDERR?Eu(Cs(e,r)):Xo(Cs(e,r))}a(tF,"logCustomLevel");function rF(){let e;try{e=K0.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(rF,"getPropsFilePath");function sF(e){Lt=e}a(sF,"setLogLevel");function RR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(RR,"autoCastBoolean");function nF(e){try{if(e.includes("config/settings.js")){let o=AR(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=gR.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(nF,"getLogConfig");function iF(){try{let e=gR.parseDocument(qn.readFileSync(z0,"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(iF,"getDefaultConfig");function oF(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(oF,"AuthAuditLog")});var UR=m((Ote,CR)=>{"use strict";var aF=require("util"),cF=require("path"),uF=require("child_process"),lF=aF.promisify(uF.execFile),_F=1e3*1e3*10;CR.exports={findPs:dF};async function dF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await lF("ps",["wwxo",`pid,${r}`],{maxBuffer:_F});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:cF.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(dF,"findPs")});var xe=m((bte,LR)=>{"use strict";var EF="__dbis__",fF="__txns__",hF="__environment_name__",mF="__dbi_defintion__",SF={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"},pF=["__createdtime__","__updatedtime__"],TF="\uFFFF",DR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RF=Object.values(DR);LR.exports={AUDIT_STORE_NAME:fF,INTERNAL_DBIS_NAME:EF,DBI_DEFINITION_NAME:mF,SEARCH_TYPES:SF,TIMESTAMP_NAMES:pF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:hF,TRANSACTIONS_DBI_NAMES_ENUM:DR,TRANSACTIONS_DBIS:RF,OVERFLOW_MARKER:TF}});var rr=m((yte,xR)=>{"use strict";var MR=A(),PR=xe(),vR={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},BR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),HR={500:BR("There was an error processing your request."),400:"Invalid request"},gF=HR[vR.INTERNAL_SERVER_ERROR],AF={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.`},OF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},NF={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"},bF={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 ${PR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${PR.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"},yF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${MR.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 ${MR.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"},FR={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"},IF={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."},wF={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`},CF={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"},UF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},DF={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`},qR={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.`},GR={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}`},LF={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."},MF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},PF={...FR,...NF,...AF,...IF,...wF,...CF,...UF,...DF,...yF,...qR,...GR,...LF,...MF,...OF};xR.exports={CHECK_LOGS_WRAPPER:BR,HDB_ERROR_MSGS:PF,DEFAULT_ERROR_MSGS:HR,DEFAULT_ERROR_RESP:gF,HTTP_STATUS_CODES:vR,LMDB_ERRORS_ENUM:bF,AUTHENTICATION_ERROR_MSGS:FR,VALIDATION_ERROR_MSGS:qR,ITC_ERRORS:GR}});var W=m((wte,$R)=>{"use strict";var vi=rr(),vF=x(),BF=A(),fu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,kR),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&&vF[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 kR(e,t,r,s=BF.LOG_LEVELS.ERROR,n=null,i=!1){if(VR(e))return e;let o=new fu(e,t,r,s,n);return i&&delete o.stack,o}a(kR,"handleHDBError");function VR(e){return e.__proto__.constructor.name===fu.name}a(VR,"isHDBError");$R.exports={isHDBError:VR,handleHDBError:kR,ClientError:gE,ServerError:AE,hdb_errors:vi}});var KR=m((Ute,YR)=>{"use strict";var HF={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))},FF="certificate.pem",qF="privateKey.pem",GF="ca.pem";YR.exports={CERTIFICATE_VALUES:HF,CERTIFICATE_PEM_NAME:FF,PRIVATEKEY_PEM_NAME:qF,CA_PEM_NAME:GF}});var Pe=m((Dte,WR)=>{"use strict";var Pt=require("validate.js");Pt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Pt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pt.validators.type.checks={Object:function(e){return Pt.isObject(e)&&!Pt.isArray(e)},Array:Pt.isArray,Integer:Pt.isInteger,Number:Pt.isNumber,String:Pt.isString,Date:Pt.isDate,Boolean:function(e){return typeof e=="boolean"}};Pt.validators.hasValidFileExt=function(e,t){return Pt.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};WR.exports={validateObject:xF,validateObjectAsync:kF,validateBySchema:VF};function xF(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pt(e,t,{format:"flat"});return r?new Error(r):null}a(xF,"validateObject");async function kF(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(kF,"validateObjectAsync");function VF(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(VF,"validateBySchema")});var NE=m((Pte,jR)=>{"use strict";var XR=require("fs-extra"),ee=require("joi"),$F=require("os"),{boolean:pe,string:Ds,number:sr,array:OE}=ee.types(),{totalmem:QR}=require("os"),Bi=require("path"),YF=x(),mu=V(),Mte=KR(),zR=A(),KF=Pe(),JR="log",WF="components",QF="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zF="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",JF="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",XF="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ZF="rootPath config parameter is undefined",jF="clustering.enabled config parameter is undefined",Us=sr.min(0).required(),Su=OE.items({host:Ds.required(),port:Us}).empty(null),Ls;jR.exports={configValidator:eq,routesValidator:oq,route_constraints:Su};function eq(e){if(Ls=e.rootPath,mu.isEmpty(Ls))throw ZF;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(iq),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hu),i=ee.custom(tq).messages({"any.custom":"{:#label} {:#error}"}),o=Ds.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(hu),u=ee.custom(rq).empty(null).default(hu),l=e.clustering?.enabled;if(mu.isEmpty(l))throw jF;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Us,routes:Su}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Us}).required()}).required(),network:ee.object({port:Us}).required()}).required(),leafServer:ee.object({network:ee.object({port:Us,routes:Su}).required(),streams:ee.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.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:Ds.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:sr.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:sr}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:OE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.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:Ds.custom(nq).optional().empty(null),maxSize:Ds.custom(sq).optional().empty(null),path:Ds.optional().empty(null).default(hu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:OE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Us,securePort:Us}).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(eq,"configValidator");function ZR(e){return XR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(ZR,"doesPathExist");function tq(e,t){if(e===null)return;let r=ZR(e);return r?t.message(r):e}a(tq,"validatePemFile");function rq(e,t){ee.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=ZR(e);if(r)return t.message(r)}a(rq,"validatePath");function sq(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(QF);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(JF):e}a(sq,"validateRotationMaxSize");function nq(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(zF);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(XF):e}a(nq,"validateRotationInterval");function iq(e,t){let r=t.state.path.join("."),s=$F.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||QR();return i=Math.round(Math.min(i,QR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),YF.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(iq,"setDefaultThreads");function hu(e,t){if(!mu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(mu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Bi.join(Ls,WF);case"logging.root":return Bi.join(Ls,JR);case"clustering.leafServer.streams.path":return Bi.join(Ls,"clustering","leaf");case"storage.path":let s=Bi.join(Ls,zR.LEGACY_DATABASES_DIR_NAME);return XR.existsSync(s)?s:Bi.join(Ls,zR.DATABASES_DIR_NAME);case"logging.rotation.path":return Bi.join(Ls,JR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hu,"setDefaultRoot");function oq(e){let t=ee.object({routes:Su});return KF.validateBySchema({routes:e},t)}a(oq,"routesValidator")});var pu={};je(pu,{server:()=>tt});var eg,tt,Jr=Se(()=>{eg=require("../../index"),tt={};(0,eg._assignPackageExport)("server",tt)});var Tr=m((Hte,lg)=>{"use strict";var pr=A(),lt=V(),rt=x(),{configValidator:aq,routesValidator:tg}=NE(),vt=require("fs-extra"),cq=require("yaml"),Pr=require("path"),uq=require("is-number"),sg=require("properties-reader"),lq=require("lodash"),{handleHDBError:_q}=W(),{HTTP_STATUS_CODES:dq,HDB_ERROR_MSGS:Tu}=rr(),Bte=require("minimist"),{server:Eq}=(Jr(),re(pu)),{SCHEMAS_PARAM_CONFIG:Zo,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:Ms}=pr,fq="Unable to get config value because config is uninitialized",hq="Config successfully initialized",mq="Error backing up config file",Sq="Empty parameter sent to getConfigValue",ng=Pr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),pq="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",rg={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"},Ru,ft;lg.exports={createConfigFile:Tq,getDefaultConfig:Rq,getConfigValue:og,initConfig:ag,flattenConfig:xn,updateConfigValue:cg,updateConfigObject:Aq,getConfiguration:bq,setConfiguration:yq,readConfigFile:IE,getClusteringRoutes:Iq,initOldConfig:ug,getConfigFromFile:wq,getConfigFilePath:Gn,addConfig:Cq,deleteConfigFromFile:Uq};function Tq(e){let t=un(ng);Ru=xn(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===cn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=bE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&ig(t,r),yE(t);let s=t.toJSON();ft=xn(s);let n=t.getIn(["rootPath"]),i=Pr.join(n,pr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(Tq,"createConfigFile");function ig(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zo.TABLES))for(let i in s[n][Zo.TABLES])for(let o in s[n][Zo.TABLES][i]){let c=s[n][Zo.TABLES][i][o],u=[cn.SCHEMAS,n,Zo.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=[cn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(ig,"setSchemasConfig");function Rq(e){if(Ru===void 0){let r=un(ng);Ru=xn(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Ru[t.toLowerCase()]}a(Rq,"getDefaultConfig");function og(e){if(e==null){rt.error(Sq);return}if(ft===void 0){rt.trace(fq);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(og,"getConfigValue");function Gn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,pr.HDB_CONFIG_FILE):sg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Gn,"getConfigFilePath");function ag(e=!1){if(ft===void 0||e){let t;if(!lt.noBootFile()){t=lt.getPropsFilePath();try{vt.accessSync(t,vt.constants.F_OK|vt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gn(t),s;if(r.includes("config/settings.js"))try{ug(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=un(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){rt.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 rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}gq(s,r),yE(s);let n=s.toJSON();if(Eq.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in rg)ft[i]&&rt.error(`Config ${rg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(hq)}}a(ag,"initConfig");function gq(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Pr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Pr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Pr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(gq,"checkForUpdatedConfig");function yE(e){let t=e.toJSON(),r=aq(t);if(r.error)throw Tu.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(yE,"validateConfig");function Aq(e,t){ft===void 0&&(ft={});let r=Ms[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(Aq,"updateConfigObject");function cg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&ag();let o=og(Ms.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=un(c),l;if(r===void 0&&e.toLowerCase()===cn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=bE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===cn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=bE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&ig(u,l),yE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&Oq(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cg,"updateConfigValue");function Oq(e,t){try{let r=Pr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(mq),rt.error(r)}}a(Oq,"backupConfigFile");var Nq=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Nq.includes(r)){let s=xn(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(xn,"flattenConfig");function bE(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(uq(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.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 lt.autoCast(t)}a(bE,"castConfigValue");function bq(){let e=lt.getPropsFilePath(),t=Gn(e);return un(t).toJSON()}a(bq,"getConfiguration");async function yq(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cg(void 0,void 0,n,!0),pq}catch(i){throw typeof i=="string"||i instanceof String?_q(i,i,dq.BAD_REQUEST,void 0,void 0,!0):i}}a(yq,"setConfiguration");function IE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return un(t).toJSON()}a(IE,"readConfigFile");function un(e){return cq.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(un,"parseYamlDoc");function Iq(){let e=IE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=tg(t);if(r)throw Tu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=tg(s);if(n)throw Tu.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Tu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Iq,"getClusteringRoutes");function ug(e){let t=sg(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===cn.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(ug,"initOldConfig");function wq(e){let t=IE();return lq.get(t,e.replaceAll("_","."))}a(wq,"getConfigFromFile");async function Cq(e,t){let r=un(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(Cq,"addConfig");function Uq(e){let t=Gn(lt.getPropsFilePath()),r=un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(Uq,"deleteConfigFromFile")});var Q=m((qte,Eg)=>{"use strict";var wE=require("fs-extra"),vr=require("path"),_g=require("os"),Dq=require("properties-reader"),jo=x(),kn=V(),te=A(),gu=Tr(),Lq="Error initializing environment manager",Au="BOOT_PROPS_FILE_PATH",dg=!1,Mq={[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},Ps={};Eg.exports={BOOT_PROPS_FILE_PATH:Au,getHdbBasePath:Pq,setHdbBasePath:vq,get:Bq,initSync:Fq,setProperty:Ee,initTestEnvironment:qq};function Pq(){return Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Pq,"getHdbBasePath");function vq(e){Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(vq,"setHdbBasePath");function Bq(e){let t=gu.getConfigValue(e);return t===void 0?Ps[e]:t}a(Bq,"get");function Ee(e,t){Mq[e]&&(Ps[e]=t),gu.updateConfigObject(e,t)}a(Ee,"setProperty");function Hq(){let e;try{e=kn.getPropsFilePath(),wE.accessSync(e,wE.constants.F_OK|wE.constants.R_OK),dg=!0;let t=Dq(e);return Ps[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Au]=e,!0}catch{return jo.trace(`Environment manager found no properties file at ${e}`),!1}}a(Hq,"doesPropFileExist");function Fq(e=!1){try{(dg||Hq()||kn.noBootFile())&&(gu.initConfig(e),Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=gu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jo.error(Lq),jo.error(t),console.error(t),process.exit(1)}}a(Fq,"initSync");function qq(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=vr.join(__dirname,"../../","unitTests");Ps[Au]=vr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,_g.userInfo()?_g.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.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,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.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,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.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 ${Au}. Please check your boot props and settings files`;jo.fatal(r),jo.error(t)}}a(qq,"initTestEnvironment")});var we=m((xte,Rg)=>{"use strict";var na=A(),Gq=V(),Bt=Q(),ia=require("path"),xq=require("minimist"),fg=require("fs-extra"),hg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:ln,SCHEMAS_PARAM_CONFIG:ea,SYSTEM_SCHEMA_NAME:Ou}=na,ta,ra,sa;function mg(){if(ta!==void 0)return ta;if(Bt.getHdbBasePath()!==void 0)return ta=Bt.get(ln.STORAGE_PATH)||ia.join(Bt.getHdbBasePath(),na.DATABASES_DIR_NAME),ta}a(mg,"getBaseSchemaPath");function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Tg(Ou),ra}a(Sg,"getSystemSchemaPath");function pg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Bt.get(na.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ia.join(Bt.getHdbBasePath(),na.TRANSACTIONS_DIR_NAME),sa}a(pg,"getTransactionAuditStoreBasePath");function kq(e,t){let r=Bt.get(ln.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ia.join(pg(),e.toString())}a(kq,"getTransactionAuditStorePath");function Tg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(na.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ia.join(mg(),e)}a(Tg,"getSchemaPath");function Vq(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,xq(process.argv));let s=r[ln.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Gq.isObject(s))throw o;i=s}for(let o of i){let c=o[Ou];if(!c)continue;let u=Bt.get(ln.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ea.PATH];if(l)return hg.set(u,[Ou,ea.TABLES,t,ea.PATH],l),Bt.setProperty(ln.SCHEMAS,u),l;let _=c?.[ea.PATH];if(_)return hg.set(u,[Ou,ea.PATH],_),Bt.setProperty(ln.SCHEMAS,u),_}}let n=r[ln.STORAGE_PATH.toUpperCase()];if(n){if(!fg.pathExistsSync(n))throw new Error(n+" does not exist");let i=ia.join(n,e);return fg.mkdirsSync(i),Bt.setProperty(ln.STORAGE_PATH,n),i}return Sg()}a(Vq,"initSystemSchemaPaths");function $q(){ta=void 0,ra=void 0,sa=void 0}a($q,"resetPaths");Rg.exports={getBaseSchemaPath:mg,getSystemSchemaPath:Sg,getTransactionAuditStorePath:kq,getTransactionAuditStoreBasePath:pg,getSchemaPath:Tg,initSystemSchemaPaths:Vq,resetPaths:$q}});var Ht=m((Yte,bg)=>{"use strict";var Yq=rr().LMDB_ERRORS_ENUM,Vte=require("lmdb"),Kq=xe(),$te=require("buffer").Buffer,{OVERFLOW_MARKER:gg,MAX_SEARCH_KEY_LENGTH:Nu}=Kq,Ag=["number","string","symbol","boolean","bigint"];function Wq(e){if(e=e?.primaryStore||e,!e)throw new Error(Yq.ENV_REQUIRED)}a(Wq,"validateEnv");function Qq(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(Qq,"stringifyData");function zq(e){return e instanceof Date?e.valueOf():e}a(zq,"convertKeyValueToWrite");function Jq(e){if(e==null)return;if(Ag.includes(typeof e))return e.length>Nu?[e.slice(0,Nu)+gg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Ag.includes(typeof n))n.length>Nu?t.push(n.slice(0,Nu)+gg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Jq,"getIndexedValues");var bu=0,Og=0;function Ng(){Og=Date.now()-performance.now()}a(Ng,"adjustStartTime");Ng();var Xq=6e4;setInterval(Ng,Xq).unref();function Zq(){let e=performance.now()+Og;return e>bu?(bu=e,e):(bu+=488e-6,bu)}a(Zq,"getNextMonotonicTime");bg.exports={validateEnv:Wq,stringifyData:Qq,convertKeyValueToWrite:zq,getNextMonotonicTime:Zq,getIndexedValues:Jq}});var yg,Xr,CE,oa=Se(()=>{yg=require("events"),Xr=class extends yg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new CE;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)}},CE=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 aa(e){return e[ht]||(e[ht]=Object.create(null))}function Uu(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[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Ig(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){aa(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,yu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,yu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(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[ht];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 yu.ClientError("Can not add a property to a sealed table schema");aa(this)[o]=c}),i("deleteProperty",function(o){aa(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],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 Ig(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}},Uu(r,t)),new r(e)):new Iu(e);case Array:let s=new Cu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ig(o,t?.elements)),s[n]=o}return s}}function Du(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Du(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ca(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=ca(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=ca(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function wu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||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(wu(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(wu(n))return!0}else return!0}else return!0}}return!1}var yu,ht,Iu,Vn,Cu,Lu=Se(()=>{Zr();yu=C(W()),ht=Symbol("own-data");a(aa,"getChanges");a(Uu,"assignTrackedAccessors");a(Ig,"trackObject");Iu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Uu(Iu,{});a(Du,"collapseData");a(ca,"deepFreeze");a(wu,"hasChanges");Vn=Symbol.for("has-array-changes"),Cu=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Cu.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 UE;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 wg,Cg,UE,$n=Se(()=>{wg=C(Ht()),Cg=require("../../index");Zr();a(Ye,"transaction");(0,Cg._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()};UE=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,wg.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 ME(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(eG[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]=es.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 _t.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 DE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=PE(e);if(!p)throw new DE.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:Dg.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 PE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(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 Mu(e){if(!e)return;let t=new LE,r,s,n,i,o;for(;r=Ug.exec(e);){i=Ug.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=jq[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 DE,_t,es,Dg,Ug,jq,eG,LE,Pu=Se(()=>{DE=C(W()),_t=C(xe()),es=require("ordered-binary"),Dg=require("lmdb"),Ug=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,jq={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ME,"idsForCondition");eG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(PE,"filterByType");a(jr,"attributeComparator");a(Mu,"parseQuery");LE=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 HE={};je(HE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>Hg,snake_case:()=>rG});function rG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Lg(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 BE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(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[Hg]=!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 vu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new vu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new Bg.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 vE(e){let t=e[ce];if(t){let r=e[ht];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 Mg(e){if(typeof e=="string")return t=>vE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=vE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=vE(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 Pg,vg,Bg,Ae,ae,vs,Hg,ce,tG,mt,vu,BE,Zr=Se(()=>{Pg=require("crypto");oa();vg=require("../../index"),Bg=C(W());Lu();$n();Pu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),Hg=Symbol("save-updates"),ce=Symbol("stored-record"),tG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=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=Rr(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=Mg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[vs]){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):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Pg.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):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Mg(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return Mu(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&&tG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Lg(t,this)}}return Lg(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[vs]=!0),n}connect(t){let r=new Xr;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]}};mt.prototype[Ae]=null;(0,vg._assignPackageExport)("Resource",mt);a(rG,"snake_case");vu=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(Lg,"pathToId");BE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(vE,"selectFromObject");a(Mg,"transformForSelect")});var GE={};je(GE,{loadGQLSchema:()=>nG,start:()=>qE,startOnMainThread:()=>sG});function qE({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,FE.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,FE.dirname)(s)+"/"+T.name,p.tableClass)}}}var FE,sG,nG,Fg=Se(()=>{FE=require("path");de();a(qE,"start");sG=qE,nG=qE({ensureTable:st}).handleFile});async function Bu(e){return iG?(ua||(ua=oG(cG)),(await(await ua).import(e)).namespace):import(e)}async function oG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ua=new Compartment({console,Math,Date,fetch:aG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Gg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:nr,databases:ve})}};let s=await(0,qg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ua}function aG(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 cG(){return{Resource:mt,tables:nr}}var qg,Gg,iG,ua,xE=Se(()=>{Zr();de();qg=require("fs/promises"),Gg=require("path"),iG=!1;a(Bu,"secureImport");a(oG,"getCompartment");a(aG,"secureOnlyFetch");a(cG,"getGlobalVars")});var VE={};je(VE,{handleFile:()=>uG});async function uG(e,t,r,s){let n=new Map,i=(0,xg.pathToFileURL)(r).toString(),o=await Bu(i);u(o.default)&&s.set((0,kE.dirname)(t),o.default),c(o,(0,kE.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 xg,kE,kg=Se(()=>{xg=require("url");xE();kE=require("path");a(uG,"handleFile")});var YE={};je(YE,{start:()=>lG});function lG({resources:e}){e.set("login",$E),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var $E,Vg=Se(()=>{Zr();a(lG,"start");$E=class extends mt{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 WE=m((Tre,Kg)=>{"use strict";var{Readable:_G}=require("stream"),dG=1e4;Kg.exports={streamAsJSON(e){return new KE({value:e})}};var KE=class extends _G{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),$g)}catch(n){yield $g(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);Yg(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>dG?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 Yg(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 $g(e){return console.error(e),JSON.stringify(e.toString())}a($g,"handleError");function Yg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Yg,"when")});var iA=m((Are,nA)=>{"use strict";var QE=require("recursive-iterator"),EG=require("alasql"),zE=require("clone"),Wg=V(),{handleHDBError:Qg,hdb_errors:fG}=W(),{HDB_ERROR_MSGS:zg,HTTP_STATUS_CODES:Jg}=fG,{getDatabases:hG}=(de(),re(Ne)),mG=["DISTINCT_ARRAY"],Xg=Symbol("validateTables"),JE=Symbol("validateTable"),gre=Symbol("getAllColumns"),Zg=Symbol("validateAllColumns"),Hu=Symbol("findColumn"),jg=Symbol("validateOrderBy"),la=Symbol("validateSegment"),XE=Symbol("validateColumn"),eA=Symbol("setColumnsForTable"),tA=Symbol("checkColumnsForAsterisk"),rA=Symbol("validateGroupBy"),sA=Symbol("hasColumns"),ZE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Xg](),this[tA](),this[Zg]()}[Xg](){if(this[sA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[JE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[JE](t.table)})}}[sA](){let t=!1,r=new QE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[JE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=hG();if(!r[t.databaseid])throw Qg(new Error,zg.SCHEMA_NOT_FOUND(t.databaseid),Jg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Qg(new Error,zg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Jg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=zE(n);i.table=zE(t),this.attributes.push(i)})}[Hu](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)}[tA](){let t=new QE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[eA](r.tableid)}[eA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new EG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Zg](){this[la](this.statement.columns,!1),this[la](this.statement.joins,!1),this[la](this.statement.where,!1),this[rA](this.statement.group,!1),this[la](this.statement.order,!0)}[la](t,r){if(!t)return;let s=new QE(t),n=[];for(let{node:i,path:o}of s)!Wg.isEmpty(i)&&!Wg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jg](i):n.push(this[XE](i)));return n}[rA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&mG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=zE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Hu](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[Hu](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`}[jg](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[XE](t)}[XE](t){let r=this[Hu](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]}};nA.exports=ZE});var aA=m((Nre,oA)=>{"use strict";var jE=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")}};oA.exports=jE});var uA=m((yre,cA)=>{"use strict";var ef=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cA.exports=ef});var Fu=m((wre,lA)=>{"use strict";var rf=Q(),sf=A();rf.initSync();var SG=rf.get(sf.CONFIG_PARAMS.STORAGE_COMPRESSION),pG=rf.get(sf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,TG=sf.UPDATES_PROPERTY,tf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=SG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=pG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===TG)}};lA.exports=tf});var Gu=m((Ure,dA)=>{"use strict";var Hi=Q(),_a=A();Hi.initSync();var RG=Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",_A=Hi.get(_a.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),gG=Hi.get(_a.CONFIG_PARAMS.STORAGE_NOREADAHEAD),qu=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=RG,this.noFSAccess=!0,_A!==void 0&&(this.overlappingSync=_A),this.noReadAhead=gG}};dA.exports=qu;qu.MAX_DBS=1e4});var ye=m((Lre,AA)=>{"use strict";var of=require("lmdb"),Br=require("fs-extra"),ir=require("path"),xu=Ht(),hA=x(),Ft=rr().LMDB_ERRORS_ENUM,ku=uA(),af=Fu(),mA=Gu(),_n=xe(),EA=A(),{table:AG,resetDatabases:OG}=(de(),re(Ne)),fA=Q(),Hr=_n.INTERNAL_DBIS_NAME,SA=_n.DBI_DEFINITION_NAME,NG="data.mdb",bG="lock.mdb",da=".mdb",yG="-lock",nf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[_n.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[_n.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new of.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Vu(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(Vu,"pathEnvNameValidation");async function cf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+da);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,NG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(cf,"validateEnvironmentPath");function $u(e,t){if(xu.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a($u,"validateEnvDBIName");async function IG(e,t,r=!1,s=!1){Vu(e,t);let n=ir.basename(e);t=t.toString();let i=fA.get(EA.CONFIG_PARAMS.SCHEMAS);i||fA.setProperty(EA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await cf(e,t,s),pA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new mA(s?c:c+da,!1),l=of.open(u);l.dbis=Object.create(null);let _=new af(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=uf(e,t,r);return l[_n.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(IG,"createEnvironment");async function wG(e,t,r,s=!0){Vu(e,t),t=t.toString();let n=ir.join(e,t);return AG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(wG,"copyEnvironment");async function pA(e,t,r=!1){Vu(e,t),t=t.toString();let s=uf(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 cf(e,t),i=ir.join(e,t+da),o=n!=i,c=new mA(n,o),u=of.open(c);u.dbis=Object.create(null);let l=RA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[_n.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(pA,"openEnvironment");async function CG(e,t,r=!1){Vu(e,t),t=t.toString();let s=ir.join(e,t+da),n=await cf(e,t);if(global.lmdb_map!==void 0){let i=uf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await TA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+yG:ir.join(ir.dirname(n),bG))}a(CG,"deleteEnvironment");async function TA(e){xu.validateEnv(e);let t=e[_n.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(TA,"closeEnvironment");function uf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(uf,"getCachedEnvironmentName");function UG(e){xu.validateEnv(e);let t=Object.create(null),r=Ar(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new ku,n)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(UG,"listDBIDefinitions");function RA(e){xu.validateEnv(e);let t=[],r=Ar(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(RA,"listDBIs");function DG(e,t){let s=Ar(e,Hr).getEntry(t),n=new ku;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(DG,"getDBIDefinition");function gA(e,t,r,s=!r){if($u(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new af(r,s===!0),o=e.openDB(t,i),c=new ku(r===!0,s);return o[SA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gA,"createDBI");function Ar(e,t){if($u(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=DG(e,t):r=new ku,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new af(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(Ft.DBI_DOES_NOT_EXIST):n}return s[SA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function LG(e,t){$u(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[_n.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(LG,"statDBI");async function MG(e,t){try{let r=ir.join(e,t+da);return(await Br.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(MG,"environmentDataSize");function PG(e,t){if($u(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(PG,"dropDBI");function vG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===Ft.DBI_DOES_NOT_EXIST)gA(e,i,i!==t,i===t),s=!0;else throw o}}s&&OG()}a(vG,"initializeDBIs");AA.exports={openDBI:Ar,openEnvironment:pA,createEnvironment:IG,listDBIs:RA,listDBIDefinitions:UG,createDBI:gA,dropDBI:PG,statDBI:LG,deleteEnvironment:CG,initializeDBIs:vG,TransactionCursor:nf,environmentDataSize:MG,copyEnvironment:wG,closeEnvironment:TA}});var NA=m((Pre,OA)=>{"use strict";var lf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};OA.exports=lf});var yA=m((Bre,bA)=>{"use strict";var _f=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}};bA.exports=_f});var wA=m((Fre,IA)=>{"use strict";var df=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};IA.exports=df});var Fi=m((Vre,DA)=>{"use strict";var BG=ye(),HG=NA(),FG=yA(),qG=wA(),ts=Ht(),Ea=rr().LMDB_ERRORS_ENUM,GG=xe(),Bs=A(),xG=V(),kG=require("uuid"),Gre=require("lmdb"),{handleHDBError:VG,hdb_errors:$G}=W(),{OVERFLOW_MARKER:xre,MAX_SEARCH_KEY_LENGTH:kre}=GG,CA=Q();CA.initSync();var Yu=CA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ef=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function YG(e,t,r,s,n=ts.getNextMonotonicTime()){Sf(e,t,r,s),ff(e,t,r);let i=new HG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];UA(l,!0,n);let _=KG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return hf(o,c,s,i,n)}a(YG,"insertRecords");function KG(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][Bs.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Yu&&l.prefetch(u.map(_=>({key:_,value:n})),Ku);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Yu&&e.dbis[t].prefetch([n],Ku),e.dbis[t].put(n,s,s[Yn])})}a(KG,"insertRecord");function WG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(WG,"removeSkippedRecords");function UA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Ef]))&&(e[Ef]=r||ts.getNextMonotonicTime()):delete e[Ef]}a(UA,"setTimestamps");function ff(e,t,r){r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BG.initializeDBIs(e,t,r)}a(ff,"initializeTransaction");async function QG(e,t,r,s,n=ts.getNextMonotonicTime()){Sf(e,t,r,s),ff(e,t,r);let i=new FG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=mf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return hf(c,u,s,i,n,o)}a(QG,"updateRecords");async function zG(e,t,r,s,n=ts.getNextMonotonicTime()){try{Sf(e,t,r,s)}catch(u){throw VG(u,u.message,$G.HTTP_STATUS_CODES.BAD_REQUEST)}ff(e,t,r);let i=new qG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;xG.isEmpty(l[t])?(_=kG.v4(),l[t]=_):_=l[t];let d=mf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return hf(o,c,s,i,n)}a(zG,"upsertRecords");async function hf(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(),WG(r,i),s}a(hf,"finalizeWrite");function mf(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(UA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])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][Bs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ts.getIndexedValues(R);if(O){Yu&&p.prefetch(O.map(k=>({key:k,value:s})),Ku);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Yu&&p.prefetch(O.map(k=>({key:k,value:s})),Ku);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:mf(e,t,r,s,n,i,o))}a(mf,"updateUpsertRecord");function JG(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(Ea.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ea.WRITE_ATTRIBUTES_REQUIRED):new Error(Ea.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(JG,"validateBasic");function Sf(e,t,r,s){if(JG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ea.RECORDS_REQUIRED):new Error(Ea.RECORDS_MUST_BE_ARRAY)}a(Sf,"validateWrite");function Ku(){}a(Ku,"noop");DA.exports={insertRecords:YG,updateRecords:QG,upsertRecords:zG}});var Kn=m((Yre,XG)=>{XG.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((Kre,PA)=>{"use strict";var MA=V(),LA=A(),qi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),dn={schema_format:{pattern:qi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZG=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()).required(),jG=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()),ex=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()).required();function tx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>dn.schema_length.maximum?`'${e}' maximum of 250 characters`:qi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(tx,"checkValidTable");function rx(e,t){return MA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(rx,"validateSchemaExists");function sx(e,t){let r=t.state.ancestors[0].schema;return MA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(sx,"validateTableExists");function nx(e,t){return e.toLowerCase()===LA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${LA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(nx,"validateSchemaName");PA.exports={common_validators:dn,schema_regex:qi,hdb_schema_table:ZG,validateSchemaExists:rx,validateTableExists:sx,validateSchemaName:nx,checkValidTable:tx,hdb_database:jG,hdb_table:ex}});var Wu=m((Qre,vA)=>{var{common_validators:ss}=rs(),ha=Pe(),fa="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 ma(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(ma,"makeAttributesStrings");function ix(e){return e=ma(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ix,"schema_object");function ox(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ox,"table_object");function ax(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,ha.validateObject(e,Ke)}a(ax,"create_table_object");function cx(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence={message:fa},Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(cx,"attribute_object");function ux(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ux,"describe_table");function lx(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(lx,"validateTableResidence");vA.exports={schema_object:ix,create_table_object:ax,table_object:ox,attribute_object:cx,describe_table:ux,validateTableResidence:lx}});var HA=m((Jre,BA)=>{"use strict";var _x=require("uuid"),pf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||_x.v4(),this.schema_table=`${this.schema}.${this.table}`}};BA.exports=pf});var Qu=m((Zre,FA)=>{"use strict";var dx=HA(),Tf=class extends dx{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}};FA.exports=Tf});var GA=m((ese,qA)=>{"use strict";qA.exports=fx;var Ex="inserted";function fx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ex?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fx,"returnObject")});var zu=m((rse,YA)=>{"use strict";var hx=A(),Rf=ye(),mx=Fi(),{getSystemSchemaPath:Sx,getSchemaPath:px}=we(),Tx=Kn(),Rx=Wu(),gx=Qu(),Ax=GA(),{handleHDBError:xA,hdb_errors:VA}=W(),kA=V(),{HTTP_STATUS_CODES:Ox}=VA,gf=Tx.hdb_attribute,$A=[];for(let e=0;e<gf.attributes.length;e++)$A.push(gf.attributes[e].attribute);var Nx="inserted";YA.exports=bx;async function bx(e){let t=Rx.attribute_object(e);if(t)throw xA(new Error,t.message,VA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xA(new Error,r,Ox.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kA.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 gx(e.schema,e.table,e.attribute,e.id);try{let i=await Rf.openEnvironment(px(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}`);Rf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Rf.openEnvironment(Sx(),hx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await mx.insertRecords(o,gf.hash_attribute,$A,[n]);return Ax(Nx,c,{records:[n]},u)}catch(i){throw i}}a(bx,"lmdbCreateAttribute")});var Of=m((nse,WA)=>{var{hdb_table:yx,hdb_database:KA}=rs(),Ix=Pe(),Af=require("joi"),wx={undefined:"undefined",null:"null"},Cx=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||wx[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"),Ux=Af.object({database:KA,schema:KA,table:yx,records:Af.array().items(Af.object().custom(Cx)).required()});WA.exports=function(e){return Ix.validateBySchema(e,Ux)}});var Sa=m((ase,zA)=>{"use strict";var Fs=V(),QA=x(),ose=Of(),{getDatabases:Dx}=(de(),re(Ne)),{ClientError:Wn}=W();zA.exports=Lx;function Lx(e){if(Fs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(Fs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(Fs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=Dx()[e.schema]?.[e.table];if(Fs.isEmpty(t))throw new Wn(`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&&Fs.isEmptyOrZeroLength(o[r]))throw QA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!Fs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw QA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Fs.isEmpty(o[r])&&o[r]!==""&&s.has(Fs.autoCast(o[r]))&&(o.skip=!0),s.add(Fs.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(Lx,"insertUpdateValidate")});var pa=m((use,JA)=>{"use strict";var Mx=A().OPERATIONS_ENUM,Nf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Mx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};JA.exports=Nf});var Aa=m((dse,XA)=>{"use strict";var _se=pa(),Ju=A(),yf=V(),bf=x(),Px=require("uuid"),{handleHDBError:Ta,hdb_errors:vx}=W(),{HDB_ERROR_MSGS:Ra,HTTP_STATUS_CODES:ga}=vx;XA.exports=Bx;function Bx(e,t,r){for(let n=0;n<t.length;n++)Hx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Fx(i,r,e.operation)}}a(Bx,"processRows");function Hx(e){if(Buffer.byteLength(String(e))>Ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ta(new Error,Ra.ATTR_NAME_LENGTH_ERR(e),ga.BAD_REQUEST,void 0,void 0,!0);if(yf.isEmptyOrZeroLength(e)||yf.isEmpty(e.trim()))throw Ta(new Error,Ra.ATTR_NAME_NULLISH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Hx,"validateAttribute");function Fx(e,t,r){if(!e.hasOwnProperty(t)||yf.isEmptyOrZeroLength(e[t])){if(r===Ju.OPERATIONS_ENUM.INSERT||r===Ju.OPERATIONS_ENUM.UPSERT){e[t]=Px.v4();return}throw bf.error("Update transaction aborted due to record with no hash value:",e),Ta(new Error,Ra.RECORD_MISSING_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw bf.error(e),Ta(new Error,Ra.HASH_VAL_LENGTH_ERR,ga.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw bf.error(e),Ta(new Error,Ra.INVALID_FORWARD_SLASH_IN_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateHash")});var jA=m((fse,ZA)=>{"use strict";var If=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ZA.exports=If});var rO=m((mse,tO)=>{"use strict";var wf=ye(),qx=x(),eO=rr().LMDB_ERRORS_ENUM;tO.exports=Gx;async function Gx(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 wf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==eO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await wf.closeEnvironment(global.lmdb_map[s]),await wf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==eO.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){qx.error(t)}}a(Gx,"cleanLMDBMap")});var qs=m((pse,oO)=>{"use strict";var Oa=require("crypto"),xx=Q(),{CONFIG_PARAMS:kx}=A(),nO="aes-256-cbc",Vx=32,$x=16,Cf=64,iO=32,Yx=Cf+iO,sO=new Map;oO.exports={encrypt:Kx,decrypt:Wx,createNatsTableStreamName:Qx};function Kx(e){let t=Oa.randomBytes(Vx),r=Oa.randomBytes($x),s=Oa.createCipheriv(nO,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(Kx,"encrypt");function Wx(e){let t=e.substr(0,Cf),r=e.substr(Cf,iO),s=e.substr(Yx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Oa.createDecipheriv(nO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Wx,"decrypt");function Qx(e,t){let r=xx.get(kx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=sO.get(r);return s||(s=Oa.createHash("md5").update(r).digest("hex"),sO.set(r,s)),s}a(Qx,"createNatsTableStreamName")});var Qn=m((gse,cO)=>{"use strict";var Rse=Or(),Xu=x(),aO=Wu(),zx=qs(),Zu=V(),{handleHDBError:ju,hdb_errors:Jx}=W(),{HDB_ERROR_MSGS:el,HTTP_STATUS_CODES:Uf}=Jx,Xx=Q();Xx.initSync();var{getDatabases:Df}=(de(),re(Ne));cO.exports={describeAll:Zx,describeTable:tl,describeSchema:jx};async function Zx(e){try{let t=Zu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Df(),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 tl({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 tl({schema:l,table:d},f)}E&&c.push(E)}catch(E){Xu.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 Xu.error("Got an error in describeAll"),Xu.error(t),ju(new Error,el.DESCRIBE_ALL_ERR)}}a(Zx,"describeAll");async function tl(e,t){Zu.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=aO.describe_table(e);if(i)throw i;let c=Df()[r];if(!c)throw ju(new Error,el.SCHEMA_NOT_FOUND(e.schema),Uf.NOT_FOUND);let u=c[s];if(!u)throw ju(new Error,el.TABLE_NOT_FOUND(e.schema,e.table),Uf.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=zx.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){Xu.warn(`unable to stat table dbi due to ${d}`)}return _}a(tl,"descTable");async function jx(e){Zu.transformReq(e);let t=aO.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=Df()[s];if(!i)throw ju(new Error,el.SCHEMA_NOT_FOUND(e.schema),Uf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Zu.isEmpty(u)||u.describe){let l=await tl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(jx,"describeSchema")});var En=m((bse,EO)=>{var ek=Kn(),{callbackify:lO,promisify:tk}=require("util"),{getDatabases:_O}=(de(),re(Ne));EO.exports={setSchemaDataToGlobal:uO,getTableSchema:rk,getSystemSchema:sk,setSchemaDataToGlobalAsync:tk(uO)};var dO=Qn(),Ose=lO(dO.describeAll),Nse=lO(dO.describeTable);function uO(e){global.hdb_schema=_O(),e&&e()}a(uO,"setSchemaDataToGlobal");function rk(e,t,r){let s=_O()[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(rk,"getTableSchema");function sk(){return ek}a(sk,"getSystemSchema")});var Nr=m((Ise,SO)=>{"use strict";var sl=Of(),St=V(),nk=require("util"),nl=Fr(),ik=En(),fO=x(),{handleHDBError:zn,hdb_errors:ok}=W(),{HTTP_STATUS_CODES:Jn}=ok,ak=nk.promisify(ik.getTableSchema),ck="updated",hO="inserted",mO="upserted";SO.exports={insert:lk,update:_k,upsert:dk,validation:uk,flush:Ek};async function uk(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ak(e.schema,e.table),r=sl(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&&St.isEmptyOrZeroLength(c[s]))throw fO.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(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.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(uk,"validation");async function lk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.createRecords(e);return rl(hO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(lk,"insertData");async function _k(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.updateRecords(e);return St.isEmpty(s.existing_rows)?rl(ck,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):rl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(_k,"updateData");async function dk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.upsertRecords(e);return rl(mO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(dk,"upsertData");function rl(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===hO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===mO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(rl,"returnObject");function Ek(e){return St.transformReq(e),nl.flush(e.schema,e.table)}a(Ek,"flush")});var Mf=m((Cse,RO)=>{var fk=Pe(),Lf=require("joi"),{hdb_table:hk,hdb_database:pO}=rs(),TO={schema:pO,database:pO,table:hk},mk={date:Lf.date().iso().required()},Sk={timestamp:Lf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RO.exports=function(e,t){let r=t==="timestamp"?{...TO,...Sk}:{...TO,...mk},s=Lf.object(r);return fk.validateBySchema(e,s)}});var OO=m((Use,AO)=>{var pk=Pe(),Pf=require("joi"),{hdb_table:Tk,hdb_database:gO}=rs(),Rk=Pf.object({schema:gO,database:gO,table:Tk,hash_values:Pf.array().required(),ids:Pf.array()});AO.exports=function(e){return pk.validateBySchema(e,Rk)}});var bO=m((Dse,NO)=>{"use strict";var vf=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}},Bf=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}},Hf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};NO.exports={InsertObject:vf,NoSQLSeachObject:Bf,DeleteResponseObject:Hf}});var jn=m((Mse,UO)=>{"use strict";var IO=Mf(),gk=OO(),Xn=V(),yO=require("moment"),wO=x(),{promisify:Ak,callbackify:Ok}=require("util"),Zn=A(),Nk=En(),Ff=Ak(Nk.getTableSchema),qf=Fr(),{DeleteResponseObject:bk}=bO(),{handleHDBError:fn,hdb_errors:yk}=W(),{HDB_ERROR_MSGS:il,HTTP_STATUS_CODES:hn}=yk,Ik="records successfully deleted",wk=Ok(CO);UO.exports={delete:wk,deleteRecord:CO,deleteFilesBefore:Ck,deleteAuditLogsBefore:Uk};async function Ck(e){let t=IO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!yO(e.date,yO.ISO_8601).isValid())throw fn(new Error,il.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,il.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await qf.deleteRecordsBefore(e);if(await Ff(e.schema,e.table),wO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ck,"deleteFilesBefore");async function Uk(e){let t=IO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,il.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,il.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await qf.deleteAuditLogsBefore(e);return await Ff(e.schema,e.table),wO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Uk,"deleteAuditLogsBefore");async function CO(e){e.ids&&(e.hash_values=e.ids);let t=gk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await Ff(e.schema,e.table);let s=await qf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ik}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new bk;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(CO,"deleteRecord")});var ol=m((vse,MO)=>{var Dk=require("crypto"),DO=9;function Lk(e){let t=Pk(DO),r=LO(e+t);return t+r}a(Lk,"createHash");function Mk(e,t){let r=e.substr(0,DO),s=r+LO(t+r);return e===s}a(Mk,"validateHash");function Pk(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(Pk,"generateSalt");function LO(e){return Dk.createHash("md5").update(e).digest("hex")}a(LO,"md5");MO.exports={hash:Lk,validate:Mk}});var vO=m((Hse,PO)=>{var Gf=Pe(),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 vk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Gf.validateObject(e,It)}a(vk,"addUserValidation");function Bk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Gf.validateObject(e,It)}a(Bk,"alterUserValidation");function Hk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Gf.validateObject(e,It)}a(Hk,"dropUserValidation");PO.exports={addUserValidation:vk,alterUserValidation:Bk,dropUserValidation:Hk}});var Be=m((Gse,HO)=>{"use strict";var{platform:qse}=require("os"),Fk="nats-server.zip",xf="nats-server",qk=process.platform==="win32"?`${xf}.exe`:xf,kf="HDB",Gk=/^[^\s.,*>]+$/,BO="__request__",xk=a(e=>`${e}.${BO}`,"REQUEST_SUBJECT"),kk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Vk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},$k={HUB:"hub.pid",LEAF:"leaf.pid"},Yk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Kk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:kf,deliver_subject:"__HDB__.WORKQUEUE"},Wk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:kf,deliver_subject:"HDB.SCHEMAQUEUE"},Qk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:kf,deliver_subject:"HDB.USERQUEUE"},zk={SUCCESS:"success",ERROR:"error"},Jk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Xk={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Zk={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},jk={debug:"-D",trace:"-DVV"};HO.exports={NATS_SERVER_ZIP:Fk,NATS_SERVER_NAME:xf,NATS_BINARY_NAME:qk,PID_FILES:$k,NATS_CONFIG_FILES:Vk,SERVER_SUFFIX:Yk,WORK_QUEUE_CONSUMER_NAMES:Kk,SCHEMA_QUEUE_CONSUMER_NAMES:Wk,USER_QUEUE_CONSUMER_NAMES:Qk,NATS_TERM_CONSTRAINTS_RX:Gk,REQUEST_SUFFIX:BO,UPDATE_REMOTE_RESPONSE_STATUSES:zk,CLUSTER_STATUS_STATUSES:Jk,REQUEST_SUBJECT:xk,SUBJECT_PREFIXES:Xk,MSG_HEADERS:kk,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:jk,LOG_LEVEL_HIERARCHY:Zk}});var qO=m((kse,FO)=>{"use strict";var al=A(),cl=class{static{a(this,"BaseLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Vf=class extends cl{static{a(this,"ExtendedLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:cl,ExtendedLicense:Vf}});var Na=m(($se,YO)=>{"use strict";var ki=require("fs-extra"),GO=ol(),xO=require("crypto"),eV=require("moment"),tV=require("uuid").v4,wt=x(),Yf=require("path"),rV=V(),mn=A(),sV=qO().ExtendedLicense,xi="invalid license key format",nV="061183",iV="mofi25",oV="aes-256-cbc",aV=16,cV=32,kO=Q();kO.initSync();var $f;YO.exports={validateLicense:VO,generateFingerPrint:lV,licenseSearch:$O,getLicense:EV};function Kf(){return Yf.join(kO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Kf,"getLicenseDirPath");function uV(){let e=Kf();return Yf.join(e,mn.LICENSE_FILE_NAME)}a(uV,"getLicenseFilePath");function Wf(){let e=Kf();return Yf.join(e,mn.REG_KEY_FILE_NAME)}a(Wf,"getFingerPrintFilePath");async function lV(){let e=Wf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await _V();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(lV,"generateFingerPrint");async function _V(){let e=tV(),t=GO.hash(e),r=Wf();try{await ki.mkdirp(Kf()),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(_V,"writeFingerprint");function VO(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=Wf(),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(iV),c=o[1];c=Buffer.concat([Buffer.from(c)],aV);let u=Buffer.concat([Buffer.from(i)],cV),l=xO.createDecipheriv(oV,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=dV(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<eV().valueOf()&&(r.valid_date=!1),GO.validate(o[1],`${nV}${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(VO,"validateLicense");function dV(e,t){try{let r=xO.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(dV,"checkOldLicense");function $O(){let e=new sV,t=[];try{t=ki.readFileSync(uV(),"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(rV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=VO(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 $f=e,e}a($O,"licenseSearch");async function EV(){return $f||await $O(),$f}a(EV,"getLicense")});var br=m((zse,aN)=>{"use strict";var JO="username is required",XO="nothing to update, must supply active, role or password to update",ZO="password cannot be an empty string",jO="If role is specified, it cannot be empty.",eN="active must be true or false";aN.exports={addUser:AV,alterUser:OV,dropUser:bV,getSuperUser:CV,userInfo:yV,listUsers:ll,listUsersExternal:IV,setUsersToGlobal:$i,findAndValidateUser:oN,getClusterUser:UV,USERNAME_REQUIRED:JO,ALTERUSER_NOTHING_TO_UPDATE:XO,EMPTY_PASSWORD:ZO,EMPTY_ROLE:jO,ACTIVE_BOOLEAN:eN};var tN=Nr(),fV=jn(),zf=ol(),rN=vO(),sN=Or(),Jf=Gs(),or=V(),nN=require("validate.js"),ue=x(),{promisify:hV}=require("util"),Xf=qs(),KO=A(),WO=Be(),mV=Tr(),Kse=Q(),Wse=Na(),SV=Kn(),{table:Qse}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:pV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Qf,HDB_ERROR_MSGS:Vi}=pV,{UserEventMsg:Zf}=qr(),QO=require("lodash"),{_assignPackageExport:TV}=require("../../index");TV("getUser",oN);var iN={username:!0,active:!0,role:!0,password:!0},zO=new Map,ul=sN.searchByValue,RV=sN.searchByHash,gV=hV(fV.delete);async function AV(e){let t=nN.cleanAttributes(e,iN),r=rN.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 ul(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=Xf.encrypt(t.password)),t.password=zf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tN.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],Jf.signalUserChange(new Zf(process.pid)),`${c.username} successfully added`}a(AV,"addUser");async function OV(e){let t=nN.cleanAttributes(e,iN);if(or.isEmptyOrZeroLength(t.username))throw new Error(JO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(XO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(ZO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(eN);let r=NV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Xf.encrypt(t.password)),t.password=zf.hash(t.password)),t.role==="")throw new Error(jO);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 ul(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 tN.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 Jf.signalUserChange(new Zf(process.pid)),n}a(OV,"alterUser");function NV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(NV,"isClusterUser");async function bV(e){try{let t=rN.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 gV(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 Jf.signalUserChange(new Zf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bV,"dropUser");async function yV(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 RV(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(yV,"userInfo");async function IV(){let e;try{e=await ll()}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(IV,"listUsersExternal");async function ll(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await ul(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]=QO.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 ul(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=QO.cloneDeep(o),o.role=r[o.role],wV(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(ll,"listUsers");function wV(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(SV)){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(wV,"appendSystemTablesToRole");async function $i(){try{let e=await ll();global.hdb_users=e}catch(e){throw ue.error(e),e}}a($i,"setUsersToGlobal");async function oN(e,t,r=!0){global.hdb_users||await $i();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Qf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Qf.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(zO.get(t)===s.password)return n;if(zf.validate(s.password,t))zO.set(t,s.password);else throw ns(new Error,Qf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(oN,"findAndValidateUser");async function CV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(CV,"getSuperUser");async function UV(){let e=await ll(),t=mV.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=Xf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+WO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+WO.SERVER_SUFFIX.ADMIN,r}a(UV,"getClusterUser")});var ya=m((jse,_N)=>{"use strict";var ei=x(),ar=A(),DV=rO(),Xse=En(),Zse=Qn(),LV=br(),{validateEvent:cN}=qr(),ba=Fr(),MV=require("process"),{resetDatabases:PV}=(de(),re(Ne)),vV={[ar.ITC_EVENT_TYPES.SCHEMA]:BV,[ar.ITC_EVENT_TYPES.USER]:lN};async function BV(e){let t=cN(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await DV(e.message),await HV(e.message)}a(BV,"schemaHandler");async function HV(e){try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(HV,"syncSchemaMetadata");var uN=[];async function lN(e){try{try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=cN(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${MV.pid} received user event:`,e),await LV.setUsersToGlobal();for(let r of uN)r()}catch(t){ei.error(t)}}a(lN,"userHandler");lN.addListener=function(e){uN.push(e)};_N.exports=vV});var qr=m((ine,EN)=>{"use strict";var tne=x(),jf=V(),FV=A(),{ITC_ERRORS:Ia}=rr(),{parentPort:rne,threadId:qV,isMainThread:GV,workerData:sne}=require("worker_threads"),{onMessageFromWorkers:xV,broadcast:nne,broadcastWithAcknowledgement:kV}=dt();EN.exports={sendItcEvent:VV,validateEvent:dN,SchemaEventMsg:$V,UserEventMsg:YV};var _l;xV(async(e,t)=>{_l=_l||ya(),dN(e),_l[e.type]&&await _l[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VV(e){return!GV&&e.message&&(e.message.originator=qV),kV(e)}a(VV,"sendItcEvent");function dN(e){if(typeof e!="object")return Ia.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jf.isEmpty(e.type))return Ia.MISSING_TYPE;if(!e.hasOwnProperty("message")||jf.isEmpty(e.message))return Ia.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jf.isEmpty(e.message.originator))return Ia.MISSING_ORIGIN;if(FV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ia.INVALID_EVENT(e.type)}a(dN,"validateEvent");function $V(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($V,"SchemaEventMsg");function YV(e){this.originator=e}a(YV,"UserEventMsg")});var Gs=m((cne,SN)=>{"use strict";var fN=A(),ane=V(),dl=x(),hN=jA(),Yi,{sendItcEvent:mN}=qr();function KV(e){try{dl.trace("signalSchemaChange called with message:",e),Yi=Yi||ya();let t=new hN(fN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),mN(t)}catch(t){dl.error(t)}}a(KV,"signalSchemaChange");function WV(e){try{dl.trace("signalUserChange called with message:",e),Yi=Yi||ya();let t=new hN(fN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),mN(t)}catch(t){dl.error(t)}}a(WV,"signalUserChange");SN.exports={signalSchemaChange:KV,signalUserChange:WV}});var El=m((lne,TN)=>{"use strict";var pN=V(),QV=A(),zV=x(),JV=zu(),XV=Qu(),ZV=Gs(),{SchemaEventMsg:jV}=qr(),e$="already exists in";TN.exports=t$;async function t$(e,t,r){if(pN.isEmptyOrZeroLength(r))return r;let s=[];pN.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 r$(e,t.schema,t.name,i)})),n}a(t$,"lmdbCheckForNewAttributes");async function r$(e,t,r,s){let n=new XV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await s$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(e$))zV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(r$,"createNewAttribute");async function s$(e){let t;return t=await JV(e),ZV.signalSchemaChange(new jV(process.pid,QV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(s$,"createAttribute")});var Ki=m((dne,RN)=>{"use strict";var eh=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}};RN.exports=eh});var AN=m((fne,gN)=>{"use strict";var n$=Ki(),i$=A().OPERATIONS_ENUM,th=class extends n${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(i$.INSERT,r,s,n,i),this.records=t}};gN.exports=th});var NN=m((mne,ON)=>{"use strict";var o$=Ki(),a$=A().OPERATIONS_ENUM,rh=class extends o${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(a$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ON.exports=rh});var yN=m((pne,bN)=>{"use strict";var c$=Ki(),u$=A().OPERATIONS_ENUM,sh=class extends c${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(u$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};bN.exports=sh});var wN=m((Rne,IN)=>{"use strict";var l$=Ki(),_$=A().OPERATIONS_ENUM,nh=class extends l${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(_$.DELETE,s,n,t,i),this.original_records=r}};IN.exports=nh});var wa=m((One,LN)=>{"use strict";var Ane=require("path"),CN=ye(),d$=AN(),E$=NN(),f$=yN(),h$=wN(),Wi=xe(),UN=V(),{CONFIG_PARAMS:m$}=A(),DN=Q();DN.initSync();var fl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:S$}=we();LN.exports=p$;async function p$(e,t){if(DN.get(m$.LOGGING_AUDITLOG)===!1)return;let r=S$(e.schema,e.table),s=await CN.openEnvironment(r,e.table,!0),n=T$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){CN.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),UN.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(p$,"writeTransaction");function T$(e,t){let r=UN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===fl.INSERT)return new d$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPDATE)return new E$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPSERT)return new f$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.DELETE)return new h$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(T$,"createTransactionObject")});var ih=m((yne,MN)=>{"use strict";var R$=Sa(),bne=pa(),Ca=A(),g$=Aa(),A$=Fi().insertRecords,O$=ye(),N$=x(),b$=El(),{getSchemaPath:y$}=we(),I$=wa();MN.exports=w$;async function w$(e){try{let{schema_table:t,attributes:r}=R$(e);g$(e,r,t.hash_attribute),e.schema!==Ca.SYSTEM_SCHEMA_NAME&&(r.includes(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await b$(e.hdb_auth_header,t,r),n=y$(e.schema,e.table),i=await O$.openEnvironment(n,e.table),o=await A$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I$(e,o)}catch(c){N$.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(w$,"lmdbCreateRecords")});var BN=m((wne,vN)=>{"use strict";var PN=A(),C$=ih(),U$=pa(),D$=require("fs-extra"),{getSchemaPath:L$}=we();vN.exports=M$;async function M$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new U$(PN.SYSTEM_SCHEMA_NAME,PN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await C$(r),await D$.mkdirp(L$(e.schema))}a(M$,"lmdbCreateSchema")});var FN=m((Une,HN)=>{"use strict";var oh=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}};HN.exports=oh});var kN=m((vne,xN)=>{"use strict";var qN=ye(),ah=Ht(),ch=rr().LMDB_ERRORS_ENUM,P$=xe(),GN=x(),Lne=V(),v$=require("lmdb"),B$=FN(),H$=A(),{OVERFLOW_MARKER:Mne,MAX_SEARCH_KEY_LENGTH:Pne}=P$,F$=H$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function q$(e,t,r,s){if(ah.validateEnv(e),t===void 0)throw new Error(ch.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ch.IDS_REQUIRED):new Error(ch.IDS_MUST_BE_ITERABLE);try{let n=qN.listDBIs(e);qN.initializeDBIs(e,t,n);let i=new B$,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[F$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,v$.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 $=ah.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{GN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){GN.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=ah.getNextMonotonicTime(),i}catch(n){throw n}}a(q$,"deleteRecords");xN.exports={deleteRecords:q$}});var Ua=m((Hne,$N)=>{"use strict";var Qi=V(),G$=kN(),x$=ye(),{getSchemaPath:k$}=we(),V$=wa(),$$=x();$N.exports=Y$;async function Y$(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 VN([],[]);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=k$(e.schema,e.table),i=await x$.openEnvironment(n,e.table),o=await G$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await V$(e,o)}catch(c){$$.error(`unable to write transaction due to ${c.message}`)}return VN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Y$,"lmdbDeleteRecords");function VN(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(VN,"createDeleteResponse")});var lh=m((Gne,YN)=>{"use strict";var K$=A(),qne=Ht();function uh(e,t){let r=Object.create(null);if(t.length===1&&K$.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(uh,"parseRow");function W$(e,t,r,s){let n=uh(r,e);s.push(n)}a(W$,"searchAll");function Q$(e,t,r,s){let n=uh(r,e);s[t]=n}a(Q$,"searchAllToMap");function z$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(z$,"iterateDBI");function ti(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(ti,"pushResults");function J$(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(J$,"endsWith");function X$(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(X$,"contains");function Z$(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(Z$,"greaterThanCompare");function j$(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(j$,"greaterThanEqualCompare");function eY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(eY,"lessThanCompare");function tY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(tY,"lessThanEqualCompare");YN.exports={parseRow:uh,searchAll:W$,searchAllToMap:Q$,iterateDBI:z$,endsWith:J$,contains:X$,greaterThanCompare:Z$,greaterThanEqualCompare:j$,lessThanCompare:eY,lessThanEqualCompare:tY,pushResults:ti}});var zi=m((Yne,ZN)=>{"use strict";var Sn=ye(),kne=x(),cr=Ht(),hl=xe(),ke=rr().LMDB_ERRORS_ENUM,Vne=V(),rY=A(),ml=lh(),{parseRow:sY}=ml,$ne=require("lmdb"),{OVERFLOW_MARKER:KN,MAX_SEARCH_KEY_LENGTH:nY}=hl;function WN(e,t,r,s=!1,n=void 0,i=void 0){return ri(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(WN,"iterateFullIndex");function Da(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(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(Da,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[hl.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(ri,"setupTransaction");function QN(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[hl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(QN,"getOverflowCheck");function iY(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 ri(e,t,t,(o,c,u)=>(Sl(r),r=La(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>sY(l.value,r))))}a(iY,"searchAll");function oY(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);Sl(r),r=La(e.database||e,r);let o=new Map;for(let{key:c,value:u}of WN(e,t,t,s,n,i))o.set(c,ml.parseRow(u,r));return o}a(oY,"searchAllToMap");function aY(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=WN(e,void 0,t,r,s,n),c=o.transaction,u=QN(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(aY,"iterateDBI");function cY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(cY,"countAll");function uY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(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(uY,"equals");function lY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(lY,"count");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(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(_Y,"startsWith");function dY(e,t,r,s,n=!1,i=void 0,o=void 0){return zN(e,t,r,s,n,i,o,!0)}a(dY,"endsWith");function zN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=QN(_,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[hl.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(zN,"contains");function EY(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),Da(e,t,r,s,u,n,i,o,!0,!1)}a(EY,"greaterThan");function fY(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),Da(e,t,r,s,u,n,i,o,!1,!1)}a(fY,"greaterThanEqual");function hY(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),Da(e,t,r,u,s,n,i,o,!1,!0)}a(hY,"lessThan");function mY(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),Da(e,t,r,u,s,n,i,o,!1,!1)}a(mY,"lessThanEqual");function SY(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 Da(e,t,r,s,n,i,o,c)}a(SY,"between");function pY(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(Sl(r),r=La(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=ml.parseRow(c,r)),o}a(pY,"searchByHash");function TY(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(TY,"checkHashExists");function RY(e,t,r,s,n=[]){return XN(e,t,r,s,n),JN(e,t,r,s,n).map(i=>i[1])}a(RY,"batchSearchByHash");function gY(e,t,r,s,n=[]){XN(e,t,r,s,n);let i=new Map;for(let[o,c]of JN(e,t,r,s,n))i.set(o,c);return i}a(gY,"batchSearchByHashToMap");function JN(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=La(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,ml.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(JN,"batchHashSearch");function XN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(XN,"initializeBatchSearchByHash");function Sl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Sl,"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>nY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function La(e,t){return t.length===1&&rY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(La,"setGetWholeRowAttributes");ZN.exports={searchAll:iY,searchAllToMap:oY,count:lY,countAll:cY,equals:uY,startsWith:_Y,endsWith:dY,contains:zN,searchByHash:pY,setGetWholeRowAttributes:La,batchSearchByHash:RY,batchSearchByHashToMap:gY,checkHashExists:TY,iterateDBI:aY,greaterThan:EY,greaterThanEqual:fY,lessThan:hY,lessThanEqual:mY,between:SY}});var Ji=m((Wne,sb)=>{var jN=require("lodash"),eb=Pe(),Ce=require("joi"),AY=V(),{hdb_schema_table:pl,checkValidTable:tb,hdb_table:rb,hdb_database:Tl}=rs(),{handleHDBError:OY,hdb_errors:NY}=W(),{getDatabases:bY}=(de(),re(Ne)),{HTTP_STATUS_CODES:yY}=NY,IY=Ce.object({database:Tl,schema:Tl,table:rb,search_attribute:pl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(pl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),wY=Ce.object({database:Tl,schema:Tl,table:rb,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(pl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:pl,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()});sb.exports=function(e,t){let r=null;switch(t){case"value":r=eb.validateBySchema(e,IY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(tb("database",e.schema)),i(tb("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=eb.validateBySchema(e,wY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=AY.checkGlobalSchemaTable(e.schema,e.table);if(n)return OY(new Error,n,yY.NOT_FOUND);let o=bY()[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=jN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!jN.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 _h=m((zne,nb)=>{"use strict";var CY=ye(),UY=Ji(),{getSchemaPath:DY}=we();nb.exports=LY;function LY(e){let t=UY(e,"hashes");if(t)throw t;let r=DY(e.schema,e.table);return CY.openEnvironment(r,e.table)}a(LY,"initialize")});var dh=m((Xne,ib)=>{"use strict";var MY=zi(),PY=_h();ib.exports=vY;async function vY(e){let t=await PY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return MY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(vY,"lmdbGetDataByHash")});var Xi=m((jne,ob)=>{"use strict";var Eh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ob.exports=Eh});var cb=m((rie,ab)=>{"use strict";var tie=Xi(),BY=zi(),HY=_h();ab.exports=FY;async function FY(e){let t=await HY(e),r=global.hdb_schema[e.schema][e.table];return BY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(FY,"lmdbSearchByHash")});var os=m((nie,ub)=>{"use strict";var fh=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=_}};ub.exports=fh});var Rl=m((oie,hb)=>{"use strict";var Ct=zi(),qY=ye(),GY=V(),ie=xe(),si=A(),xY=Kn(),lb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:kY}=we(),xs=si.SEARCH_WILDCARDS;async function VY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=xY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=fb(e,s.hash_attribute,r,t);return db(e,n,s.hash_attribute,r)}a(VY,"prepSearch");async function db(e,t,r,s){let n=kY(e.schema,e.table),i=await qY.openEnvironment(n,e.table),o=Eb(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($Y(e,r)===!1){let _=e.search_attribute;if(_===r)return s?_b(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?_b(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(db,"executeSearch");function Eb(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(Eb,"searchByType");function _b(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(_b,"createMapFromIterable");function $Y(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($Y,"checkToFetchMore");function fb(e,t,r,s){if(GY.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),xs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(xs[0])<0&&n.indexOf(xs[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(xs.indexOf(i)>=0&&xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(xs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(xs[0])||n.includes(xs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(lb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lb.UNKNOWN_SEARCH_TYPE)}}a(fb,"createSearchTypeFromSearchObject");hb.exports={executeSearch:db,createSearchTypeFromSearchObject:fb,prepSearch:VY,searchByType:Eb}});var Sb=m((uie,mb)=>{"use strict";var cie=os(),YY=Ji(),KY=V(),WY=A(),QY=Rl();mb.exports=zY;function zY(e,t){if(!KY.isEmpty(t)&&WY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YY(e,"value");if(s)throw s;let n=!0;return QY.prepSearch(e,t,n)}a(zY,"lmdbGetDataByValue")});var Ma=m((die,pb)=>{"use strict";var _ie=os(),JY=Ji(),XY=V(),ZY=A(),jY=Rl();pb.exports=eK;async function eK(e,t){if(!XY.isEmpty(t)&&ZY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=JY(e,"value");if(s)throw s;return jY.prepSearch(e,t,!1)}a(eK,"lmdbSearchByValue")});var Rb=m((hie,Tb)=>{"use strict";var fie=xe(),hh=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}},mh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Sh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Tb.exports={SearchByConditionsObject:hh,SearchCondition:mh,SortAttribute:Sh}});var bb=m((Tie,Nb)=>{"use strict";var Sie=Rb().SearchByConditionsObject,tK=os(),rK=Ji(),ph=zi(),gl=xe(),{Resource:pie}=(Zr(),re(HE)),Ob=Rl(),sK=lh(),nK=require("lodash"),{getSchemaPath:iK}=we(),gb=ye(),{handleHDBError:oK,hdb_errors:aK}=W(),{HTTP_STATUS_CODES:cK}=aK,uK=1e8;Nb.exports=lK;async function lK(e){let t=rK(e,"conditions");if(t)throw oK(t,t.message,cK.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=iK(e.schema,e.table),s=await gb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)gb.openDBI(s,l.search_attribute);let i=nK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===gl.SEARCH_TYPES.EQUALS?l.estimated_count=ph.count(s,l.search_attribute,l.search_value):_===gl.SEARCH_TYPES.CONTAINS||_===gl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=uK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ab(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(Ob.filterByType),d=_.length,E=ph.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=>sK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ab(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=ph.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(lK,"lmdbSearchByConditions");async function Ab(e,t,r,s){let n=new tK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===gl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Ob.searchByType(e,n,i,s).map(o=>o.value)}a(Ab,"executeConditionSearch")});var Pa=m((gie,yb)=>{"use strict";var _K=A().OPERATIONS_ENUM,Th=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=_K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};yb.exports=Th});var Rh=m((Oie,Pb)=>{"use strict";var Ub=os(),Db=Pa(),Lb=Ma(),Mb=Ua(),qt=A(),Ib=V(),wb=ye(),{getTransactionAuditStorePath:dK,getSchemaPath:EK}=we(),Cb=x();Pb.exports=fK;async function fK(e){try{if(Ib.isEmpty(global.hdb_schema[e.schema])||Ib.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await hK(e),await mK(e);let t=EK(e.schema,e.table);try{await wb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Cb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=dK(e.schema,e.table);await wb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Cb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fK,"lmdbDropTable");async function hK(e){let t=new Ub(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 Lb(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 Db(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Mb(n)}a(hK,"deleteAttributesFromSystem");async function mK(e){let t=new Ub(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 Lb(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 Db(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Mb(n)}catch(i){throw i}}a(mK,"dropTableFromSystem")});var Bb=m((bie,vb)=>{"use strict";var SK=require("fs-extra"),pK=os(),TK=Xi(),RK=Pa(),gK=Rh(),AK=Ua(),OK=dh(),NK=Ma(),ks=A(),{getSchemaPath:bK}=we(),{handleHDBError:yK,hdb_errors:IK}=W(),{HDB_ERROR_MSGS:wK,HTTP_STATUS_CODES:CK}=IK;vb.exports=UK;async function UK(e){let t;try{t=await DK(e.schema);let r=new pK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await NK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await gK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new RK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await AK(n);let i=bK(t);await SK.remove(i)}catch(r){throw r}}a(UK,"lmdbDropSchema");async function DK(e){let t=new TK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await OK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw yK(new Error,wK.SCHEMA_NOT_FOUND(e),CK.NOT_FOUND,void 0,void 0,!0);return s}a(DK,"validateDropSchema")});var Ah=m((Iie,Hb)=>{"use strict";var gh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Hb.exports=gh});var qb=m((Uie,Fb)=>{"use strict";var LK=require("fs-extra"),Al=ye(),{getTransactionAuditStorePath:MK}=we(),Oh=xe(),Cie=Ah();Fb.exports=PK;async function PK(e){let t;try{let r=MK(e.schema,e.table);await LK.mkdirp(r),t=await Al.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{Al.createDBI(t,Oh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Al.createDBI(t,Oh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Al.createDBI(t,Oh.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(PK,"createTransactionsAuditEnvironment")});var Vb=m((Lie,kb)=>{"use strict";var Nh=A(),Gb=ye(),vK=Fi(),{getSystemSchemaPath:BK,getSchemaPath:HK}=we(),FK=Kn(),qK=zu(),bh=Qu(),GK=x(),xK=qb(),Ih=FK.hdb_table,xb=[];for(let e=0;e<Ih.attributes.length;e++)xb.push(Ih.attributes[e].attribute);kb.exports=kK;async function kK(e,t){let r=HK(t.schema,t.table),s=new bh(t.schema,t.table,Nh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bh(t.schema,t.table,Nh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Gb.createEnvironment(r,t.table),e!==void 0){let o=await Gb.openEnvironment(BK(),Nh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await vK.insertRecords(o,Ih.hash_attribute,xb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await yh(s),await yh(n),await yh(i)}await xK(t)}catch(o){throw o}}a(kK,"lmdbCreateTable");async function yh(e){try{await qK(e)}catch(t){GK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yh,"createAttribute")});var Yb=m((Pie,$b)=>{"use strict";var VK=Sa(),$K=Aa(),YK=El(),va=A(),KK=Fi().updateRecords,WK=ye(),{getSchemaPath:QK}=we(),zK=wa(),JK=x();$b.exports=XK;async function XK(e){try{let{schema_table:t,attributes:r}=VK(e);$K(e,r,t.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(r.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await YK(e.hdb_auth_header,t,r),n=QK(e.schema,e.table),i=await WK.openEnvironment(n,e.table),o=await KK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zK(e,o)}catch(c){JK.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 Wb=m((Bie,Kb)=>{"use strict";var ZK=A().OPERATIONS_ENUM,wh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=ZK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Kb.exports=wh});var zb=m((qie,Qb)=>{"use strict";var Fie=Wb(),jK=Sa(),e1=Aa(),t1=El(),Ba=A(),r1=Fi().upsertRecords,s1=ye(),{getSchemaPath:n1}=we(),i1=wa(),o1=x(),{handleHDBError:a1,hdb_errors:c1}=W();Qb.exports=u1;async function u1(e){let t;try{t=jK(e)}catch(u){throw a1(u,u.message,c1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;e1(e,s,r.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(s.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t1(e.hdb_auth_header,r,s),i=n1(e.schema,e.table),o=await s1.openEnvironment(i,e.table),c=await r1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await i1(e,c)}catch(u){o1.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(u1,"lmdbUpsertRecords")});var Xb=m((xie,Jb)=>{"use strict";var Ch=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Jb.exports=Ch});var jb=m((Vie,Zb)=>{"use strict";var Uh=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}};Zb.exports=Uh});var ry=m((Kie,ty)=>{"use strict";var Dh=ye(),{getTransactionAuditStorePath:l1}=we(),Yie=Xb(),Ha=xe(),_1=V(),ey=jb(),d1=require("util").promisify,E1=d1(setTimeout),f1=1e4,h1=100;ty.exports=m1;async function m1(e){let t=l1(e.schema,e.table),r=await Dh.openEnvironment(t,e.table,!0),s=Dh.listDBIs(r);Dh.initializeDBIs(r,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ey;do n=await S1(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 E1(h1);while(n.transactions_deleted>0);return i}a(m1,"deleteAuditLogsBefore");async function S1(e,t){let r=new ey;try{let s=e.dbis[Ha.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[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];_1.isEmpty(c)||(n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f1)break}return await n,r}catch(s){throw s}}a(S1,"deleteTransactions")});var ny=m((Qie,sy)=>{"use strict";var Lh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};sy.exports=Lh});var oy=m((Xie,iy)=>{"use strict";var p1=os(),T1=Pa(),Jie=ny(),as=A(),R1=V(),Mh=ye(),g1=Kn(),A1=Ma(),O1=Ua(),{getSchemaPath:N1}=we();iy.exports=b1;async function b1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=g1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await I1(e),n=N1(e.schema,e.table),i=await Mh.openEnvironment(n,e.table);return t===!0&&await y1(e,i,r.hash_attribute),Mh.dropDBI(i,e.attribute),s}a(b1,"lmdbDropAttribute");async function y1(e,t,r){let s=Mh.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(y1,"removeAttributeFromAllObjects");async function I1(e){let t=new p1(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 A1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(R1.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 T1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return O1(i)}a(I1,"dropAttributeFromSystem")});var dy=m((eoe,_y)=>{"use strict";var Ph=ye(),Zi=xe(),jie=Ht(),vh=A(),ay=V(),{getTransactionAuditStorePath:w1}=we(),C1=zi(),Ol=Ki(),U1=x();_y.exports=D1;async function D1(e){let t=w1(e.schema,e.table),r=await Ph.openEnvironment(t,e.table,!0),s=Ph.listDBIs(r);Ph.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return cy(r,e.search_values);case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,M1(r,e.search_values,n);case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L1(r,e.search_values);default:return cy(r)}}a(D1,"readAuditLog");function cy(e,t=[0,Date.now()]){ay.isEmpty(t[0])&&(t[0]=0),ay.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 Ol,n))}a(cy,"searchTransactionsByTimestamp");function L1(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,ly(e,i))}return Object.fromEntries(r)}a(L1,"searchTransactionsByUsername");function M1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=C1.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=ly(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);uy(u,"records",r,_,o),uy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(M1,"searchTransactionsByHashValues");function uy(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 Ol(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Ol(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(uy,"loopRecords");function ly(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 Ol,i);r.push(o)}}catch(i){U1.warn(i)}return r}catch(s){throw s}}a(ly,"batchSearchTransactions")});var fy=m((noe,Ey)=>{"use strict";var{getSchemaPath:roe}=we(),soe=ye(),{database:P1}=(de(),re(Ne));Ey.exports={writeTransaction:v1};async function v1(e,t,r){return P1({database:e,table:t}).transaction(r)}a(v1,"writeTransaction")});var py=m((ooe,Sy)=>{"use strict";var{getSchemaPath:hy}=we(),my=ye();Sy.exports={flush:B1,resetReadTxn:H1};async function B1(e,t){return(await my.openEnvironment(hy(e,t),t.toString())).flushed}a(B1,"flush");async function H1(e,t){try{(await my.openEnvironment(hy(e,t),t.toString())).resetReadTxn()}catch{}}a(H1,"resetReadTxn")});var Ay=m((coe,gy)=>{"use strict";var{Readable:F1}=require("stream"),{getDatabases:q1}=(de(),re(Ne)),{readSync:G1,openSync:x1,createReadStream:Ty}=require("fs"),{open:k1}=require("lmdb"),Ry=Fu(),V1=Gu(),{INTERNAL_DBIS_NAME:$1}=xe();gy.exports=K1;var Bh=32768,Y1=100;async function K1(e){let t=e.database||e.schema||"data",r=q1()[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=k1({noSync:!0,maxDbs:V1.MAX_DBS}),E,f=d.openDB($1,new Ry(!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 Ry(!$,$);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++%Y1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=Ty(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=x1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Bh);G1(c,l,0,Bh);let _=o.useReadTransaction(),d=Ty(null,{fd:c,start:Bh}),E=new F1.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(K1,"getBackup")});var by=m((loe,Ny)=>{"use strict";var W1=x(),{handleHDBError:Q1}=W(),z1=aA(),J1=zu(),X1=ih(),Z1=BN(),j1=Ua(),eW=dh(),tW=cb(),rW=Sb(),sW=Ma(),nW=bb(),iW=Bb(),oW=Vb(),aW=Yb(),cW=zb(),uW=ry(),lW=Rh(),_W=oy(),dW=dy(),EW=fy(),Oy=py(),fW=Ay(),Hh=class extends z1{static{a(this,"LMDBBridge")}async searchByConditions(t){return nW(t)}async getDataByHash(t){return await eW(t)}async searchByHash(t){return await tW(t)}async getDataByValue(t,r){return await rW(t,r)}async searchByValue(t){return await sW(t)}async createSchema(t){return await Z1(t)}async dropSchema(t){return await iW(t)}async createTable(t,r){return await oW(t,r)}async dropTable(t){return await lW(t)}async createAttribute(t){return await J1(t)}async createRecords(t){return await X1(t)}async updateRecords(t){return await aW(t)}async upsertRecords(t){try{return await cW(t)}catch(r){throw Q1(r,null,null,W1.ERR,r)}}async deleteRecords(t){return await j1(t)}async dropAttribute(t){return await _W(t)}async deleteAuditLogsBefore(t){return await uW(t)}async readAuditLog(t){return await dW(t)}writeTransaction(t,r,s){return EW.writeTransaction(t,r,s)}flush(t,r){return Oy.flush(t,r)}resetReadTxn(t,r){return Oy.resetReadTxn(t,r)}getBackup(t){return fW(t)}};Ny.exports=Hh});var Py={};je(Py,{ResourceBridge:()=>Gh});function xh({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 Iy(e,t){let r=cs(e),s=xh(e,r);if(!r)throw new Gr.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&&Du(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||mW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,hW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wy(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*Cy(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 Uy,Nl,Gr,Dy,Ly,kr,Fh,qh,My,hW,mW,SW,pW,yy,Gh,vy=Se(()=>{"use strict";Uy=C(by()),Nl=C(Ji()),Gr=C(W());de();Dy=C(Sa()),Ly=C(Aa()),kr=C(A()),Fh=C(Gs()),qh=C(qr()),My=C(V());$n();Lu();({HDB_ERROR_MSGS:hW}=Gr.hdb_errors),mW="data",SW=1e4,pW=10,Gh=class extends Uy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),yy=this}async searchByConditions(t){let r=(0,Nl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Gr.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:xh(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 Gr.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}]}st({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 Fa({database:t.schema,table:null}),Fh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await kh(t.schema),Fh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.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,yy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Dy.default)(t);(0,Ly.default)(t,s,r.primaryKey);let n,i=xr()[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=Du(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=xr()[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 wy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.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:kr.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,My.async_set_timeout)(pW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%SW===0&&await l();return u.length>0&&await l(),n?wy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Nl.default)(t,"hashes");if(r)throw r;return Iy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Iy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Nl.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Gr.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===kr.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:xh(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 kr.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 kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Cy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Cy(r,t.search_values?.[0],t.search_values?.[1])}}};a(xh,"getSelect");a(Iy,"getRecords");a(cs,"getTable");a(wy,"createDeleteResponse");a(Cy,"groupRecordsInHistory")});var Fr=m((moe,By)=>{"use strict";var{ResourceBridge:TW}=(vy(),re(Py)),RW=Q();RW.initSync();var bl;function gW(){return bl||(bl=new TW,bl)}a(gW,"getBridge");By.exports=gW()});var Gy=m((poe,qy)=>{"use strict";var Hy=require("lodash"),qa=require("mathjs"),AW=require("jsonata"),Fy=V();qy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hy.uniqWith(e,Hy.isEqual):e,searchJSON:OW,mad:Ga.bind(null,qa.mad),mean:Ga.bind(null,qa.mean),mode:Ga.bind(null,qa.mode),prod:Ga.bind(null,qa.prod),median:Ga.bind(null,qa.median)};function Ga(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(Ga,"aggregateFunction");function OW(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(Fy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Fy.isEmpty(this.__ala__.res[r])){let s=AW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(OW,"searchJSON")});var ky=m((Roe,xy)=>{"use strict";var We=require("moment"),Vh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;xy.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(Vh),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(Vh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Vh)}});var Ky=m((goe,Yy)=>{"use strict";var NW=require("@turf/area"),bW=require("@turf/length"),yW=require("@turf/circle"),IW=require("@turf/difference"),wW=require("@turf/distance"),CW=require("@turf/boolean-contains"),UW=require("@turf/boolean-equal"),DW=require("@turf/boolean-disjoint"),LW=require("@turf/helpers"),Vy=A(),le=V();Yy.exports={geoArea:MW,geoLength:PW,geoCircle:vW,geoDifference:BW,geoDistance:$y,geoNear:HW,geoContains:FW,geoEqual:qW,geoCrosses:GW,geoConvert:xW};var $h="geo1 is required",Yh="geo2 is required";function MW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),NW.default(e)}a(MW,"geoArea");function PW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),bW.default(e,{units:t||"kilometers"})}a(PW,"geoLength");function vW(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)),yW.default(e,t,{units:r||"kilometers"})}a(vW,"geoCircle");function BW(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)),IW(e,t)}a(BW,"geoDifference");function $y(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)),wW.default(e,t,{units:r||"kilometers"})}a($y,"geoDistance");function HW(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 $y(e,t,s)<=r}a(HW,"geoNear");function FW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),CW.default(e,t)}a(FW,"geoContains");function qW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),UW.default(e,t)}a(qW,"geoEqual");function GW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!DW.default(e,t)}a(GW,"geoCrosses");function xW(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(Vy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Vy.GEO_CONVERSION_ENUM).join(",")}`);return LW[t](e,r)}a(xW,"geoConvert")});var yl=m((Ooe,Wy)=>{var ni=Gy(),ur=ky(),us=Ky();Wy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.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 Xy=m((Noe,Jy)=>{"use strict";var xa=require("lodash"),pt=require("alasql");pt.options.cache=!1;var kW=yl(),Qy=require("clone"),Il=require("recursive-iterator"),se=x(),ne=V(),ji=Fr(),VW=A(),{hdb_errors:$W}=W(),{getDatabases:zy}=(de(),re(Ne)),YW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";kW(pt);var Kh=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(Vr)}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(Vr)}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(Vr)}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(Vr)}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(Vr)}}_getColumns(){let t=new Il(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(Qy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=xa.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=zy()[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 Il(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 Il(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(VW.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&&xa.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(Qy(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(YW)>-1&&this.tables.forEach(n=>{let i={columnid:zy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=xa.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(Vr)}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(Vr)}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(Vr)}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(Vr)}}}_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=xa.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 Il(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=xa.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(Vr)}}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($W.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(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Jy.exports=Kh});var Or=m((yoe,Zy)=>{"use strict";var KW=iA();Zy.exports={searchByConditions:QW,searchByHash:zW,searchByValue:JW,search:XW};var Wh=Fr(),{transformReq:Qh}=V(),WW=Xy();async function QW(e){return Qh(e),Wh.searchByConditions(e)}a(QW,"searchByConditions");async function zW(e){Qh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wh.searchByHash(e))r&&t.push(r);return t}a(zW,"searchByHash");async function JW(e){Qh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wh.searchByValue(e))t.push(r);return t}a(JW,"searchByValue");function XW(e,t){try{let r=new KW(e);r.validate(),new WW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(XW,"search")});var wl=m((woe,jy)=>{"use strict";var ZW=Fr();jy.exports={writeTransaction:jW};function jW(e,t,r){return ZW.writeTransaction(e,t,r)}a(jW,"writeTransaction")});var sI=m((Doe,rI)=>{"use strict";var eQ=Or(),tQ=En(),eI=x(),rQ=Nr(),Uoe=wl(),sQ=require("clone"),Jh=require("alasql"),nQ=yl(),tI=require("util"),iQ=tI.promisify(tQ.getTableSchema),oQ=tI.promisify(eQ.search),aQ=A(),zh=V();nQ(Jh);rI.exports={update:uQ};var cQ="There was a problem performing this update. Please check the logs and try again.";async function uQ({statement:e,hdb_user:t}){let r=await iQ(e.table.databaseid,e.table.tableid),s=lQ(e.columns);zh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=sQ(n),c=zh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Jh.parse(u).statements[0],_=await oQ(l),d=_Q(s,_);return dQ(o,d,t)}a(uQ,"update");function lQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jh.compile(`SELECT ${r.expression.toString()} AS [${aQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw eI.error(t),new Error(cQ)}}a(lQ,"createUpdateRecord");function _Q(e,t){return zh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(_Q,"buildUpdateRecords");async function dQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await rQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){eI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(dQ,"updateRecords")});var iI=m((voe,nI)=>{var EQ=require("alasql"),fQ=Or(),hQ=x(),mQ=Fr(),Zh=require("util"),Xh=V(),SQ=A(),pQ=En(),Moe=wl(),Poe=Nr(),TQ="record",RQ="successfully deleted",gQ=Zh.callbackify(bQ),AQ=Zh.promisify(fQ.search),OQ=Zh.promisify(pQ.getTableSchema);nI.exports={convertDelete:gQ};function NQ(e){return`${e.deleted_hashes.length} ${TQ}${e.deleted_hashes.length===1?"":"s"} ${RQ}`}a(NQ,"generateReturnMessage");async function bQ({statement:e,hdb_user:t}){let r=await OQ(e.table.databaseid,e.table.tableid);Xh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Xh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=EQ.parse(o).statements[0],u={operation:SQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await AQ(c);let l=await mQ.deleteRecords(u);return Xh.isEmptyOrZeroLength(l.message)&&(l.message=NQ(l)),delete l.txn_time,l}catch(l){throw hQ.error(l),l.hdb_code?l.message:l}}a(bQ,"convertDelete")});var lI=m((Hoe,uI)=>{"use strict";var yQ=Qn(),{hdb_errors:oI}=W(),{getDatabases:aI}=(de(),re(Ne));uI.exports={checkSchemaExists:cI,checkSchemaTableExists:IQ,schema_describe:yQ};async function cI(e){if(!aI()[e])return oI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(cI,"checkSchemaExists");async function IQ(e,t){let r=await cI(e);if(r)return r;if(!aI()[e][t])return oI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IQ,"checkSchemaTableExists")});var ka=m((qoe,wQ)=>{wQ.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 Ml={};je(Ml,{addAnalyticsListener:()=>rm,recordAction:()=>ls,recordActionBinary:()=>eo,setAnalyticsEnabled:()=>CQ});function CQ(e){RI=e}function ls(e,t,r,s,n){if(!RI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Dl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Dl.set(i,o)),Ul||UQ()}function eo(e,t,r,s,n){ls(e?1:0,t,r,s,n)}function rm(e){AI.push(e)}function UQ(){Ul=performance.now(),setTimeout(()=>{let e=performance.now()-Ul;Ul=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Dl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of AI)n(t);Dl=new Map,ii.parentPort?ii.parentPort.postMessage({type:gI,report:r}):NI({report:r})},tm).unref()}async function DQ(e,t=6e4){let r=sm(),s;for(let _ of r.primaryStore.getRange({start:Cl+"z",end:Cl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let F=b.count||1;b[P]=(b[P]*F+z*O)/(b.count=F+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await LQ()}for(let[_,d]of i)d.id=Cl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Cl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-_I,active:l-dI,time:c}),_I=u,dI=l}async function MQ(e,t){let r=sm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function sm(){return EI||(EI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function vQ(){OI=!0,setInterval(async()=>{await DQ(tm,em),await MQ(PQ,tm)},em/2).unref()}function NI(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(fI+=s.mean*s.count);r.totalBytesProcessed=fI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(hI.get(t))}),hI.set(t,t.performance.eventLoopUtilization())),r.id=(0,pI.getNextMonotonicTime)(),sm().put(r),OI||vQ(),BQ&&(bI=FQ(r))}async function FQ(e){if(await bI,!Tn){let r=(0,Va.dirname)((0,SI.getLogFilePath)());try{Tn=await(0,jh.open)((0,Va.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,jh.open)((0,Va.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>HQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}gq(s,r),yE(s);let n=s.toJSON();if(Eq.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in rg)ft[i]&&rt.error(`Config ${rg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(hq)}}a(ag,"initConfig");function gq(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Pr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Pr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Pr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(gq,"checkForUpdatedConfig");function yE(e){let t=e.toJSON(),r=aq(t);if(r.error)throw Tu.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(yE,"validateConfig");function Aq(e,t){ft===void 0&&(ft={});let r=Ms[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(Aq,"updateConfigObject");function cg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&ag();let o=og(Ms.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=un(c),l;if(r===void 0&&e.toLowerCase()===cn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=bE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===cn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=bE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&ig(u,l),yE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&Oq(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cg,"updateConfigValue");function Oq(e,t){try{let r=Pr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(mq),rt.error(r)}}a(Oq,"backupConfigFile");var Nq=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Nq.includes(r)){let s=xn(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(xn,"flattenConfig");function bE(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(uq(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.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 lt.autoCast(t)}a(bE,"castConfigValue");function bq(){let e=lt.getPropsFilePath(),t=Gn(e);return un(t).toJSON()}a(bq,"getConfiguration");async function yq(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cg(void 0,void 0,n,!0),pq}catch(i){throw typeof i=="string"||i instanceof String?_q(i,i,dq.BAD_REQUEST,void 0,void 0,!0):i}}a(yq,"setConfiguration");function IE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return un(t).toJSON()}a(IE,"readConfigFile");function un(e){return cq.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(un,"parseYamlDoc");function Iq(){let e=IE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=tg(t);if(r)throw Tu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=tg(s);if(n)throw Tu.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Tu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Iq,"getClusteringRoutes");function ug(e){let t=sg(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===cn.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(ug,"initOldConfig");function wq(e){let t=IE();return lq.get(t,e.replaceAll("_","."))}a(wq,"getConfigFromFile");async function Cq(e,t){let r=un(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(Cq,"addConfig");function Uq(e){let t=Gn(lt.getPropsFilePath()),r=un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(Uq,"deleteConfigFromFile")});var Q=m((qte,Eg)=>{"use strict";var wE=require("fs-extra"),vr=require("path"),_g=require("os"),Dq=require("properties-reader"),jo=x(),kn=V(),te=A(),gu=Tr(),Lq="Error initializing environment manager",Au="BOOT_PROPS_FILE_PATH",dg=!1,Mq={[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},Ps={};Eg.exports={BOOT_PROPS_FILE_PATH:Au,getHdbBasePath:Pq,setHdbBasePath:vq,get:Bq,initSync:Fq,setProperty:Ee,initTestEnvironment:qq};function Pq(){return Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Pq,"getHdbBasePath");function vq(e){Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(vq,"setHdbBasePath");function Bq(e){let t=gu.getConfigValue(e);return t===void 0?Ps[e]:t}a(Bq,"get");function Ee(e,t){Mq[e]&&(Ps[e]=t),gu.updateConfigObject(e,t)}a(Ee,"setProperty");function Hq(){let e;try{e=kn.getPropsFilePath(),wE.accessSync(e,wE.constants.F_OK|wE.constants.R_OK),dg=!0;let t=Dq(e);return Ps[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Au]=e,!0}catch{return jo.trace(`Environment manager found no properties file at ${e}`),!1}}a(Hq,"doesPropFileExist");function Fq(e=!1){try{(dg||Hq()||kn.noBootFile())&&(gu.initConfig(e),Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=gu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jo.error(Lq),jo.error(t),console.error(t),process.exit(1)}}a(Fq,"initSync");function qq(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=vr.join(__dirname,"../../","unitTests");Ps[Au]=vr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,_g.userInfo()?_g.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.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,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.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,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.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 ${Au}. Please check your boot props and settings files`;jo.fatal(r),jo.error(t)}}a(qq,"initTestEnvironment")});var we=m((xte,Rg)=>{"use strict";var na=A(),Gq=V(),Bt=Q(),ia=require("path"),xq=require("minimist"),fg=require("fs-extra"),hg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:ln,SCHEMAS_PARAM_CONFIG:ea,SYSTEM_SCHEMA_NAME:Ou}=na,ta,ra,sa;function mg(){if(ta!==void 0)return ta;if(Bt.getHdbBasePath()!==void 0)return ta=Bt.get(ln.STORAGE_PATH)||ia.join(Bt.getHdbBasePath(),na.DATABASES_DIR_NAME),ta}a(mg,"getBaseSchemaPath");function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Tg(Ou),ra}a(Sg,"getSystemSchemaPath");function pg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Bt.get(na.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ia.join(Bt.getHdbBasePath(),na.TRANSACTIONS_DIR_NAME),sa}a(pg,"getTransactionAuditStoreBasePath");function kq(e,t){let r=Bt.get(ln.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ia.join(pg(),e.toString())}a(kq,"getTransactionAuditStorePath");function Tg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(na.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ia.join(mg(),e)}a(Tg,"getSchemaPath");function Vq(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,xq(process.argv));let s=r[ln.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Gq.isObject(s))throw o;i=s}for(let o of i){let c=o[Ou];if(!c)continue;let u=Bt.get(ln.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ea.PATH];if(l)return hg.set(u,[Ou,ea.TABLES,t,ea.PATH],l),Bt.setProperty(ln.SCHEMAS,u),l;let _=c?.[ea.PATH];if(_)return hg.set(u,[Ou,ea.PATH],_),Bt.setProperty(ln.SCHEMAS,u),_}}let n=r[ln.STORAGE_PATH.toUpperCase()];if(n){if(!fg.pathExistsSync(n))throw new Error(n+" does not exist");let i=ia.join(n,e);return fg.mkdirsSync(i),Bt.setProperty(ln.STORAGE_PATH,n),i}return Sg()}a(Vq,"initSystemSchemaPaths");function $q(){ta=void 0,ra=void 0,sa=void 0}a($q,"resetPaths");Rg.exports={getBaseSchemaPath:mg,getSystemSchemaPath:Sg,getTransactionAuditStorePath:kq,getTransactionAuditStoreBasePath:pg,getSchemaPath:Tg,initSystemSchemaPaths:Vq,resetPaths:$q}});var Ht=m((Yte,bg)=>{"use strict";var Yq=rr().LMDB_ERRORS_ENUM,Vte=require("lmdb"),Kq=xe(),$te=require("buffer").Buffer,{OVERFLOW_MARKER:gg,MAX_SEARCH_KEY_LENGTH:Nu}=Kq,Ag=["number","string","symbol","boolean","bigint"];function Wq(e){if(e=e?.primaryStore||e,!e)throw new Error(Yq.ENV_REQUIRED)}a(Wq,"validateEnv");function Qq(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(Qq,"stringifyData");function zq(e){return e instanceof Date?e.valueOf():e}a(zq,"convertKeyValueToWrite");function Jq(e){if(e==null)return;if(Ag.includes(typeof e))return e.length>Nu?[e.slice(0,Nu)+gg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Ag.includes(typeof n))n.length>Nu?t.push(n.slice(0,Nu)+gg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Jq,"getIndexedValues");var bu=0,Og=0;function Ng(){Og=Date.now()-performance.now()}a(Ng,"adjustStartTime");Ng();var Xq=6e4;setInterval(Ng,Xq).unref();function Zq(){let e=performance.now()+Og;return e>bu?(bu=e,e):(bu+=488e-6,bu)}a(Zq,"getNextMonotonicTime");bg.exports={validateEnv:Wq,stringifyData:Qq,convertKeyValueToWrite:zq,getNextMonotonicTime:Zq,getIndexedValues:Jq}});var yg,Xr,CE,oa=Se(()=>{yg=require("events"),Xr=class extends yg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new CE;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)}},CE=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 aa(e){return e[ht]||(e[ht]=Object.create(null))}function Uu(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[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Ig(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){aa(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,yu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,yu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(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[ht];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 yu.ClientError("Can not add a property to a sealed table schema");aa(this)[o]=c}),i("deleteProperty",function(o){aa(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],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 Ig(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}},Uu(r,t)),new r(e)):new Iu(e);case Array:let s=new Cu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ig(o,t?.elements)),s[n]=o}return s}}function Du(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Du(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ca(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=ca(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=ca(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function wu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||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(wu(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(wu(n))return!0}else return!0}else return!0}}return!1}var yu,ht,Iu,Vn,Cu,Lu=Se(()=>{Zr();yu=C(W()),ht=Symbol("own-data");a(aa,"getChanges");a(Uu,"assignTrackedAccessors");a(Ig,"trackObject");Iu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Uu(Iu,{});a(Du,"collapseData");a(ca,"deepFreeze");a(wu,"hasChanges");Vn=Symbol.for("has-array-changes"),Cu=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Cu.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 UE;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 wg,Cg,UE,$n=Se(()=>{wg=C(Ht()),Cg=require("../../index");Zr();a(Ye,"transaction");(0,Cg._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()};UE=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,wg.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 ME(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(eG[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]=es.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 _t.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 DE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=PE(e);if(!p)throw new DE.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:Dg.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 PE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(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 Mu(e){if(!e)return;let t=new LE,r,s,n,i,o;for(;r=Ug.exec(e);){i=Ug.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=jq[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 DE,_t,es,Dg,Ug,jq,eG,LE,Pu=Se(()=>{DE=C(W()),_t=C(xe()),es=require("ordered-binary"),Dg=require("lmdb"),Ug=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,jq={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ME,"idsForCondition");eG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(PE,"filterByType");a(jr,"attributeComparator");a(Mu,"parseQuery");LE=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 HE={};je(HE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>Hg,snake_case:()=>rG});function rG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Lg(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 BE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(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[Hg]=!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 vu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new vu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new Bg.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 vE(e){let t=e[ce];if(t){let r=e[ht];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 Mg(e){if(typeof e=="string")return t=>vE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=vE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=vE(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 Pg,vg,Bg,Ae,ae,vs,Hg,ce,tG,mt,vu,BE,Zr=Se(()=>{Pg=require("crypto");oa();vg=require("../../index"),Bg=C(W());Lu();$n();Pu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),Hg=Symbol("save-updates"),ce=Symbol("stored-record"),tG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=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=Rr(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=Mg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[vs]){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):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Pg.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):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Mg(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return Mu(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&&tG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Lg(t,this)}}return Lg(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[vs]=!0),n}connect(t){let r=new Xr;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]}};mt.prototype[Ae]=null;(0,vg._assignPackageExport)("Resource",mt);a(rG,"snake_case");vu=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(Lg,"pathToId");BE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(vE,"selectFromObject");a(Mg,"transformForSelect")});var GE={};je(GE,{loadGQLSchema:()=>nG,start:()=>qE,startOnMainThread:()=>sG});function qE({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,FE.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,FE.dirname)(s)+"/"+T.name,p.tableClass)}}}var FE,sG,nG,Fg=Se(()=>{FE=require("path");de();a(qE,"start");sG=qE,nG=qE({ensureTable:st}).handleFile});async function Bu(e){return iG?(ua||(ua=oG(cG)),(await(await ua).import(e)).namespace):import(e)}async function oG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ua=new Compartment({console,Math,Date,fetch:aG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Gg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:nr,databases:ve})}};let s=await(0,qg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ua}function aG(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 cG(){return{Resource:mt,tables:nr}}var qg,Gg,iG,ua,xE=Se(()=>{Zr();de();qg=require("fs/promises"),Gg=require("path"),iG=!1;a(Bu,"secureImport");a(oG,"getCompartment");a(aG,"secureOnlyFetch");a(cG,"getGlobalVars")});var VE={};je(VE,{handleFile:()=>uG});async function uG(e,t,r,s){let n=new Map,i=(0,xg.pathToFileURL)(r).toString(),o=await Bu(i);u(o.default)&&s.set((0,kE.dirname)(t),o.default),c(o,(0,kE.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 xg,kE,kg=Se(()=>{xg=require("url");xE();kE=require("path");a(uG,"handleFile")});var YE={};je(YE,{start:()=>lG});function lG({resources:e}){e.set("login",$E),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var $E,Vg=Se(()=>{Zr();a(lG,"start");$E=class extends mt{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 WE=m((Tre,Kg)=>{"use strict";var{Readable:_G}=require("stream"),dG=1e4;Kg.exports={streamAsJSON(e){return new KE({value:e})}};var KE=class extends _G{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),$g)}catch(n){yield $g(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);Yg(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>dG?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 Yg(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 $g(e){return console.error(e),JSON.stringify(e.toString())}a($g,"handleError");function Yg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Yg,"when")});var iA=m((Are,nA)=>{"use strict";var QE=require("recursive-iterator"),EG=require("alasql"),zE=require("clone"),Wg=V(),{handleHDBError:Qg,hdb_errors:fG}=W(),{HDB_ERROR_MSGS:zg,HTTP_STATUS_CODES:Jg}=fG,{getDatabases:hG}=(de(),re(Ne)),mG=["DISTINCT_ARRAY"],Xg=Symbol("validateTables"),JE=Symbol("validateTable"),gre=Symbol("getAllColumns"),Zg=Symbol("validateAllColumns"),Hu=Symbol("findColumn"),jg=Symbol("validateOrderBy"),la=Symbol("validateSegment"),XE=Symbol("validateColumn"),eA=Symbol("setColumnsForTable"),tA=Symbol("checkColumnsForAsterisk"),rA=Symbol("validateGroupBy"),sA=Symbol("hasColumns"),ZE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Xg](),this[tA](),this[Zg]()}[Xg](){if(this[sA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[JE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[JE](t.table)})}}[sA](){let t=!1,r=new QE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[JE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=hG();if(!r[t.databaseid])throw Qg(new Error,zg.SCHEMA_NOT_FOUND(t.databaseid),Jg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Qg(new Error,zg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Jg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=zE(n);i.table=zE(t),this.attributes.push(i)})}[Hu](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)}[tA](){let t=new QE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[eA](r.tableid)}[eA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new EG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Zg](){this[la](this.statement.columns,!1),this[la](this.statement.joins,!1),this[la](this.statement.where,!1),this[rA](this.statement.group,!1),this[la](this.statement.order,!0)}[la](t,r){if(!t)return;let s=new QE(t),n=[];for(let{node:i,path:o}of s)!Wg.isEmpty(i)&&!Wg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jg](i):n.push(this[XE](i)));return n}[rA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&mG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=zE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Hu](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[Hu](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`}[jg](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[XE](t)}[XE](t){let r=this[Hu](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]}};nA.exports=ZE});var aA=m((Nre,oA)=>{"use strict";var jE=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")}};oA.exports=jE});var uA=m((yre,cA)=>{"use strict";var ef=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cA.exports=ef});var Fu=m((wre,lA)=>{"use strict";var rf=Q(),sf=A();rf.initSync();var SG=rf.get(sf.CONFIG_PARAMS.STORAGE_COMPRESSION),pG=rf.get(sf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,TG=sf.UPDATES_PROPERTY,tf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=SG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=pG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===TG)}};lA.exports=tf});var Gu=m((Ure,dA)=>{"use strict";var Hi=Q(),_a=A();Hi.initSync();var RG=Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",_A=Hi.get(_a.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),gG=Hi.get(_a.CONFIG_PARAMS.STORAGE_NOREADAHEAD),qu=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=RG,this.noFSAccess=!0,_A!==void 0&&(this.overlappingSync=_A),this.noReadAhead=gG}};dA.exports=qu;qu.MAX_DBS=1e4});var ye=m((Lre,AA)=>{"use strict";var of=require("lmdb"),Br=require("fs-extra"),ir=require("path"),xu=Ht(),hA=x(),Ft=rr().LMDB_ERRORS_ENUM,ku=uA(),af=Fu(),mA=Gu(),_n=xe(),EA=A(),{table:AG,resetDatabases:OG}=(de(),re(Ne)),fA=Q(),Hr=_n.INTERNAL_DBIS_NAME,SA=_n.DBI_DEFINITION_NAME,NG="data.mdb",bG="lock.mdb",da=".mdb",yG="-lock",nf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[_n.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[_n.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new of.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Vu(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(Vu,"pathEnvNameValidation");async function cf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+da);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,NG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(cf,"validateEnvironmentPath");function $u(e,t){if(xu.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a($u,"validateEnvDBIName");async function IG(e,t,r=!1,s=!1){Vu(e,t);let n=ir.basename(e);t=t.toString();let i=fA.get(EA.CONFIG_PARAMS.SCHEMAS);i||fA.setProperty(EA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await cf(e,t,s),pA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new mA(s?c:c+da,!1),l=of.open(u);l.dbis=Object.create(null);let _=new af(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=uf(e,t,r);return l[_n.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(IG,"createEnvironment");async function wG(e,t,r,s=!0){Vu(e,t),t=t.toString();let n=ir.join(e,t);return AG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(wG,"copyEnvironment");async function pA(e,t,r=!1){Vu(e,t),t=t.toString();let s=uf(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 cf(e,t),i=ir.join(e,t+da),o=n!=i,c=new mA(n,o),u=of.open(c);u.dbis=Object.create(null);let l=RA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[_n.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(pA,"openEnvironment");async function CG(e,t,r=!1){Vu(e,t),t=t.toString();let s=ir.join(e,t+da),n=await cf(e,t);if(global.lmdb_map!==void 0){let i=uf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await TA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+yG:ir.join(ir.dirname(n),bG))}a(CG,"deleteEnvironment");async function TA(e){xu.validateEnv(e);let t=e[_n.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(TA,"closeEnvironment");function uf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(uf,"getCachedEnvironmentName");function UG(e){xu.validateEnv(e);let t=Object.create(null),r=Ar(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new ku,n)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(UG,"listDBIDefinitions");function RA(e){xu.validateEnv(e);let t=[],r=Ar(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(RA,"listDBIs");function DG(e,t){let s=Ar(e,Hr).getEntry(t),n=new ku;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(DG,"getDBIDefinition");function gA(e,t,r,s=!r){if($u(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new af(r,s===!0),o=e.openDB(t,i),c=new ku(r===!0,s);return o[SA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gA,"createDBI");function Ar(e,t){if($u(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=DG(e,t):r=new ku,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new af(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(Ft.DBI_DOES_NOT_EXIST):n}return s[SA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function LG(e,t){$u(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[_n.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(LG,"statDBI");async function MG(e,t){try{let r=ir.join(e,t+da);return(await Br.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(MG,"environmentDataSize");function PG(e,t){if($u(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(PG,"dropDBI");function vG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===Ft.DBI_DOES_NOT_EXIST)gA(e,i,i!==t,i===t),s=!0;else throw o}}s&&OG()}a(vG,"initializeDBIs");AA.exports={openDBI:Ar,openEnvironment:pA,createEnvironment:IG,listDBIs:RA,listDBIDefinitions:UG,createDBI:gA,dropDBI:PG,statDBI:LG,deleteEnvironment:CG,initializeDBIs:vG,TransactionCursor:nf,environmentDataSize:MG,copyEnvironment:wG,closeEnvironment:TA}});var NA=m((Pre,OA)=>{"use strict";var lf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};OA.exports=lf});var yA=m((Bre,bA)=>{"use strict";var _f=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}};bA.exports=_f});var wA=m((Fre,IA)=>{"use strict";var df=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};IA.exports=df});var Fi=m((Vre,DA)=>{"use strict";var BG=ye(),HG=NA(),FG=yA(),qG=wA(),ts=Ht(),Ea=rr().LMDB_ERRORS_ENUM,GG=xe(),Bs=A(),xG=V(),kG=require("uuid"),Gre=require("lmdb"),{handleHDBError:VG,hdb_errors:$G}=W(),{OVERFLOW_MARKER:xre,MAX_SEARCH_KEY_LENGTH:kre}=GG,CA=Q();CA.initSync();var Yu=CA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ef=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function YG(e,t,r,s,n=ts.getNextMonotonicTime()){Sf(e,t,r,s),ff(e,t,r);let i=new HG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];UA(l,!0,n);let _=KG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return hf(o,c,s,i,n)}a(YG,"insertRecords");function KG(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][Bs.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Yu&&l.prefetch(u.map(_=>({key:_,value:n})),Ku);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Yu&&e.dbis[t].prefetch([n],Ku),e.dbis[t].put(n,s,s[Yn])})}a(KG,"insertRecord");function WG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(WG,"removeSkippedRecords");function UA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Ef]))&&(e[Ef]=r||ts.getNextMonotonicTime()):delete e[Ef]}a(UA,"setTimestamps");function ff(e,t,r){r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BG.initializeDBIs(e,t,r)}a(ff,"initializeTransaction");async function QG(e,t,r,s,n=ts.getNextMonotonicTime()){Sf(e,t,r,s),ff(e,t,r);let i=new FG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=mf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return hf(c,u,s,i,n,o)}a(QG,"updateRecords");async function zG(e,t,r,s,n=ts.getNextMonotonicTime()){try{Sf(e,t,r,s)}catch(u){throw VG(u,u.message,$G.HTTP_STATUS_CODES.BAD_REQUEST)}ff(e,t,r);let i=new qG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;xG.isEmpty(l[t])?(_=kG.v4(),l[t]=_):_=l[t];let d=mf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return hf(o,c,s,i,n)}a(zG,"upsertRecords");async function hf(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(),WG(r,i),s}a(hf,"finalizeWrite");function mf(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(UA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])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][Bs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ts.getIndexedValues(R);if(O){Yu&&p.prefetch(O.map(k=>({key:k,value:s})),Ku);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Yu&&p.prefetch(O.map(k=>({key:k,value:s})),Ku);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:mf(e,t,r,s,n,i,o))}a(mf,"updateUpsertRecord");function JG(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(Ea.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ea.WRITE_ATTRIBUTES_REQUIRED):new Error(Ea.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(JG,"validateBasic");function Sf(e,t,r,s){if(JG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ea.RECORDS_REQUIRED):new Error(Ea.RECORDS_MUST_BE_ARRAY)}a(Sf,"validateWrite");function Ku(){}a(Ku,"noop");DA.exports={insertRecords:YG,updateRecords:QG,upsertRecords:zG}});var Kn=m((Yre,XG)=>{XG.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((Kre,PA)=>{"use strict";var MA=V(),LA=A(),qi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),dn={schema_format:{pattern:qi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZG=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()).required(),jG=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()),ex=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()).required();function tx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>dn.schema_length.maximum?`'${e}' maximum of 250 characters`:qi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(tx,"checkValidTable");function rx(e,t){return MA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(rx,"validateSchemaExists");function sx(e,t){let r=t.state.ancestors[0].schema;return MA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(sx,"validateTableExists");function nx(e,t){return e.toLowerCase()===LA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${LA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(nx,"validateSchemaName");PA.exports={common_validators:dn,schema_regex:qi,hdb_schema_table:ZG,validateSchemaExists:rx,validateTableExists:sx,validateSchemaName:nx,checkValidTable:tx,hdb_database:jG,hdb_table:ex}});var Wu=m((Qre,vA)=>{var{common_validators:ss}=rs(),ha=Pe(),fa="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 ma(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(ma,"makeAttributesStrings");function ix(e){return e=ma(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ix,"schema_object");function ox(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ox,"table_object");function ax(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,ha.validateObject(e,Ke)}a(ax,"create_table_object");function cx(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence={message:fa},Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(cx,"attribute_object");function ux(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ux,"describe_table");function lx(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(lx,"validateTableResidence");vA.exports={schema_object:ix,create_table_object:ax,table_object:ox,attribute_object:cx,describe_table:ux,validateTableResidence:lx}});var HA=m((Jre,BA)=>{"use strict";var _x=require("uuid"),pf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||_x.v4(),this.schema_table=`${this.schema}.${this.table}`}};BA.exports=pf});var Qu=m((Zre,FA)=>{"use strict";var dx=HA(),Tf=class extends dx{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}};FA.exports=Tf});var GA=m((ese,qA)=>{"use strict";qA.exports=fx;var Ex="inserted";function fx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ex?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fx,"returnObject")});var zu=m((rse,YA)=>{"use strict";var hx=A(),Rf=ye(),mx=Fi(),{getSystemSchemaPath:Sx,getSchemaPath:px}=we(),Tx=Kn(),Rx=Wu(),gx=Qu(),Ax=GA(),{handleHDBError:xA,hdb_errors:VA}=W(),kA=V(),{HTTP_STATUS_CODES:Ox}=VA,gf=Tx.hdb_attribute,$A=[];for(let e=0;e<gf.attributes.length;e++)$A.push(gf.attributes[e].attribute);var Nx="inserted";YA.exports=bx;async function bx(e){let t=Rx.attribute_object(e);if(t)throw xA(new Error,t.message,VA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xA(new Error,r,Ox.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kA.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 gx(e.schema,e.table,e.attribute,e.id);try{let i=await Rf.openEnvironment(px(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}`);Rf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Rf.openEnvironment(Sx(),hx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await mx.insertRecords(o,gf.hash_attribute,$A,[n]);return Ax(Nx,c,{records:[n]},u)}catch(i){throw i}}a(bx,"lmdbCreateAttribute")});var Of=m((nse,WA)=>{var{hdb_table:yx,hdb_database:KA}=rs(),Ix=Pe(),Af=require("joi"),wx={undefined:"undefined",null:"null"},Cx=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||wx[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"),Ux=Af.object({database:KA,schema:KA,table:yx,records:Af.array().items(Af.object().custom(Cx)).required()});WA.exports=function(e){return Ix.validateBySchema(e,Ux)}});var Sa=m((ase,zA)=>{"use strict";var Fs=V(),QA=x(),ose=Of(),{getDatabases:Dx}=(de(),re(Ne)),{ClientError:Wn}=W();zA.exports=Lx;function Lx(e){if(Fs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(Fs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(Fs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=Dx()[e.schema]?.[e.table];if(Fs.isEmpty(t))throw new Wn(`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&&Fs.isEmptyOrZeroLength(o[r]))throw QA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!Fs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw QA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Fs.isEmpty(o[r])&&o[r]!==""&&s.has(Fs.autoCast(o[r]))&&(o.skip=!0),s.add(Fs.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(Lx,"insertUpdateValidate")});var pa=m((use,JA)=>{"use strict";var Mx=A().OPERATIONS_ENUM,Nf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Mx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};JA.exports=Nf});var Aa=m((dse,XA)=>{"use strict";var _se=pa(),Ju=A(),yf=V(),bf=x(),Px=require("uuid"),{handleHDBError:Ta,hdb_errors:vx}=W(),{HDB_ERROR_MSGS:Ra,HTTP_STATUS_CODES:ga}=vx;XA.exports=Bx;function Bx(e,t,r){for(let n=0;n<t.length;n++)Hx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Fx(i,r,e.operation)}}a(Bx,"processRows");function Hx(e){if(Buffer.byteLength(String(e))>Ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ta(new Error,Ra.ATTR_NAME_LENGTH_ERR(e),ga.BAD_REQUEST,void 0,void 0,!0);if(yf.isEmptyOrZeroLength(e)||yf.isEmpty(e.trim()))throw Ta(new Error,Ra.ATTR_NAME_NULLISH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Hx,"validateAttribute");function Fx(e,t,r){if(!e.hasOwnProperty(t)||yf.isEmptyOrZeroLength(e[t])){if(r===Ju.OPERATIONS_ENUM.INSERT||r===Ju.OPERATIONS_ENUM.UPSERT){e[t]=Px.v4();return}throw bf.error("Update transaction aborted due to record with no hash value:",e),Ta(new Error,Ra.RECORD_MISSING_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw bf.error(e),Ta(new Error,Ra.HASH_VAL_LENGTH_ERR,ga.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw bf.error(e),Ta(new Error,Ra.INVALID_FORWARD_SLASH_IN_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateHash")});var jA=m((fse,ZA)=>{"use strict";var If=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ZA.exports=If});var rO=m((mse,tO)=>{"use strict";var wf=ye(),qx=x(),eO=rr().LMDB_ERRORS_ENUM;tO.exports=Gx;async function Gx(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 wf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==eO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await wf.closeEnvironment(global.lmdb_map[s]),await wf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==eO.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){qx.error(t)}}a(Gx,"cleanLMDBMap")});var qs=m((pse,oO)=>{"use strict";var Oa=require("crypto"),xx=Q(),{CONFIG_PARAMS:kx}=A(),nO="aes-256-cbc",Vx=32,$x=16,Cf=64,iO=32,Yx=Cf+iO,sO=new Map;oO.exports={encrypt:Kx,decrypt:Wx,createNatsTableStreamName:Qx};function Kx(e){let t=Oa.randomBytes(Vx),r=Oa.randomBytes($x),s=Oa.createCipheriv(nO,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(Kx,"encrypt");function Wx(e){let t=e.substr(0,Cf),r=e.substr(Cf,iO),s=e.substr(Yx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Oa.createDecipheriv(nO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Wx,"decrypt");function Qx(e,t){let r=xx.get(kx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=sO.get(r);return s||(s=Oa.createHash("md5").update(r).digest("hex"),sO.set(r,s)),s}a(Qx,"createNatsTableStreamName")});var Qn=m((gse,cO)=>{"use strict";var Rse=Or(),Xu=x(),aO=Wu(),zx=qs(),Zu=V(),{handleHDBError:ju,hdb_errors:Jx}=W(),{HDB_ERROR_MSGS:el,HTTP_STATUS_CODES:Uf}=Jx,Xx=Q();Xx.initSync();var{getDatabases:Df}=(de(),re(Ne));cO.exports={describeAll:Zx,describeTable:tl,describeSchema:jx};async function Zx(e){try{let t=Zu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Df(),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 tl({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 tl({schema:l,table:d},f)}E&&c.push(E)}catch(E){Xu.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 Xu.error("Got an error in describeAll"),Xu.error(t),ju(new Error,el.DESCRIBE_ALL_ERR)}}a(Zx,"describeAll");async function tl(e,t){Zu.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=aO.describe_table(e);if(i)throw i;let c=Df()[r];if(!c)throw ju(new Error,el.SCHEMA_NOT_FOUND(e.schema),Uf.NOT_FOUND);let u=c[s];if(!u)throw ju(new Error,el.TABLE_NOT_FOUND(e.schema,e.table),Uf.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=zx.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){Xu.warn(`unable to stat table dbi due to ${d}`)}return _}a(tl,"descTable");async function jx(e){Zu.transformReq(e);let t=aO.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=Df()[s];if(!i)throw ju(new Error,el.SCHEMA_NOT_FOUND(e.schema),Uf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Zu.isEmpty(u)||u.describe){let l=await tl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(jx,"describeSchema")});var En=m((bse,EO)=>{var ek=Kn(),{callbackify:lO,promisify:tk}=require("util"),{getDatabases:_O}=(de(),re(Ne));EO.exports={setSchemaDataToGlobal:uO,getTableSchema:rk,getSystemSchema:sk,setSchemaDataToGlobalAsync:tk(uO)};var dO=Qn(),Ose=lO(dO.describeAll),Nse=lO(dO.describeTable);function uO(e){global.hdb_schema=_O(),e&&e()}a(uO,"setSchemaDataToGlobal");function rk(e,t,r){let s=_O()[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(rk,"getTableSchema");function sk(){return ek}a(sk,"getSystemSchema")});var Nr=m((Ise,SO)=>{"use strict";var sl=Of(),St=V(),nk=require("util"),nl=Fr(),ik=En(),fO=x(),{handleHDBError:zn,hdb_errors:ok}=W(),{HTTP_STATUS_CODES:Jn}=ok,ak=nk.promisify(ik.getTableSchema),ck="updated",hO="inserted",mO="upserted";SO.exports={insert:lk,update:_k,upsert:dk,validation:uk,flush:Ek};async function uk(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ak(e.schema,e.table),r=sl(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&&St.isEmptyOrZeroLength(c[s]))throw fO.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(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.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(uk,"validation");async function lk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.createRecords(e);return rl(hO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(lk,"insertData");async function _k(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.updateRecords(e);return St.isEmpty(s.existing_rows)?rl(ck,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):rl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(_k,"updateData");async function dk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.upsertRecords(e);return rl(mO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(dk,"upsertData");function rl(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===hO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===mO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(rl,"returnObject");function Ek(e){return St.transformReq(e),nl.flush(e.schema,e.table)}a(Ek,"flush")});var Mf=m((Cse,RO)=>{var fk=Pe(),Lf=require("joi"),{hdb_table:hk,hdb_database:pO}=rs(),TO={schema:pO,database:pO,table:hk},mk={date:Lf.date().iso().required()},Sk={timestamp:Lf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RO.exports=function(e,t){let r=t==="timestamp"?{...TO,...Sk}:{...TO,...mk},s=Lf.object(r);return fk.validateBySchema(e,s)}});var OO=m((Use,AO)=>{var pk=Pe(),Pf=require("joi"),{hdb_table:Tk,hdb_database:gO}=rs(),Rk=Pf.object({schema:gO,database:gO,table:Tk,hash_values:Pf.array().required(),ids:Pf.array()});AO.exports=function(e){return pk.validateBySchema(e,Rk)}});var bO=m((Dse,NO)=>{"use strict";var vf=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}},Bf=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}},Hf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};NO.exports={InsertObject:vf,NoSQLSeachObject:Bf,DeleteResponseObject:Hf}});var jn=m((Mse,UO)=>{"use strict";var IO=Mf(),gk=OO(),Xn=V(),yO=require("moment"),wO=x(),{promisify:Ak,callbackify:Ok}=require("util"),Zn=A(),Nk=En(),Ff=Ak(Nk.getTableSchema),qf=Fr(),{DeleteResponseObject:bk}=bO(),{handleHDBError:fn,hdb_errors:yk}=W(),{HDB_ERROR_MSGS:il,HTTP_STATUS_CODES:hn}=yk,Ik="records successfully deleted",wk=Ok(CO);UO.exports={delete:wk,deleteRecord:CO,deleteFilesBefore:Ck,deleteAuditLogsBefore:Uk};async function Ck(e){let t=IO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!yO(e.date,yO.ISO_8601).isValid())throw fn(new Error,il.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,il.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await qf.deleteRecordsBefore(e);if(await Ff(e.schema,e.table),wO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ck,"deleteFilesBefore");async function Uk(e){let t=IO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,il.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,il.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await qf.deleteAuditLogsBefore(e);return await Ff(e.schema,e.table),wO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Uk,"deleteAuditLogsBefore");async function CO(e){e.ids&&(e.hash_values=e.ids);let t=gk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await Ff(e.schema,e.table);let s=await qf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ik}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new bk;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(CO,"deleteRecord")});var ol=m((vse,MO)=>{var Dk=require("crypto"),DO=9;function Lk(e){let t=Pk(DO),r=LO(e+t);return t+r}a(Lk,"createHash");function Mk(e,t){let r=e.substr(0,DO),s=r+LO(t+r);return e===s}a(Mk,"validateHash");function Pk(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(Pk,"generateSalt");function LO(e){return Dk.createHash("md5").update(e).digest("hex")}a(LO,"md5");MO.exports={hash:Lk,validate:Mk}});var vO=m((Hse,PO)=>{var Gf=Pe(),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 vk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Gf.validateObject(e,It)}a(vk,"addUserValidation");function Bk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Gf.validateObject(e,It)}a(Bk,"alterUserValidation");function Hk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Gf.validateObject(e,It)}a(Hk,"dropUserValidation");PO.exports={addUserValidation:vk,alterUserValidation:Bk,dropUserValidation:Hk}});var Be=m((Gse,HO)=>{"use strict";var{platform:qse}=require("os"),Fk="nats-server.zip",xf="nats-server",qk=process.platform==="win32"?`${xf}.exe`:xf,kf="HDB",Gk=/^[^\s.,*>]+$/,BO="__request__",xk=a(e=>`${e}.${BO}`,"REQUEST_SUBJECT"),kk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Vk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},$k={HUB:"hub.pid",LEAF:"leaf.pid"},Yk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Kk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:kf,deliver_subject:"__HDB__.WORKQUEUE"},Wk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:kf,deliver_subject:"HDB.SCHEMAQUEUE"},Qk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:kf,deliver_subject:"HDB.USERQUEUE"},zk={SUCCESS:"success",ERROR:"error"},Jk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Xk={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Zk={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},jk={debug:"-D",trace:"-DVV"};HO.exports={NATS_SERVER_ZIP:Fk,NATS_SERVER_NAME:xf,NATS_BINARY_NAME:qk,PID_FILES:$k,NATS_CONFIG_FILES:Vk,SERVER_SUFFIX:Yk,WORK_QUEUE_CONSUMER_NAMES:Kk,SCHEMA_QUEUE_CONSUMER_NAMES:Wk,USER_QUEUE_CONSUMER_NAMES:Qk,NATS_TERM_CONSTRAINTS_RX:Gk,REQUEST_SUFFIX:BO,UPDATE_REMOTE_RESPONSE_STATUSES:zk,CLUSTER_STATUS_STATUSES:Jk,REQUEST_SUBJECT:xk,SUBJECT_PREFIXES:Xk,MSG_HEADERS:kk,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:jk,LOG_LEVEL_HIERARCHY:Zk}});var qO=m((kse,FO)=>{"use strict";var al=A(),cl=class{static{a(this,"BaseLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Vf=class extends cl{static{a(this,"ExtendedLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:cl,ExtendedLicense:Vf}});var Na=m(($se,YO)=>{"use strict";var ki=require("fs-extra"),GO=ol(),xO=require("crypto"),eV=require("moment"),tV=require("uuid").v4,wt=x(),Yf=require("path"),rV=V(),mn=A(),sV=qO().ExtendedLicense,xi="invalid license key format",nV="061183",iV="mofi25",oV="aes-256-cbc",aV=16,cV=32,kO=Q();kO.initSync();var $f;YO.exports={validateLicense:VO,generateFingerPrint:lV,licenseSearch:$O,getLicense:EV};function Kf(){return Yf.join(kO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Kf,"getLicenseDirPath");function uV(){let e=Kf();return Yf.join(e,mn.LICENSE_FILE_NAME)}a(uV,"getLicenseFilePath");function Wf(){let e=Kf();return Yf.join(e,mn.REG_KEY_FILE_NAME)}a(Wf,"getFingerPrintFilePath");async function lV(){let e=Wf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await _V();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(lV,"generateFingerPrint");async function _V(){let e=tV(),t=GO.hash(e),r=Wf();try{await ki.mkdirp(Kf()),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(_V,"writeFingerprint");function VO(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=Wf(),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(iV),c=o[1];c=Buffer.concat([Buffer.from(c)],aV);let u=Buffer.concat([Buffer.from(i)],cV),l=xO.createDecipheriv(oV,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=dV(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<eV().valueOf()&&(r.valid_date=!1),GO.validate(o[1],`${nV}${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(VO,"validateLicense");function dV(e,t){try{let r=xO.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(dV,"checkOldLicense");function $O(){let e=new sV,t=[];try{t=ki.readFileSync(uV(),"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(rV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=VO(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 $f=e,e}a($O,"licenseSearch");async function EV(){return $f||await $O(),$f}a(EV,"getLicense")});var br=m((zse,aN)=>{"use strict";var JO="username is required",XO="nothing to update, must supply active, role or password to update",ZO="password cannot be an empty string",jO="If role is specified, it cannot be empty.",eN="active must be true or false";aN.exports={addUser:AV,alterUser:OV,dropUser:bV,getSuperUser:CV,userInfo:yV,listUsers:ll,listUsersExternal:IV,setUsersToGlobal:$i,findAndValidateUser:oN,getClusterUser:UV,USERNAME_REQUIRED:JO,ALTERUSER_NOTHING_TO_UPDATE:XO,EMPTY_PASSWORD:ZO,EMPTY_ROLE:jO,ACTIVE_BOOLEAN:eN};var tN=Nr(),fV=jn(),zf=ol(),rN=vO(),sN=Or(),Jf=Gs(),or=V(),nN=require("validate.js"),ue=x(),{promisify:hV}=require("util"),Xf=qs(),KO=A(),WO=Be(),mV=Tr(),Kse=Q(),Wse=Na(),SV=Kn(),{table:Qse}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:pV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Qf,HDB_ERROR_MSGS:Vi}=pV,{UserEventMsg:Zf}=qr(),QO=require("lodash"),{_assignPackageExport:TV}=require("../../index");TV("getUser",oN);var iN={username:!0,active:!0,role:!0,password:!0},zO=new Map,ul=sN.searchByValue,RV=sN.searchByHash,gV=hV(fV.delete);async function AV(e){let t=nN.cleanAttributes(e,iN),r=rN.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 ul(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=Xf.encrypt(t.password)),t.password=zf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tN.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],Jf.signalUserChange(new Zf(process.pid)),`${c.username} successfully added`}a(AV,"addUser");async function OV(e){let t=nN.cleanAttributes(e,iN);if(or.isEmptyOrZeroLength(t.username))throw new Error(JO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(XO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(ZO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(eN);let r=NV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Xf.encrypt(t.password)),t.password=zf.hash(t.password)),t.role==="")throw new Error(jO);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 ul(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 tN.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 Jf.signalUserChange(new Zf(process.pid)),n}a(OV,"alterUser");function NV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(NV,"isClusterUser");async function bV(e){try{let t=rN.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 gV(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 Jf.signalUserChange(new Zf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bV,"dropUser");async function yV(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 RV(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(yV,"userInfo");async function IV(){let e;try{e=await ll()}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(IV,"listUsersExternal");async function ll(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await ul(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]=QO.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 ul(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=QO.cloneDeep(o),o.role=r[o.role],wV(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(ll,"listUsers");function wV(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(SV)){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(wV,"appendSystemTablesToRole");async function $i(){try{let e=await ll();global.hdb_users=e}catch(e){throw ue.error(e),e}}a($i,"setUsersToGlobal");async function oN(e,t,r=!0){global.hdb_users||await $i();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Qf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Qf.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(zO.get(t)===s.password)return n;if(zf.validate(s.password,t))zO.set(t,s.password);else throw ns(new Error,Qf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(oN,"findAndValidateUser");async function CV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(CV,"getSuperUser");async function UV(){let e=await ll(),t=mV.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=Xf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+WO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+WO.SERVER_SUFFIX.ADMIN,r}a(UV,"getClusterUser")});var ya=m((jse,_N)=>{"use strict";var ei=x(),ar=A(),DV=rO(),Xse=En(),Zse=Qn(),LV=br(),{validateEvent:cN}=qr(),ba=Fr(),MV=require("process"),{resetDatabases:PV}=(de(),re(Ne)),vV={[ar.ITC_EVENT_TYPES.SCHEMA]:BV,[ar.ITC_EVENT_TYPES.USER]:lN};async function BV(e){let t=cN(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await DV(e.message),await HV(e.message)}a(BV,"schemaHandler");async function HV(e){try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(HV,"syncSchemaMetadata");var uN=[];async function lN(e){try{try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=cN(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${MV.pid} received user event:`,e),await LV.setUsersToGlobal();for(let r of uN)r()}catch(t){ei.error(t)}}a(lN,"userHandler");lN.addListener=function(e){uN.push(e)};_N.exports=vV});var qr=m((ine,EN)=>{"use strict";var tne=x(),jf=V(),FV=A(),{ITC_ERRORS:Ia}=rr(),{parentPort:rne,threadId:qV,isMainThread:GV,workerData:sne}=require("worker_threads"),{onMessageFromWorkers:xV,broadcast:nne,broadcastWithAcknowledgement:kV}=dt();EN.exports={sendItcEvent:VV,validateEvent:dN,SchemaEventMsg:$V,UserEventMsg:YV};var _l;xV(async(e,t)=>{_l=_l||ya(),dN(e),_l[e.type]&&await _l[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VV(e){return!GV&&e.message&&(e.message.originator=qV),kV(e)}a(VV,"sendItcEvent");function dN(e){if(typeof e!="object")return Ia.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jf.isEmpty(e.type))return Ia.MISSING_TYPE;if(!e.hasOwnProperty("message")||jf.isEmpty(e.message))return Ia.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jf.isEmpty(e.message.originator))return Ia.MISSING_ORIGIN;if(FV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ia.INVALID_EVENT(e.type)}a(dN,"validateEvent");function $V(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($V,"SchemaEventMsg");function YV(e){this.originator=e}a(YV,"UserEventMsg")});var Gs=m((cne,SN)=>{"use strict";var fN=A(),ane=V(),dl=x(),hN=jA(),Yi,{sendItcEvent:mN}=qr();function KV(e){try{dl.trace("signalSchemaChange called with message:",e),Yi=Yi||ya();let t=new hN(fN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),mN(t)}catch(t){dl.error(t)}}a(KV,"signalSchemaChange");function WV(e){try{dl.trace("signalUserChange called with message:",e),Yi=Yi||ya();let t=new hN(fN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),mN(t)}catch(t){dl.error(t)}}a(WV,"signalUserChange");SN.exports={signalSchemaChange:KV,signalUserChange:WV}});var El=m((lne,TN)=>{"use strict";var pN=V(),QV=A(),zV=x(),JV=zu(),XV=Qu(),ZV=Gs(),{SchemaEventMsg:jV}=qr(),e$="already exists in";TN.exports=t$;async function t$(e,t,r){if(pN.isEmptyOrZeroLength(r))return r;let s=[];pN.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 r$(e,t.schema,t.name,i)})),n}a(t$,"lmdbCheckForNewAttributes");async function r$(e,t,r,s){let n=new XV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await s$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(e$))zV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(r$,"createNewAttribute");async function s$(e){let t;return t=await JV(e),ZV.signalSchemaChange(new jV(process.pid,QV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(s$,"createAttribute")});var Ki=m((dne,RN)=>{"use strict";var eh=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}};RN.exports=eh});var AN=m((fne,gN)=>{"use strict";var n$=Ki(),i$=A().OPERATIONS_ENUM,th=class extends n${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(i$.INSERT,r,s,n,i),this.records=t}};gN.exports=th});var NN=m((mne,ON)=>{"use strict";var o$=Ki(),a$=A().OPERATIONS_ENUM,rh=class extends o${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(a$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ON.exports=rh});var yN=m((pne,bN)=>{"use strict";var c$=Ki(),u$=A().OPERATIONS_ENUM,sh=class extends c${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(u$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};bN.exports=sh});var wN=m((Rne,IN)=>{"use strict";var l$=Ki(),_$=A().OPERATIONS_ENUM,nh=class extends l${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(_$.DELETE,s,n,t,i),this.original_records=r}};IN.exports=nh});var wa=m((One,LN)=>{"use strict";var Ane=require("path"),CN=ye(),d$=AN(),E$=NN(),f$=yN(),h$=wN(),Wi=xe(),UN=V(),{CONFIG_PARAMS:m$}=A(),DN=Q();DN.initSync();var fl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:S$}=we();LN.exports=p$;async function p$(e,t){if(DN.get(m$.LOGGING_AUDITLOG)===!1)return;let r=S$(e.schema,e.table),s=await CN.openEnvironment(r,e.table,!0),n=T$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){CN.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),UN.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(p$,"writeTransaction");function T$(e,t){let r=UN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===fl.INSERT)return new d$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPDATE)return new E$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPSERT)return new f$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.DELETE)return new h$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(T$,"createTransactionObject")});var ih=m((yne,MN)=>{"use strict";var R$=Sa(),bne=pa(),Ca=A(),g$=Aa(),A$=Fi().insertRecords,O$=ye(),N$=x(),b$=El(),{getSchemaPath:y$}=we(),I$=wa();MN.exports=w$;async function w$(e){try{let{schema_table:t,attributes:r}=R$(e);g$(e,r,t.hash_attribute),e.schema!==Ca.SYSTEM_SCHEMA_NAME&&(r.includes(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await b$(e.hdb_auth_header,t,r),n=y$(e.schema,e.table),i=await O$.openEnvironment(n,e.table),o=await A$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I$(e,o)}catch(c){N$.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(w$,"lmdbCreateRecords")});var BN=m((wne,vN)=>{"use strict";var PN=A(),C$=ih(),U$=pa(),D$=require("fs-extra"),{getSchemaPath:L$}=we();vN.exports=M$;async function M$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new U$(PN.SYSTEM_SCHEMA_NAME,PN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await C$(r),await D$.mkdirp(L$(e.schema))}a(M$,"lmdbCreateSchema")});var FN=m((Une,HN)=>{"use strict";var oh=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}};HN.exports=oh});var kN=m((vne,xN)=>{"use strict";var qN=ye(),ah=Ht(),ch=rr().LMDB_ERRORS_ENUM,P$=xe(),GN=x(),Lne=V(),v$=require("lmdb"),B$=FN(),H$=A(),{OVERFLOW_MARKER:Mne,MAX_SEARCH_KEY_LENGTH:Pne}=P$,F$=H$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function q$(e,t,r,s){if(ah.validateEnv(e),t===void 0)throw new Error(ch.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ch.IDS_REQUIRED):new Error(ch.IDS_MUST_BE_ITERABLE);try{let n=qN.listDBIs(e);qN.initializeDBIs(e,t,n);let i=new B$,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[F$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,v$.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 $=ah.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{GN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){GN.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=ah.getNextMonotonicTime(),i}catch(n){throw n}}a(q$,"deleteRecords");xN.exports={deleteRecords:q$}});var Ua=m((Hne,$N)=>{"use strict";var Qi=V(),G$=kN(),x$=ye(),{getSchemaPath:k$}=we(),V$=wa(),$$=x();$N.exports=Y$;async function Y$(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 VN([],[]);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=k$(e.schema,e.table),i=await x$.openEnvironment(n,e.table),o=await G$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await V$(e,o)}catch(c){$$.error(`unable to write transaction due to ${c.message}`)}return VN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Y$,"lmdbDeleteRecords");function VN(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(VN,"createDeleteResponse")});var lh=m((Gne,YN)=>{"use strict";var K$=A(),qne=Ht();function uh(e,t){let r=Object.create(null);if(t.length===1&&K$.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(uh,"parseRow");function W$(e,t,r,s){let n=uh(r,e);s.push(n)}a(W$,"searchAll");function Q$(e,t,r,s){let n=uh(r,e);s[t]=n}a(Q$,"searchAllToMap");function z$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(z$,"iterateDBI");function ti(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(ti,"pushResults");function J$(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(J$,"endsWith");function X$(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(X$,"contains");function Z$(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(Z$,"greaterThanCompare");function j$(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(j$,"greaterThanEqualCompare");function eY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(eY,"lessThanCompare");function tY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(tY,"lessThanEqualCompare");YN.exports={parseRow:uh,searchAll:W$,searchAllToMap:Q$,iterateDBI:z$,endsWith:J$,contains:X$,greaterThanCompare:Z$,greaterThanEqualCompare:j$,lessThanCompare:eY,lessThanEqualCompare:tY,pushResults:ti}});var zi=m((Yne,ZN)=>{"use strict";var Sn=ye(),kne=x(),cr=Ht(),hl=xe(),ke=rr().LMDB_ERRORS_ENUM,Vne=V(),rY=A(),ml=lh(),{parseRow:sY}=ml,$ne=require("lmdb"),{OVERFLOW_MARKER:KN,MAX_SEARCH_KEY_LENGTH:nY}=hl;function WN(e,t,r,s=!1,n=void 0,i=void 0){return ri(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(WN,"iterateFullIndex");function Da(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(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(Da,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[hl.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(ri,"setupTransaction");function QN(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[hl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(QN,"getOverflowCheck");function iY(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 ri(e,t,t,(o,c,u)=>(Sl(r),r=La(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>sY(l.value,r))))}a(iY,"searchAll");function oY(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);Sl(r),r=La(e.database||e,r);let o=new Map;for(let{key:c,value:u}of WN(e,t,t,s,n,i))o.set(c,ml.parseRow(u,r));return o}a(oY,"searchAllToMap");function aY(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=WN(e,void 0,t,r,s,n),c=o.transaction,u=QN(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(aY,"iterateDBI");function cY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(cY,"countAll");function uY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(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(uY,"equals");function lY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(lY,"count");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(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(_Y,"startsWith");function dY(e,t,r,s,n=!1,i=void 0,o=void 0){return zN(e,t,r,s,n,i,o,!0)}a(dY,"endsWith");function zN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=QN(_,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[hl.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(zN,"contains");function EY(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),Da(e,t,r,s,u,n,i,o,!0,!1)}a(EY,"greaterThan");function fY(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),Da(e,t,r,s,u,n,i,o,!1,!1)}a(fY,"greaterThanEqual");function hY(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),Da(e,t,r,u,s,n,i,o,!1,!0)}a(hY,"lessThan");function mY(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),Da(e,t,r,u,s,n,i,o,!1,!1)}a(mY,"lessThanEqual");function SY(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 Da(e,t,r,s,n,i,o,c)}a(SY,"between");function pY(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(Sl(r),r=La(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=ml.parseRow(c,r)),o}a(pY,"searchByHash");function TY(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(TY,"checkHashExists");function RY(e,t,r,s,n=[]){return XN(e,t,r,s,n),JN(e,t,r,s,n).map(i=>i[1])}a(RY,"batchSearchByHash");function gY(e,t,r,s,n=[]){XN(e,t,r,s,n);let i=new Map;for(let[o,c]of JN(e,t,r,s,n))i.set(o,c);return i}a(gY,"batchSearchByHashToMap");function JN(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=La(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,ml.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(JN,"batchHashSearch");function XN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(XN,"initializeBatchSearchByHash");function Sl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Sl,"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>nY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function La(e,t){return t.length===1&&rY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(La,"setGetWholeRowAttributes");ZN.exports={searchAll:iY,searchAllToMap:oY,count:lY,countAll:cY,equals:uY,startsWith:_Y,endsWith:dY,contains:zN,searchByHash:pY,setGetWholeRowAttributes:La,batchSearchByHash:RY,batchSearchByHashToMap:gY,checkHashExists:TY,iterateDBI:aY,greaterThan:EY,greaterThanEqual:fY,lessThan:hY,lessThanEqual:mY,between:SY}});var Ji=m((Wne,sb)=>{var jN=require("lodash"),eb=Pe(),Ce=require("joi"),AY=V(),{hdb_schema_table:pl,checkValidTable:tb,hdb_table:rb,hdb_database:Tl}=rs(),{handleHDBError:OY,hdb_errors:NY}=W(),{getDatabases:bY}=(de(),re(Ne)),{HTTP_STATUS_CODES:yY}=NY,IY=Ce.object({database:Tl,schema:Tl,table:rb,search_attribute:pl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(pl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),wY=Ce.object({database:Tl,schema:Tl,table:rb,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(pl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:pl,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()});sb.exports=function(e,t){let r=null;switch(t){case"value":r=eb.validateBySchema(e,IY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(tb("database",e.schema)),i(tb("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=eb.validateBySchema(e,wY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=AY.checkGlobalSchemaTable(e.schema,e.table);if(n)return OY(new Error,n,yY.NOT_FOUND);let o=bY()[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=jN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!jN.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 _h=m((zne,nb)=>{"use strict";var CY=ye(),UY=Ji(),{getSchemaPath:DY}=we();nb.exports=LY;function LY(e){let t=UY(e,"hashes");if(t)throw t;let r=DY(e.schema,e.table);return CY.openEnvironment(r,e.table)}a(LY,"initialize")});var dh=m((Xne,ib)=>{"use strict";var MY=zi(),PY=_h();ib.exports=vY;async function vY(e){let t=await PY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return MY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(vY,"lmdbGetDataByHash")});var Xi=m((jne,ob)=>{"use strict";var Eh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ob.exports=Eh});var cb=m((rie,ab)=>{"use strict";var tie=Xi(),BY=zi(),HY=_h();ab.exports=FY;async function FY(e){let t=await HY(e),r=global.hdb_schema[e.schema][e.table];return BY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(FY,"lmdbSearchByHash")});var os=m((nie,ub)=>{"use strict";var fh=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=_}};ub.exports=fh});var Rl=m((oie,hb)=>{"use strict";var Ct=zi(),qY=ye(),GY=V(),ie=xe(),si=A(),xY=Kn(),lb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:kY}=we(),xs=si.SEARCH_WILDCARDS;async function VY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=xY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=fb(e,s.hash_attribute,r,t);return db(e,n,s.hash_attribute,r)}a(VY,"prepSearch");async function db(e,t,r,s){let n=kY(e.schema,e.table),i=await qY.openEnvironment(n,e.table),o=Eb(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($Y(e,r)===!1){let _=e.search_attribute;if(_===r)return s?_b(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?_b(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(db,"executeSearch");function Eb(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(Eb,"searchByType");function _b(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(_b,"createMapFromIterable");function $Y(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($Y,"checkToFetchMore");function fb(e,t,r,s){if(GY.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),xs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(xs[0])<0&&n.indexOf(xs[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(xs.indexOf(i)>=0&&xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(xs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(xs[0])||n.includes(xs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(lb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lb.UNKNOWN_SEARCH_TYPE)}}a(fb,"createSearchTypeFromSearchObject");hb.exports={executeSearch:db,createSearchTypeFromSearchObject:fb,prepSearch:VY,searchByType:Eb}});var Sb=m((uie,mb)=>{"use strict";var cie=os(),YY=Ji(),KY=V(),WY=A(),QY=Rl();mb.exports=zY;function zY(e,t){if(!KY.isEmpty(t)&&WY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YY(e,"value");if(s)throw s;let n=!0;return QY.prepSearch(e,t,n)}a(zY,"lmdbGetDataByValue")});var Ma=m((die,pb)=>{"use strict";var _ie=os(),JY=Ji(),XY=V(),ZY=A(),jY=Rl();pb.exports=eK;async function eK(e,t){if(!XY.isEmpty(t)&&ZY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=JY(e,"value");if(s)throw s;return jY.prepSearch(e,t,!1)}a(eK,"lmdbSearchByValue")});var Rb=m((hie,Tb)=>{"use strict";var fie=xe(),hh=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}},mh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Sh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Tb.exports={SearchByConditionsObject:hh,SearchCondition:mh,SortAttribute:Sh}});var bb=m((Tie,Nb)=>{"use strict";var Sie=Rb().SearchByConditionsObject,tK=os(),rK=Ji(),ph=zi(),gl=xe(),{Resource:pie}=(Zr(),re(HE)),Ob=Rl(),sK=lh(),nK=require("lodash"),{getSchemaPath:iK}=we(),gb=ye(),{handleHDBError:oK,hdb_errors:aK}=W(),{HTTP_STATUS_CODES:cK}=aK,uK=1e8;Nb.exports=lK;async function lK(e){let t=rK(e,"conditions");if(t)throw oK(t,t.message,cK.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=iK(e.schema,e.table),s=await gb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)gb.openDBI(s,l.search_attribute);let i=nK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===gl.SEARCH_TYPES.EQUALS?l.estimated_count=ph.count(s,l.search_attribute,l.search_value):_===gl.SEARCH_TYPES.CONTAINS||_===gl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=uK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ab(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(Ob.filterByType),d=_.length,E=ph.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=>sK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ab(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=ph.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(lK,"lmdbSearchByConditions");async function Ab(e,t,r,s){let n=new tK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===gl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Ob.searchByType(e,n,i,s).map(o=>o.value)}a(Ab,"executeConditionSearch")});var Pa=m((gie,yb)=>{"use strict";var _K=A().OPERATIONS_ENUM,Th=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=_K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};yb.exports=Th});var Rh=m((Oie,Pb)=>{"use strict";var Ub=os(),Db=Pa(),Lb=Ma(),Mb=Ua(),qt=A(),Ib=V(),wb=ye(),{getTransactionAuditStorePath:dK,getSchemaPath:EK}=we(),Cb=x();Pb.exports=fK;async function fK(e){try{if(Ib.isEmpty(global.hdb_schema[e.schema])||Ib.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await hK(e),await mK(e);let t=EK(e.schema,e.table);try{await wb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Cb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=dK(e.schema,e.table);await wb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Cb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fK,"lmdbDropTable");async function hK(e){let t=new Ub(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 Lb(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 Db(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Mb(n)}a(hK,"deleteAttributesFromSystem");async function mK(e){let t=new Ub(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 Lb(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 Db(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Mb(n)}catch(i){throw i}}a(mK,"dropTableFromSystem")});var Bb=m((bie,vb)=>{"use strict";var SK=require("fs-extra"),pK=os(),TK=Xi(),RK=Pa(),gK=Rh(),AK=Ua(),OK=dh(),NK=Ma(),ks=A(),{getSchemaPath:bK}=we(),{handleHDBError:yK,hdb_errors:IK}=W(),{HDB_ERROR_MSGS:wK,HTTP_STATUS_CODES:CK}=IK;vb.exports=UK;async function UK(e){let t;try{t=await DK(e.schema);let r=new pK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await NK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await gK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new RK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await AK(n);let i=bK(t);await SK.remove(i)}catch(r){throw r}}a(UK,"lmdbDropSchema");async function DK(e){let t=new TK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await OK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw yK(new Error,wK.SCHEMA_NOT_FOUND(e),CK.NOT_FOUND,void 0,void 0,!0);return s}a(DK,"validateDropSchema")});var Ah=m((Iie,Hb)=>{"use strict";var gh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Hb.exports=gh});var qb=m((Uie,Fb)=>{"use strict";var LK=require("fs-extra"),Al=ye(),{getTransactionAuditStorePath:MK}=we(),Oh=xe(),Cie=Ah();Fb.exports=PK;async function PK(e){let t;try{let r=MK(e.schema,e.table);await LK.mkdirp(r),t=await Al.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{Al.createDBI(t,Oh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Al.createDBI(t,Oh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Al.createDBI(t,Oh.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(PK,"createTransactionsAuditEnvironment")});var Vb=m((Lie,kb)=>{"use strict";var Nh=A(),Gb=ye(),vK=Fi(),{getSystemSchemaPath:BK,getSchemaPath:HK}=we(),FK=Kn(),qK=zu(),bh=Qu(),GK=x(),xK=qb(),Ih=FK.hdb_table,xb=[];for(let e=0;e<Ih.attributes.length;e++)xb.push(Ih.attributes[e].attribute);kb.exports=kK;async function kK(e,t){let r=HK(t.schema,t.table),s=new bh(t.schema,t.table,Nh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bh(t.schema,t.table,Nh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Gb.createEnvironment(r,t.table),e!==void 0){let o=await Gb.openEnvironment(BK(),Nh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await vK.insertRecords(o,Ih.hash_attribute,xb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await yh(s),await yh(n),await yh(i)}await xK(t)}catch(o){throw o}}a(kK,"lmdbCreateTable");async function yh(e){try{await qK(e)}catch(t){GK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yh,"createAttribute")});var Yb=m((Pie,$b)=>{"use strict";var VK=Sa(),$K=Aa(),YK=El(),va=A(),KK=Fi().updateRecords,WK=ye(),{getSchemaPath:QK}=we(),zK=wa(),JK=x();$b.exports=XK;async function XK(e){try{let{schema_table:t,attributes:r}=VK(e);$K(e,r,t.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(r.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await YK(e.hdb_auth_header,t,r),n=QK(e.schema,e.table),i=await WK.openEnvironment(n,e.table),o=await KK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zK(e,o)}catch(c){JK.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 Wb=m((Bie,Kb)=>{"use strict";var ZK=A().OPERATIONS_ENUM,wh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=ZK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Kb.exports=wh});var zb=m((qie,Qb)=>{"use strict";var Fie=Wb(),jK=Sa(),e1=Aa(),t1=El(),Ba=A(),r1=Fi().upsertRecords,s1=ye(),{getSchemaPath:n1}=we(),i1=wa(),o1=x(),{handleHDBError:a1,hdb_errors:c1}=W();Qb.exports=u1;async function u1(e){let t;try{t=jK(e)}catch(u){throw a1(u,u.message,c1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;e1(e,s,r.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(s.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t1(e.hdb_auth_header,r,s),i=n1(e.schema,e.table),o=await s1.openEnvironment(i,e.table),c=await r1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await i1(e,c)}catch(u){o1.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(u1,"lmdbUpsertRecords")});var Xb=m((xie,Jb)=>{"use strict";var Ch=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Jb.exports=Ch});var jb=m((Vie,Zb)=>{"use strict";var Uh=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}};Zb.exports=Uh});var ry=m((Kie,ty)=>{"use strict";var Dh=ye(),{getTransactionAuditStorePath:l1}=we(),Yie=Xb(),Ha=xe(),_1=V(),ey=jb(),d1=require("util").promisify,E1=d1(setTimeout),f1=1e4,h1=100;ty.exports=m1;async function m1(e){let t=l1(e.schema,e.table),r=await Dh.openEnvironment(t,e.table,!0),s=Dh.listDBIs(r);Dh.initializeDBIs(r,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ey;do n=await S1(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 E1(h1);while(n.transactions_deleted>0);return i}a(m1,"deleteAuditLogsBefore");async function S1(e,t){let r=new ey;try{let s=e.dbis[Ha.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[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];_1.isEmpty(c)||(n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f1)break}return await n,r}catch(s){throw s}}a(S1,"deleteTransactions")});var ny=m((Qie,sy)=>{"use strict";var Lh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};sy.exports=Lh});var oy=m((Xie,iy)=>{"use strict";var p1=os(),T1=Pa(),Jie=ny(),as=A(),R1=V(),Mh=ye(),g1=Kn(),A1=Ma(),O1=Ua(),{getSchemaPath:N1}=we();iy.exports=b1;async function b1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=g1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await I1(e),n=N1(e.schema,e.table),i=await Mh.openEnvironment(n,e.table);return t===!0&&await y1(e,i,r.hash_attribute),Mh.dropDBI(i,e.attribute),s}a(b1,"lmdbDropAttribute");async function y1(e,t,r){let s=Mh.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(y1,"removeAttributeFromAllObjects");async function I1(e){let t=new p1(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 A1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(R1.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 T1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return O1(i)}a(I1,"dropAttributeFromSystem")});var dy=m((eoe,_y)=>{"use strict";var Ph=ye(),Zi=xe(),jie=Ht(),vh=A(),ay=V(),{getTransactionAuditStorePath:w1}=we(),C1=zi(),Ol=Ki(),U1=x();_y.exports=D1;async function D1(e){let t=w1(e.schema,e.table),r=await Ph.openEnvironment(t,e.table,!0),s=Ph.listDBIs(r);Ph.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return cy(r,e.search_values);case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,M1(r,e.search_values,n);case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L1(r,e.search_values);default:return cy(r)}}a(D1,"readAuditLog");function cy(e,t=[0,Date.now()]){ay.isEmpty(t[0])&&(t[0]=0),ay.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 Ol,n))}a(cy,"searchTransactionsByTimestamp");function L1(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,ly(e,i))}return Object.fromEntries(r)}a(L1,"searchTransactionsByUsername");function M1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=C1.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=ly(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);uy(u,"records",r,_,o),uy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(M1,"searchTransactionsByHashValues");function uy(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 Ol(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Ol(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(uy,"loopRecords");function ly(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 Ol,i);r.push(o)}}catch(i){U1.warn(i)}return r}catch(s){throw s}}a(ly,"batchSearchTransactions")});var fy=m((noe,Ey)=>{"use strict";var{getSchemaPath:roe}=we(),soe=ye(),{database:P1}=(de(),re(Ne));Ey.exports={writeTransaction:v1};async function v1(e,t,r){return P1({database:e,table:t}).transaction(r)}a(v1,"writeTransaction")});var py=m((ooe,Sy)=>{"use strict";var{getSchemaPath:hy}=we(),my=ye();Sy.exports={flush:B1,resetReadTxn:H1};async function B1(e,t){return(await my.openEnvironment(hy(e,t),t.toString())).flushed}a(B1,"flush");async function H1(e,t){try{(await my.openEnvironment(hy(e,t),t.toString())).resetReadTxn()}catch{}}a(H1,"resetReadTxn")});var Ay=m((coe,gy)=>{"use strict";var{Readable:F1}=require("stream"),{getDatabases:q1}=(de(),re(Ne)),{readSync:G1,openSync:x1,createReadStream:Ty}=require("fs"),{open:k1}=require("lmdb"),Ry=Fu(),V1=Gu(),{INTERNAL_DBIS_NAME:$1}=xe();gy.exports=K1;var Bh=32768,Y1=100;async function K1(e){let t=e.database||e.schema||"data",r=q1()[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=k1({noSync:!0,maxDbs:V1.MAX_DBS}),E,f=d.openDB($1,new Ry(!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 Ry(!$,$);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++%Y1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=Ty(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=x1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Bh);G1(c,l,0,Bh);let _=o.useReadTransaction(),d=Ty(null,{fd:c,start:Bh}),E=new F1.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(K1,"getBackup")});var by=m((loe,Ny)=>{"use strict";var W1=x(),{handleHDBError:Q1}=W(),z1=aA(),J1=zu(),X1=ih(),Z1=BN(),j1=Ua(),eW=dh(),tW=cb(),rW=Sb(),sW=Ma(),nW=bb(),iW=Bb(),oW=Vb(),aW=Yb(),cW=zb(),uW=ry(),lW=Rh(),_W=oy(),dW=dy(),EW=fy(),Oy=py(),fW=Ay(),Hh=class extends z1{static{a(this,"LMDBBridge")}async searchByConditions(t){return nW(t)}async getDataByHash(t){return await eW(t)}async searchByHash(t){return await tW(t)}async getDataByValue(t,r){return await rW(t,r)}async searchByValue(t){return await sW(t)}async createSchema(t){return await Z1(t)}async dropSchema(t){return await iW(t)}async createTable(t,r){return await oW(t,r)}async dropTable(t){return await lW(t)}async createAttribute(t){return await J1(t)}async createRecords(t){return await X1(t)}async updateRecords(t){return await aW(t)}async upsertRecords(t){try{return await cW(t)}catch(r){throw Q1(r,null,null,W1.ERR,r)}}async deleteRecords(t){return await j1(t)}async dropAttribute(t){return await _W(t)}async deleteAuditLogsBefore(t){return await uW(t)}async readAuditLog(t){return await dW(t)}writeTransaction(t,r,s){return EW.writeTransaction(t,r,s)}flush(t,r){return Oy.flush(t,r)}resetReadTxn(t,r){return Oy.resetReadTxn(t,r)}getBackup(t){return fW(t)}};Ny.exports=Hh});var Py={};je(Py,{ResourceBridge:()=>Gh});function xh({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 Iy(e,t){let r=cs(e),s=xh(e,r);if(!r)throw new Gr.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&&Du(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||mW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,hW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wy(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*Cy(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 Uy,Nl,Gr,Dy,Ly,kr,Fh,qh,My,hW,mW,SW,pW,yy,Gh,vy=Se(()=>{"use strict";Uy=C(by()),Nl=C(Ji()),Gr=C(W());de();Dy=C(Sa()),Ly=C(Aa()),kr=C(A()),Fh=C(Gs()),qh=C(qr()),My=C(V());$n();Lu();({HDB_ERROR_MSGS:hW}=Gr.hdb_errors),mW="data",SW=1e4,pW=10,Gh=class extends Uy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),yy=this}async searchByConditions(t){let r=(0,Nl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Gr.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:xh(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 Gr.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}]}st({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 Fa({database:t.schema,table:null}),Fh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await kh(t.schema),Fh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.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,yy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Dy.default)(t);(0,Ly.default)(t,s,r.primaryKey);let n,i=xr()[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=Du(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=xr()[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 wy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.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:kr.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,My.async_set_timeout)(pW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%SW===0&&await l();return u.length>0&&await l(),n?wy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Nl.default)(t,"hashes");if(r)throw r;return Iy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Iy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Nl.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Gr.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===kr.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:xh(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 kr.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 kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Cy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Cy(r,t.search_values?.[0],t.search_values?.[1])}}};a(xh,"getSelect");a(Iy,"getRecords");a(cs,"getTable");a(wy,"createDeleteResponse");a(Cy,"groupRecordsInHistory")});var Fr=m((moe,By)=>{"use strict";var{ResourceBridge:TW}=(vy(),re(Py)),RW=Q();RW.initSync();var bl;function gW(){return bl||(bl=new TW,bl)}a(gW,"getBridge");By.exports=gW()});var Gy=m((poe,qy)=>{"use strict";var Hy=require("lodash"),qa=require("mathjs"),AW=require("jsonata"),Fy=V();qy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hy.uniqWith(e,Hy.isEqual):e,searchJSON:OW,mad:Ga.bind(null,qa.mad),mean:Ga.bind(null,qa.mean),mode:Ga.bind(null,qa.mode),prod:Ga.bind(null,qa.prod),median:Ga.bind(null,qa.median)};function Ga(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(Ga,"aggregateFunction");function OW(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(Fy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Fy.isEmpty(this.__ala__.res[r])){let s=AW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(OW,"searchJSON")});var ky=m((Roe,xy)=>{"use strict";var We=require("moment"),Vh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;xy.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(Vh),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(Vh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Vh)}});var Ky=m((goe,Yy)=>{"use strict";var NW=require("@turf/area"),bW=require("@turf/length"),yW=require("@turf/circle"),IW=require("@turf/difference"),wW=require("@turf/distance"),CW=require("@turf/boolean-contains"),UW=require("@turf/boolean-equal"),DW=require("@turf/boolean-disjoint"),LW=require("@turf/helpers"),Vy=A(),le=V();Yy.exports={geoArea:MW,geoLength:PW,geoCircle:vW,geoDifference:BW,geoDistance:$y,geoNear:HW,geoContains:FW,geoEqual:qW,geoCrosses:GW,geoConvert:xW};var $h="geo1 is required",Yh="geo2 is required";function MW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),NW.default(e)}a(MW,"geoArea");function PW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),bW.default(e,{units:t||"kilometers"})}a(PW,"geoLength");function vW(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)),yW.default(e,t,{units:r||"kilometers"})}a(vW,"geoCircle");function BW(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)),IW(e,t)}a(BW,"geoDifference");function $y(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)),wW.default(e,t,{units:r||"kilometers"})}a($y,"geoDistance");function HW(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 $y(e,t,s)<=r}a(HW,"geoNear");function FW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),CW.default(e,t)}a(FW,"geoContains");function qW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),UW.default(e,t)}a(qW,"geoEqual");function GW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!DW.default(e,t)}a(GW,"geoCrosses");function xW(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(Vy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Vy.GEO_CONVERSION_ENUM).join(",")}`);return LW[t](e,r)}a(xW,"geoConvert")});var yl=m((Ooe,Wy)=>{var ni=Gy(),ur=ky(),us=Ky();Wy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.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 Xy=m((Noe,Jy)=>{"use strict";var xa=require("lodash"),pt=require("alasql");pt.options.cache=!1;var kW=yl(),Qy=require("clone"),Il=require("recursive-iterator"),se=x(),ne=V(),ji=Fr(),VW=A(),{hdb_errors:$W}=W(),{getDatabases:zy}=(de(),re(Ne)),YW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";kW(pt);var Kh=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(Vr)}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(Vr)}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(Vr)}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(Vr)}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(Vr)}}_getColumns(){let t=new Il(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(Qy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=xa.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=zy()[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 Il(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 Il(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(VW.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&&xa.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(Qy(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(YW)>-1&&this.tables.forEach(n=>{let i={columnid:zy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=xa.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(Vr)}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(Vr)}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(Vr)}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(Vr)}}}_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=xa.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 Il(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=xa.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(Vr)}}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($W.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(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Jy.exports=Kh});var Or=m((yoe,Zy)=>{"use strict";var KW=iA();Zy.exports={searchByConditions:QW,searchByHash:zW,searchByValue:JW,search:XW};var Wh=Fr(),{transformReq:Qh}=V(),WW=Xy();async function QW(e){return Qh(e),Wh.searchByConditions(e)}a(QW,"searchByConditions");async function zW(e){Qh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wh.searchByHash(e))r&&t.push(r);return t}a(zW,"searchByHash");async function JW(e){Qh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wh.searchByValue(e))t.push(r);return t}a(JW,"searchByValue");function XW(e,t){try{let r=new KW(e);r.validate(),new WW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(XW,"search")});var wl=m((woe,jy)=>{"use strict";var ZW=Fr();jy.exports={writeTransaction:jW};function jW(e,t,r){return ZW.writeTransaction(e,t,r)}a(jW,"writeTransaction")});var sI=m((Doe,rI)=>{"use strict";var eQ=Or(),tQ=En(),eI=x(),rQ=Nr(),Uoe=wl(),sQ=require("clone"),Jh=require("alasql"),nQ=yl(),tI=require("util"),iQ=tI.promisify(tQ.getTableSchema),oQ=tI.promisify(eQ.search),aQ=A(),zh=V();nQ(Jh);rI.exports={update:uQ};var cQ="There was a problem performing this update. Please check the logs and try again.";async function uQ({statement:e,hdb_user:t}){let r=await iQ(e.table.databaseid,e.table.tableid),s=lQ(e.columns);zh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=sQ(n),c=zh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Jh.parse(u).statements[0],_=await oQ(l),d=_Q(s,_);return dQ(o,d,t)}a(uQ,"update");function lQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jh.compile(`SELECT ${r.expression.toString()} AS [${aQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw eI.error(t),new Error(cQ)}}a(lQ,"createUpdateRecord");function _Q(e,t){return zh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(_Q,"buildUpdateRecords");async function dQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await rQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){eI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(dQ,"updateRecords")});var iI=m((voe,nI)=>{var EQ=require("alasql"),fQ=Or(),hQ=x(),mQ=Fr(),Zh=require("util"),Xh=V(),SQ=A(),pQ=En(),Moe=wl(),Poe=Nr(),TQ="record",RQ="successfully deleted",gQ=Zh.callbackify(bQ),AQ=Zh.promisify(fQ.search),OQ=Zh.promisify(pQ.getTableSchema);nI.exports={convertDelete:gQ};function NQ(e){return`${e.deleted_hashes.length} ${TQ}${e.deleted_hashes.length===1?"":"s"} ${RQ}`}a(NQ,"generateReturnMessage");async function bQ({statement:e,hdb_user:t}){let r=await OQ(e.table.databaseid,e.table.tableid);Xh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Xh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=EQ.parse(o).statements[0],u={operation:SQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await AQ(c);let l=await mQ.deleteRecords(u);return Xh.isEmptyOrZeroLength(l.message)&&(l.message=NQ(l)),delete l.txn_time,l}catch(l){throw hQ.error(l),l.hdb_code?l.message:l}}a(bQ,"convertDelete")});var lI=m((Hoe,uI)=>{"use strict";var yQ=Qn(),{hdb_errors:oI}=W(),{getDatabases:aI}=(de(),re(Ne));uI.exports={checkSchemaExists:cI,checkSchemaTableExists:IQ,schema_describe:yQ};async function cI(e){if(!aI()[e])return oI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(cI,"checkSchemaExists");async function IQ(e,t){let r=await cI(e);if(r)return r;if(!aI()[e][t])return oI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IQ,"checkSchemaTableExists")});var ka=m((qoe,wQ)=>{wQ.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 Ml={};je(Ml,{addAnalyticsListener:()=>rm,recordAction:()=>ls,recordActionBinary:()=>eo,setAnalyticsEnabled:()=>CQ});function CQ(e){RI=e}function ls(e,t,r,s,n){if(!RI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Dl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Dl.set(i,o)),Ul||UQ()}function eo(e,t,r,s,n){ls(e?1:0,t,r,s,n)}function rm(e){AI.push(e)}function UQ(){Ul=performance.now(),setTimeout(()=>{let e=performance.now()-Ul;Ul=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Dl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of AI)n(t);Dl=new Map,ii.parentPort?ii.parentPort.postMessage({type:gI,report:r}):NI({report:r})},tm).unref()}async function DQ(e,t=6e4){let r=sm(),s;for(let _ of r.primaryStore.getRange({start:Cl+"z",end:Cl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let F=b.count||1;b[P]=(b[P]*F+z*O)/(b.count=F+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await LQ()}for(let[_,d]of i)d.id=Cl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Cl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-_I,active:l-dI,time:c}),_I=u,dI=l}async function MQ(e,t){let r=sm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function sm(){return EI||(EI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function vQ(){OI=!0,setInterval(async()=>{await DQ(tm,em),await MQ(PQ,tm)},em/2).unref()}function NI(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(fI+=s.mean*s.count);r.totalBytesProcessed=fI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(hI.get(t))}),hI.set(t,t.performance.eventLoopUtilization())),r.id=(0,pI.getNextMonotonicTime)(),sm().put(r),OI||vQ(),BQ&&(bI=FQ(r))}async function FQ(e){if(await bI,!Tn){let r=(0,Va.dirname)((0,SI.getLogFilePath)());try{Tn=await(0,jh.open)((0,Va.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,jh.open)((0,Va.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>HQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
6
6
  `,t)}var ii,mI,SI,Va,jh,pI,Ll,TI,Dl,em,RI,Ul,tm,gI,AI,Cl,_I,dI,LQ,PQ,EI,OI,fI,hI,BQ,bI,Tn,HQ,oi=Se(()=>{ii=require("worker_threads"),mI=C(dt());de();SI=C(x()),Va=require("path"),jh=require("fs/promises"),pI=C(Ht()),Ll=C(Q()),TI=C(A());Jr();(0,Ll.initSync)();Dl=new Map,em=(0,Ll.get)(TI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,RI=em>0;a(CQ,"setAnalyticsEnabled");a(ls,"recordAction");tt.recordAnalytics=ls;a(eo,"recordActionBinary");Ul=0,tm=1e3,gI="analytics-report",AI=[];a(rm,"addAnalyticsListener");a(UQ,"sendAnalytics");Cl="sum-";a(DQ,"aggregation");_I=0,dI=0,LQ=a(()=>new Promise(setImmediate),"rest");a(MQ,"cleanup");PQ=36e5;a(sm,"getAnalyticsTable");(0,mI.setChildListenerByType)(gI,NI);a(vQ,"startScheduledTasks");fI=0,hI=new Map,BQ=!1;a(NI,"recordAnalytics");HQ=1e6;a(FQ,"logAnalytics")});var nt=m((joe,$I)=>{"use strict";var Tt=Q();Tt.initSync();var qQ=require("fs-extra"),GQ=require("semver"),Wa=require("path"),{monotonicFactory:xQ}=require("ulidx"),am=xQ(),kQ=require("util"),II=require("child_process"),VQ=kQ.promisify(II.exec),$Q=II.spawn,_e=Be(),Te=A(),Pl=V(),yr=x(),vl=qs(),YQ=wl(),$a=Tr(),{Encoder:KQ,decode:cm}=require("msgpackr"),wI=new KQ,{isEmpty:ai}=Pl,CI=br(),UI=12e10,WQ=48*36e11,QQ=5e9,{connect:zQ,StorageType:DI,RetentionPolicy:LI,AckPolicy:Bl,DeliverPolicy:Hl,DiscardPolicy:JQ,NatsConnection:zoe,JetStreamManager:Joe,JetStreamClient:Xoe,StringCodec:Zoe,JSONCodec:XQ,createInbox:um,headers:ZQ,ErrorCode:yI}=require("nats"),{PACKAGE_ROOT:jQ}=A(),ez=ka(),{recordAction:tz}=(oi(),re(Ml)),MI=XQ(),rz="clustering",sz=ez.engines[_e.NATS_SERVER_NAME],nz=Wa.join(jQ,"dependencies"),om=Wa.join(nz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),nm,im,Ya,to,ro;$I.exports={runCommand:PI,checkNATSServerInstalled:iz,createConnection:lm,getConnection:Fl,getJetStreamManager:Qa,getJetStream:vI,getNATSReferences:Gt,getServerList:az,createLocalStream:_m,listStreams:BI,deleteLocalStream:cz,getServerConfig:za,listRemoteStreams:uz,viewStream:lz,viewStreamIterator:_z,publishToStream:dz,createWorkQueueStream:Ez,addSourceToWorkStream:FI,request:hz,removeSourceFromWorkStream:GI,reloadNATS:dm,reloadNATSHub:mz,reloadNATSLeaf:Sz,extractServerName:qI,requestErrorHandler:pz,updateWorkStream:Tz,createLocalTableStream:kI,createTableStreams:Rz,purgeTableStream:VI,purgeSchemaTableStreams:gz,getStreamInfo:Az,updateLocalStreams:Nz,closeConnection:oz,getJsmServerName:Ja,addNatsMsgHeader:HI,updateIngestStreamConsumer:fz};async function PI(e,t=void 0){let{stdout:r,stderr:s}=await VQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
8
  `,"")}a(PI,"runCommand");async function iz(){try{await qQ.access(om)}catch{return!1}let e=await PI(`${om} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return GQ.eq(t,sz)}a(iz,"checkNATSServerInstalled");async function lm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await CI.getClusterUser();if(ai(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await zQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(lm,"createConnection");async function oz(){_s&&(await _s.drain(),_s=void 0,to=void 0,ro=void 0,Ka=void 0)}a(oz,"closeConnection");var _s,Ka;async function Fl(){return Ka||(Ka=lm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_s=await Ka),_s||Ka}a(Fl,"getConnection");async function Qa(){if(to)return to;ai(_s)&&await Fl();let{domain:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await _s.jetstreamManager({domain:e}),to}a(Qa,"getJetStreamManager");async function vI(){if(ro)return ro;ai(_s)&&await Fl();let{domain:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=_s.jetstream({domain:e}),ro}a(vI,"getJetStream");async function Gt(){let e=_s||await Fl(),t=to||await Qa(),r=ro||await vI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function az(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await CI.getClusterUser(),n=await lm(t,r,s),i=um(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=MI.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 Pl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(az,"getServerList");async function _m(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:DI.File,retention:LI.Limits,subjects:t,discard:JQ.Old,duplicate_window:UI,max_msgs:n,max_bytes:i,max_age:s})}a(_m,"createLocalStream");async function BI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(BI,"listStreams");async function cz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(cz,"deleteLocalStream");async function uz(e){let{connection:t}=await Gt(),r=[],s=um(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(MI.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(uz,"listRemoteStreams");async function lz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=am(),o={durable_name:i,ack_policy:Bl.Explicit};t&&(o.deliver_policy=Hl.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=cm(_.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(lz,"viewStream");async function*_z(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=am(),o={durable_name:i,ack_policy:Bl.Explicit};t&&(o.deliver_policy=Hl.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 _=cm(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(_z,"viewStreamIterator");async function dz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=HI(s,r);let{js:n}=await Gt(),i=await Ja(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:wI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),tz(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 xI(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){yr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await _m(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(dz,"publishToStream");function HI(e,t){t===void 0&&(t=ZQ());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Pl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${am()}`;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(HI,"addNatsMsgHeader");function za(e){e=e.toLowerCase();let t=Wa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),rz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(im)&&(im={port:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),im;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(nm)&&(nm={port:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Wa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),nm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(za,"getServerConfig");async function Ez(e){let{jsm:t}=await Gt(),r=await Ja();try{await t.streams.add({name:e.stream_name,storage:DI.File,retention:LI.Limits,duplicate_window:UI,max_age:WQ,max_bytes:QQ,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:Bl.Explicit,durable_name:e.durable_name,deliver_policy:Hl.All,max_ack_pending:1e4});else throw s}}a(Ez,"createWorkQueueStream");async function fz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.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),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Bl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Hl.All,max_ack_pending:1e4}))}a(fz,"updateIngestStreamConsumer");async function FI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=qI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=vl.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(FI,"addSourceToWorkStream");function qI(e){return e.split(".")[1]}a(qI,"extractServerName");async function GI(e,t,r){let{schema:s,table:n}=r,i=vl.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),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(GI,"removeSourceFromWorkStream");async function hz(e,t,r=2e4,s=um()){if(!Pl.isObject(t))throw new Error("data param must be an object");let n=wI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return cm(c.data)}a(hz,"request");function dm(e){return new Promise(async(t,r)=>{let s=$Q(om,["--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(dm,"reloadNATS");async function mz(){let{pid_file_path:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await dm(e)}a(mz,"reloadNATSHub");async function Sz(){let{pid_file_path:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await dm(e)}a(Sz,"reloadNATSLeaf");function pz(e,t,r){let s;switch(e.code){case yI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case yI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(pz,"requestErrorHandler");async function Tz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await xI(async()=>{e.subscribe===!0?await FI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await GI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Tz,"updateWorkStream");function xI(e){return YQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(xI,"exclusiveLock");async function kI(e,t){let r=vl.createNatsTableStreamName(e,t),s=await Ja(),n=Oz(e,t,s);await _m(r,[n])}a(kI,"createLocalTableStream");async function Rz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await kI(s,n)}}a(Rz,"createTableStreams");async function VI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=vl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(VI,"purgeTableStream");async function gz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await VI(e,t[r])}a(gz,"purgeSchemaTableStreams");async function Az(e){return(await Qa()).streams.info(e)}a(Az,"getStreamInfo");function Oz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Oz,"createSubjectName");async function Ja(){if(Ya)return Ya;if(Ya=(await Qa())?.nc?.info?.server_name,Ya===void 0)throw new Error("Unable to get jetstream manager server name");return Ya}a(Ja,"getJsmServerName");async function Nz(){let e=await Qa(),t=await Ja(),r=await BI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=bz(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}`;yr.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}`;yr.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(".");yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(Nz,"updateLocalStreams");function bz(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=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.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(bz,"updateStreamLimits")});var kl=m((rae,QI)=>{"use strict";var so=Wu(),no=lI(),yz=x(),Iz=require("uuid").v4,tae=require("clone"),Gl=Gs(),io=A(),wz=require("util"),Rn=Fr(),{handleHDBError:xt,hdb_errors:Cz}=W(),{HDB_ERROR_MSGS:ql,HTTP_STATUS_CODES:kt}=Cz,{SchemaEventMsg:xl}=qr(),YI=nt(),{getDatabases:Uz}=(de(),re(Ne)),{transformReq:oo}=V();QI.exports={createSchema:Dz,createSchemaStructure:KI,createTable:Lz,createTableStructure:WI,createAttribute:Hz,dropSchema:Mz,dropTable:Pz,dropAttribute:vz,getBackup:Fz};async function Dz(e){let t=await KI(e);return Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema)),t}a(Dz,"createSchema");async function KI(e){let t=so.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(oo(e),!await no.checkSchemaExists(e.schema))throw xt(new Error,ql.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,io.LOG_LEVELS.ERROR,ql.SCHEMA_EXISTS_ERR(e.schema),!0);return await Rn.createSchema(e),`database '${e.schema}' successfully created`}a(KI,"createSchemaStructure");async function Lz(e){return oo(e),await WI(e)}a(Lz,"createTable");async function WI(e){let t=so.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(so.validateTableResidence(e.residence),!await no.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,ql.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,io.LOG_LEVELS.ERROR,ql.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Iz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Rn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await Rn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(WI,"createTableStructure");async function Mz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=so.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let n=await no.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,n,!0);let i=await no.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Rn.dropSchema(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema)),await YI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Mz,"dropSchema");async function Pz(e){let t=so.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let r=await no.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,r,!0);return await Rn.dropTable(e),await YI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Pz,"dropTable");async function vz(e){let t=so.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let r=await no.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(io.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await Rn.dropAttribute(e),Bz(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw yz.error(`Got an error deleting attribute ${wz.inspect(e)}.`),s}}a(vz,"dropAttribute");function Bz(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(Bz,"dropAttributeFromGlobal");async function Hz(e){oo(e);let t=Uz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await Rn.createAttribute(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Hz,"createAttribute");function Fz(e){return Rn.getBackup(e)}a(Fz,"getBackup")});var JI=m((nae,zI)=>{"use strict";var{OPERATIONS_ENUM:qz}=A(),Em=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=qz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};zI.exports=Em});var fm=m((aae,tw)=>{"use strict";var Gz=Fr(),oae=JI(),Vl=V(),$l=A(),xz=Q(),{handleHDBError:XI,hdb_errors:kz}=W(),{HDB_ERROR_MSGS:ZI,HTTP_STATUS_CODES:jI}=kz,Vz=Object.values($l.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ew="To use this operation audit log must be enabled in harperdb-config.yaml";tw.exports=$z;async function $z(e){if(Vl.isEmpty(e.schema))throw new Error(ZI.SCHEMA_REQUIRED_ERR);if(Vl.isEmpty(e.table))throw new Error(ZI.TABLE_REQUIRED_ERR);if(!xz.get($l.CONFIG_PARAMS.LOGGING_AUDITLOG))throw XI(new Error,ew,jI.BAD_REQUEST,$l.LOG_LEVELS.ERROR,ew,!0);let t=Vl.checkSchemaTableExist(e.schema,e.table);if(t)throw XI(new Error,t,jI.NOT_FOUND,$l.LOG_LEVELS.ERROR,t,!0);if(!Vl.isEmpty(e.search_type)&&Vz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Gz.readAuditLog(e)}a($z,"readAuditLog")});var sw=m((uae,rw)=>{"use strict";var{OPERATIONS_ENUM:Yz}=A(),hm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Yz.GET_BACKUP,this.schema=t,this.table=r}};rw.exports=hm});var ow=m((Eae,iw)=>{"use strict";var Kz=Fr(),_ae=sw(),mm=V(),Wz=A(),dae=Q(),{handleHDBError:Qz,hdb_errors:zz}=W(),{HDB_ERROR_MSGS:nw,HTTP_STATUS_CODES:Jz}=zz;iw.exports=Xz;async function Xz(e){if(mm.isEmpty(e.schema))throw new Error(nw.SCHEMA_REQUIRED_ERR);if(mm.isEmpty(e.table))throw new Error(nw.TABLE_REQUIRED_ERR);let t=mm.checkSchemaTableExist(e.schema,e.table);if(t)throw Qz(new Error,t,Jz.NOT_FOUND,Wz.LOG_LEVELS.ERROR,t,!0);return await Kz.getBackup(read_audit_log_object)}a(Xz,"getBackup")});var dw=m((hae,_w)=>{var gn=require("validate.js"),cw=Pe(),ao=A(),{handleHDBError:Zz,hdb_errors:jz}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:eJ}=jz,Sm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tJ={STRUCTURE_USER:"structure_user"},aw=Object.values(ao.ROLE_TYPES_ENUM),rJ="attribute_permissions",sJ="attribute_name",{PERMS_CRUD_ENUM:co}=ao,nJ=[rJ,...Object.values(co)],uw=[co.READ,co.INSERT,co.UPDATE],iJ=[sJ,...uw];function oJ(e){let t=Sm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lw(e,t)}a(oJ,"addRoleValidation");function aJ(e){let t=Sm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lw(e,t)}a(aJ,"alterRoleValidation");function cJ(e){let t=Sm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,cw.validateObject(e,t)}a(cJ,"dropRoleValidation");var uJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function lw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)uJ.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=cw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=lJ(e);o&&Qe(o,r),aw.forEach(c=>{e.permission[c]&&!gn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(aw.indexOf(o)<0){if(o===tJ.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(_=>{nJ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(co).forEach(_=>{gn.isDefined(l[_])?gn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),gn.isDefined(l.attribute_permissions)){if(!gn.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=>{!iJ.includes(T)&&T!==co.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!gn.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}uw.forEach(T=>{gn.isDefined(f[T])?gn.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 _J(r)}a(lw,"customValidate");_w.exports={addRoleValidation:oJ,alterRoleValidation:aJ,dropRoleValidation:cJ};function lJ(e){let{operation:t,permission:r}=e;if(t===ao.OPERATIONS_ENUM.ADD_ROLE||t===ao.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?ao.ROLE_TYPES_ENUM.SUPER_USER:ao.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(lJ,"validateNoSUPerms");function _J(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 Zz(new Error,s,eJ.BAD_REQUEST)}else return null}a(_J,"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 Om=m((Sae,mw)=>{"use strict";var Ew=Nr(),fw=Or(),dJ=jn(),Tm=dw(),Rm=Gs(),EJ=require("uuid").v4,fJ=require("util"),Yl=A(),hJ=V(),gm=fw.searchByValue,mJ=fw.searchByHash,SJ=fJ.promisify(dJ.delete),pJ=os(),TJ=Xi(),{hdb_errors:RJ,handleHDBError:uo}=W(),{HDB_ERROR_MSGS:hw,HTTP_STATUS_CODES:Kl}=RJ,{UserEventMsg:Am}=qr();mw.exports={addRole:gJ,alterRole:AJ,dropRole:OJ,listRoles:NJ};function pm(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(pm,"scrubRoleDetails");async function gJ(e){let t=Tm.addRoleValidation(e);if(t)throw t;e=pm(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 gm(r)||[])}catch(i){throw uo(i)}if(s&&s.length>0)throw uo(new Error,hw.ROLE_ALREADY_EXISTS(e.role),Kl.CONFLICT,void 0,void 0,!0);e.id||(e.id=EJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ew.insert(n),Rm.signalUserChange(new Am(process.pid)),e=pm(e),e}a(gJ,"addRole");async function AJ(e){let t=Tm.alterRoleValidation(e);if(t)throw t;e=pm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await Ew.update(r)}catch(n){throw uo(n)}if(s&&s?.message==="updated 0 of 1 records")throw uo(new Error,"Invalid role id",Kl.BAD_REQUEST,void 0,void 0,!0);return await Rm.signalUserChange(new Am(process.pid)),e}a(AJ,"alterRole");async function OJ(e){let t=Tm.dropRoleValidation(e);if(t)throw uo(new Error,t,Kl.BAD_REQUEST,void 0,void 0,!0);let r=new TJ(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await mJ(r));if(s.length===0)throw uo(new Error,hw.ROLE_NOT_FOUND,Kl.NOT_FOUND,void 0,void 0,!0);let n=new pJ(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await gm(n)),o=!1;if(hJ.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 SJ(c),Rm.signalUserChange(new Am(process.pid)),`${s[0].role} successfully deleted`}a(OJ,"dropRole");async function NJ(){return gm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(NJ,"listRoles")});var Rw=m((Tae,Tw)=>{"use strict";var bJ=Q(),An=require("joi"),yJ=Pe(),Sw=require("moment"),IJ=require("fs-extra"),Nm=require("path"),wJ=require("lodash"),Xa=A(),{LOG_LEVELS:ci}=A(),CJ="YYYY-MM-DD hh:mm:ss",UJ=Nm.resolve(__dirname,"../logs");Tw.exports=function(e){return yJ.validateBySchema(e,DJ)};var DJ=An.object({from:An.custom(pw),until:An.custom(pw),level:An.valid(ci.NOTIFY,ci.FATAL,ci.ERROR,ci.WARN,ci.INFO,ci.DEBUG,ci.TRACE),order:An.valid("asc","desc"),limit:An.number().min(1),start:An.number().min(0),log_name:An.custom(LJ)});function pw(e,t){if(Sw(e,Sw.ISO_8601).format(CJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pw,"validateDatetime");function LJ(e,t){if(wJ.invert(Xa.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=bJ.get(Xa.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Xa.LOG_NAMES.HDB:e,i=n===Xa.LOG_NAMES.INSTALL?Nm.join(UJ,Xa.LOG_NAMES.INSTALL):Nm.join(s,n);return IJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(LJ,"validateReadLogPath")});var ym=m((gae,Aw)=>{"use strict";var Wl=A(),MJ=x(),PJ=Q(),vJ=Rw(),bm=require("path"),gw=require("fs-extra"),{once:BJ}=require("events"),{handleHDBError:HJ,hdb_errors:FJ}=W(),{PACKAGE_ROOT:qJ}=A(),GJ=bm.join(qJ,"logs"),xJ=1e3,kJ=200;Aw.exports=VJ;async function VJ(e){let t=vJ(e);if(t)throw HJ(t,t.message,FJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=PJ.get(Wl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Wl.LOG_NAMES.HDB:e.log_name,n=s===Wl.LOG_NAMES.INSTALL?bm.join(GJ,Wl.LOG_NAMES.INSTALL):bm.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?xJ: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(gw.statSync(n).size-(h+5)*kJ,0));let p=gw.createReadStream(n,{start:T});p.on("error",b=>{MJ.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&&(On(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&&(On(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&&(On(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&&(On(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(On(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&&(On(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&&(On(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(On(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await BJ(p,"close"),O}a(VJ,"readLog");function On(e,t,r){t==="desc"?$J(e,r):t==="asc"?YJ(e,r):r.push(e)}a(On,"pushLineToResult");function $J(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($J,"insertDescending");function YJ(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(YJ,"insertAscending")});var zl=m((yae,yw)=>{"use strict";var Im=require("joi"),{string:Ql,boolean:Ow,date:KJ}=Im.types(),WJ=Pe(),{validateSchemaExists:Oae,validateTableExists:Nae,validateSchemaName:bae}=rs(),QJ=A(),zJ=Be(),Nw=Q();Nw.initSync();var JJ=Ql.invalid(Nw.get(QJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(zJ.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(),bw={operation:Ql.valid("add_node","update_node"),node_name:JJ,subscriptions:Im.array().items({table:Ql.optional(),schema:Ql.required(),subscribe:Ow.required(),publish:Ow.required().custom(ZJ),start_time:KJ.iso()}).min(1).required()};function XJ(e){return WJ.validateBySchema(e,Im.object(bw))}a(XJ,"addUpdateNodeValidator");function ZJ(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(ZJ,"checkForFalsy");yw.exports={addUpdateNodeValidator:XJ,validation_schema:bw}});var ww=m((wae,Iw)=>{var jJ=Pe(),e2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Iw.exports=function(e){return jJ.validateObject(e,e2)}});var Cm=m((Cae,Cw)=>{"use strict";var t2=A().OPERATIONS_ENUM,wm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=t2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Cw.exports=wm});var Dw=m((Dae,Uw)=>{"use strict";var r2={OPERATION:"operation",REFRESH:"refresh"},Um=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Dm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Uw.exports={JWTTokens:Um,TOKEN_TYPE_ENUM:r2,JWTRSAKeys:Dm}});var ec=m((Mae,vw)=>{"use strict";var ja=require("jsonwebtoken"),Lm=require("fs-extra"),Mm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:s2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=s2,Za=x(),Lw=ol(),Bm=br(),n2=Nr().update,i2=Cm(),o2=Gs(),{UserEventMsg:a2}=qr(),Nn=Q();Nn.initSync();var Pm=require("path"),{JWTTokens:c2,JWTRSAKeys:u2,TOKEN_TYPE_ENUM:Jl}=Dw(),l2=Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",_2=Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Xl="RS256",vm;vw.exports={createTokens:d2,validateOperationToken:f2,refreshOperationToken:E2,validateRefreshToken:Pw};async function d2(e){if(Mm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Mm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Mm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Bm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Za.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await Zl(),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 Mw(i,r.private_key,r.passphrase),c=await ja.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:_2,algorithm:Xl,subject:Jl.REFRESH}),u=Lw.hash(c),l=new i2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await n2(l)}catch(E){Za.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return o2.signalUserChange(new a2(process.pid)),new c2(o,c)}a(d2,"createTokens");async function Mw(e,t,r){return await ja.sign(e,{key:t,passphrase:r},{expiresIn:l2,algorithm:Xl,subject:Jl.OPERATION})}a(Mw,"signOperationToken");async function Zl(){if(vm===void 0)try{let e=Pm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Pm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Pm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Lm.readFile(e)).toString(),n=(await Lm.readFile(t)).toString(),i=(await Lm.readFile(r)).toString();vm=new u2(i,n,s)}catch(e){throw Za.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return vm}a(Zl,"getJWTRSAKeys");async function E2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Pw(e.refresh_token);let t=await Zl(),r=await ja.decode(e.refresh_token);return{operation_token:await Mw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(E2,"refreshOperationToken");async function f2(e){try{let t=await Zl(),r=await ja.verify(e,t.public_key,{algorithms:Xl,subject:Jl.OPERATION});return await Bm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Za.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(f2,"validateOperationToken");async function Pw(e){let t;try{let r=await Zl(),s=await ja.verify(e,r.public_key,{algorithms:Xl,subject:Jl.REFRESH});t=await Bm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Za.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Lw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Pw,"validateRefreshToken")});var Hm=m((Bae,Fw)=>{"use strict";var h2=ww(),lo=require("passport"),m2=require("passport-local").Strategy,S2=require("passport-http").BasicStrategy,p2=require("util"),T2=br(),Hw=p2.callbackify(T2.findAndValidateUser),vae=rr(),R2=A(),Bw=ec();lo.use(new m2(function(e,t,r){Hw(e,t,r)}));lo.use(new S2(function(e,t,r){Hw(e,t,r)}));lo.serializeUser(function(e,t){t(null,e)});lo.deserializeUser(function(e,t){t(null,e)});function g2(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":lo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===R2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Bw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Bw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:lo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(g2,"authorize");function A2(e,t){let r=h2(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(A2,"checkPermissions");Fw.exports={authorize:g2,checkPermissions:A2}});var _o=m((Fae,qw)=>{"use strict";var Fm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},qm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};qw.exports={Node:Fm,NodeSubscription:qm}});var xw=m((Gae,Gw)=>{"use strict";var O2=A().OPERATIONS_ENUM,Gm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=O2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Gw.exports=Gm});var tc=m((kae,kw)=>{"use strict";var xm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},km=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)}};kw.exports={RemotePayloadObject:xm,RemotePayloadSubscription:km}});var $w=m(($ae,Vw)=>{"use strict";var Vm=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}};Vw.exports=Vm});var Ww=m((zae,Kw)=>{"use strict";var N2=$w(),Kae=xe(),Yw=ye(),b2=x(),{getSchemaPath:Wae,getTransactionAuditStorePath:Qae}=we(),{getDatabases:y2}=(de(),re(Ne));Kw.exports=I2;async function I2(e){let t=new N2;try{let r=y2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Yw.environmentDataSize(schema_path,e.name),o=await Yw.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){b2.warn(`unable to stat table dbi due to ${r}`)}return t}a(I2,"lmdbGetTableSize")});var zw=m((Xae,Qw)=>{"use strict";var $m=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}};Qw.exports=$m});var Eo=m((tce,jw)=>{"use strict";var w2=require("fs-extra"),C2=require("path"),Ut=require("systeminformation"),bn=x(),U2=nt(),Ym=Be(),e_=A(),D2=Ww(),Zw=Qn(),{getThreadInfo:Jw}=dt(),tS=Q();tS.initSync();var L2=zw(),{openEnvironment:jae}=ye(),{getSchemaPath:ece}=we(),{database:M2}=(de(),re(Ne)),jl;jw.exports={getHDBProcessInfo:zm,getNetworkInfo:Xm,getDiskInfo:Jm,getMemoryInfo:Qm,getCPUInfo:Wm,getTimeInfo:Km,getSystemInformation:Zm,systemInformation:P2,getTableSize:jm,getMetrics:eS};function Km(){return Ut.time()}a(Km,"getTimeInfo");async function Wm(){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 bn.error(`error in getCPUInfo: ${e}`),{}}}a(Wm,"getCPUInfo");async function Qm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return bn.error(`error in getMemoryInfo: ${e}`),{}}}a(Qm,"getMemoryInfo");async function zm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await w2.readFile(C2.join(tS.get(e_.CONFIG_PARAMS.ROOTPATH),e_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===e_.NODE_ERROR_CODES.ENOENT)bn.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 bn.error(`error in getHDBProcessInfo: ${t}`),e}}a(zm,"getHDBProcessInfo");async function Jm(){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 bn.error(`error in getDiskInfo: ${t}`),e}}a(Jm,"getDiskInfo");async function Xm(){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 bn.error(`error in getNetworkInfo: ${t}`),e}}a(Xm,"getNetworkInfo");async function Zm(){if(jl!==void 0)return jl;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,jl=e,jl}catch(t){return bn.error(`error in getSystemInformation: ${t}`),e}}a(Zm,"getSystemInformation");async function jm(){let e=[],t=await Zw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await D2(s));return e}a(jm,"getTableSize");async function eS(){let e=await Zw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=M2({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){bn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(eS,"getMetrics");async function Xw(){if(tS.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await U2.getNATSReferences(),r=await t.streams.info(Ym.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Ym.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ym.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(Xw,"getNatsStreamInfo");async function P2(e){let t=new L2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Zm(),t.time=Km(),t.cpu=await Wm(),t.memory=await Qm(),t.disk=await Jm(),t.network=await Xm(),t.harperdb_processes=await zm(),t.table_size=await jm(),t.metrics=await eS(),t.threads=await Jw(),t.replication=await Xw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Zm();break;case"time":t.time=Km();break;case"cpu":t.cpu=await Wm();break;case"memory":t.memory=await Qm();break;case"disk":t.disk=await Jm();break;case"network":t.network=await Xm();break;case"harperdb_processes":t.harperdb_processes=await zm();break;case"table_size":t.table_size=await jm();break;case"database_metrics":case"metrics":t.metrics=await eS();break;case"threads":t.threads=await Jw();break;case"replication":t.replication=await Xw();break;default:break}return t}a(P2,"systemInformation")});var rS=m((ice,eC)=>{"use strict";var sce=require("fs-extra"),nce=x();eC.exports={version:v2,printVersion:H2,nodeVersion:B2};var yn=ka();function v2(){if(yn)return yn.version}a(v2,"version");function B2(){if(yn&&yn.engines&&yn.engines["preferred-node"])return yn.engines["preferred-node"]}a(B2,"nodeVersion");function H2(){yn&&console.log(`HarperDB Version ${yn.version}`)}a(H2,"printVersion")});var Vs=m((uce,nC)=>{"use strict";var F2=Nr(),sS=V(),q2=require("util"),ui=A(),tC=Q();tC.initSync();var G2=Hm(),rC=Or(),{Node:ace,NodeSubscription:cce}=_o(),x2=Xi(),k2=xw(),{RemotePayloadObject:V2,RemotePayloadSubscription:$2}=tc(),{handleHDBError:Y2,hdb_errors:K2}=W(),{HTTP_STATUS_CODES:W2,HDB_ERROR_MSGS:Q2}=K2,z2=os(),J2=Eo(),X2=rS(),{getDatabases:Z2}=(de(),re(Ne)),j2=q2.promisify(G2.authorize),e3=rC.searchByHash,t3=rC.searchByValue;nC.exports={authHeaderToUser:r3,isEmpty:s3,getNodeRecord:n3,upsertNodeRecord:i3,buildNodePayloads:o3,checkClusteringEnabled:a3,getAllNodeRecords:c3,getSystemInfo:u3,reverseSubscription:sC};async function r3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await j2(t,null),e}a(r3,"authHeaderToUser");function s3(e){return e==null}a(s3,"isEmpty");async function n3(e){let t=new x2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return e3(t)}a(n3,"getNodeRecord");async function i3(e){let t=new k2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return F2.upsert(t)}a(i3,"upsertNodeRecord");function sC(e){if(sS.isEmpty(e.subscribe)||sS.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(sC,"reverseSubscription");function o3(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,_=sS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=sC(c),f=Z2()[u]?.[l],h=new $2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new V2(r,t,n,s)}a(o3,"buildNodePayloads");function a3(){if(!tC.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Y2(new Error,Q2.CLUSTERING_NOT_ENABLED,W2.BAD_REQUEST,void 0,void 0,!0)}a(a3,"checkClusteringEnabled");async function c3(){let e=new z2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await t3(e))}a(c3,"getAllNodeRecords");async function u3(){let e=await J2.getSystemInformation();return{hdb_version:X2.version(),node_version:e.node_version,platform:e.platform}}a(u3,"getSystemInfo")});var nS=m((_ce,dC)=>{"use strict";var t_=nt(),iC=V(),oC=Be(),aC=A(),r_=x(),cC=kl(),l3=Ah(),{RemotePayloadObject:_3}=tc(),{handleHDBError:uC,hdb_errors:d3}=W(),{HTTP_STATUS_CODES:lC}=d3,{NodeSubscription:_C}=_o();dC.exports=E3;async function E3(e,t){let r;try{r=await t_.request(`${t}.${oC.REQUEST_SUFFIX}`,new _3(aC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),r_.trace("Response from remote describe all request:",r)}catch(o){r_.error(`addNode received error from describe all request to remote node: ${o}`);let c=t_.requestErrorHandler(o,"add_node",t);throw uC(new Error,c,lC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw uC(new Error,o,lC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===aC.SYSTEM_SCHEMA_NAME){await t_.createLocalTableStream(c,u);let h=new _C(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=iC.doesSchemaExist(c),_=s[c]!==void 0,d=u?iC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(r_.trace(`addNode creating schema: ${c}`),await cC.createSchema({operation:"create_schema",schema:c})),!d&&E){r_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new l3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await cC.createTable(h)}await t_.createLocalTableStream(c,u);let f=new _C(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(E3,"reviewSubscriptions")});var i_=m((Ece,hC)=>{"use strict";var{handleHDBError:s_,hdb_errors:f3}=W(),{HTTP_STATUS_CODES:n_}=f3,{addUpdateNodeValidator:h3}=zl(),rc=x(),fC=A(),EC=Be(),m3=V(),iS=nt(),sc=Vs(),S3=Q(),p3=nS(),{Node:T3,NodeSubscription:R3}=_o(),{broadcast:g3}=dt(),A3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",O3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",N3=S3.get(fC.CONFIG_PARAMS.CLUSTERING_NODENAME);hC.exports=b3;async function b3(e,t=!1){rc.trace("addNode called with:",e),sc.checkClusteringEnabled();let r=h3(e);if(r)throw s_(r,r.message,n_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await sc.getNodeRecord(s);if(!m3.isEmptyOrZeroLength(d))throw s_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,n_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await p3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=A3,o;let c=sc.buildNodePayloads(n,N3,fC.OPERATIONS_ENUM.ADD_NODE,await sc.getSystemInfo());rc.trace("addNode sending remote payload:",c);let u;try{u=await iS.request(`${s}.${EC.REQUEST_SUFFIX}`,c)}catch(d){rc.error(`addNode received error from request: ${d}`);let E=iS.requestErrorHandler(d,"add_node",s);throw s_(new Error,E,n_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===EC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw s_(new Error,d,n_.INTERNAL_SERVER_ERROR,"error",d)}rc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];rc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await iS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new R3(f.schema,f.table,f.publish,f.subscribe))}let _=new T3(s,l,u.system_info);return await sc.upsertNodeRecord(_),g3({type:"nats_update"}),i.length>0?o.message=O3:o.message=`Successfully added '${s}' to manifest`,o}a(b3,"addNode")});var aS=m((hce,pC)=>{"use strict";var{handleHDBError:o_,hdb_errors:y3}=W(),{HTTP_STATUS_CODES:a_}=y3,{addUpdateNodeValidator:I3}=zl(),nc=x(),SC=A(),mC=Be(),w3=V(),oS=nt(),ic=Vs(),C3=Q(),{cloneDeep:U3}=require("lodash"),D3=nS(),{NodeSubscription:L3}=_o(),{broadcast:M3}=dt(),P3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",v3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",B3=C3.get(SC.CONFIG_PARAMS.CLUSTERING_NODENAME);pC.exports=H3;async function H3(e){nc.trace("updateNode called with:",e),ic.checkClusteringEnabled();let t=I3(e);if(t)throw o_(t,t.message,a_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=U3(await ic.getNodeRecord(r));if(w3.isEmptyOrZeroLength(s))throw o_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await D3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=P3,o;let c=ic.buildNodePayloads(n,B3,SC.OPERATIONS_ENUM.UPDATE_NODE,await ic.getSystemInfo());nc.trace("updateNode sending remote payload:",c);let u;try{u=await oS.request(`${r}.${mC.REQUEST_SUFFIX}`,c)}catch(l){nc.error(`updateNode received error from request: ${l}`);let _=oS.requestErrorHandler(l,"update_node",r);throw o_(new Error,_,a_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===mC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw o_(new Error,l,a_.INTERNAL_SERVER_ERROR,"error",l)}nc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];nc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await oS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await F3(s[0],n,u.system_info),i.length>0?o.message=v3:o.message=`Successfully updated '${r}'`,o}a(H3,"updateNode");async function F3(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 L3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ic.upsertNodeRecord(s),M3({type:"nats_update"})}a(F3,"updateNodeTable")});var OC=m((Sce,AC)=>{"use strict";var gC=require("joi"),{string:TC}=gC.types(),q3=Pe(),RC=A(),G3=Q(),x3=Be();AC.exports=k3;function k3(e){let t=TC.invalid(G3.get(RC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(x3.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=gC.object({operation:TC.valid(RC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return q3.validateBySchema(e,r)}a(k3,"removeNodeValidator")});var u_=m((Tce,CC)=>{"use strict";var{handleHDBError:NC,hdb_errors:V3}=W(),{HTTP_STATUS_CODES:bC}=V3,$3=OC(),oc=x(),yC=Vs(),Y3=V(),c_=A(),IC=Be(),wC=nt(),K3=Q(),{RemotePayloadObject:W3}=tc(),{NodeSubscription:Q3}=_o(),z3=Pa(),J3=jn(),{broadcast:X3}=dt(),Z3=K3.get(c_.CONFIG_PARAMS.CLUSTERING_NODENAME);CC.exports=j3;async function j3(e){oc.trace("removeNode called with:",e),yC.checkClusteringEnabled();let t=$3(e);if(t)throw NC(t,t.message,bC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await yC.getNodeRecord(r);if(Y3.isEmptyOrZeroLength(s))throw NC(new Error,`Node '${r}' was not found.`,bC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new W3(c_.OPERATIONS_ENUM.REMOVE_NODE,Z3,[]),i,o=!1;try{i=await wC.request(`${r}.${IC.REQUEST_SUFFIX}`,n),oc.trace("Remove node reply from remote node:",r,i)}catch(u){oc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];oc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new Q3(_.schema,_.table,!1,!1);await wC.updateWorkStream(d,r)}let c=new z3(c_.SYSTEM_SCHEMA_NAME,c_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await J3.deleteRecord(c),X3({type:"nats_update"}),i?.status===IC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(oc.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(j3,"removeNode")});var LC=m((gce,DC)=>{"use strict";var UC=require("joi"),{string:eX,array:tX}=UC.types(),rX=Pe(),sX=zl();DC.exports=nX;function nX(e){let t=UC.object({operation:eX.valid("configure_cluster").required(),connections:tX.items(sX.validation_schema).required()});return rX.validateBySchema(e,t)}a(nX,"configureClusterValidator")});var cS=m((Oce,HC)=>{"use strict";var iX=A(),l_=x(),oX=V(),aX=u_(),cX=i_(),MC=Vs(),uX=LC(),{handleHDBError:PC,hdb_errors:lX}=W(),{HTTP_STATUS_CODES:vC}=lX,_X="Configure cluster complete.",dX="Failed to configure the cluster. Check the logs for more details.",EX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";HC.exports=fX;async function fX(e){l_.trace("configure cluster called with:",e),MC.checkClusteringEnabled();let t=uX(e);if(t)throw PC(t,t.message,vC.BAD_REQUEST,void 0,void 0,!0);let r=await MC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(BC(aX,{operation:iX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);l_.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(BC(cX,f,f.node_name))}let c=await Promise.allSettled(i);l_.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"&&(l_.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(oX.isEmptyOrZeroLength(u))return{message:_X,connections:l};if(_)return{message:EX,failed_nodes:u,connections:l};throw PC(new Error,dX,vC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(fX,"configureCluster");async function BC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(BC,"functionWrapper")});var qC=m((bce,FC)=>{"use strict";var __=require("joi"),hX=Pe(),{validateSchemaExists:mX,validateTableExists:SX,validateSchemaName:pX}=rs(),TX=__.object({operation:__.string().valid("purge_stream"),schema:__.string().custom(mX).custom(pX).required(),table:__.string().custom(SX).required()});function RX(e){return hX.validateBySchema(e,TX)}a(RX,"purgeStreamValidator");FC.exports=RX});var uS=m((Ice,GC)=>{"use strict";var{handleHDBError:gX,hdb_errors:AX}=W(),{HTTP_STATUS_CODES:OX}=AX,NX=qC(),bX=nt(),yX=Vs();GC.exports=IX;async function IX(e){let t=NX(e);if(t)throw gX(t,t.message,OX.BAD_REQUEST,void 0,void 0,!0);yX.checkClusteringEnabled();let{schema:r,table:s}=e;return await bX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(IX,"purgeStream")});var dS=m((Cce,KC)=>{"use strict";var _S=Vs(),wX=nt(),VC=Q(),d_=A(),li=Be(),CX=V(),lS=x(),{RemotePayloadObject:UX}=tc(),{ErrorCode:xC}=require("nats"),kC=VC.get(d_.CONFIG_PARAMS.CLUSTERING_ENABLED),$C=VC.get(d_.CONFIG_PARAMS.CLUSTERING_NODENAME);KC.exports={clusterStatus:DX,buildNodeStatus:YC};async function DX(){let e={node_name:$C,is_enabled:kC,connections:[]};if(!kC)return e;let t=await _S.getAllNodeRecords();if(CX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(YC(t[s],e.connections));return await Promise.allSettled(r),e}a(DX,"clusterStatus");async function YC(e,t){let r=e.name,s=new UX(d_.OPERATIONS_ENUM.CLUSTER_STATUS,$C,void 0,await _S.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await wX.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,lS.error(`Error getting node status from ${r} `,n))}catch(u){lS.warn(`Error getting node status from ${r}`,u),u.code===xC.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===xC.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new LX(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!==d_.PRE_4_0_0_VERSION&&await _S.upsertNodeRecord(u)}catch(u){lS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(YC,"buildNodeStatus");function LX(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(LX,"NodeStatusObject")});var fS=m((Dce,WC)=>{"use strict";var{handleHDBError:MX,hdb_errors:PX}=W(),{HTTP_STATUS_CODES:vX}=PX,BX=nt(),HX=Vs(),ES=V(),E_=require("joi"),FX=Pe(),qX=2e3,GX=E_.object({timeout:E_.number().min(1),connected_nodes:E_.boolean(),routes:E_.boolean()});WC.exports=xX;async function xX(e){HX.checkClusteringEnabled();let t=FX.validateBySchema(e,GX);if(t)throw MX(t,t.message,vX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||ES.autoCastBoolean(s),o=n===void 0||ES.autoCastBoolean(n),c={nodes:[]},u=await BX.getServerList(r??qX),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:ES.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(xX,"clusterNetwork")});var XC=m((Mce,JC)=>{"use strict";var hS=require("joi"),QC=Pe(),{route_constraints:zC}=NE();JC.exports={setRoutesValidator:kX,deleteRoutesValidator:VX};function kX(e){let t=hS.object({server:hS.valid("hub","leaf").required(),routes:zC.required()});return QC.validateBySchema(e,t)}a(kX,"setRoutesValidator");function VX(e){let t=hS.object({routes:zC.required()});return QC.validateBySchema(e,t)}a(VX,"deleteRoutesValidator")});var SS=m((vce,tU)=>{"use strict";var _i=Tr(),mS=V(),f_=A(),ZC=XC(),{handleHDBError:jC,hdb_errors:$X}=W(),{HTTP_STATUS_CODES:eU}=$X,YX="cluster routes successfully set",KX="cluster routes successfully deleted";tU.exports={setRoutes:WX,getRoutes:QX,deleteRoutes:zX};function WX(e){let t=ZC.setRoutesValidator(e);if(t)throw jC(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=_i.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=mS.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"?_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:YX,set:o,skipped:i}}a(WX,"setRoutes");function QX(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(QX,"getRoutes");function zX(e){let t=ZC.deleteRoutesValidator(e);if(t)throw jC(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=_i.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=mS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=mS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:KX,deleted:i,skipped:o}}a(zX,"deleteRoutes")});var sU=m((Hce,rU)=>{"use strict";var ac=require("alasql"),di=require("recursive-iterator"),$r=x(),JX=V(),cc=A(),pS=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,ZX(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=>cc.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=>!cc.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][cc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=XX(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=>!cc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new ac.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 XX(e){return e.filter(t=>t[cc.PERMS_CRUD_ENUM.READ])}a(XX,"filterReadRestrictedAttrs");function ZX(e,t,r,s,n){jX(e,t,r,s,n)}a(ZX,"interpretAST");function uc(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(uc,"addSchemaTableToMap");function jX(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ac.yy.Insert?s4(e,t,r):e instanceof ac.yy.Select?e4(e,t,r,s,n):e instanceof ac.yy.Update?t4(e,t,r):e instanceof ac.yy.Delete?r4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(jX,"getRecordAttributesAST");function e4(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(JX.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{uc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),uc(c.table,t,r,s,n)});let o=new di(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{$r.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 di(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{$r.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 di(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{$r.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 di(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{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(e4,"getSelectAttributes");function t4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;uc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&TS(e.table.tableid,n,i.columnid,t,r)}a(t4,"getUpdateAttributes");function r4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;uc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&TS(e.table.tableid,n,i.columnid,t,r)}a(r4,"getDeleteAttributes");function s4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;uc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&TS(e.into.tableid,n,i.columnid,t,r)}a(s4,"getInsertAttributes");function TS(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(TS,"pushAttribute");rU.exports=pS});var AS=m((qce,aU)=>{var h_=Na(),nU=require("chalk"),lr=x(),iU=require("prompt"),{promisify:n4}=require("util"),RS=A(),i4=require("fs-extra"),o4=require("path"),a4=V(),c4=rS(),oU=Q();oU.initSync();var u4=require("moment"),l4=n4(iU.get),_4=o4.join(oU.getHdbBasePath(),RS.LICENSE_KEY_DIR_NAME,RS.LICENSE_FILE_NAME,RS.LICENSE_FILE_NAME);aU.exports={getFingerprint:E4,setLicense:d4,parseLicense:gS,register:f4,getRegistrationInfo:m4};async function d4(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await gS(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(d4,"setLicense");async function E4(){let e={};try{e=await h_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(E4,"getFingerprint");async function gS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=h_.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 i4.writeFile(_4,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(gS,"parseLicense");async function f4(){let e=await h4();return gS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(f4,"register");async function h4(){let e=await h_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:nU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:nU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{iU.start()}catch(s){lr.error(s)}let r;try{r=await l4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(h4,"promptForRegistration");async function m4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await h_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(a4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=c4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=u4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(m4,"getRegistrationInfo")});var uU=m((xce,cU)=>{"use strict";var S4=Be(),OS=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+S4.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"}};cU.exports=OS});var dU=m((Vce,_U)=>{"use strict";var lU=Be(),NS=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+lU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+lU.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"}};_U.exports=NS});var fU=m((Yce,EU)=>{"use strict";var bS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};EU.exports=bS});var mU=m((Wce,hU)=>{"use strict";var p4=Be(),yS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+p4.SERVER_SUFFIX.ADMIN,this.password=r}};hU.exports=yS});var CS=m((zce,TU)=>{"use strict";var lc=require("path"),T_=require("fs-extra"),T4=uU(),R4=dU(),g4=fU(),A4=mU(),IS=br(),fo=V(),Kt=Tr(),p_=A(),m_=Be(),{CONFIG_PARAMS:ze}=p_,dc=x(),R_=Q(),SU=qs(),wS=nt(),_c="clustering",O4=1e4,pU=5;TU.exports={generateNatsConfig:N4,removeNatsConfig:b4};async function N4(e=!1,t=void 0){R_.initSync();let r=R_.get(ze.ROOTPATH),s=lc.join(r,_c,m_.PID_FILES.HUB),n=lc.join(r,_c,m_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=lc.join(r,_c,m_.NATS_CONFIG_FILES.HUB_SERVER),c=lc.join(r,_c,m_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wS.checkNATSServerInstalled()||g_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await IS.listUsers(),p=Kt.getConfigFromFile(ze.CLUSTERING_USER),R=await IS.getClusterUser();(fo.isEmpty(R)||R.active!==!0)&&g_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await S_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await S_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await S_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await S_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of T.entries())Ze.role.role===p_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new A4(Ze.username,SU.decrypt(Ze.hash))),k.push(new g4(Ze.username,SU.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!fo.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 T4(Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=fo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===p_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await T_.writeJson(o,b),dc.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 R4(Kt.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===p_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await T_.writeJson(c,F),dc.trace(`Leaf server config written to ${c}`))}a(N4,"generateNatsConfig");async function S_(e){let t=R_.get(e);return fo.isEmpty(t)&&g_(`port undefined for '${e}'`),await fo.isPortTaken(t)&&g_(`'${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(S_,"isPortAvailable");function g_(e){let t=`Error generating clustering config: ${e}`;dc.error(t),console.error(t),process.exit(1)}a(g_,"generateNatsConfigError");async function b4(e){let{port:t,config_file:r}=wS.getServerConfig(e),{username:s,decrypt_hash:n}=await IS.getClusterUser(),i=0,o=500;for(;i<pU;){try{let l=await wS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){dc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=pU)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 fo.async_set_timeout(o*i)}let c="0".repeat(O4),u=lc.join(R_.get(ze.ROOTPATH),_c,r);await T_.writeFile(u,c),await T_.remove(u),dc.notify(e,"started.")}a(b4,"removeNatsConfig")});var BS=m((Xce,bU)=>{"use strict";var y4=require("minimist"),{isMainThread:LS,parentPort:AU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:Ec}=He,ds=x(),MS=V(),A_=CS(),ho=nt(),US=Be(),OU=Tr(),Es=HS(),RU=Eo(),I4=EE(),{restartWorkers:O_,onMessageByType:w4}=dt(),{handleHDBError:C4,hdb_errors:U4}=W(),{HTTP_STATUS_CODES:D4}=U4,N_=Q();N_.initSync();var fc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,L4="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",gU="Clustering is not enabled so cannot be restarted",M4="Invalid service",Ei,Yr;bU.exports={restart:NU,restartService:PS};LS&&w4(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?PS({service:e.workerType}):NU({operation:"restart"})});async function NU(e){Yr=Object.keys(e).length===0,Ei=await Es.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=y4(process.argv);if(t.service){await PS(t);return}if(Yr&&!Ei){console.error(L4);return}if(Yr&&console.log(fc),Ei){Es.enterPM2Mode(),ds.notify(fc);let r=I4(Object.keys(He.CONFIG_PARAM_MAP),!0);return MS.isEmptyOrZeroLength(Object.keys(r))||OU.updateConfigValue(void 0,void 0,r,!0,!0),v4(),fc}return LS?(ds.notify(fc),await vS(),setTimeout(()=>{O_()},50)):AU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),fc}a(NU,"restart");async function PS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw C4(new Error,M4,D4.BAD_REQUEST,void 0,void 0,!0);if(Ei=await Es.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!LS)return AU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Ec.clustering:if(!N_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gU;break}Yr&&console.log("Restarting clustering"),ds.notify("Restarting clustering"),await vS();break;case Ec.clustering_config:case Ec["clustering config"]:if(!N_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gU;break}Yr&&console.log("Restarting clustering_config"),ds.notify("Restarting clustering_config"),await Es.reloadClustering();break;case"custom_functions":case"custom functions":case Ec.harperdb:case Ec.http_workers:if(Yr&&!Ei){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}Yr&&console.log("Restarting http_workers"),ds.notify("Restarting http_workers"),Ei?await Es.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{O_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ds.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(PS,"restartService");async function P4(){await ho.publishToStream(`${US.SUBJECT_PREFIXES.TXN}.${US.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,US.WORK_QUEUE_CONSUMER_NAMES.stream_name,ho.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(P4,"postDummyNatsMsg");async function v4(){await vS(),await Es.restart(He.HDB_PROC_DESCRIPTOR),await MS.async_set_timeout(2e3),N_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await DS(),Yr&&(await ho.closeConnection(),process.exit(0))}a(v4,"restartPM2Mode");async function vS(){if(!OU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await RU.getHDBProcessInfo()).clustering.length===0)ds.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await DS(),Yr&&await ho.closeConnection();else{await P4(),await A_.generateNatsConfig(!0),Ei?(ds.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Es.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Es.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await RU.getHDBProcessInfo()).clustering.forEach(n=>{ds.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await MS.async_set_timeout(3e3),await DS(),await ho.updateLocalStreams(),Yr&&await ho.closeConnection(),ds.trace("Restart clustering restarting ingest and reply service threads");let t=O_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=O_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(vS,"restartClustering");async function DS(){await A_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(DS,"removeNatsConfig")});var BU=m((eue,vU)=>{"use strict";var jce=require("lodash"),Wt=A(),{handleHDBError:yU,hdb_errors:B4}=W(),{HDB_ERROR_MSGS:H4,HTTP_STATUS_CODES:F4}=B4,FS=x();vU.exports={getRolePermissions:G4};var fi=Object.create(null),q4=a(e=>({key:e,perms:{}}),"perms_template_obj"),UU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),DU=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"),qS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...DU(t,r,s,n)}),"table_perms_template"),IU=a((e,t=DU())=>({attribute_name:e,describe:PU(t),[hc]:t[hc],[GS]:t[GS],[xS]:t[xS]}),"attr_perms_template"),wU=a((e,t=!1)=>({attribute_name:e,describe:t,[hc]:t}),"timestamp_attr_perms_template"),{READ:hc,INSERT:GS,UPDATE:xS}=Wt.PERMS_CRUD_ENUM,LU=Object.values(Wt.PERMS_CRUD_ENUM),MU=[hc,GS,xS];function G4(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(fi[t]&&fi[t].key===s)return fi[t].perms;let n=x4(e,r);return fi[t]?fi[t].key=s:fi[t]=q4(s),fi[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 FS.error(s),FS.debug(r),yU(new Error,H4.OUTDATED_PERMS_TRANSLATION_ERROR,F4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
@@ -23,4 +23,4 @@
23
23
 
24
24
  `+Yp.readFileSync(o):"")},s.http2=!0}return s}a(f6,"getServerOptions");bM.exports=f6});var CM=m((ble,wM)=>{"use strict";var Kp=Q();Kp.initSync();var{CONFIG_PARAMS:IM}=A();function h6(){let e=Kp.get(IM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Kp.get(IM.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(h6,"getCORSOptions");wM.exports=h6});var LM=m((Ile,DM)=>{"use strict";var UM=Q();UM.initSync();var m6=A();function S6(){return UM.get(m6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(S6,"getHeaderTimeoutConfig");DM.exports=S6});var zp={};je(zp,{customFunctionsServer:()=>R6,handleFile:()=>T6,ready:()=>O6});async function T6(e,t,r,s){if(!Xs){let c=Wp.get(Qp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Xs=YM(c),tt.http((await Xs).server)}let n=await Xs,i=(0,PM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),MM.has(i)||(MM.add(i),n.register(A6(i,o)))}async function R6(){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 g6();let e=Wp.get(Qp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Xs=await YM(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 g6(){try{Ue.info("Custom Functions starting configuration."),await GM.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function A6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,vM.existsSync)(e)&&r.register(qM.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 YM(e){Ue.info("Custom Functions starting buildServer.");let t=(0,xM.default)(e),r=(0,BM.default)(t);r.server.headersTimeout=(0,VM.default)(),r.setErrorHandler($M.serverErrorHandler);let s=(0,kM.default)();return s&&r.register(HM.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(FM.default),await r.register(p6),await r.after(),dp(r),Ue.info("Custom Functions completed buildServer."),r}function O6(){if(Xs)return Xs.then?Xs.then(e=>e.ready()):Xs.ready()}var PM,vM,BM,HM,FM,qM,Wp,Qp,Ue,p6,GM,xM,kM,VM,$M,Xs,MM,KM=Se(()=>{PM=require("path"),vM=require("fs"),BM=C(require("fastify")),HM=C(require("@fastify/cors")),FM=C(Sp()),qM=C(require("@fastify/autoload")),Wp=C(Q()),Qp=C(A()),Ue=C(x()),p6=C(NM()),GM=C(br()),xM=C(yM()),kM=C(CM()),VM=C(LM()),$M=C(Sd());To();Jr();MM=new Set;a(T6,"handleFile");a(R6,"customFunctionsServer");a(g6,"setUp");a(A6,"buildRouteFolder");a(YM,"buildServer");a(O6,"ready")});var Jp={};je(Jp,{start:()=>N6});function N6(e){let t=e.root;return{handleFile(r,s,n){QM||(QM=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=WM.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,zM.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))),WM.set(s,n)}}}var zM,WM,QM,JM=Se(()=>{zM=C(require("send")),WM=new Map;a(N6,"start")});function I6(e,t=1,r){if(Xp++,(0,gi.startWorker)("server/threads/threadServer.js",{name:Rd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Rd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});y6.push(n),await n,Do.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Td.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Do.indexOf(s);o>-1&&Do.splice(o,1)}if(a(i,"removeWorker"),Lo){let o=Lo;Lo=[];for(let c of o)eP[c.localPort](c)}}}),r){let s=setInterval(()=>{Zp?Zp=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,gi.shutdownWorkers)(),Xp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function tP(e=0,t){if(typeof e=="string")try{(0,Ad.existsSync)(e)&&(0,Ad.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=w6:r=C6(t):r=jp;let s=(0,jM.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},eP[e]=i=>{Zp=!0,r(i,(o,c)=>{if(!o){XM?(XM.deliverSocket(i,e,c),i.resume()):Xp>0?(Lo.length===0&&setTimeout(()=>{Lo.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(),Lo.push(i)):(console.log("start up a dynamic thread to handle request"),I6(0));return}o.requests++;let u=i._handle.fd;gd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):M6(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 gd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function jp(e,t){let r,s=0;for(let n of Do){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=pd)return pd=i,t(r);s=i}pd=0,t(r)}function w6(e,t){let r=e.remoteAddress,s=Mo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);jp(e,i=>{Mo.set(r,{worker:i,lastUsed:n}),t(i)})}function C6(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=Mo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);jp(s,_=>{Mo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function D6(){pd=0;for(let e of Do)e.expectedIdle=e.recentELU.idle+U6,e.requests=1;Do.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function M6(e,t,r){let s=L6++;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(),Td.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")),Td.delete(s)),n.event=="destroy"&&(e.destroy(),Td.delete(s))})}var gi,jM,Rd,gd,Ad,b6,Do,Lo,eP,XM,Xp,y6,Zp,pd,ZM,Mo,U6,Td,L6,rP=Se(()=>{gi=C(dt()),jM=require("net"),Rd=C(A()),gd=C(x()),Ad=require("fs"),{isMainThread:b6}=require("worker_threads"),Do=[],Lo=[],eP=[],Xp=0,y6=[];b6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(I6,"startHTTPWorker");a(tP,"startSocketServer");pd=0;a(jp,"findMostIdleWorker");ZM=36e5,Mo=new Map;a(w6,"findByRemoteAddressAffinity");a(C6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mo)r.lastUsed+ZM<e&&Mo.delete(t)},ZM).unref();U6=1e3;a(D6,"updateWorkerIdleness");(0,gi.setMonitorListener)(D6);Td=new Map,L6=1;a(M6,"proxySocket")});var aP=m((Fle,oP)=>{"use strict";var P6=require("cluster"),Qr=Q();Qr.initSync();var nP=A(),vle=require("util"),Zs=x(),eT=require("fs"),v6=require("fastify"),Ble=ka(),B6=require("@fastify/cors"),H6=require("@fastify/compress"),F6=require("@fastify/static"),q6=Sp(),G6=require("path"),{PACKAGE_ROOT:x6}=A(),k6=En(),V6=V(),$6=br(),Y6=Na(),{server:K6}=(Jr(),re(pu)),{authHandler:W6,handlePostRequest:Q6,serverErrorHandler:z6,reqBodyValidationHandler:J6}=Sd(),Hle=require("net"),{registerContentHandlers:X6}=(To(),re(nL)),Z6=1024*1024*1024,iP="TRUE",{HDB_SETTINGS_NAMES:Oi,CONFIG_PARAMS:j6}=nP,e9=Oi.CORS_ENABLED_KEY,t9="CORS_ACCESSLIST",r9=Oi.SERVER_TIMEOUT_KEY,s9=Oi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,n9=Oi.SERVER_HEADERS_TIMEOUT_KEY,i9=Oi.PRIVATE_KEY_KEY,o9=Oi.CERT_KEY,a9=Oi.HTTP_SECURE_ENABLED_KEY,Ai;oP.exports={hdbServer:sP,start:sP};async function sP(e){try{Zs.info("In Fastify server"+process.cwd()),Zs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Zs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=P6.isMaster,await c9();let t=Qr.get(a9),r=t&&(t===!0||t.toUpperCase()===iP);Ai=u9(r),await Ai.ready(),e||(e={}),e.isOperationsServer=!0,Ai.server.cantCleanupProperly=!0;try{K6.http(Ai.server,e),Ai.server.closeIdleConnections||await Ai.listen({port:0,host:"::"})}catch(s){throw Ai.close(),Zs.error(s),Zs.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Zs.fatal(t),process.exit(1)}}a(sP,"operationsServer");async function c9(){Zs.trace("Configuring HarperDB process."),k6.setSchemaDataToGlobal(),await $6.setUsersToGlobal(),await Y6.getLicense()}a(c9,"setUp");function u9(e){Zs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=l9(e),r=v6(t);r.server.headersTimeout=d9(),r.setErrorHandler(z6);let s=_9();s&&r.register(B6,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(q6),r.register(H6),r.register(F6,{root:G6.join(x6,"docs")}),X6(r);let n=Qr.get(nP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!V6.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[J6,W6],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Q6(i,o)}),r.get("/health",()=>"HarperDB is running."),Zs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(u9,"buildServer");function l9(e){let t=Qr.get(r9),r=Qr.get(s9),s={bodyLimit:Z6,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(i9),i=Qr.get(o9),o=Qr.get(j6.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:eT.readFileSync(n),cert:eT.readFileSync(i)+(o?`
25
25
 
26
- `+eT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(l9,"getServerOptions");function _9(){let e=Qr.get(e9),t=Qr.get(t9),r;return e&&(e===!0||e.toUpperCase()===iP)&&(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(_9,"getCORSOpts");function d9(){return Qr.get(n9)}a(d9,"getHeaderTimeoutConfig")});var TP=m((kle,pP)=>{"use strict";var{decode:E9}=require("msgpackr"),{isMainThread:f9,parentPort:h9,threadId:Gle}=require("worker_threads"),tT=nt(),Po=Be(),m9=A(),Gc=x(),cP=Q(),_P=A();dt();var S9=qs(),{recordAction:p9,recordActionBinary:T9}=(oi(),re(Ml)),{publishToStream:R9}=tT,xle={durable:Po.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Po.WORK_QUEUE_CONSUMER_NAMES.deliver_group},g9,A9,O9,dP,EP;pP.exports={initialize:fP,workQueueListener:SP,setSubscription:N9,setIgnoreOrigin:y9,getDatabaseSubscriptions:b9};async function fP(){EP=!0,Gc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await tT.getNATSReferences();g9=e,A9=e.info.server_name,O9=t,dP=r}a(fP,"initialize");var Nd=new Map;function N9(e,t,r){let s=Nd.get(e);s||Nd.set(e,s=new Map),s.set(t,r),EP||fP().then(SP)}a(N9,"setSubscription");function b9(){return Nd}a(b9,"getDatabaseSubscriptions");var hP;function y9(e){hP=e}a(y9,"setIgnoreOrigin");var mP=100,uP=new Array(mP),Od=0;async function SP(){let t=await(await dP.consumers.get(Po.WORK_QUEUE_CONSUMER_NAMES.stream_name,Po.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await uP[Od],uP[Od]=I9(r).catch(s=>{Gc.error(s)}),++Od>=mP&&(Od=0)}a(SP,"workQueueListener");f9||h9.on("message",async e=>{let{type:t}=e;t===_P.ITC_EVENT_TYPES.SHUTDOWN&&tT.closeConnection()});async function I9(e){let t=E9(e.data);p9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Po.MSG_HEADERS.ORIGIN)===cP.get(m9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!hP;if(T9(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;Gc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Gc.trace(`messageProcessor nats msg id: ${e.headers.get(Po.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Nd.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:lP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:lP(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})}cP.get(_P.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&R9(e.subject.split(".").slice(0,-1).join("."),S9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Gc.error(i)}e.ack()}a(I9,"messageProcessor");function lP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(lP,"convertOperation")});var aT={};je(aT,{disableNATS:()=>C9,setNATSReplicator:()=>rT,start:()=>w9});function w9(){yd.default.get(Id.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&D9()}function C9(e=!0){NP=e}function D9(){if(NP)return;let e=xr(),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];rT(n,r,i)}}cT((r,s)=>{rT(r.tableName,r.databaseName,r),s&&yP(r)}),!RP&&(RP=!0)}function rT(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 mt{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){yP(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 Xr;return(0,gP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<U9}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 bd(i.transaction,i)),o.user=i.user):o=bP),o}a(n,"getNATSTransaction")}function yP(e){let t=yd.default.get(Id.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,nT.publishToStream)(`${iT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,oT.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 nT,iT,oT,gP,AP,yd,Id,OP,NP,U9,bP,RP,bd,sT,IP=Se(()=>{de();Zr();nT=C(nt()),iT=C(Be()),oT=C(qs());oa();gP=C(TP()),AP=C(Ht()),yd=C(Q()),Id=C(A()),OP=C(x());a(w9,"start");a(C9,"disableNATS");U9=2;a(D9,"assignReplicationSource");a(rT,"setNATSReplicator");a(yP,"publishSchema");bd=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=yd.default.get(Id.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||(OP.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,nT.publishToStream)(`${iT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,oT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},sT=class extends bd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};bP=new sT});async function CP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await uT.getResource(e,{});n=new _T(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await uT.get(e);i&&i.delete()}n=new Cd(e,t)}return n}function lT(){return wd++,wd>65500&&(wd=1),wd}var wP,xc,uT,wd,Cd,_T,UP=Se(()=>{de();mc();wP=C(Ht()),xc=C(x());$n();uT=st({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(CP,"getSession");wd=1;a(lT,"getNextMessageId");Cd=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)):$=lT();let U=k.id;Array.isArray(U)&&(U=mo(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,xc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return lT()}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=[]}},_T=class extends Cd{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=lT();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,xc.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,wP.getNextMonotonicTime)()),(0,xc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),uT.put(this.sessionRecord)),t.qos}}});var fT={};je(fT,{start:()=>M9});async function M9({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:_}=MP(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,js.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;L9&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,PP.getSuperUser)());let{onMessage:u,onClose:l}=MP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,js.info)("Socket error",_)})},{port:t,securePort:s})}function MP(e,t,r,s,n){LP||(LP=!0,rm(_=>{_.push({metric:"mqtt-connections",connections:dT})})),dT++;let i,o={protocolVersion:4},c=(0,Ud.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){dT--,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,ET.get)(en.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DP.notify({username:s.username,status:en.AUTH_AUDIT_STATUS.SUCCESS,type:en.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ET.get)(en.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DP.error({username:s.username,status:en.AUTH_AUDIT_STATUS.FAILURE,type:en.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=CP({user:s,..._}),i=await i}catch(O){return(0,js.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,js.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,js.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=No(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,Ud.generate)(f,o);t(T),ls(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?$s(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Ud,PP,ET,en,js,DP,L9,LP,dT,vP=Se(()=>{Ud=require("mqtt-packet");UP();PP=C(br());To();oi();Jr();ET=C(Q()),en=C(A()),js=C(x()),DP=(0,js.loggerWithTag)("auth-event"),L9=!0;a(M9,"start");dT=0;a(MP,"onSocket")});var YP={};je(YP,{loadComponent:()=>Dd,loadComponentDirectories:()=>$P});function $P(e,t){t&&(mT=t),e&&(ST=e);let r=[];if((0,Ts.existsSync)(hT)){let n=(0,Ts.readdirSync)(hT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(hT,o);r.push(Dd(c,mT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Dd(s,mT,s)),Promise.all(r).then(()=>{VP=!0})}async function Dd(e,t,r,s,n){if(!HP.has(e)){HP.set(e,!0),n&&(ST=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ts.existsSync)(o)?i=(0,FP.parseDocument)((0,Ts.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=H9;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,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,kP.getHdbBasePath)().length){f=null;break}if(f)_=await Dd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=B9[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,st(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(kc.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&&!BP.includes(p)){BP.push(p);let R=pT.get(TT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);tP(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})||_),ST.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,xP.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,qP.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Mr.relative)(e,O),U=(0,Mr.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 v9(O);kc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else kc.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 Vc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Vc(E),null,!0)}}if(kc.isMainThread&&!VP&&(0,GP.watchDir)(e,async()=>$P()),i.extensionModule)return await Bu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Vc(i))}}}var Ts,Mr,kc,FP,pT,TT,qP,GP,xP,kP,P9,v9,hT,ST,VP,mT,B9,H9,BP,HP,Vc,KP=Se(()=>{Ts=require("fs"),Mr=require("path"),kc=require("worker_threads"),FP=require("yaml"),pT=C(Q()),TT=C(A());Fg();kg();Vg();aL();KM();JM();qP=C(require("fast-glob")),GP=C(dt());xE();Jr();xP=C(W());Zr();de();rP();kP=C(Q()),P9=C(aP());U_();IP();vP();({readFile:v9}=Ts.promises),hT=pT.get(TT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),ST=new Map;a($P,"loadComponentDirectories");B9={REST:mp,graphqlSchema:GE,jsResource:VE,fastifyRoutes:zp,login:YE,static:Jp,operationsApi:P9,customFunctions:{},clustering:aT,authentication:Sc,mqtt:fT},H9={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},BP=[],HP=new Map;a(Dd,"loadComponent");Vc=class extends mt{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 ZP=m((m_e,XP)=>{"use strict";var Pd=require("fs-extra"),RT=require("path"),Ld=x(),WP=V(),Md=A(),JP=Q(),F9=Tr();XP.exports=q9;async function q9(){let e=G9(),t=JP.get(Md.CONFIG_PARAMS.ROOTPATH),r=RT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Md.PACKAGE_ROOT}},n=RT.join(t,"node_modules");await Pd.ensureDir(n);let i,o=!0,c=!1;try{i=await Pd.readJson(r)}catch(u){if(WP.isEmptyOrZeroLength(e))return;if(u.code!==Md.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!WP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await QP(l);s.dependencies[u]=_+l}if(!o){Ld.notify("Installing components"),await zP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await QP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Ld.notify("Removing component",u),c=!0);c&&(Ld.notify("Updating components."),await zP(r,s))}a(q9,"installComponents");function G9(){let e=F9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(G9,"getComponentsConfig");async function QP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":RT.extname(e)||await Pd.pathExists(e)?"file:":"github:"}a(QP,"getPkgPrefix");async function zP(e,t){Ld.trace("npm installing components package.json",t),await Pd.writeFile(e,JSON.stringify(t,null," ")),await F_().installAllRootModules(JP.get(Md.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(zP,"installPackages")});var tv=m((p_e,ev)=>{var{isMainThread:jP}=require("worker_threads"),{getTables:x9}=(de(),re(Ne)),{loadComponentDirectories:k9,loadComponent:V9}=(KP(),re(YP)),{resetResources:$9}=(mc(),re(HU)),Y9=ZP(),K9=Tr(),{dirname:W9}=require("path"),{getConnection:Q9}=nt(),z9=Q(),J9=A(),gT=new Map;async function X9(e=!1){!jP&&z9.get(J9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Q9(),jP&&await Y9();let t=$9();x9(),t.isWorker=e,await V9(W9(K9.getConfigFilePath()),t,"hdb",!0,gT),await k9(gT,t);let r=[];for(let[s]of gT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(X9,"loadRootComponents");ev.exports.loadRootComponents=X9});var dt=m((g_e,Mn)=>{"use strict";var{Worker:Z9,MessageChannel:j9,parentPort:Rs,isMainThread:yT,threadId:e7,workerData:$c}=require("worker_threads"),{PACKAGE_ROOT:t7}=A(),{join:nv,isAbsolute:r7,extname:Bd}=require("path"),{server:s7}=(Jr(),re(pu)),{watch:n7,readdir:i7}=require("fs/promises"),{totalmem:rv}=require("os"),IT=A(),Ni=x(),R_e=A(),{randomBytes:o7}=require("crypto"),a7=1024*1024,Ln=[],Dn=[],c7=50,iv=1e4,u7="restart",ov="request_thread_info",av="resource_report",cv="thread_info",uv="added-port",l7="ack",AT;Mn.exports={startWorker:OT,restartWorkers:wT,shutdownWorkers:f7,workers:Ln,setMonitorListener:A7,onMessageFromWorkers:h7,onMessageByType:m7,broadcast:S7,broadcastWithAcknowledgement:T7,setChildListenerByType:E7,getWorkerIndex:_v,getTicketKeys:dv,setMainIsWorker:_7,restartNumber:$c?.restartNumber||1};var lv;function _v(){return $c?$c.workerIndex:lv?0:void 0}a(_v,"getWorkerIndex");function _7(e){lv=e}a(_7,"setMainIsWorker");var vd;function dv(){return vd||(vd=yT?o7(48):$c.ticketKeys,vd)}a(dv,"getTicketKeys");Object.defineProperty(s7,"workerIndex",{get(){return _v()}});var Ev={[ov](e,t){R7(t)},[av](e,t){g7(t,e)}};function OT(e,t={}){let r=process.constrainedMemory?.()||rv();r=Math.min(r,rv());let s=Math.max(Math.floor(r/a7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Dn){let{port1:u,port2:l}=new j9;c.postMessage({type:uv,port:u},[u]),i.push(l)}Bd(e)||(e+=".js");let o=new Z9(r7(e)?e:nv(t7,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:Mn.exports.restartNumber,ticketKeys:dv()},transferList:i},t));return Fd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{OT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Ni.error("Worker error:",c)}),o.on("exit",c=>{Ln.splice(Ln.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<c7?(t.unexpectedRestarts=o.unexpectedRestarts+1,OT(e,t)):Ni.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Ev[c.type]?.(c,o)}),Ln.push(o),N7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(OT,"startWorker");var d7=[IT.THREAD_TYPES.HTTP];async function wT(e=null,t=2,r=!0){if(yT){if(r){let{loadRootComponents:n}=tv();await n()}Mn.exports.restartNumber++,t<1&&(t=t*Ln.length);let s=[];for(let n of Ln.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Mn.exports.restartNumber,type:IT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=d7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),iv*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:u7,workerType:e})}a(wT,"restartWorkers");function E7(e,t){Ev[e]=t}a(E7,"setChildListenerByType");function f7(e){return wT(e,1/0,!1)}a(f7,"shutdownWorkers");var fv=[];function h7(e){fv.push(e)}a(h7,"onMessageFromWorkers");var NT=new Map;function m7(e,t){let r=NT.get(e);r||NT.set(e,r=[]),r.push(t)}a(m7,"onMessageByType");function S7(e){for(let t of Dn)try{t.postMessage(e)}catch(r){Ni.error("Unable to send message to worker",r)}}a(S7,"broadcast");var Hd=new Map,p7=1;function T7(e){return new Promise(t=>{let r=0;for(let s of Dn)try{let n=p7++,i=a(()=>{Hd.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,Hd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Hd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ni.error("Unable to send message to worker",n)}r===0&&t()})}a(T7,"broadcastWithAcknowledgement");function R7(e){e.postMessage({type:cv,workers:hv()})}a(R7,"sendThreadInfo");function hv(){let e=Date.now();return Ln.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(hv,"getChildWorkerInfo");function g7(e,t){e.resources=t,e.resources.updated=Date.now()}a(g7,"recordResourceReport");var bT;function A7(e){bT=e}a(A7,"setMonitorListener");var O7=1e3,sv=!1;function N7(){sv||(sv=!0,setInterval(()=>{for(let e of Ln){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}bT&&bT()},O7).unref())}a(N7,"startMonitoring");var b7=1e3;if(Rs){Fd(Rs);for(let e of $c.addPorts)Fd(e);setInterval(()=>{let e=process.memoryUsage();Rs.postMessage({type:av,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},b7).unref(),AT=a(()=>new Promise((e,t)=>{Rs.on("message",r),Rs.postMessage({type:ov});function r(s){s.type===cv&&(Rs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else AT=hv;Mn.exports.getThreadInfo=AT;function Fd(e,t){Dn.push(e),e.on("message",r=>{if(r.type===uv)Fd(r.port);else if(r.type===l7){let s=Hd.get(r.id);s&&s()}else{for(let n of fv)n(r,e);let s=NT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ni.error(i)}}}).on("close",()=>{Dn.splice(Dn.indexOf(e),1)}).on("exit",()=>{Dn.splice(Dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fd,"addPort");if(yT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await i7(s,{withFileTypes:!0}))i.isDirectory()&&r(nv(s,i.name));for await(let{filename:i}of n7(s,{persistent:!1}))(Bd(i)===".ts"||Bd(i)===".js"||Bd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await wT(),Ni.info("Reloaded HarperDB components")},100))},"watch_dir");Mn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Rs.on("message",async e=>{let{type:t}=e;t===IT.ITC_EVENT_TYPES.SHUTDOWN&&(Mn.exports.restartNumber=e.restartNumber,Rs.unref(),setTimeout(()=>{Ni.warn("Thread did not voluntarily terminate",e7),process.exit(0)},iv).unref())})});function MT(e){let t=e.auditStore=e.openDB(Rv.AUDIT_STORE_NAME,I7);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Av.getWorkerIndex)()===0&&e.on("aftercommit",()=>{UT||(UT=setTimeout(()=>{if(UT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-mv,0]})){if((n[0]&15)===LT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},mv/10).unref())}),t}function xd(e,t,r){let s=bv[r.type],n=3;if(t?t.length>80?(s|=qd,n=(0,tn.writeKey)(t,gs,e?14:6),CT.setUint16(2,n)):(n=(0,tn.writeKey)(t,gs,e?11:3),gs[1]=n):gs[1]=0,e){s|=Nv;let i=s&qd?6:3;CT.setFloat64(i,e),t||(n=i+8)}return gs[0]=s,s&qd?CT.setUint16(4,0):gs[2]=0,r.value?Buffer.concat([gs.slice(0,n),r.value]):gs.subarray(0,n)}function Pn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&qd,i=n?6:3,o;r&Nv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&DT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:bv[r&7],value:u,lastVersion:o,get user(){return c?(0,tn.readKey)(e,i,c):void 0}}}var tn,Gd,Rv,gv,Av,Ov,gs,CT,y7,I7,mv,UT,DT,Sv,LT,pv,Tv,qd,Nv,bv,Yc=Se(()=>{tn=require("ordered-binary"),Gd=C(Q()),Rv=C(xe()),gv=C(A()),Av=C(dt()),Ov=C(V());(0,Gd.initSync)();gs=Buffer.alloc(1024),CT=new DataView(gs.buffer,gs.byteOffset,1024),y7={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,tn.writeKey)(e[2],t,r+12)}else return(0,tn.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,tn.readKey)(e,t+12,r)]}else return(0,tn.readKey)(e,t,r)}},I7={encoding:"binary",keyEncoder:y7},mv=(0,Ov.convertToMS)((0,Gd.get)(gv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,UT=null;a(MT,"openAuditStore");DT=16,Sv=1,LT=2,pv=3,Tv=4,qd=128,Nv=64,bv={put:Sv|DT,[Sv]:"put",delete:LT,[LT]:"delete",message:pv|DT,[pv]:"message",invalidate:Tv,[Tv]:"invalidate"};a(xd,"createAuditEntry");a(Pn,"readAuditEntry")});var PT,bi,w7,Kc,kd,yv=Se(()=>{PT=C(Ht());Yc();bi=Symbol("completion"),w7=100,Kc=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,PT.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[bi]&&(i||(i=[]),i.push(d[bi])),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,xd(_.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<w7>>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=[]}},kd=class extends Kc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,PT.getNextMonotonicTime)())}getReadTxn(){}}});function Uv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Bo||((0,yi.onMessageByType)(wv,d=>{let E=d.auditIds;BT(d.path,E,d.txnId)}),(0,yi.onMessageByType)(Cv,d=>{(0,As.trace)("confirming to proceed with txn",d.txnId)}),Bo=Object.create(null));let c=Bo[i]||(Bo[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=mo(t);let l=new vT(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 BT(e,t,r,s){if(!Bo)return;let n=Bo[e];if(n){if(vo&&vo+1!==r){(0,As.trace)("Waiting to ensure latest txn id",vo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Vd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c);if(vo+1!==r){await(0,yi.broadcastWithAcknowledgement)({type:Cv,txnId:r});for(let[o,c]of Vd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c)}Vd.delete(r),(0,As.trace)("Proceeding with txn id",r),vo=r-1,BT(e,t,r,s)})();return Vd.set(r,i),i}(0,As.trace)("Notifying with txn id",r,s),vo=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,Iv.writeKey)(i,U7,0);let _=i[3];_&&(i.length=3);let d,E=mo(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=Pn(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 Dv(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&C7)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,yi.broadcast)({type:wv,path:n,auditIds:l,txnId:c,start:u}),BT(n,l,c,!0))})}}var As,yi,Iv,wv,Cv,C7,Bo,U7,vT,vo,Vd,Lv=Se(()=>{As=C(x()),yi=C(dt()),Iv=require("ordered-binary");oa();mc();Yc();wv="transaction",Cv="transaction-await",C7=67108864,U7=Buffer.alloc(4096);a(Uv,"addSubscription");vT=class extends Xr{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"}}},Vd=new Map;a(BT,"notifyFromTransactionData");a(Dv,"listenToCommits")});var Lp={};je(Lp,{coerceType:()=>$d,makeTable:()=>Kd,setServerUtilities:()=>v7});function Kd(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=[]),Dv(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&&XT();class F extends mt{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?ve[c][w.table]:F;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.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,Wc);switch(w.type){case"put":return L._writeUpdate(v,Wc);case"delete":return L._writeDelete(Wc);case"publish":return L._writePublish(v,Wc);case"invalidate":return L.invalidate(Wc);default:Ci.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,wi.getWorkerIndex)()):(0,wi.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&&(st({table:n,database:c,attributes:J,origin:"cluster"}),Jc.signalSchemaChange(new Xc.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&Jc.signalUserChange(new Xc.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,wi.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,XT(),F.audit=!0}static coerceId(S){return S===""?null:$d(S,k)}static async dropTable(){if(delete ve[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));Jc.signalSchemaChange(new Xc.SchemaEventMsg(process.pid,zr.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[vs])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=HT(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=HT(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=HT(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[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=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",[bi]: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,xv.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=ca(S);else{if(S[vv]&&(w=!wu(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=ca(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(Ci.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,Ho.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[bi]: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),Ci.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||JT(),q||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[bi]: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,Ii.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>$d(De,j)):$d(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,qv.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Qc.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===Qc.SEARCH_TYPES.CONTAINS||j===Qc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Qc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=L7:Y.estimated_count=D7}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))):Ho.SKIP);else{let Y=ME(L,v,D,F,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(PE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let on=y[De],nE=ME(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,CB=>{let oE=CB?.value;if(!oE)return iE(Ho.SKIP);for(let aE=0;aE<De;aE++)if(!j[aE](oE))return iE(Ho.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||st({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Uv(F,this[ae]??null,function(v,q,L){try{this.send({id:v,timestamp:L,...q})}catch(G){console.error(G)}},S.startTime,this[vs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[vs]){if(w){if(y)throw new Ii.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=Pn(q,i);(D==null||Fv(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||Fv(D,J)){let Y=Pn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ci.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,Gv.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=Pn(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||JT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[bi]: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 Kc(i,S.user,u)),D}else return new kd(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 Ii.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}wasLoadedFromSource(){return R?!!this[Bv]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ii.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ii.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({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(){Uu(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=Pn(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=Pn(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[vv]=!0,d&&F.setTTLExpiration(d/1e3),b&&wB(),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,zc.getIndexedValues)(L);if(G){Mv&&w.prefetch(G.map(X=>({key:X,value:Z})),Hv);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,zc.getIndexedValues)(q),G){Mv&&w.prefetch(G.map(X=>({key:X,value:Z})),Hv);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&&eo(Y,"cache-hit",n),Y&&!y&&(D&&(D[Bv]=!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,wi.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;ls(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,zc.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],xd(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([Pv,FT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([Pv,FT.threadId],T)},50))}a(Fn,"recordDeletion");function JT(){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+P7).unref())}a(JT,"enqueueDeletionCleanup");function XT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(XT,"addDeleteRemoval");function wB(){(0,wi.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){Ci.error("Error in evicting old records",Z)}},M7).unref()}a(wB,"runRecordExpirationEviction")}function HT(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 Hv(){}function v7(e){xv=e}function $d(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!B7.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Yd.autoCast)(e)}function Fv(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 zr,Ho,zc,qv,FT,Qc,Zc,Ii,Jc,Xc,Ci,Gv,wi,Yd,xv,D7,L7,M7,Mv,Pv,Xt,vv,$_e,Bv,Wc,P7,B7,cd=Se(()=>{zr=C(A()),Ho=require("lmdb"),zc=C(Ht()),qv=require("lodash"),FT=require("worker_threads");Zr();yv();Qc=C(xe()),Zc=C(Q());Lv();Ii=C(W()),Jc=C(Gs()),Xc=C(qr());de();Pu();Ci=C(x());Lu();$n();Gv=require("ordered-binary"),wi=C(dt());Yc();Yd=C(V());oi();D7=1e8,L7=1e7,M7=6e4;Zc.initSync();Mv=Zc.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Pv=Symbol.for("deletions"),Xt=Symbol.for("version"),vv=Symbol.for("incremental-update"),$_e=Symbol("source-resource"),Bv=Symbol("load-from-source"),Wc={isNotification:!0,allowInvalidated:!0},P7=(0,Yd.convertToMS)(Zc.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Kd,"makeTable");a(HT,"attributesAsObject");a(Hv,"noop");a(v7,"setServerUtilities");B7=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a($d,"coerceType");a(Fv,"isDescendantId")});var Ne={};je(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>kh,dropTableMeta:()=>k7,getDatabases:()=>xr,getTables:()=>H7,onUpdatedTable:()=>cT,readMetaDb:()=>jc,resetDatabases:()=>F7,table:()=>st,tables:()=>nr});function H7(){return Jd||xr(),nr||{}}function xr(){if(Jd)return ve;Jd=!0,xo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,yt.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,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Er.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Er.existsSync)(e))for(let r of(0,Er.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&jc((0,Me.join)(e,r.name),null,s)}if((0,Er.existsSync)((0,Go.getBaseSchemaPath)())){for(let r of(0,Er.readdirSync)((0,Go.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Go.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Go.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Er.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);jc((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,Er.existsSync)(n))for(let o of(0,Er.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&jc((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,Er.existsSync)(u)&&jc(u,o,r,null,!0)}}for(let r in ve){let s=xo.get(r);if(s){let n=ve[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 ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[Xd]}}return xo=null,ve}}function F7(){Jd=!1;for(let[,e]of vn)e.needsDeletion=!0;xr();for(let[e,t]of vn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),vn.delete(e));return ve}function jc(e,t,r=xT,s,n){let i=new qT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=vn.get(e);o?o.needsDeletion=!1:(o=(0,Wd.open)(i),vn.set(e,o));let c=new Ui.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Fo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Er.existsSync)(s)&&(i.path=s,l=(0,Wd.open)(i),l.isLegacy=!0):l=MT(o));let _=Yv(r),d=_[Xd],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,yt.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(qo)||0)&&u.putSync(qo,$+1):(p.tableId=$=u.get(qo),$||($=1),u.putSync(qo,$+1),u.putSync(p.key,p));let F=new Ui.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 Ui.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=Kv(_,f,Kd({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 kT)F(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Yv(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),xo&&!xo.has(e)){let r=new Set;t[Xd]=r,xo.set(e,r)}return t}function Kv(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=xT),xr();let r=Yv(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,Er.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=vn.get(i);if(!o){let c=new qT.default(i,!1);o=(0,Wd.open)(c),vn.set(i,o)}return o}async function kh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;vn.delete(n.path),n.status==="open"&&(await n.close(),await kv.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[Xd]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=xT);let u=Fa({database:t,table:e}),l=ve[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 Ui.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=MT(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,yt.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 Ui.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(qo),z.tableId||(z.tableId=1),h.putSync(qo,z.tableId+1),E.tableId=z.tableId,_=Kv(l,e,Kd({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 ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Fo.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 Ui.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,F);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<eu.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<eu.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=x7(_,k,O):p&&Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of kT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function x7(e,t,r){try{let s=e.schemaVersion;await Qd.signalSchemaChange(new zd.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,Vv.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)}),eu.workerData&&eu.workerData.restartNumber!==$v.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>q7?await n:u>G7&&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 Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function k7({table:e,database:t}){let r=Fa({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 cT(e){kT.push(e)}var yt,Fo,Wd,Me,Er,Go,Ui,qT,Zt,kv,GT,Vv,Qd,zd,eu,Le,$v,xT,Xd,nr,ve,qo,kT,Jd,vn,xo,q7,G7,de=Se(()=>{yt=C(Q()),Fo=C(xe()),Wd=require("lmdb"),Me=require("path"),Er=require("fs"),Go=C(we());cd();Ui=C(Fu()),qT=C(Gu()),Zt=C(A()),kv=C(require("fs-extra")),GT=require("../../index"),Vv=C(Ht()),Qd=C(Gs()),zd=C(qr()),eu=require("worker_threads"),Le=C(x()),$v=C(dt());Yc();xT="data",Xd=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,GT._assignPackageExport)("databases",ve);(0,GT._assignPackageExport)("tables",nr);qo=Symbol.for("next-table-id"),kT=[],vn=new Map;a(H7,"getTables");a(xr,"getDatabases");a(F7,"resetDatabases");a(jc,"readMetaDb");a(Yv,"ensureDB");a(Kv,"setTable");a(Fa,"database");a(kh,"dropDatabase");a(st,"table");q7=1e3,G7=10;a(x7,"runIndexing");a(k7,"dropTableMeta");a(cT,"onUpdatedTable")});var V=m((j_e,oB)=>{"use strict";var Bn=require("path"),Xv=require("fs-extra"),jt=x(),Wv=require("fs-extra"),Zd=require("os"),V7=require("net"),$7=require("recursive-iterator"),Ge=A(),Y7=UR(),Qv=require("papaparse"),jd=require("moment"),{inspect:K7}=require("util"),zv=require("is-number"),Z_e=require("lodash"),W7=require("minimist"),Q7=require("https"),z7=require("http"),{hdb_errors:eE}=W(),J7=/^((\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)))$/,Zv=require("util").promisify(setTimeout),X7=100,Z7=5,j7="",eee=4,Jv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};oB.exports={isEmpty:fr,isEmptyOrZeroLength:Os,arrayHasEmptyValues:see,arrayHasEmptyOrZeroLengthValues:nee,buildFolderPath:iee,isBoolean:jv,errorizeMessage:tee,stripFileExtension:aee,autoCast:cee,autoCastJSON:eB,autoCastJSONDeep:$T,removeDir:uee,compareVersions:lee,isCompatibleDataVersion:_ee,escapeRawValue:dee,unescapeValue:Eee,stringifyProps:fee,timeoutPromise:mee,isClusterOperation:pee,getClusterUser:Ree,checkGlobalSchemaTable:Tee,getHomeDir:rB,getPropsFilePath:hee,promisifyPapaParse:gee,removeBOM:sB,createEventPromise:Aee,checkProcessRunning:Oee,checkSchemaTableExist:Nee,checkSchemaExists:nB,checkTableExists:iB,getStartOfTomorrowInSeconds:bee,getLimitKey:yee,isObject:oee,isNotEmptyAndHasValue:ree,autoCasterIsNumberCheck:tB,backtickASTSchemaItems:Iee,isPortTaken:See,createForkArgs:wee,autoCastBoolean:Cee,async_set_timeout:Zv,getTableHashAttribute:Uee,doesSchemaExist:Dee,doesTableExist:Lee,stringifyObj:Mee,ms_to_time:Pee,changeExtension:vee,getEnvCliRootPath:YT,noBootFile:Bee,httpRequest:Hee,transformReq:Fee,convertToMS:qee,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function tee(e){return e instanceof Error?e:new Error(e)}a(tee,"errorizeMessage");function fr(e){return e==null}a(fr,"isEmpty");function ree(e){return!fr(e)&&(e||e===0||e===""||jv(e))}a(ree,"isNotEmptyAndHasValue");function Os(e){return fr(e)||e.length===0||e.size===0}a(Os,"isEmptyOrZeroLength");function see(e){if(fr(e))return!0;for(let t=0;t<e.length;t++)if(fr(e[t]))return!0;return!1}a(see,"arrayHasEmptyValues");function nee(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(nee,"arrayHasEmptyOrZeroLengthValues");function iee(...e){try{return e.join(Bn.sep)}catch{console.error(e)}}a(iee,"buildFolderPath");function jv(e){return fr(e)?!1:e===!0||e===!1}a(jv,"isBoolean");function oee(e){return fr(e)?!1:typeof e=="object"}a(oee,"isObject");function aee(e){return Os(e)?j7:e.slice(0,-eee)}a(aee,"stripFileExtension");function cee(e){return fr(e)||e===""||typeof e!="string"?e:Jv[e]!==void 0?Jv[e]:tB(e)===!0?Number(e):J7.test(e)?new Date(e):e}a(cee,"autoCast");function eB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(eB,"autoCastJSON");function $T(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=$T(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=$T(r);s!==r&&(e[t]=s)}return e}else return eB(e)}a($T,"autoCastJSONDeep");function tB(e){if(e.startsWith("0.")&&zv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zv(e))}a(tB,"autoCasterIsNumberCheck");async function uee(e){if(Os(e))throw new Error(`Directory path: ${e} does not exist`);try{await Wv.emptyDir(e),await Wv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(uee,"removeDir");function lee(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(lee,"compareVersions");function _ee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(_ee,"isCompatibleDataVersion");function dee(e){if(fr(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(dee,"escapeRawValue");function Eee(e){if(fr(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(Eee,"unescapeValue");function fee(e,t){if(fr(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+Zd.EOL}!Os(s)&&s[0]===";"?r+=" "+s+n+Zd.EOL:Os(s)||(r+=s+"="+n+Zd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(fee,"stringifyProps");function rB(){let e;try{e=Zd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(rB,"getHomeDir");function hee(){let e=Bn.join(rB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Xv.existsSync(e)||(e=Bn.join(__dirname,"../","hdb_boot_properties.file")),e}a(hee,"getPropsFilePath");function mee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(mee,"timeoutPromise");async function See(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=V7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(See,"isPortTaken");function pee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(pee,"isClusterOperation");function Tee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tee,"checkGlobalSchemaTable");function Ree(e,t){if(fr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(fr(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(Ree,"getClusterUser");function gee(){Qv.parsePromise=function(e,t,r){return new Promise(function(s,n){Qv.parse(e,{header:!0,transformHeader:sB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(gee,"promisifyPapaParse");function sB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(sB,"removeBOM");function Aee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${K7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(Aee,"createEventPromise");async function Oee(e){let t=!0,r=0;do await Zv(X7*r++),(await Y7.findPs(e)).length>0&&(t=!1);while(t&&r<Z7);if(t)throw new Error(`process ${e} was not started`)}a(Oee,"checkProcessRunning");function Nee(e,t){let r=nB(e);if(r)return r;let s=iB(e,t);if(s)return s}a(Nee,"checkSchemaTableExist");function nB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nB,"checkSchemaExists");function iB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iB,"checkTableExists");function bee(){let e=jd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=jd().utc().unix();return e-t}a(bee,"getStartOfTomorrowInSeconds");function yee(){return jd().utc().format("DD-MM-YYYY")}a(yee,"getLimitKey");function Iee(e){try{let t=new $7(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(Iee,"backtickASTSchemaItems");function wee(e){return[e]}a(wee,"createForkArgs");function Cee(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Cee,"autoCastBoolean");function Uee(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Uee,"getTableHashAttribute");function Dee(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Dee,"doesSchemaExist");function Lee(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(Lee,"doesTableExist");function Mee(e){try{return JSON.stringify(e)}catch{return e}}a(Mee,"stringifyObj");function Pee(e){let t=jd.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(Pee,"ms_to_time");function vee(e,t){let r=Bn.basename(e,Bn.extname(e));return Bn.join(Bn.dirname(e),r+t)}a(vee,"changeExtension");function YT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=W7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(YT,"getEnvCliRootPath");var VT;function Bee(){if(VT)return VT;let e=YT();YT()&&Xv.pathExistsSync(Bn.join(e,Ge.HDB_CONFIG_FILE))&&(VT=!0)}a(Bee,"noBootFile");function Hee(e,t){let r;return e.protocol==="http:"?r=z7:r=Q7,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(Hee,"httpRequest");function Fee(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Fee,"transformReq");function qee(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(qee,"convertToMS")});var dB=m((tde,_B)=>{"use strict";var hr=Q(),Gee=Na(),oe=A(),tu=Be(),rn=require("path"),{PACKAGE_ROOT:rE}=A(),aB=Q(),tE=V(),ko="/dev/null",xee=rn.join(rE,"launchServiceScripts"),cB=rn.join(rE,"utility/scripts"),kee=rn.join(cB,oe.HDB_RESTART_SCRIPT),uB=rn.resolve(rE,"dependencies",`${process.platform}-${process.arch}`,tu.NATS_BINARY_NAME);function lB(){let t=Gee.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 tE.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=tE.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:rE}}a(lB,"generateMainServerConfig");var Vee=9930;function $ee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=rn.join(e,"clustering",tu.NATS_CONFIG_FILES.HUB_SERVER),r=rn.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=aB.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=tu.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Vee?"-"+s:""),script:uB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ko,i.error_file=ko),i}a($ee,"generateNatsHubServerConfig");var Yee=9940;function Kee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=rn.join(e,"clustering",tu.NATS_CONFIG_FILES.LEAF_SERVER),r=rn.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=aB.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=tu.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Yee?"-"+s:""),script:uB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ko,i.error_file=ko),i}a(Kee,"generateNatsLeafServerConfig");function Wee(){hr.initSync();let e=rn.join(hr.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:xee,autorestart:!1};return hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ko,t.error_file=ko),t}a(Wee,"generateClusteringUpgradeV4ServiceConfig");function Qee(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return tE.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=tE.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:cB},script:kee}}a(Qee,"generateRestart");function zee(){return{apps:[lB()]}}a(zee,"generateAllServiceConfigs");_B.exports={generateAllServiceConfigs:zee,generateMainServerConfig:lB,generateRestart:Qee,generateNatsHubServerConfig:$ee,generateNatsLeafServerConfig:Kee,generateClusteringUpgradeV4ServiceConfig:Wee}});var HS=m((cde,yB)=>{"use strict";var Re=A(),Jee=V(),ru=CS(),su=nt(),Ns=Be(),Hn=dB(),sE=Q(),sn=x(),Xee=Vs(),{startWorker:EB,onMessageFromWorkers:Zee}=dt(),jee=Eo(),ete=require("util"),hB=require("child_process"),{execFile:tte}=hB,sde=ete.promisify(hB.exec),nde=require("systeminformation"),he;yB.exports={enterPM2Mode:rte,start:Di,stop:KT,reload:mB,restart:SB,list:WT,describe:TB,connect:nn,kill:ate,startAllServices:cte,startService:QT,getUniqueServicesList:RB,restartAllServices:ute,isServiceRegistered:gB,reloadStopStart:AB,restartHdb:pB,deleteProcess:ite,startClusteringProcesses:NB,startClusteringThreads:bB,isHdbRestartRunning:ote,isClusteringRunning:_te,stopClustering:lte,reloadClustering:dte};var{PACKAGE_ROOT:ide}=A(),ode=A(),{loggerWithTag:ade}=sn,nu=!1;Zee(e=>{e.type==="restart"&&sE.initSync(!0)});function rte(){nu=!0}a(rte,"enterPM2Mode");function nn(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{sn.setupConsoleLogging(),r&&t(r),e(s)})})}a(nn,"connect");var er,ste=10,fB;function Di(e){if(nu)return nte(e);let t=tte(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=er.indexOf(t);i>-1&&er.splice(i,1),!fB&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<ste&&Di(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=sE.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Ns.LOG_LEVEL_HIERARCHY[i]>=Ns.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ns.LOG_LEVELS.ERR||l===Ns.LOG_LEVELS.WRN?sn.OUTPUTS.STDERR:sn.OUTPUTS.STDOUT;sn.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Ns.LOG_LEVELS[d]}if(Ns.LOG_LEVEL_HIERARCHY[i]>=Ns.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Ns.LOG_LEVELS.ERR||l===Ns.LOG_LEVELS.WRN?sn.OUTPUTS.STDERR:sn.OUTPUTS.STDOUT;sn.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!er){er=[];let n=a(()=>{fB=!0,er&&(er.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)}er.push(t)}a(Di,"start");function nte(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(nte,"startWithPM2");function KT(e){if(!nu){for(let t of er||[])t.name===e&&(er.splice(er.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.stop(e,async(s,n)=>{s&&(he.disconnect(),r(s)),he.delete(e,(i,o)=>{i&&(he.disconnect(),r(s)),he.disconnect(),t(o)})})})}a(KT,"stop");function mB(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(mB,"reload");function SB(e){if(!nu)for(let t of er||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}a(SB,"restart");function ite(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(ite,"deleteProcess");async function pB(){await Di(Hn.generateRestart())}a(pB,"restartHdb");async function ote(){let e=await WT();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(ote,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await nn()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(WT,"list");function TB(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(TB,"describe");function ate(){if(!nu){for(let e of er||[])e.kill();er=[];return}return new Promise(async(e,t)=>{try{await nn()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(ate,"kill");async function cte(){try{await NB(),await bB(),await Di(Hn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}a(cte,"startAllServices");async function QT(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Hn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Hn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Hn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Hn.generateNatsHubServerConfig(),await Di(t),await ru.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Hn.generateNatsLeafServerConfig(),await Di(t),await ru.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Hn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Di(t)}catch(t){throw he.disconnect(),t}}a(QT,"startService");async function RB(){try{let e=await WT(),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 he.disconnect(),e}}a(RB,"getUniqueServicesList");async function ute(e=[]){try{let t=!1,r=await RB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await SB(o))}t&&await AB(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}a(ute,"restartAllServices");async function gB(e){if(er?.find(r=>r.name===e))return!0;let t=await jee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(gB,"isServiceRegistered");async function AB(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?sE.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):sE.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await TB(e),s=Jee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await pB():await mB(e)}a(AB,"reloadStopStart");var OB;async function NB(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await QT(t)}}a(NB,"startClusteringProcesses");async function bB(){OB=EB(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await su.createWorkQueueStream(Ns.WORK_QUEUE_CONSUMER_NAMES),await su.updateIngestStreamConsumer(),await su.updateLocalStreams();let e=await Xee.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){sn.info("Starting clustering upgrade 4.0.0 process"),EB(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bB,"startClusteringThreads");async function lte(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await OB.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await KT(t)}}a(lte,"stopClustering");async function _te(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await gB(t)===!1)return!1}return!0}a(_te,"isClusteringRunning");async function dte(){await ru.generateNatsConfig(!0),await su.reloadNATSHub(),await su.reloadNATSLeaf(),await ru.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ru.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(dte,"reloadClustering")});var zT=HS(),IB=A();a(async function(){try{let t=await zT.describe(IB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await zT.reload(r.pm_id);await zT.deleteProcess(IB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
26
+ `+eT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(l9,"getServerOptions");function _9(){let e=Qr.get(e9),t=Qr.get(t9),r;return e&&(e===!0||e.toUpperCase()===iP)&&(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(_9,"getCORSOpts");function d9(){return Qr.get(n9)}a(d9,"getHeaderTimeoutConfig")});var TP=m((kle,pP)=>{"use strict";var{decode:E9}=require("msgpackr"),{isMainThread:f9,parentPort:h9,threadId:Gle}=require("worker_threads"),tT=nt(),Po=Be(),m9=A(),Gc=x(),cP=Q(),_P=A();dt();var S9=qs(),{recordAction:p9,recordActionBinary:T9}=(oi(),re(Ml)),{publishToStream:R9}=tT,xle={durable:Po.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Po.WORK_QUEUE_CONSUMER_NAMES.deliver_group},g9,A9,O9,dP,EP;pP.exports={initialize:fP,workQueueListener:SP,setSubscription:N9,setIgnoreOrigin:y9,getDatabaseSubscriptions:b9};async function fP(){EP=!0,Gc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await tT.getNATSReferences();g9=e,A9=e.info.server_name,O9=t,dP=r}a(fP,"initialize");var Nd=new Map;function N9(e,t,r){let s=Nd.get(e);s||Nd.set(e,s=new Map),s.set(t,r),EP||fP().then(SP)}a(N9,"setSubscription");function b9(){return Nd}a(b9,"getDatabaseSubscriptions");var hP;function y9(e){hP=e}a(y9,"setIgnoreOrigin");var mP=100,uP=new Array(mP),Od=0;async function SP(){let t=await(await dP.consumers.get(Po.WORK_QUEUE_CONSUMER_NAMES.stream_name,Po.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await uP[Od],uP[Od]=I9(r).catch(s=>{Gc.error(s)}),++Od>=mP&&(Od=0)}a(SP,"workQueueListener");f9||h9.on("message",async e=>{let{type:t}=e;t===_P.ITC_EVENT_TYPES.SHUTDOWN&&tT.closeConnection()});async function I9(e){let t=E9(e.data);p9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Po.MSG_HEADERS.ORIGIN)===cP.get(m9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!hP;if(T9(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;Gc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Gc.trace(`messageProcessor nats msg id: ${e.headers.get(Po.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Nd.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:lP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:lP(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})}cP.get(_P.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&R9(e.subject.split(".").slice(0,-1).join("."),S9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Gc.error(i)}e.ack()}a(I9,"messageProcessor");function lP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(lP,"convertOperation")});var aT={};je(aT,{disableNATS:()=>C9,setNATSReplicator:()=>rT,start:()=>w9});function w9(){yd.default.get(Id.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&D9()}function C9(e=!0){NP=e}function D9(){if(NP)return;let e=xr(),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];rT(n,r,i)}}cT((r,s)=>{rT(r.tableName,r.databaseName,r),s&&yP(r)}),!RP&&(RP=!0)}function rT(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 mt{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){yP(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 Xr;return(0,gP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<U9}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 bd(i.transaction,i)),o.user=i.user):o=bP),o}a(n,"getNATSTransaction")}function yP(e){let t=yd.default.get(Id.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,nT.publishToStream)(`${iT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,oT.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 nT,iT,oT,gP,AP,yd,Id,OP,NP,U9,bP,RP,bd,sT,IP=Se(()=>{de();Zr();nT=C(nt()),iT=C(Be()),oT=C(qs());oa();gP=C(TP()),AP=C(Ht()),yd=C(Q()),Id=C(A()),OP=C(x());a(w9,"start");a(C9,"disableNATS");U9=2;a(D9,"assignReplicationSource");a(rT,"setNATSReplicator");a(yP,"publishSchema");bd=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=yd.default.get(Id.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||(OP.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,nT.publishToStream)(`${iT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,oT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},sT=class extends bd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};bP=new sT});async function CP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await uT.getResource(e,{});n=new _T(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await uT.get(e);i&&i.delete()}n=new Cd(e,t)}return n}function lT(){return wd++,wd>65500&&(wd=1),wd}var wP,xc,uT,wd,Cd,_T,UP=Se(()=>{de();mc();wP=C(Ht()),xc=C(x());$n();uT=st({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(CP,"getSession");wd=1;a(lT,"getNextMessageId");Cd=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)):$=lT();let U=k.id;Array.isArray(U)&&(U=mo(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,xc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return lT()}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=[]}},_T=class extends Cd{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=lT();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,xc.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,wP.getNextMonotonicTime)()),(0,xc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),uT.put(this.sessionRecord)),t.qos}}});var fT={};je(fT,{start:()=>M9});async function M9({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:_}=MP(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,js.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;L9&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,PP.getSuperUser)());let{onMessage:u,onClose:l}=MP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,js.info)("Socket error",_)})},{port:t,securePort:s})}function MP(e,t,r,s,n){LP||(LP=!0,rm(_=>{_.push({metric:"mqtt-connections",connections:dT})})),dT++;let i,o={protocolVersion:4},c=(0,Ud.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){dT--,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,ET.get)(en.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DP.notify({username:s.username,status:en.AUTH_AUDIT_STATUS.SUCCESS,type:en.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ET.get)(en.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DP.error({username:s.username,status:en.AUTH_AUDIT_STATUS.FAILURE,type:en.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=CP({user:s,..._}),i=await i}catch(O){return(0,js.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,js.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,js.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=No(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,Ud.generate)(f,o);t(T),ls(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?$s(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Ud,PP,ET,en,js,DP,L9,LP,dT,vP=Se(()=>{Ud=require("mqtt-packet");UP();PP=C(br());To();oi();Jr();ET=C(Q()),en=C(A()),js=C(x()),DP=(0,js.loggerWithTag)("auth-event"),L9=!0;a(M9,"start");dT=0;a(MP,"onSocket")});var YP={};je(YP,{loadComponent:()=>Dd,loadComponentDirectories:()=>$P});function $P(e,t){t&&(mT=t),e&&(ST=e);let r=[];if((0,Ts.existsSync)(hT)){let n=(0,Ts.readdirSync)(hT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(hT,o);r.push(Dd(c,mT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Dd(s,mT,s)),Promise.all(r).then(()=>{VP=!0})}async function Dd(e,t,r,s,n){if(!HP.has(e)){HP.set(e,!0),n&&(ST=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ts.existsSync)(o)?i=(0,FP.parseDocument)((0,Ts.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=H9;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,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,kP.getHdbBasePath)().length){f=null;break}if(f)_=await Dd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=B9[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,st(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(kc.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&&!BP.includes(p)){BP.push(p);let R=pT.get(TT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);tP(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})||_),ST.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,xP.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,qP.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Mr.relative)(e,O),U=(0,Mr.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 v9(O);kc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else kc.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 Vc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Vc(E),null,!0)}}if(kc.isMainThread&&!VP&&(0,GP.watchDir)(e,async()=>$P()),i.extensionModule)return await Bu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Vc(i))}}}var Ts,Mr,kc,FP,pT,TT,qP,GP,xP,kP,P9,v9,hT,ST,VP,mT,B9,H9,BP,HP,Vc,KP=Se(()=>{Ts=require("fs"),Mr=require("path"),kc=require("worker_threads"),FP=require("yaml"),pT=C(Q()),TT=C(A());Fg();kg();Vg();aL();KM();JM();qP=C(require("fast-glob")),GP=C(dt());xE();Jr();xP=C(W());Zr();de();rP();kP=C(Q()),P9=C(aP());U_();IP();vP();({readFile:v9}=Ts.promises),hT=pT.get(TT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),ST=new Map;a($P,"loadComponentDirectories");B9={REST:mp,graphqlSchema:GE,jsResource:VE,fastifyRoutes:zp,login:YE,static:Jp,operationsApi:P9,customFunctions:{},clustering:aT,authentication:Sc,mqtt:fT},H9={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},BP=[],HP=new Map;a(Dd,"loadComponent");Vc=class extends mt{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 ZP=m((m_e,XP)=>{"use strict";var Pd=require("fs-extra"),RT=require("path"),Ld=x(),WP=V(),Md=A(),JP=Q(),F9=Tr();XP.exports=q9;async function q9(){let e=G9(),t=JP.get(Md.CONFIG_PARAMS.ROOTPATH),r=RT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Md.PACKAGE_ROOT}},n=RT.join(t,"node_modules");await Pd.ensureDir(n);let i,o=!0,c=!1;try{i=await Pd.readJson(r)}catch(u){if(WP.isEmptyOrZeroLength(e))return;if(u.code!==Md.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!WP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await QP(l);s.dependencies[u]=_+l}if(!o){Ld.notify("Installing components"),await zP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await QP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Ld.notify("Removing component",u),c=!0);c&&(Ld.notify("Updating components."),await zP(r,s))}a(q9,"installComponents");function G9(){let e=F9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(G9,"getComponentsConfig");async function QP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":RT.extname(e)||await Pd.pathExists(e)?"file:":"github:"}a(QP,"getPkgPrefix");async function zP(e,t){Ld.trace("npm installing components package.json",t),await Pd.writeFile(e,JSON.stringify(t,null," ")),await F_().installAllRootModules(JP.get(Md.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(zP,"installPackages")});var tv=m((p_e,ev)=>{var{isMainThread:jP}=require("worker_threads"),{getTables:x9}=(de(),re(Ne)),{loadComponentDirectories:k9,loadComponent:V9}=(KP(),re(YP)),{resetResources:$9}=(mc(),re(HU)),Y9=ZP(),K9=Tr(),{dirname:W9}=require("path"),{getConnection:Q9}=nt(),z9=Q(),J9=A(),gT=new Map;async function X9(e=!1){!jP&&z9.get(J9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Q9(),jP&&await Y9();let t=$9();x9(),t.isWorker=e,await V9(W9(K9.getConfigFilePath()),t,"hdb",!0,gT),await k9(gT,t);let r=[];for(let[s]of gT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(X9,"loadRootComponents");ev.exports.loadRootComponents=X9});var dt=m((g_e,Mn)=>{"use strict";var{Worker:Z9,MessageChannel:j9,parentPort:Rs,isMainThread:yT,threadId:e7,workerData:$c}=require("worker_threads"),{PACKAGE_ROOT:t7}=A(),{join:nv,isAbsolute:r7,extname:Bd}=require("path"),{server:s7}=(Jr(),re(pu)),{watch:n7,readdir:i7}=require("fs/promises"),{totalmem:rv}=require("os"),IT=A(),Ni=x(),R_e=A(),{randomBytes:o7}=require("crypto"),a7=1024*1024,Ln=[],Dn=[],c7=50,iv=1e4,u7="restart",ov="request_thread_info",av="resource_report",cv="thread_info",uv="added-port",l7="ack",AT;Mn.exports={startWorker:OT,restartWorkers:wT,shutdownWorkers:f7,workers:Ln,setMonitorListener:A7,onMessageFromWorkers:h7,onMessageByType:m7,broadcast:S7,broadcastWithAcknowledgement:T7,setChildListenerByType:E7,getWorkerIndex:_v,getTicketKeys:dv,setMainIsWorker:_7,restartNumber:$c?.restartNumber||1};var lv;function _v(){return $c?$c.workerIndex:lv?0:void 0}a(_v,"getWorkerIndex");function _7(e){lv=e}a(_7,"setMainIsWorker");var vd;function dv(){return vd||(vd=yT?o7(48):$c.ticketKeys,vd)}a(dv,"getTicketKeys");Object.defineProperty(s7,"workerIndex",{get(){return _v()}});var Ev={[ov](e,t){R7(t)},[av](e,t){g7(t,e)}};function OT(e,t={}){let r=process.constrainedMemory?.()||rv();r=Math.min(r,rv());let s=Math.max(Math.floor(r/a7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Dn){let{port1:u,port2:l}=new j9;c.postMessage({type:uv,port:u},[u]),i.push(l)}Bd(e)||(e+=".js");let o=new Z9(r7(e)?e:nv(t7,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:Mn.exports.restartNumber,ticketKeys:dv()},transferList:i},t));return Fd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{OT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Ni.error("Worker error:",c)}),o.on("exit",c=>{Ln.splice(Ln.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<c7?(t.unexpectedRestarts=o.unexpectedRestarts+1,OT(e,t)):Ni.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Ev[c.type]?.(c,o)}),Ln.push(o),N7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(OT,"startWorker");var d7=[IT.THREAD_TYPES.HTTP];async function wT(e=null,t=2,r=!0){if(yT){if(r){let{loadRootComponents:n}=tv();await n()}Mn.exports.restartNumber++,t<1&&(t=t*Ln.length);let s=[];for(let n of Ln.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Mn.exports.restartNumber,type:IT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=d7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),iv*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:u7,workerType:e})}a(wT,"restartWorkers");function E7(e,t){Ev[e]=t}a(E7,"setChildListenerByType");function f7(e){return wT(e,1/0,!1)}a(f7,"shutdownWorkers");var fv=[];function h7(e){fv.push(e)}a(h7,"onMessageFromWorkers");var NT=new Map;function m7(e,t){let r=NT.get(e);r||NT.set(e,r=[]),r.push(t)}a(m7,"onMessageByType");function S7(e){for(let t of Dn)try{t.postMessage(e)}catch(r){Ni.error("Unable to send message to worker",r)}}a(S7,"broadcast");var Hd=new Map,p7=1;function T7(e){return new Promise(t=>{let r=0;for(let s of Dn)try{let n=p7++,i=a(()=>{Hd.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,Hd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Hd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ni.error("Unable to send message to worker",n)}r===0&&t()})}a(T7,"broadcastWithAcknowledgement");function R7(e){e.postMessage({type:cv,workers:hv()})}a(R7,"sendThreadInfo");function hv(){let e=Date.now();return Ln.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(hv,"getChildWorkerInfo");function g7(e,t){e.resources=t,e.resources.updated=Date.now()}a(g7,"recordResourceReport");var bT;function A7(e){bT=e}a(A7,"setMonitorListener");var O7=1e3,sv=!1;function N7(){sv||(sv=!0,setInterval(()=>{for(let e of Ln){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}bT&&bT()},O7).unref())}a(N7,"startMonitoring");var b7=1e3;if(Rs){Fd(Rs);for(let e of $c.addPorts)Fd(e);setInterval(()=>{let e=process.memoryUsage();Rs.postMessage({type:av,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},b7).unref(),AT=a(()=>new Promise((e,t)=>{Rs.on("message",r),Rs.postMessage({type:ov});function r(s){s.type===cv&&(Rs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else AT=hv;Mn.exports.getThreadInfo=AT;function Fd(e,t){Dn.push(e),e.on("message",r=>{if(r.type===uv)Fd(r.port);else if(r.type===l7){let s=Hd.get(r.id);s&&s()}else{for(let n of fv)n(r,e);let s=NT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ni.error(i)}}}).on("close",()=>{Dn.splice(Dn.indexOf(e),1)}).on("exit",()=>{Dn.splice(Dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fd,"addPort");if(yT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await i7(s,{withFileTypes:!0}))i.isDirectory()&&r(nv(s,i.name));for await(let{filename:i}of n7(s,{persistent:!1}))(Bd(i)===".ts"||Bd(i)===".js"||Bd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await wT(),Ni.info("Reloaded HarperDB components")},100))},"watch_dir");Mn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Rs.on("message",async e=>{let{type:t}=e;t===IT.ITC_EVENT_TYPES.SHUTDOWN&&(Mn.exports.restartNumber=e.restartNumber,Rs.unref(),setTimeout(()=>{Ni.warn("Thread did not voluntarily terminate",e7),process.exit(0)},iv).unref())})});function MT(e){let t=e.auditStore=e.openDB(Rv.AUDIT_STORE_NAME,I7);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Av.getWorkerIndex)()===0&&e.on("aftercommit",()=>{UT||(UT=setTimeout(()=>{if(UT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-mv,0]})){if((n[0]&15)===LT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},mv/10).unref())}),t}function xd(e,t,r){let s=bv[r.type],n=3;if(t?t.length>80?(s|=qd,n=(0,tn.writeKey)(t,gs,e?14:6),CT.setUint16(2,n)):(n=(0,tn.writeKey)(t,gs,e?11:3),gs[1]=n):gs[1]=0,e){s|=Nv;let i=s&qd?6:3;CT.setFloat64(i,e),t||(n=i+8)}return gs[0]=s,s&qd?CT.setUint16(4,0):gs[2]=0,r.value?Buffer.concat([gs.slice(0,n),r.value]):gs.subarray(0,n)}function Pn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&qd,i=n?6:3,o;r&Nv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&DT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:bv[r&7],value:u,lastVersion:o,get user(){return c?(0,tn.readKey)(e,i,c):void 0}}}var tn,Gd,Rv,gv,Av,Ov,gs,CT,y7,I7,mv,UT,DT,Sv,LT,pv,Tv,qd,Nv,bv,Yc=Se(()=>{tn=require("ordered-binary"),Gd=C(Q()),Rv=C(xe()),gv=C(A()),Av=C(dt()),Ov=C(V());(0,Gd.initSync)();gs=Buffer.alloc(1024),CT=new DataView(gs.buffer,gs.byteOffset,1024),y7={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,tn.writeKey)(e[2],t,r+12)}else return(0,tn.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,tn.readKey)(e,t+12,r)]}else return(0,tn.readKey)(e,t,r)}},I7={encoding:"binary",keyEncoder:y7},mv=(0,Ov.convertToMS)((0,Gd.get)(gv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,UT=null;a(MT,"openAuditStore");DT=16,Sv=1,LT=2,pv=3,Tv=4,qd=128,Nv=64,bv={put:Sv|DT,[Sv]:"put",delete:LT,[LT]:"delete",message:pv|DT,[pv]:"message",invalidate:Tv,[Tv]:"invalidate"};a(xd,"createAuditEntry");a(Pn,"readAuditEntry")});var PT,bi,w7,Kc,kd,yv=Se(()=>{PT=C(Ht());Yc();bi=Symbol("completion"),w7=100,Kc=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,PT.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[bi]&&(i||(i=[]),i.push(d[bi])),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,xd(_.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<w7>>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=[]}},kd=class extends Kc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,PT.getNextMonotonicTime)())}getReadTxn(){}}});function Uv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Bo||((0,yi.onMessageByType)(wv,d=>{let E=d.auditIds;BT(d.path,E,d.txnId)}),(0,yi.onMessageByType)(Cv,d=>{(0,As.trace)("confirming to proceed with txn",d.txnId)}),Bo=Object.create(null));let c=Bo[i]||(Bo[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=mo(t);let l=new vT(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 BT(e,t,r,s){if(!Bo)return;let n=Bo[e];if(n){if(vo&&vo+1!==r){(0,As.trace)("Waiting to ensure latest txn id",vo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Vd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c);if(vo+1!==r){await(0,yi.broadcastWithAcknowledgement)({type:Cv,txnId:r});for(let[o,c]of Vd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c)}Vd.delete(r),(0,As.trace)("Proceeding with txn id",r),vo=r-1,BT(e,t,r,s)})();return Vd.set(r,i),i}(0,As.trace)("Notifying with txn id",r,s),vo=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,Iv.writeKey)(i,U7,0);let _=i[3];_&&(i.length=3);let d,E=mo(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=Pn(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 Dv(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&C7)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,yi.broadcast)({type:wv,path:n,auditIds:l,txnId:c,start:u}),BT(n,l,c,!0))})}}var As,yi,Iv,wv,Cv,C7,Bo,U7,vT,vo,Vd,Lv=Se(()=>{As=C(x()),yi=C(dt()),Iv=require("ordered-binary");oa();mc();Yc();wv="transaction",Cv="transaction-await",C7=67108864,U7=Buffer.alloc(4096);a(Uv,"addSubscription");vT=class extends Xr{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"}}},Vd=new Map;a(BT,"notifyFromTransactionData");a(Dv,"listenToCommits")});var Lp={};je(Lp,{coerceType:()=>$d,makeTable:()=>Kd,setServerUtilities:()=>v7});function Kd(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=[]),Dv(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&&XT();class F extends mt{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?ve[c][w.table]:F;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.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,Wc);switch(w.type){case"put":return L._writeUpdate(v,Wc);case"delete":return L._writeDelete(Wc);case"publish":return L._writePublish(v,Wc);case"invalidate":return L.invalidate(Wc);default:Ci.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,wi.getWorkerIndex)()):(0,wi.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&&(st({table:n,database:c,attributes:J,origin:"cluster"}),Jc.signalSchemaChange(new Xc.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&Jc.signalUserChange(new Xc.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,wi.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,XT(),F.audit=!0}static coerceId(S){return S===""?null:$d(S,k)}static async dropTable(){if(delete ve[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));Jc.signalSchemaChange(new Xc.SchemaEventMsg(process.pid,zr.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[vs])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=HT(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=HT(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=HT(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[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=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",[bi]: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,xv.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=ca(S);else{if(S[vv]&&(w=!wu(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=ca(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(Ci.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,Ho.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[bi]: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),Ci.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||JT(),q||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[bi]: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,Ii.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>$d(De,j)):$d(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,qv.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Qc.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===Qc.SEARCH_TYPES.CONTAINS||j===Qc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Qc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=L7:Y.estimated_count=D7}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))):Ho.SKIP);else{let Y=ME(L,v,D,F,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(PE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let on=y[De],nE=ME(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,CB=>{let oE=CB?.value;if(!oE)return iE(Ho.SKIP);for(let aE=0;aE<De;aE++)if(!j[aE](oE))return iE(Ho.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||st({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Uv(F,this[ae]??null,function(v,q,L){try{this.send({id:v,timestamp:L,...q})}catch(G){console.error(G)}},S.startTime,this[vs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[vs]){if(w){if(y)throw new Ii.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=Pn(q,i);(D==null||Fv(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||Fv(D,J)){let Y=Pn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ci.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,Gv.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=Pn(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||JT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[bi]: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 Kc(i,S.user,u)),D}else return new kd(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 Ii.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}wasLoadedFromSource(){return R?!!this[Bv]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ii.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ii.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({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(){Uu(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=Pn(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=Pn(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[vv]=!0,d&&F.setTTLExpiration(d/1e3),b&&wB(),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,zc.getIndexedValues)(L);if(G){Mv&&w.prefetch(G.map(X=>({key:X,value:Z})),Hv);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,zc.getIndexedValues)(q),G){Mv&&w.prefetch(G.map(X=>({key:X,value:Z})),Hv);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&&eo(Y,"cache-hit",n),Y&&!y&&(D&&(D[Bv]=!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,wi.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;ls(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,zc.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],xd(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([Pv,FT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([Pv,FT.threadId],T)},50))}a(Fn,"recordDeletion");function JT(){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+P7).unref())}a(JT,"enqueueDeletionCleanup");function XT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(XT,"addDeleteRemoval");function wB(){(0,wi.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){Ci.error("Error in evicting old records",Z)}},M7).unref()}a(wB,"runRecordExpirationEviction")}function HT(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 Hv(){}function v7(e){xv=e}function $d(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!B7.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Yd.autoCast)(e)}function Fv(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 zr,Ho,zc,qv,FT,Qc,Zc,Ii,Jc,Xc,Ci,Gv,wi,Yd,xv,D7,L7,M7,Mv,Pv,Xt,vv,$_e,Bv,Wc,P7,B7,cd=Se(()=>{zr=C(A()),Ho=require("lmdb"),zc=C(Ht()),qv=require("lodash"),FT=require("worker_threads");Zr();yv();Qc=C(xe()),Zc=C(Q());Lv();Ii=C(W()),Jc=C(Gs()),Xc=C(qr());de();Pu();Ci=C(x());Lu();$n();Gv=require("ordered-binary"),wi=C(dt());Yc();Yd=C(V());oi();D7=1e8,L7=1e7,M7=6e4;Zc.initSync();Mv=Zc.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Pv=Symbol.for("deletions"),Xt=Symbol.for("version"),vv=Symbol.for("incremental-update"),$_e=Symbol("source-resource"),Bv=Symbol("load-from-source"),Wc={isNotification:!0,allowInvalidated:!0},P7=(0,Yd.convertToMS)(Zc.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Kd,"makeTable");a(HT,"attributesAsObject");a(Hv,"noop");a(v7,"setServerUtilities");B7=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a($d,"coerceType");a(Fv,"isDescendantId")});var Ne={};je(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>kh,dropTableMeta:()=>k7,getDatabases:()=>xr,getTables:()=>H7,onUpdatedTable:()=>cT,readMetaDb:()=>jc,resetDatabases:()=>F7,table:()=>st,tables:()=>nr});function H7(){return Jd||xr(),nr||{}}function xr(){if(Jd)return ve;Jd=!0,xo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,yt.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,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Er.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Er.existsSync)(e))for(let r of(0,Er.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&jc((0,Me.join)(e,r.name),null,s)}if((0,Er.existsSync)((0,Go.getBaseSchemaPath)())){for(let r of(0,Er.readdirSync)((0,Go.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Go.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Go.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Er.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);jc((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,Er.existsSync)(n))for(let o of(0,Er.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&jc((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,Er.existsSync)(u)&&jc(u,o,r,null,!0)}}for(let r in ve){let s=xo.get(r);if(s){let n=ve[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 ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[Xd]}}return xo=null,ve}}function F7(){Jd=!1;for(let[,e]of vn)e.needsDeletion=!0;xr();for(let[e,t]of vn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),vn.delete(e));return ve}function jc(e,t,r=xT,s,n){let i=new qT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=vn.get(e);o?o.needsDeletion=!1:(o=(0,Wd.open)(i),vn.set(e,o));let c=new Ui.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Fo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Er.existsSync)(s)&&(i.path=s,l=(0,Wd.open)(i),l.isLegacy=!0):l=MT(o));let _=Yv(r),d=_[Xd],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,yt.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(qo)||0)&&u.putSync(qo,$+1):(p.tableId=$=u.get(qo),$||($=1),u.putSync(qo,$+1),u.putSync(p.key,p));let F=new Ui.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 Ui.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=Kv(_,f,Kd({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 kT)F(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Yv(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),xo&&!xo.has(e)){let r=new Set;t[Xd]=r,xo.set(e,r)}return t}function Kv(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=xT),xr();let r=Yv(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,Er.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=vn.get(i);if(!o){let c=new qT.default(i,!1);o=(0,Wd.open)(c),vn.set(i,o)}return o}async function kh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;vn.delete(n.path),n.status==="open"&&(await n.close(),await kv.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[Xd]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=xT);let u=Fa({database:t,table:e}),l=ve[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 Ui.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=MT(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,yt.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 Ui.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(qo),z.tableId||(z.tableId=1),h.putSync(qo,z.tableId+1),E.tableId=z.tableId,_=Kv(l,e,Kd({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 ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Fo.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 Ui.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,F);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<eu.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<eu.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=x7(_,k,O):p&&Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of kT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function x7(e,t,r){try{let s=e.schemaVersion;await Qd.signalSchemaChange(new zd.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,Vv.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)}),eu.workerData&&eu.workerData.restartNumber!==$v.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>q7?await n:u>G7&&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 Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function k7({table:e,database:t}){let r=Fa({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 cT(e){kT.push(e)}var yt,Fo,Wd,Me,Er,Go,Ui,qT,Zt,kv,GT,Vv,Qd,zd,eu,Le,$v,xT,Xd,nr,ve,qo,kT,Jd,vn,xo,q7,G7,de=Se(()=>{yt=C(Q()),Fo=C(xe()),Wd=require("lmdb"),Me=require("path"),Er=require("fs"),Go=C(we());cd();Ui=C(Fu()),qT=C(Gu()),Zt=C(A()),kv=C(require("fs-extra")),GT=require("../../index"),Vv=C(Ht()),Qd=C(Gs()),zd=C(qr()),eu=require("worker_threads"),Le=C(x()),$v=C(dt());Yc();xT="data",Xd=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,GT._assignPackageExport)("databases",ve);(0,GT._assignPackageExport)("tables",nr);qo=Symbol.for("next-table-id"),kT=[],vn=new Map;a(H7,"getTables");a(xr,"getDatabases");a(F7,"resetDatabases");a(jc,"readMetaDb");a(Yv,"ensureDB");a(Kv,"setTable");a(Fa,"database");a(kh,"dropDatabase");a(st,"table");q7=1e3,G7=10;a(x7,"runIndexing");a(k7,"dropTableMeta");a(cT,"onUpdatedTable")});var V=m((j_e,oB)=>{"use strict";var Bn=require("path"),Xv=require("fs-extra"),jt=x(),Wv=require("fs-extra"),Zd=require("os"),V7=require("net"),$7=require("recursive-iterator"),Ge=A(),Y7=UR(),Qv=require("papaparse"),jd=require("moment"),{inspect:K7}=require("util"),zv=require("is-number"),Z_e=require("lodash"),W7=require("minimist"),Q7=require("https"),z7=require("http"),{hdb_errors:eE}=W(),J7=/^((\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)))$/,Zv=require("util").promisify(setTimeout),X7=100,Z7=5,j7="",eee=4,Jv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};oB.exports={isEmpty:fr,isEmptyOrZeroLength:Os,arrayHasEmptyValues:see,arrayHasEmptyOrZeroLengthValues:nee,buildFolderPath:iee,isBoolean:jv,errorizeMessage:tee,stripFileExtension:aee,autoCast:cee,autoCastJSON:eB,autoCastJSONDeep:$T,removeDir:uee,compareVersions:lee,isCompatibleDataVersion:_ee,escapeRawValue:dee,unescapeValue:Eee,stringifyProps:fee,timeoutPromise:mee,isClusterOperation:pee,getClusterUser:Ree,checkGlobalSchemaTable:Tee,getHomeDir:rB,getPropsFilePath:hee,promisifyPapaParse:gee,removeBOM:sB,createEventPromise:Aee,checkProcessRunning:Oee,checkSchemaTableExist:Nee,checkSchemaExists:nB,checkTableExists:iB,getStartOfTomorrowInSeconds:bee,getLimitKey:yee,isObject:oee,isNotEmptyAndHasValue:ree,autoCasterIsNumberCheck:tB,backtickASTSchemaItems:Iee,isPortTaken:See,createForkArgs:wee,autoCastBoolean:Cee,async_set_timeout:Zv,getTableHashAttribute:Uee,doesSchemaExist:Dee,doesTableExist:Lee,stringifyObj:Mee,ms_to_time:Pee,changeExtension:vee,getEnvCliRootPath:YT,noBootFile:Bee,httpRequest:Hee,transformReq:Fee,convertToMS:qee,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function tee(e){return e instanceof Error?e:new Error(e)}a(tee,"errorizeMessage");function fr(e){return e==null}a(fr,"isEmpty");function ree(e){return!fr(e)&&(e||e===0||e===""||jv(e))}a(ree,"isNotEmptyAndHasValue");function Os(e){return fr(e)||e.length===0||e.size===0}a(Os,"isEmptyOrZeroLength");function see(e){if(fr(e))return!0;for(let t=0;t<e.length;t++)if(fr(e[t]))return!0;return!1}a(see,"arrayHasEmptyValues");function nee(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(nee,"arrayHasEmptyOrZeroLengthValues");function iee(...e){try{return e.join(Bn.sep)}catch{console.error(e)}}a(iee,"buildFolderPath");function jv(e){return fr(e)?!1:e===!0||e===!1}a(jv,"isBoolean");function oee(e){return fr(e)?!1:typeof e=="object"}a(oee,"isObject");function aee(e){return Os(e)?j7:e.slice(0,-eee)}a(aee,"stripFileExtension");function cee(e){return fr(e)||e===""||typeof e!="string"?e:Jv[e]!==void 0?Jv[e]:tB(e)===!0?Number(e):J7.test(e)?new Date(e):e}a(cee,"autoCast");function eB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(eB,"autoCastJSON");function $T(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=$T(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=$T(r);s!==r&&(e[t]=s)}return e}else return eB(e)}a($T,"autoCastJSONDeep");function tB(e){if(e.startsWith("0.")&&zv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zv(e))}a(tB,"autoCasterIsNumberCheck");async function uee(e){if(Os(e))throw new Error(`Directory path: ${e} does not exist`);try{await Wv.emptyDir(e),await Wv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(uee,"removeDir");function lee(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(lee,"compareVersions");function _ee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(_ee,"isCompatibleDataVersion");function dee(e){if(fr(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(dee,"escapeRawValue");function Eee(e){if(fr(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(Eee,"unescapeValue");function fee(e,t){if(fr(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+Zd.EOL}!Os(s)&&s[0]===";"?r+=" "+s+n+Zd.EOL:Os(s)||(r+=s+"="+n+Zd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(fee,"stringifyProps");function rB(){let e;try{e=Zd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(rB,"getHomeDir");function hee(){let e=Bn.join(rB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Xv.existsSync(e)||(e=Bn.join(__dirname,"../","hdb_boot_properties.file")),e}a(hee,"getPropsFilePath");function mee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(mee,"timeoutPromise");async function See(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=V7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(See,"isPortTaken");function pee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(pee,"isClusterOperation");function Tee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tee,"checkGlobalSchemaTable");function Ree(e,t){if(fr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(fr(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(Ree,"getClusterUser");function gee(){Qv.parsePromise=function(e,t,r){return new Promise(function(s,n){Qv.parse(e,{header:!0,transformHeader:sB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(gee,"promisifyPapaParse");function sB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(sB,"removeBOM");function Aee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${K7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(Aee,"createEventPromise");async function Oee(e){let t=!0,r=0;do await Zv(X7*r++),(await Y7.findPs(e)).length>0&&(t=!1);while(t&&r<Z7);if(t)throw new Error(`process ${e} was not started`)}a(Oee,"checkProcessRunning");function Nee(e,t){let r=nB(e);if(r)return r;let s=iB(e,t);if(s)return s}a(Nee,"checkSchemaTableExist");function nB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nB,"checkSchemaExists");function iB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iB,"checkTableExists");function bee(){let e=jd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=jd().utc().unix();return e-t}a(bee,"getStartOfTomorrowInSeconds");function yee(){return jd().utc().format("DD-MM-YYYY")}a(yee,"getLimitKey");function Iee(e){try{let t=new $7(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(Iee,"backtickASTSchemaItems");function wee(e){return[e]}a(wee,"createForkArgs");function Cee(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Cee,"autoCastBoolean");function Uee(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Uee,"getTableHashAttribute");function Dee(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Dee,"doesSchemaExist");function Lee(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(Lee,"doesTableExist");function Mee(e){try{return JSON.stringify(e)}catch{return e}}a(Mee,"stringifyObj");function Pee(e){let t=jd.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(Pee,"ms_to_time");function vee(e,t){let r=Bn.basename(e,Bn.extname(e));return Bn.join(Bn.dirname(e),r+t)}a(vee,"changeExtension");function YT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=W7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(YT,"getEnvCliRootPath");var VT;function Bee(){if(VT)return VT;let e=YT();YT()&&Xv.pathExistsSync(Bn.join(e,Ge.HDB_CONFIG_FILE))&&(VT=!0)}a(Bee,"noBootFile");function Hee(e,t){let r;return e.protocol==="http:"?r=z7:r=Q7,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(Hee,"httpRequest");function Fee(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Fee,"transformReq");function qee(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(qee,"convertToMS")});var dB=m((tde,_B)=>{"use strict";var hr=Q(),Gee=Na(),oe=A(),tu=Be(),rn=require("path"),{PACKAGE_ROOT:rE}=A(),aB=Q(),tE=V(),ko="/dev/null",xee=rn.join(rE,"launchServiceScripts"),cB=rn.join(rE,"utility/scripts"),kee=rn.join(cB,oe.HDB_RESTART_SCRIPT),uB=rn.resolve(rE,"dependencies",`${process.platform}-${process.arch}`,tu.NATS_BINARY_NAME);function lB(){let t=Gee.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 tE.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=tE.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:rE}}a(lB,"generateMainServerConfig");var Vee=9930;function $ee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=rn.join(e,"clustering",tu.NATS_CONFIG_FILES.HUB_SERVER),r=rn.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=aB.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=tu.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Vee?"-"+s:""),script:uB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ko,i.error_file=ko),i}a($ee,"generateNatsHubServerConfig");var Yee=9940;function Kee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=rn.join(e,"clustering",tu.NATS_CONFIG_FILES.LEAF_SERVER),r=rn.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=aB.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=tu.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Yee?"-"+s:""),script:uB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ko,i.error_file=ko),i}a(Kee,"generateNatsLeafServerConfig");function Wee(){hr.initSync();let e=rn.join(hr.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:xee,autorestart:!1};return hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ko,t.error_file=ko),t}a(Wee,"generateClusteringUpgradeV4ServiceConfig");function Qee(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return tE.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=tE.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:cB},script:kee}}a(Qee,"generateRestart");function zee(){return{apps:[lB()]}}a(zee,"generateAllServiceConfigs");_B.exports={generateAllServiceConfigs:zee,generateMainServerConfig:lB,generateRestart:Qee,generateNatsHubServerConfig:$ee,generateNatsLeafServerConfig:Kee,generateClusteringUpgradeV4ServiceConfig:Wee}});var HS=m((cde,yB)=>{"use strict";var Re=A(),Jee=V(),ru=CS(),su=nt(),Ns=Be(),Hn=dB(),sE=Q(),sn=x(),Xee=Vs(),{startWorker:EB,onMessageFromWorkers:Zee}=dt(),jee=Eo(),ete=require("util"),hB=require("child_process"),{execFile:tte}=hB,sde=ete.promisify(hB.exec),nde=require("systeminformation"),he;yB.exports={enterPM2Mode:rte,start:Di,stop:KT,reload:mB,restart:SB,list:WT,describe:TB,connect:nn,kill:ate,startAllServices:cte,startService:QT,getUniqueServicesList:RB,restartAllServices:ute,isServiceRegistered:gB,reloadStopStart:AB,restartHdb:pB,deleteProcess:ite,startClusteringProcesses:NB,startClusteringThreads:bB,isHdbRestartRunning:ote,isClusteringRunning:_te,stopClustering:lte,reloadClustering:dte};var{PACKAGE_ROOT:ide}=A(),ode=A(),{loggerWithTag:ade}=sn,nu=!1;Zee(e=>{e.type==="restart"&&sE.initSync(!0)});function rte(){nu=!0}a(rte,"enterPM2Mode");function nn(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{sn.setupConsoleLogging(),r&&t(r),e(s)})})}a(nn,"connect");var er,ste=10,fB;function Di(e){if(nu)return nte(e);let t=tte(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=er.indexOf(t);i>-1&&er.splice(i,1),!fB&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<ste&&Di(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=sE.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Ns.LOG_LEVEL_HIERARCHY[i]>=Ns.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ns.LOG_LEVELS.ERR||l===Ns.LOG_LEVELS.WRN?sn.OUTPUTS.STDERR:sn.OUTPUTS.STDOUT;sn.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Ns.LOG_LEVELS[d]}if(Ns.LOG_LEVEL_HIERARCHY[i]>=Ns.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Ns.LOG_LEVELS.ERR||l===Ns.LOG_LEVELS.WRN?sn.OUTPUTS.STDERR:sn.OUTPUTS.STDOUT;sn.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!er){er=[];let n=a(()=>{fB=!0,er&&(er.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)}er.push(t)}a(Di,"start");function nte(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(nte,"startWithPM2");function KT(e){if(!nu){for(let t of er||[])t.name===e&&(er.splice(er.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.stop(e,async(s,n)=>{s&&(he.disconnect(),r(s)),he.delete(e,(i,o)=>{i&&(he.disconnect(),r(s)),he.disconnect(),t(o)})})})}a(KT,"stop");function mB(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(mB,"reload");function SB(e){if(!nu)for(let t of er||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}a(SB,"restart");function ite(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(ite,"deleteProcess");async function pB(){await Di(Hn.generateRestart())}a(pB,"restartHdb");async function ote(){let e=await WT();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(ote,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await nn()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(WT,"list");function TB(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(TB,"describe");function ate(){if(!nu){for(let e of er||[])e.kill();er=[];return}return new Promise(async(e,t)=>{try{await nn()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(ate,"kill");async function cte(){try{await NB(),await bB(),await Di(Hn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}a(cte,"startAllServices");async function QT(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Hn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Hn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Hn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Hn.generateNatsHubServerConfig(),await Di(t),await ru.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Hn.generateNatsLeafServerConfig(),await Di(t),await ru.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Hn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Di(t)}catch(t){throw he.disconnect(),t}}a(QT,"startService");async function RB(){try{let e=await WT(),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 he.disconnect(),e}}a(RB,"getUniqueServicesList");async function ute(e=[]){try{let t=!1,r=await RB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await SB(o))}t&&await AB(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}a(ute,"restartAllServices");async function gB(e){if(er?.find(r=>r.name===e))return!0;let t=await jee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(gB,"isServiceRegistered");async function AB(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?sE.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):sE.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await TB(e),s=Jee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await pB():await mB(e)}a(AB,"reloadStopStart");var OB;async function NB(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await QT(t)}}a(NB,"startClusteringProcesses");async function bB(){OB=EB(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await su.createWorkQueueStream(Ns.WORK_QUEUE_CONSUMER_NAMES),await su.updateIngestStreamConsumer(),await su.updateLocalStreams();let e=await Xee.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){sn.info("Starting clustering upgrade 4.0.0 process"),EB(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bB,"startClusteringThreads");async function lte(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await OB.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await KT(t)}}a(lte,"stopClustering");async function _te(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await gB(t)===!1)return!1}return!0}a(_te,"isClusteringRunning");async function dte(){await ru.generateNatsConfig(!0),await su.reloadNATSHub(),await su.reloadNATSLeaf(),await ru.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ru.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(dte,"reloadClustering")});var zT=HS(),IB=A();a(async function(){try{let t=await zT.describe(IB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await zT.reload(r.pm_id);await zT.deleteProcess(IB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();