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
  `,L0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},M0=["*","%"],P0="unauthorized_access",v0="func_val",B0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},H0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},q0={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"},F0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},G0={HTTP:"http"},x0={STOPPED:"stopped",ONLINE:"online"},k0="3.x.x",V0={SUCCESS:"success",FAILURE:"failure"},$0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};mR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:oR,HDB_SUPPORT_URL:cR,HDB_PRICING_URL:fH,SUPPORT_HELP_MSG:hH,LICENSE_HELP_MSG:uR,HDB_PROC_NAME:nR,HDB_PROC_DESCRIPTOR:fE,CLUSTERING_LEAF_PROC_DESCRIPTOR:du,CLUSTERING_HUB_PROC_DESCRIPTOR:_u,SYSTEM_SCHEMA_NAME:PH,HASH_FOLDER_NAME:vH,HDB_HOME_DIR_NAME:BH,UPDATE_FILE_NAME:GH,LICENSE_KEY_DIR_NAME:qH,BOOT_PROPS_FILE_NAME:FH,JOB_TYPE_ENUM:m0,JOB_STATUS_ENUM:c0,SYSTEM_TABLE_NAMES:r0,SYSTEM_TABLE_HASH_ATTRIBUTES:s0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:u0,S3_BUCKET_AUTH_KEYS:l0,VALID_SQL_OPS_ENUM:_0,GEO_CONVERSION_ENUM:E0,HDB_SETTINGS_NAMES:dR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:f0,SERVICE_ACTIONS_ENUM:d0,CLUSTER_MESSAGE_TYPE_ENUM:S0,CLUSTER_CONNECTION_DIRECTION_ENUM:p0,CLUSTER_EVENTS_DEFS_ENUM:g0,PERIOD_REGEX:AH,DOUBLE_PERIOD_REGEX:OH,UNICODE_PERIOD:NH,FORWARD_SLASH_REGEX:bH,UNICODE_FORWARD_SLASH:yH,ESCAPED_FORWARD_SLASH_REGEX:IH,ESCAPED_PERIOD_REGEX:wH,ESCAPED_DOUBLE_PERIOD_REGEX:CH,REG_KEY_FILE_NAME:o0,RESTART_TIMEOUT_MS:VH,HDB_FILE_PERMISSIONS:$H,DATABASES_DIR_NAME:WH,LEGACY_DATABASES_DIR_NAME:QH,TRANSACTIONS_DIR_NAME:zH,LIMIT_COUNT_NAME:JH,ID_ATTRIBUTE_STRING:XH,INSERT_MODULE_ENUM:e0,UPGRADE_JSON_FIELD_NAMES_ENUM:t0,RESTART_CODE:xH,RESTART_CODE_NUM:kH,CLUSTER_OPERATIONS:Wo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:i0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:n0,CLUSTERING_MESSAGE_TYPES:C0,HDB_FILE_SUFFIX:HH,BLOB_FOLDER_NAME:YH,HDB_TRASH_DIR:KH,ORIGINATOR_SET_VALUE:U0,LICENSE_VALUES:T0,RAM_ALLOCATION_ENUM:R0,TIME_STAMP_NAMES_ENUM:fR,TIME_STAMP_NAMES:y0,PERMS_UPDATE_RELEASE_TIMESTAMP:I0,SEARCH_NOT_FOUND_MESSAGE:mH,SEARCH_ATTRIBUTE_NOT_FOUND:SH,LICENSE_ROLE_DENIED_RESPONSE:pH,LICENSE_MAX_CONNS_REACHED:TH,BASIC_LICENSE_MAX_NON_CU_ROLES:aR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:EH,VALUE_SEARCH_COMPARATORS:hR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:w0,LICENSE_FILE_NAME:a0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:A0,NEW_LINE:D0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:gH,MOMENT_DAYS_TAG:UH,API_TURNOVER_SEC:DH,LOOPBACK:RH,CODE_EXTENSION:lu,WILDCARD_SEARCH_VALUE:LH,NODE_ERROR_CODES:O0,JAVASCRIPT_EXTENSION:sR,PERMS_CRUD_ENUM:L0,UNAUTHORIZED_PERMISSION_NAME:P0,SEARCH_WILDCARDS:M0,FUNC_VAL:v0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:B0,JWT_ENUM:H0,CLUSTERING_FLAG:b0,ITC_EVENT_TYPES:q0,CUSTOM_FUNCTION_PROC_NAME:iR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:uu,SERVICES:F0,THREAD_TYPES:G0,MEM_SETTING_KEY:MH,HDB_RESTART_SCRIPT:ZB,PROCESS_DESCRIPTORS:nH,SERVICE_SERVERS:uH,SERVICE_SERVERS_CWD:EE,PROCESS_DESCRIPTORS_VALIDATE:aH,LAUNCH_SERVICE_SCRIPTS:lH,LOG_LEVELS:oH,PROCESS_NAME_ENV_PROP:ZH,LOG_NAMES:iH,PM2_PROCESS_STATUSES:x0,CONFIG_PARAM_MAP:ER,CONFIG_PARAMS:g,HDB_CONFIG_FILE:zB,HDB_DEFAULT_CONFIG_FILE:JB,ROLE_TYPES_ENUM:_H,BOOT_PROP_PARAMS:lR,INSTALL_PROMPTS:jH,HDB_ROOT_DIR_NAME:XB,CLUSTERING_PROCESSES:cH,FOREGROUND_PID_FILE:tH,PACKAGE_ROOT:un,PRE_4_0_0_VERSION:k0,SCHEMAS_PARAM_CONFIG:h0,METADATA_PROPERTY:N0,AUTH_AUDIT_STATUS:V0,AUTH_AUDIT_TYPES:$0,HDB_PID_FILE:rH,DEFAULT_DATABASE_NAME:sH};rR()});var hE=m((Mte,TR)=>{"use strict";var SR=require("minimist");TR.exports=Y0;function Y0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pR(process.env),s=pR(SR(process.argv))):(r=process.env,s=SR(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(Y0,"assignCMDENVVariables");function pR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(pR,"objKeysToLowerCase")});var x=m((vte,AE)=>{"use strict";var Gn=require("fs-extra"),{workerData:K0,threadId:W0}=require("worker_threads"),Us=require("path"),AR=require("yaml"),OR=require("properties-reader"),et=A(),RR=hE(),Q0=require("os"),{PACKAGE_ROOT:SE}=A(),{_assignPackageExport:z0}=require("../index"),zo={};for(let e in console)zo[e]||(zo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NR={STDOUT:"stdOut",STDERR:"stdErr"},J0=Us.join(SE,"logs"),X0=Us.join(SE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),Z0=1e4,ws,Cs,Lt,Eu,fu,Jo,vi,Qo;Qo===void 0&&bR();AE.exports={notify:wR,fatal:CR,error:Xo,warn:gE,info:hu,debug:RE,trace:TE,setLogLevel:iq,log_level:Lt,loggerWithTag:j0,suppressLogging:eq,initLogSettings:bR,setupConsoleLogging:yR,logCustomLevel:sq,closeLogFile:pE,getLogFilePath:()=>Jo,OUTPUTS:NR,AuthAuditLog:cq};z0("logger",AE.exports);function bR(e=!1){try{if(Qo===void 0||e){pE();let t=nq(),r=RR(["ROOTPATH"]);try{Qo=OR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Gn.pathExistsSync(Us.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:fu,to_file:ws,to_stream:Cs}=oq(r.ROOTPATH?Us.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Qo.get("settings_path"))),Eu=et.LOG_NAMES.HDB,Jo=Us.join(fu,Eu)}}catch(t){if(Qo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=RR(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){Cs=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(ws=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=aq();ws=ws===void 0?n:ws,ws=gR(ws),Cs=Cs===void 0?i:Cs,Cs=gR(Cs),Lt=Lt===void 0?s:Lt,fu=J0,Eu=et.LOG_NAMES.INSTALL,Jo=Us.join(fu,Eu);return}throw Xo("Error initializing log settings"),Xo(t),t}yR()}a(bR,"initLogSettings");var mE=!0;function yR(){Pi("error",Xo),Pi("warn",gE),Pi("log",hu),Pi("info",hu),Pi("debug",RE),Pi("trace",TE)}a(yR,"setupConsoleLogging");function Pi(e,t){console[e]=function(...r){if(mE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return zo[e](...r)}}a(Pi,"logConsole");function j0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wR),fatal:r(CR),error:r(Xo),warn:r(gE),info:r(hu),debug:r(RE),trace:r(TE)};function r(s){return function(...n){return s(t,...n)}}}a(j0,"loggerWithTag");function eq(e){try{mE=!1,e()}finally{mE=!0}}a(eq,"suppressLogging");var tq=K0?.name?.replace(/ /g,"-")||"main";function Ds(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||tq+"/"+W0);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(Ds,"createLogRecord");function Zo(e){ws&&IR(e),Cs&&process.stdout.write(e)}a(Zo,"logStdOut");function mu(e){ws&&IR(e),Cs&&process.stderr.write(e)}a(mu,"logStdErr");function IR(e){rq(),vi?Gn.appendFileSync(vi,e):zo.log(e)}a(IR,"logToFile");function pE(){try{Gn.closeSync(vi)}catch{}vi=null}a(pE,"closeLogFile");function rq(){if(!vi){try{if(!Jo)debugger;vi=Gn.openSync(Jo,"a")}catch(e){zo.error(e)}setTimeout(()=>{pE()},Z0).unref()}}a(rq,"openLogFile");function hu(...e){Mt[Lt]<=Mt.info&&Zo(Ds("info",e))}a(hu,"info");function TE(...e){Mt[Lt]<=Mt.trace&&Zo(Ds("trace",e))}a(TE,"trace");function Xo(...e){Mt[Lt]<=Mt.error&&mu(Ds("error",e))}a(Xo,"error");function RE(...e){Mt[Lt]<=Mt.debug&&Zo(Ds("debug",e))}a(RE,"debug");function wR(...e){Mt[Lt]<=Mt.notify&&Zo(Ds("notify",e))}a(wR,"notify");function CR(...e){Mt[Lt]<=Mt.fatal&&mu(Ds("fatal",e))}a(CR,"fatal");function gE(...e){Mt[Lt]<=Mt.warn&&mu(Ds("warn",e))}a(gE,"warn");function sq(e,t,...r){t===NR.STDERR?mu(Ds(e,r)):Zo(Ds(e,r))}a(sq,"logCustomLevel");function nq(){let e;try{e=Q0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Us.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return Gn.existsSync(t)||(t=Us.join(SE,"utility/hdb_boot_properties.file")),t}a(nq,"getPropsFilePath");function iq(e){Lt=e}a(iq,"setLogLevel");function gR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(gR,"autoCastBoolean");function oq(e){try{if(e.includes("config/settings.js")){let o=OR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Us.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=AR.parseDocument(Gn.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(oq,"getLogConfig");function aq(){try{let e=AR.parseDocument(Gn.readFileSync(X0,"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(aq,"getDefaultConfig");function cq(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(cq,"AuthAuditLog")});var DR=m((Hte,UR)=>{"use strict";var uq=require("util"),lq=require("path"),_q=require("child_process"),dq=uq.promisify(_q.execFile),Eq=1e3*1e3*10;UR.exports={findPs:fq};async function fq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await dq("ps",["wwxo",`pid,${r}`],{maxBuffer:Eq});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:lq.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(fq,"findPs")});var xe=m((Fte,MR)=>{"use strict";var hq="__dbis__",mq="__txns__",Sq="__environment_name__",pq="__dbi_defintion__",Tq={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"},Rq=["__createdtime__","__updatedtime__"],gq="\uFFFF",LR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Aq=Object.values(LR);MR.exports={AUDIT_STORE_NAME:mq,INTERNAL_DBIS_NAME:hq,DBI_DEFINITION_NAME:pq,SEARCH_TYPES:Tq,TIMESTAMP_NAMES:Rq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Sq,TRANSACTIONS_DBI_NAMES_ENUM:LR,TRANSACTIONS_DBIS:Aq,OVERFLOW_MARKER:gq}});var rr=m((Gte,kR)=>{"use strict";var PR=A(),vR=xe(),BR={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},HR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qR={500:HR("There was an error processing your request."),400:"Invalid request"},Oq=qR[BR.INTERNAL_SERVER_ERROR],Nq={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.`},bq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},yq={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"},Iq={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 ${vR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vR.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"},wq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${PR.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 ${PR.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"},Cq={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."},Uq={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`},Dq={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"},Lq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Mq={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`},GR={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.`},xR={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}`},Pq={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."},vq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Bq={...FR,...yq,...Nq,...Cq,...Uq,...Dq,...Lq,...Mq,...wq,...GR,...xR,...Pq,...vq,...bq};kR.exports={CHECK_LOGS_WRAPPER:HR,HDB_ERROR_MSGS:Bq,DEFAULT_ERROR_MSGS:qR,DEFAULT_ERROR_RESP:Oq,HTTP_STATUS_CODES:BR,LMDB_ERRORS_ENUM:Iq,AUTHENTICATION_ERROR_MSGS:FR,VALIDATION_ERROR_MSGS:GR,ITC_ERRORS:xR}});var W=m((kte,YR)=>{"use strict";var Bi=rr(),Hq=x(),qq=A(),Su=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,VR),this.statusCode=s||Bi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bi.DEFAULT_ERROR_MSGS[s]?Bi.DEFAULT_ERROR_MSGS[s]:Bi.DEFAULT_ERROR_MSGS[Bi.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&&Hq[n](i)}},OE=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}},NE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VR(e,t,r,s=qq.LOG_LEVELS.ERROR,n=null,i=!1){if($R(e))return e;let o=new Su(e,t,r,s,n);return i&&delete o.stack,o}a(VR,"handleHDBError");function $R(e){return e.__proto__.constructor.name===Su.name}a($R,"isHDBError");YR.exports={isHDBError:$R,handleHDBError:VR,ClientError:OE,ServerError:NE,hdb_errors:Bi}});var WR=m(($te,KR)=>{"use strict";var Fq={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))},Gq="certificate.pem",xq="privateKey.pem",kq="ca.pem";KR.exports={CERTIFICATE_VALUES:Fq,CERTIFICATE_PEM_NAME:Gq,PRIVATEKEY_PEM_NAME:xq,CA_PEM_NAME:kq}});var Pe=m((Yte,QR)=>{"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};QR.exports={validateObject:Vq,validateObjectAsync:$q,validateBySchema:Yq};function Vq(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(Vq,"validateObject");async function $q(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($q,"validateObjectAsync");function Yq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Yq,"validateBySchema")});var yE=m((Qte,eg)=>{"use strict";var ZR=require("fs-extra"),ee=require("joi"),Kq=require("os"),{boolean:pe,string:Ms,number:sr,array:bE}=ee.types(),{totalmem:zR}=require("os"),Hi=require("path"),Wq=x(),Tu=V(),Wte=WR(),JR=A(),Qq=Pe(),XR="log",zq="components",Jq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Xq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Zq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",eF="rootPath config parameter is undefined",tF="clustering.enabled config parameter is undefined",Ls=sr.min(0).required(),Ru=bE.items({host:Ms.required(),port:Ls}).empty(null),Ps;eg.exports={configValidator:rF,routesValidator:cF,route_constraints:Ru};function rF(e){if(Ps=e.rootPath,Tu.isEmpty(Ps))throw eF;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(aF),n=Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(pu),i=ee.custom(sF).messages({"any.custom":"{:#label} {:#error}"}),o=Ms.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(pu),u=ee.custom(nF).empty(null).default(pu),l=e.clustering?.enabled;if(Tu.isEmpty(l))throw tF;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Ls,routes:Ru}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Ls}).required()}).required(),network:ee.object({port:Ls}).required()}).required(),leafServer:ee.object({network:ee.object({port:Ls,routes:Ru}).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:Ms.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:bE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Ls,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:Ms.custom(oF).optional().empty(null),maxSize:Ms.custom(iF).optional().empty(null),path:Ms.optional().empty(null).default(pu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:bE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Ls,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Ls,securePort:Ls}).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(rF,"configValidator");function jR(e){return ZR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(jR,"doesPathExist");function sF(e,t){if(e===null)return;let r=jR(e);return r?t.message(r):e}a(sF,"validatePemFile");function nF(e,t){ee.assert(e,Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=jR(e);if(r)return t.message(r)}a(nF,"validatePath");function iF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Zq):e}a(iF,"validateRotationMaxSize");function oF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Xq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(jq):e}a(oF,"validateRotationInterval");function aF(e,t){let r=t.state.path.join("."),s=Kq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zR();return i=Math.round(Math.min(i,zR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Wq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(aF,"setDefaultThreads");function pu(e,t){if(!Tu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Tu.isEmpty(Ps))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Hi.join(Ps,zq);case"logging.root":return Hi.join(Ps,XR);case"clustering.leafServer.streams.path":return Hi.join(Ps,"clustering","leaf");case"storage.path":let s=Hi.join(Ps,JR.LEGACY_DATABASES_DIR_NAME);return ZR.existsSync(s)?s:Hi.join(Ps,JR.DATABASES_DIR_NAME);case"logging.rotation.path":return Hi.join(Ps,XR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(pu,"setDefaultRoot");function cF(e){let t=ee.object({routes:Ru});return Qq.validateBySchema({routes:e},t)}a(cF,"routesValidator")});var gu={};je(gu,{server:()=>tt});var tg,tt,Xr=Se(()=>{tg=require("../index"),tt={};(0,tg._assignPackageExport)("server",tt)});var Tr=m((Xte,_g)=>{"use strict";var pr=A(),lt=V(),rt=x(),{configValidator:uF,routesValidator:rg}=yE(),vt=require("fs-extra"),lF=require("yaml"),Pr=require("path"),_F=require("is-number"),ng=require("properties-reader"),dF=require("lodash"),{handleHDBError:EF}=W(),{HTTP_STATUS_CODES:fF,HDB_ERROR_MSGS:Au}=rr(),Jte=require("minimist"),{server:hF}=(Xr(),re(gu)),{SCHEMAS_PARAM_CONFIG:jo,CONFIG_PARAMS:ln,CONFIG_PARAM_MAP:vs}=pr,mF="Unable to get config value because config is uninitialized",SF="Config successfully initialized",pF="Error backing up config file",TF="Empty parameter sent to getConfigValue",ig=Pr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),RF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sg={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"},Ou,ft;_g.exports={createConfigFile:gF,getDefaultConfig:AF,getConfigValue:ag,initConfig:cg,flattenConfig:kn,updateConfigValue:ug,updateConfigObject:NF,getConfiguration:IF,setConfiguration:wF,readConfigFile:CE,getClusteringRoutes:CF,initOldConfig:lg,getConfigFromFile:UF,getConfigFilePath:xn,addConfig:DF,deleteConfigFromFile:LF};function gF(e){let t=_n(ig);Ou=kn(t.toJSON());let r;for(let o in e){let c=vs[o.toLowerCase()];if(c===ln.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=IE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&og(t,r),wE(t);let s=t.toJSON();ft=kn(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(gF,"createConfigFile");function og(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(jo.TABLES))for(let i in s[n][jo.TABLES])for(let o in s[n][jo.TABLES][i]){let c=s[n][jo.TABLES][i][o],u=[ln.SCHEMAS,n,jo.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=[ln.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(og,"setSchemasConfig");function AF(e){if(Ou===void 0){let r=_n(ig);Ou=kn(r.toJSON())}let t=vs[e.toLowerCase()];if(t!==void 0)return Ou[t.toLowerCase()]}a(AF,"getDefaultConfig");function ag(e){if(e==null){rt.error(TF);return}if(ft===void 0){rt.trace(mF);return}let t=vs[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(ag,"getConfigValue");function xn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,pr.HDB_CONFIG_FILE):ng(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(xn,"getConfigFilePath");function cg(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=xn(t),s;if(r.includes("config/settings.js"))try{lg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=_n(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}`)}OF(s,r),wE(s);let n=s.toJSON();if(hF.config=n,ft=kn(n),ft.logging_rotation_rotate)for(let i in sg)ft[i]&&rt.error(`Config ${sg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(SF)}}a(cg,"initConfig");function OF(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(OF,"checkForUpdatedConfig");function wE(e){let t=e.toJSON(),r=uF(t);if(r.error)throw Au.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(wE,"validateConfig");function NF(e,t){ft===void 0&&(ft={});let r=vs[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(NF,"updateConfigObject");function ug(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&cg();let o=ag(vs.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=_n(c),l;if(r===void 0&&e.toLowerCase()===ln.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=vs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=IE(E,t);u.setIn([...f],h)}else for(let E in r){let f=vs[E.toLowerCase()];if(f===ln.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=IE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&og(u,l),wE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&bF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=kn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ug,"updateConfigValue");function bF(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(pF),rt.error(r)}}a(bF,"backupConfigFile");var yF=["schemas"];function kn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!yF.includes(r)){let s=kn(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(kn,"flattenConfig");function IE(e,t){if(e===ln.CLUSTERING_NODENAME||e===ln.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(_F(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(IE,"castConfigValue");function IF(){let e=lt.getPropsFilePath(),t=xn(e);return _n(t).toJSON()}a(IF,"getConfiguration");async function wF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ug(void 0,void 0,n,!0),RF}catch(i){throw typeof i=="string"||i instanceof String?EF(i,i,fF.BAD_REQUEST,void 0,void 0,!0):i}}a(wF,"setConfiguration");function CE(){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=xn(e);return _n(t).toJSON()}a(CE,"readConfigFile");function _n(e){return lF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(_n,"parseYamlDoc");function CF(){let e=CE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=rg(t);if(r)throw Au.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=rg(s);if(n)throw Au.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 Au.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(CF,"getClusteringRoutes");function lg(e){let t=ng(e);ft={};for(let r in vs){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=vs[r].toLowerCase();n===ln.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(lg,"initOldConfig");function UF(e){let t=CE();return dF.get(t,e.replaceAll("_","."))}a(UF,"getConfigFromFile");async function DF(e,t){let r=_n(xn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(xn(),String(r))}a(DF,"addConfig");function LF(e){let t=xn(lt.getPropsFilePath()),r=_n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(LF,"deleteConfigFromFile")});var Q=m((jte,fg)=>{"use strict";var UE=require("fs-extra"),vr=require("path"),dg=require("os"),MF=require("properties-reader"),ea=x(),Vn=V(),te=A(),Nu=Tr(),PF="Error initializing environment manager",bu="BOOT_PROPS_FILE_PATH",Eg=!1,vF={[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},Bs={};fg.exports={BOOT_PROPS_FILE_PATH:bu,getHdbBasePath:BF,setHdbBasePath:HF,get:qF,initSync:GF,setProperty:Ee,initTestEnvironment:xF};function BF(){return Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(BF,"getHdbBasePath");function HF(e){Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(HF,"setHdbBasePath");function qF(e){let t=Nu.getConfigValue(e);return t===void 0?Bs[e]:t}a(qF,"get");function Ee(e,t){vF[e]&&(Bs[e]=t),Nu.updateConfigObject(e,t)}a(Ee,"setProperty");function FF(){let e;try{e=Vn.getPropsFilePath(),UE.accessSync(e,UE.constants.F_OK|UE.constants.R_OK),Eg=!0;let t=MF(e);return Bs[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Bs[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bs[bu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(FF,"doesPropFileExist");function GF(e=!1){try{(Eg||FF()||Vn.noBootFile())&&(Nu.initConfig(e),Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Nu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(PF),ea.error(t),console.error(t),process.exit(1)}}a(GF,"initSync");function xF(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");Bs[bu]=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,dg.userInfo()?dg.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,Vn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Vn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Vn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Vn.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,Vn.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 ${bu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(xF,"initTestEnvironment")});var we=m((tre,gg)=>{"use strict";var ia=A(),kF=V(),Bt=Q(),oa=require("path"),VF=require("minimist"),hg=require("fs-extra"),mg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:dn,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:yu}=ia,ra,sa,na;function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(dn.STORAGE_PATH)||oa.join(Bt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Sg,"getBaseSchemaPath");function pg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Rg(yu),sa}a(pg,"getSystemSchemaPath");function Tg(){if(na!==void 0)return na;if(Bt.getHdbBasePath()!==void 0)return na=Bt.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Bt.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(Tg,"getTransactionAuditStoreBasePath");function $F(e,t){let r=Bt.get(dn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(Tg(),e.toString())}a($F,"getTransactionAuditStorePath");function Rg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(Sg(),e)}a(Rg,"getSchemaPath");function YF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,VF(process.argv));let s=r[dn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!kF.isObject(s))throw o;i=s}for(let o of i){let c=o[yu];if(!c)continue;let u=Bt.get(dn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return mg.set(u,[yu,ta.TABLES,t,ta.PATH],l),Bt.setProperty(dn.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return mg.set(u,[yu,ta.PATH],_),Bt.setProperty(dn.SCHEMAS,u),_}}let n=r[dn.STORAGE_PATH.toUpperCase()];if(n){if(!hg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return hg.mkdirsSync(i),Bt.setProperty(dn.STORAGE_PATH,n),i}return pg()}a(YF,"initSystemSchemaPaths");function KF(){ra=void 0,sa=void 0,na=void 0}a(KF,"resetPaths");gg.exports={getBaseSchemaPath:Sg,getSystemSchemaPath:pg,getTransactionAuditStorePath:$F,getTransactionAuditStoreBasePath:Tg,getSchemaPath:Rg,initSystemSchemaPaths:YF,resetPaths:KF}});var Ht=m((ire,yg)=>{"use strict";var WF=rr().LMDB_ERRORS_ENUM,sre=require("lmdb"),QF=xe(),nre=require("buffer").Buffer,{OVERFLOW_MARKER:Ag,MAX_SEARCH_KEY_LENGTH:Iu}=QF,Og=["number","string","symbol","boolean","bigint"];function zF(e){if(e=e?.primaryStore||e,!e)throw new Error(WF.ENV_REQUIRED)}a(zF,"validateEnv");function JF(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(JF,"stringifyData");function XF(e){return e instanceof Date?e.valueOf():e}a(XF,"convertKeyValueToWrite");function ZF(e){if(e==null)return;if(Og.includes(typeof e))return e.length>Iu?[e.slice(0,Iu)+Ag]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Og.includes(typeof n))n.length>Iu?t.push(n.slice(0,Iu)+Ag):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(ZF,"getIndexedValues");var wu=0,Ng=0;function bg(){Ng=Date.now()-performance.now()}a(bg,"adjustStartTime");bg();var jF=6e4;setInterval(bg,jF).unref();function eG(){let e=performance.now()+Ng;return e>wu?(wu=e,e):(wu+=488e-6,wu)}a(eG,"getNextMonotonicTime");yg.exports={validateEnv:zF,stringifyData:JF,convertKeyValueToWrite:XF,getNextMonotonicTime:eG,getIndexedValues:ZF}});var Ig,Zr,DE,aa=Se(()=>{Ig=require("events"),Zr=class extends Ig.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new DE;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)}},DE=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 ca(e){return e[ht]||(e[ht]=Object.create(null))}function Mu(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=wg(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){ca(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,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(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 Cu.ClientError("Can not add a property to a sealed table schema");ca(this)[o]=c}),i("deleteProperty",function(o){ca(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 wg(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}},Mu(r,t)),new r(e)):new Uu(e);case Array:let s=new Lu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=wg(o,t?.elements)),s[n]=o}return s}}function Pu(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=Pu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ua(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=ua(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=ua(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Du(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[$n]||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(Du(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(Du(n))return!0}else return!0}else return!0}}return!1}var Cu,ht,Uu,$n,Lu,vu=Se(()=>{jr();Cu=C(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Mu,"assignTrackedAccessors");a(wg,"trackObject");Uu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Mu(Uu,{});a(Pu,"collapseData");a(ua,"deepFreeze");a(Du,"hasChanges");$n=Symbol.for("has-array-changes"),Lu=class extends Array{static{a(this,"TrackedArray")}[$n];constructor(t){super(t)}splice(...t){return this[$n]=!0,super.splice(...t)}push(...t){return this[$n]=!0,super.push(...t)}pop(){return this[$n]=!0,super.pop()}unshift(...t){return this[$n]=!0,super.unshift(...t)}shift(){return this[$n]=!0,super.shift()}};Lu.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 LE;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 Cg,Ug,LE,Yn=Se(()=>{Cg=C(Ht()),Ug=require("../index");jr();a(Ye,"transaction");(0,Ug._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()};LE=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,Cg.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 vE(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(rG[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]=ts.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 ME.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=BE(e);if(!p)throw new ME.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:Lg.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 BE(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 es(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return es(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()),es(r,n=>(0,ts.compareKeys)(n,s[0])>=0&&(0,ts.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)<=0);case"ne":return es(r,n=>(0,ts.compareKeys)(n,s)!==0);default:return}}function es(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Bu(e){if(!e)return;let t=new PE,r,s,n,i,o;for(;r=Dg.exec(e);){i=Dg.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=tG[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 ME,_t,ts,Lg,Dg,tG,rG,PE,Hu=Se(()=>{ME=C(W()),_t=C(xe()),ts=require("ordered-binary"),Lg=require("lmdb"),Dg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,tG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(vE,"idsForCondition");rG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(BE,"filterByType");a(es,"attributeComparator");a(Bu,"parseQuery");PE=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 FE={};je(FE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Hs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>qg,snake_case:()=>nG});function nG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Mg(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 qE(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[qg]=!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 qu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new qu(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 Hg.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 HE(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 Pg(e){if(typeof e=="string")return t=>HE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=HE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=HE(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 vg,Bg,Hg,Ae,ae,Hs,qg,ce,sG,mt,qu,qE,jr=Se(()=>{vg=require("crypto");aa();Bg=require("../index"),Hg=C(W());vu();Yn();Hu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Hs=Symbol("is-collection"),qg=Symbol("save-updates"),ce=Symbol("stored-record"),sG={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=Pg(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[Hs]){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,vg.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=Pg(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[Hs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[Hs]}static coerceId(t){return t}static parseQuery(t){return Bu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&sG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Mg(t,this)}}return Mg(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[Hs]=!0),n}connect(t){let r=new Zr;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,Bg._assignPackageExport)("Resource",mt);a(nG,"snake_case");qu=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(Mg,"pathToId");qE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(HE,"selectFromObject");a(Pg,"transformForSelect")});var kE={};je(kE,{loadGQLSchema:()=>oG,start:()=>xE,startOnMainThread:()=>iG});function xE({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 q of P.arguments)q.name.value==="role"&&z.push(q.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,GE.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,GE.dirname)(s)+"/"+T.name,p.tableClass)}}}var GE,iG,oG,Fg=Se(()=>{GE=require("path");de();a(xE,"start");iG=xE,oG=xE({ensureTable:st}).handleFile});async function Fu(e){return aG?(la||(la=cG(lG)),(await(await la).import(e)).namespace):import(e)}async function cG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),la=new Compartment({console,Math,Date,fetch:uG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xg.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,Gg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function uG(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 lG(){return{Resource:mt,tables:nr}}var Gg,xg,aG,la,VE=Se(()=>{jr();de();Gg=require("fs/promises"),xg=require("path"),aG=!1;a(Fu,"secureImport");a(cG,"getCompartment");a(uG,"secureOnlyFetch");a(lG,"getGlobalVars")});var YE={};je(YE,{handleFile:()=>_G});async function _G(e,t,r,s){let n=new Map,i=(0,kg.pathToFileURL)(r).toString(),o=await Fu(i);u(o.default)&&s.set((0,$E.dirname)(t),o.default),c(o,(0,$E.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 kg,$E,Vg=Se(()=>{kg=require("url");VE();$E=require("path");a(_G,"handleFile")});var WE={};je(WE,{start:()=>dG});function dG({resources:e}){e.set("login",KE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var KE,$g=Se(()=>{jr();a(dG,"start");KE=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 zE=m((Mre,Wg)=>{"use strict";var{Readable:EG}=require("stream"),fG=1e4;Wg.exports={streamAsJSON(e){return new QE({value:e})}};var QE=class extends EG{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),Yg)}catch(n){yield Yg(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);Kg(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>fG?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 Kg(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 Yg(e){return console.error(e),JSON.stringify(e.toString())}a(Yg,"handleError");function Kg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Kg,"when")});var oA=m((Bre,iA)=>{"use strict";var JE=require("recursive-iterator"),hG=require("alasql"),XE=require("clone"),Qg=V(),{handleHDBError:zg,hdb_errors:mG}=W(),{HDB_ERROR_MSGS:Jg,HTTP_STATUS_CODES:Xg}=mG,{getDatabases:SG}=(de(),re(Ne)),pG=["DISTINCT_ARRAY"],Zg=Symbol("validateTables"),ZE=Symbol("validateTable"),vre=Symbol("getAllColumns"),jg=Symbol("validateAllColumns"),Gu=Symbol("findColumn"),eA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),jE=Symbol("validateColumn"),tA=Symbol("setColumnsForTable"),rA=Symbol("checkColumnsForAsterisk"),sA=Symbol("validateGroupBy"),nA=Symbol("hasColumns"),ef=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Zg](),this[rA](),this[jg]()}[Zg](){if(this[nA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ZE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ZE](t.table)})}}[nA](){let t=!1,r=new JE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ZE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=SG();if(!r[t.databaseid])throw zg(new Error,Jg.SCHEMA_NOT_FOUND(t.databaseid),Xg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zg(new Error,Jg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Xg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=XE(n);i.table=XE(t),this.attributes.push(i)})}[Gu](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)}[rA](){let t=new JE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tA](r.tableid)}[tA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new hG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jg](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[sA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new JE(t),n=[];for(let{node:i,path:o}of s)!Qg.isEmpty(i)&&!Qg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eA](i):n.push(this[jE](i)));return n}[sA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&pG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=XE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gu](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[Gu](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`}[eA](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[jE](t)}[jE](t){let r=this[Gu](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]}};iA.exports=ef});var cA=m((qre,aA)=>{"use strict";var tf=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")}};aA.exports=tf});var lA=m((Gre,uA)=>{"use strict";var rf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uA.exports=rf});var xu=m((kre,_A)=>{"use strict";var nf=Q(),of=A();nf.initSync();var TG=nf.get(of.CONFIG_PARAMS.STORAGE_COMPRESSION),RG=nf.get(of.CONFIG_PARAMS.STORAGE_CACHING)!==!1,gG=of.UPDATES_PROPERTY,sf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=TG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=RG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===gG)}};_A.exports=sf});var Vu=m(($re,EA)=>{"use strict";var qi=Q(),da=A();qi.initSync();var AG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),OG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ku=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=AG,this.noFSAccess=!0,dA!==void 0&&(this.overlappingSync=dA),this.noReadAhead=OG}};EA.exports=ku;ku.MAX_DBS=1e4});var ye=m((Kre,OA)=>{"use strict";var cf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),$u=Ht(),mA=x(),qt=rr().LMDB_ERRORS_ENUM,Yu=lA(),uf=xu(),SA=Vu(),En=xe(),fA=A(),{table:NG,resetDatabases:bG}=(de(),re(Ne)),hA=Q(),Hr=En.INTERNAL_DBIS_NAME,pA=En.DBI_DEFINITION_NAME,yG="data.mdb",IG="lock.mdb",Ea=".mdb",wG="-lock",af=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[En.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[En.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new cf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ku(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(Ku,"pathEnvNameValidation");async function lf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+Ea);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,yG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(lf,"validateEnvironmentPath");function Wu(e,t){if($u.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Wu,"validateEnvDBIName");async function CG(e,t,r=!1,s=!1){Ku(e,t);let n=ir.basename(e);t=t.toString();let i=hA.get(fA.CONFIG_PARAMS.SCHEMAS);i||hA.setProperty(fA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await lf(e,t,s),TA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new SA(s?c:c+Ea,!1),l=cf.open(u);l.dbis=Object.create(null);let _=new uf(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=_f(e,t,r);return l[En.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(CG,"createEnvironment");async function UG(e,t,r,s=!0){Ku(e,t),t=t.toString();let n=ir.join(e,t);return NG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(UG,"copyEnvironment");async function TA(e,t,r=!1){Ku(e,t),t=t.toString();let s=_f(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 lf(e,t),i=ir.join(e,t+Ea),o=n!=i,c=new SA(n,o),u=cf.open(c);u.dbis=Object.create(null);let l=gA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[En.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(TA,"openEnvironment");async function DG(e,t,r=!1){Ku(e,t),t=t.toString();let s=ir.join(e,t+Ea),n=await lf(e,t);if(global.lmdb_map!==void 0){let i=_f(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+wG:ir.join(ir.dirname(n),IG))}a(DG,"deleteEnvironment");async function RA(e){$u.validateEnv(e);let t=e[En.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RA,"closeEnvironment");function _f(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(_f,"getCachedEnvironmentName");function LG(e){$u.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 Yu,n)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(LG,"listDBIDefinitions");function gA(e){$u.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(gA,"listDBIs");function MG(e,t){let s=Ar(e,Hr).getEntry(t),n=new Yu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(MG,"getDBIDefinition");function AA(e,t,r,s=!r){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new uf(r,s===!0),o=e.openDB(t,i),c=new Yu(r===!0,s);return o[pA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(AA,"createDBI");function Ar(e,t){if(Wu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=MG(e,t):r=new Yu,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new uf(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(qt.DBI_DOES_NOT_EXIST):n}return s[pA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function PG(e,t){Wu(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[En.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(PG,"statDBI");async function vG(e,t){try{let r=ir.join(e,t+Ea);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(vG,"environmentDataSize");function BG(e,t){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(BG,"dropDBI");function HG(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===qt.DBI_DOES_NOT_EXIST)AA(e,i,i!==t,i===t),s=!0;else throw o}}s&&bG()}a(HG,"initializeDBIs");OA.exports={openDBI:Ar,openEnvironment:TA,createEnvironment:CG,listDBIs:gA,listDBIDefinitions:LG,createDBI:AA,dropDBI:BG,statDBI:PG,deleteEnvironment:DG,initializeDBIs:HG,TransactionCursor:af,environmentDataSize:vG,copyEnvironment:UG,closeEnvironment:RA}});var bA=m((Qre,NA)=>{"use strict";var df=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};NA.exports=df});var IA=m((Jre,yA)=>{"use strict";var Ef=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}};yA.exports=Ef});var CA=m((Zre,wA)=>{"use strict";var ff=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wA.exports=ff});var Fi=m((sse,LA)=>{"use strict";var qG=ye(),FG=bA(),GG=IA(),xG=CA(),rs=Ht(),fa=rr().LMDB_ERRORS_ENUM,kG=xe(),qs=A(),VG=V(),$G=require("uuid"),ese=require("lmdb"),{handleHDBError:YG,hdb_errors:KG}=W(),{OVERFLOW_MARKER:tse,MAX_SEARCH_KEY_LENGTH:rse}=kG,UA=Q();UA.initSync();var Qu=UA.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hf=qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kn=qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WG(e,t,r,s,n=rs.getNextMonotonicTime()){Tf(e,t,r,s),mf(e,t,r);let i=new FG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];DA(l,!0,n);let _=QG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Sf(o,c,s,i,n)}a(WG,"insertRecords");function QG(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][qs.FUNC_VAL],s[o]=c)}let u=rs.getIndexedValues(c),l=e.dbis[o];if(u){Qu&&l.prefetch(u.map(_=>({key:_,value:n})),zu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Qu&&e.dbis[t].prefetch([n],zu),e.dbis[t].put(n,s,s[Kn])})}a(QG,"insertRecord");function zG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(zG,"removeSkippedRecords");function DA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Kn]))&&(e[Kn]=r||(r=rs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[hf]))&&(e[hf]=r||rs.getNextMonotonicTime()):delete e[hf]}a(DA,"setTimestamps");function mf(e,t,r){r.indexOf(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),qG.initializeDBIs(e,t,r)}a(mf,"initializeTransaction");async function JG(e,t,r,s,n=rs.getNextMonotonicTime()){Tf(e,t,r,s),mf(e,t,r);let i=new GG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=pf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Sf(c,u,s,i,n,o)}a(JG,"updateRecords");async function XG(e,t,r,s,n=rs.getNextMonotonicTime()){try{Tf(e,t,r,s)}catch(u){throw YG(u,u.message,KG.HTTP_STATUS_CODES.BAD_REQUEST)}mf(e,t,r);let i=new xG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;VG.isEmpty(l[t])?(_=$G.v4(),l[t]=_):_=l[t];let d=pf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Sf(o,c,s,i,n)}a(XG,"upsertRecords");async function Sf(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||rs.getNextMonotonicTime(),zG(r,i),s}a(Sf,"finalizeWrite");function pf(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(DA(r,!_,o),Number.isInteger(r[Kn])&&l[Kn]>r[Kn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][qs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=rs.getIndexedValues(R);if(O){Qu&&p.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=rs.getIndexedValues(T),O){Qu&&p.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Kn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:pf(e,t,r,s,n,i,o))}a(pf,"updateUpsertRecord");function ZG(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ZG,"validateBasic");function Tf(e,t,r,s){if(ZG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(Tf,"validateWrite");function zu(){}a(zu,"noop");LA.exports={insertRecords:WG,updateRecords:JG,upsertRecords:XG}});var Wn=m((ise,jG)=>{jG.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 ss=m((ose,vA)=>{"use strict";var PA=V(),MA=A(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fs=require("joi"),fn={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ex=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()).required(),tx=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()),rx=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()).required();function sx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>fn.schema_length.maximum?`'${e}' maximum of 250 characters`:Gi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sx,"checkValidTable");function nx(e,t){return PA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(nx,"validateSchemaExists");function ix(e,t){let r=t.state.ancestors[0].schema;return PA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ix,"validateTableExists");function ox(e,t){return e.toLowerCase()===MA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${MA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ox,"validateSchemaName");vA.exports={common_validators:fn,schema_regex:Gi,hdb_schema_table:ex,validateSchemaExists:nx,validateTableExists:ix,validateSchemaName:ox,checkValidTable:sx,hdb_database:tx,hdb_table:rx}});var Ju=m((cse,BA)=>{var{common_validators:ns}=ss(),ma=Pe(),ha="is required",Ke={database:{presence:!1,format:ns.schema_format,length:ns.schema_length},schema:{presence:!1,format:ns.schema_format,length:ns.schema_length},table:{presence:!0,format:ns.schema_format,length:ns.schema_length},attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length},hash_attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length}};function Sa(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(Sa,"makeAttributesStrings");function ax(e){return e=Sa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(ax,"schema_object");function cx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(cx,"table_object");function ux(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,ma.validateObject(e,Ke)}a(ux,"create_table_object");function lx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence={message:ha},Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(lx,"attribute_object");function _x(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(_x,"describe_table");function dx(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(dx,"validateTableResidence");BA.exports={schema_object:ax,create_table_object:ux,table_object:cx,attribute_object:lx,describe_table:_x,validateTableResidence:dx}});var qA=m((lse,HA)=>{"use strict";var Ex=require("uuid"),Rf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ex.v4(),this.schema_table=`${this.schema}.${this.table}`}};HA.exports=Rf});var Xu=m((dse,FA)=>{"use strict";var fx=qA(),gf=class extends fx{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=gf});var xA=m((fse,GA)=>{"use strict";GA.exports=mx;var hx="inserted";function mx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===hx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(mx,"returnObject")});var Zu=m((mse,KA)=>{"use strict";var Sx=A(),Af=ye(),px=Fi(),{getSystemSchemaPath:Tx,getSchemaPath:Rx}=we(),gx=Wn(),Ax=Ju(),Ox=Xu(),Nx=xA(),{handleHDBError:kA,hdb_errors:$A}=W(),VA=V(),{HTTP_STATUS_CODES:bx}=$A,Of=gx.hdb_attribute,YA=[];for(let e=0;e<Of.attributes.length;e++)YA.push(Of.attributes[e].attribute);var yx="inserted";KA.exports=Ix;async function Ix(e){let t=Ax.attribute_object(e);if(t)throw kA(new Error,t.message,$A.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&VA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kA(new Error,r,bx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VA.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 Ox(e.schema,e.table,e.attribute,e.id);try{let i=await Af.openEnvironment(Rx(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}`);Af.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Af.openEnvironment(Tx(),Sx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await px.insertRecords(o,Of.hash_attribute,YA,[n]);return Nx(yx,c,{records:[n]},u)}catch(i){throw i}}a(Ix,"lmdbCreateAttribute")});var bf=m((pse,QA)=>{var{hdb_table:wx,hdb_database:WA}=ss(),Cx=Pe(),Nf=require("joi"),Ux={undefined:"undefined",null:"null"},Dx=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||Ux[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"),Lx=Nf.object({database:WA,schema:WA,table:wx,records:Nf.array().items(Nf.object().custom(Dx)).required()});QA.exports=function(e){return Cx.validateBySchema(e,Lx)}});var pa=m((gse,JA)=>{"use strict";var Gs=V(),zA=x(),Rse=bf(),{getDatabases:Mx}=(de(),re(Ne)),{ClientError:Qn}=W();JA.exports=Px;function Px(e){if(Gs.isEmpty(e))throw new Qn("invalid update parameters defined.");if(Gs.isEmptyOrZeroLength(e.schema))throw new Qn("invalid schema specified.");if(Gs.isEmptyOrZeroLength(e.table))throw new Qn("invalid table specified.");if(!Array.isArray(e.records))throw new Qn("records must be an array");let t=Mx()[e.schema]?.[e.table];if(Gs.isEmpty(t))throw new Qn(`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&&Gs.isEmptyOrZeroLength(o[r]))throw zA.error("a valid hash attribute must be provided with update record:",o),new Qn("a valid hash attribute must be provided with update record, check log for more info");if(!Gs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Gs.isEmpty(o[r])&&o[r]!==""&&s.has(Gs.autoCast(o[r]))&&(o.skip=!0),s.add(Gs.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(Px,"insertUpdateValidate")});var Ta=m((Ose,XA)=>{"use strict";var vx=A().OPERATIONS_ENUM,yf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=vx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};XA.exports=yf});var Oa=m((yse,ZA)=>{"use strict";var bse=Ta(),ju=A(),wf=V(),If=x(),Bx=require("uuid"),{handleHDBError:Ra,hdb_errors:Hx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Hx;ZA.exports=qx;function qx(e,t,r){for(let n=0;n<t.length;n++)Fx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Gx(i,r,e.operation)}}a(qx,"processRows");function Fx(e){if(Buffer.byteLength(String(e))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ra(new Error,ga.ATTR_NAME_LENGTH_ERR(e),Aa.BAD_REQUEST,void 0,void 0,!0);if(wf.isEmptyOrZeroLength(e)||wf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateAttribute");function Gx(e,t,r){if(!e.hasOwnProperty(t)||wf.isEmptyOrZeroLength(e[t])){if(r===ju.OPERATIONS_ENUM.INSERT||r===ju.OPERATIONS_ENUM.UPSERT){e[t]=Bx.v4();return}throw If.error("Update transaction aborted due to record with no hash value:",e),Ra(new Error,ga.RECORD_MISSING_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw If.error(e),Ra(new Error,ga.HASH_VAL_LENGTH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw If.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Gx,"validateHash")});var eO=m((wse,jA)=>{"use strict";var Cf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jA.exports=Cf});var sO=m((Use,rO)=>{"use strict";var Uf=ye(),xx=x(),tO=rr().LMDB_ERRORS_ENUM;rO.exports=kx;async function kx(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 Uf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==tO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Uf.closeEnvironment(global.lmdb_map[s]),await Uf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tO.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){xx.error(t)}}a(kx,"cleanLMDBMap")});var xs=m((Lse,aO)=>{"use strict";var Na=require("crypto"),Vx=Q(),{CONFIG_PARAMS:$x}=A(),iO="aes-256-cbc",Yx=32,Kx=16,Df=64,oO=32,Wx=Df+oO,nO=new Map;aO.exports={encrypt:Qx,decrypt:zx,createNatsTableStreamName:Jx};function Qx(e){let t=Na.randomBytes(Yx),r=Na.randomBytes(Kx),s=Na.createCipheriv(iO,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(Qx,"encrypt");function zx(e){let t=e.substr(0,Df),r=e.substr(Df,oO),s=e.substr(Wx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(iO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(zx,"decrypt");function Jx(e,t){let r=Vx.get($x.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=nO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),nO.set(r,s)),s}a(Jx,"createNatsTableStreamName")});var zn=m((vse,uO)=>{"use strict";var Pse=Or(),el=x(),cO=Ju(),Xx=xs(),tl=V(),{handleHDBError:rl,hdb_errors:Zx}=W(),{HDB_ERROR_MSGS:sl,HTTP_STATUS_CODES:Lf}=Zx,jx=Q();jx.initSync();var{getDatabases:Mf}=(de(),re(Ne));uO.exports={describeAll:ek,describeTable:nl,describeSchema:tk};async function ek(e){try{let t=tl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Mf(),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 nl({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 nl({schema:l,table:d},f)}E&&c.push(E)}catch(E){el.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 el.error("Got an error in describeAll"),el.error(t),rl(new Error,sl.DESCRIBE_ALL_ERR)}}a(ek,"describeAll");async function nl(e,t){tl.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=cO.describe_table(e);if(i)throw i;let c=Mf()[r];if(!c)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Lf.NOT_FOUND);let u=c[s];if(!u)throw rl(new Error,sl.TABLE_NOT_FOUND(e.schema,e.table),Lf.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=Xx.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){el.warn(`unable to stat table dbi due to ${d}`)}return _}a(nl,"descTable");async function tk(e){tl.transformReq(e);let t=cO.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=Mf()[s];if(!i)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Lf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),tl.isEmpty(u)||u.describe){let l=await nl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(tk,"describeSchema")});var ks=m((Fse,fO)=>{var rk=Wn(),{callbackify:_O,promisify:sk}=require("util"),{getDatabases:dO}=(de(),re(Ne));fO.exports={setSchemaDataToGlobal:lO,getTableSchema:nk,getSystemSchema:ik,setSchemaDataToGlobalAsync:sk(lO)};var EO=zn(),Hse=_O(EO.describeAll),qse=_O(EO.describeTable);function lO(e){global.hdb_schema=dO(),e&&e()}a(lO,"setSchemaDataToGlobal");function nk(e,t,r){let s=dO()[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(nk,"getTableSchema");function ik(){return rk}a(ik,"getSystemSchema")});var Nr=m((xse,pO)=>{"use strict";var ol=bf(),St=V(),ok=require("util"),al=qr(),ak=ks(),hO=x(),{handleHDBError:Jn,hdb_errors:ck}=W(),{HTTP_STATUS_CODES:Xn}=ck,uk=ok.promisify(ak.getTableSchema),lk="updated",mO="inserted",SO="upserted";pO.exports={insert:dk,update:Ek,upsert:fk,validation:_k,flush:hk};async function _k(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 uk(e.schema,e.table),r=ol(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 hO.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 hO.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(_k,"validation");async function dk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.createRecords(e);return il(mO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(dk,"insertData");async function Ek(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.updateRecords(e);return St.isEmpty(s.existing_rows)?il(lk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):il(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Ek,"updateData");async function fk(e){if(e.operation!=="upsert")throw Jn(new Error,"invalid operation, must be upsert",Xn.INTERNAL_SERVER_ERROR);let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.upsertRecords(e);return il(SO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(fk,"upsertData");function il(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===mO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(il,"returnObject");function hk(e){return St.transformReq(e),al.flush(e.schema,e.table)}a(hk,"flush")});var vf=m((Vse,gO)=>{var mk=Pe(),Pf=require("joi"),{hdb_table:Sk,hdb_database:TO}=ss(),RO={schema:TO,database:TO,table:Sk},pk={date:Pf.date().iso().required()},Tk={timestamp:Pf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};gO.exports=function(e,t){let r=t==="timestamp"?{...RO,...Tk}:{...RO,...pk},s=Pf.object(r);return mk.validateBySchema(e,s)}});var NO=m(($se,OO)=>{var Rk=Pe(),Bf=require("joi"),{hdb_table:gk,hdb_database:AO}=ss(),Ak=Bf.object({schema:AO,database:AO,table:gk,hash_values:Bf.array().required(),ids:Bf.array()});OO.exports=function(e){return Rk.validateBySchema(e,Ak)}});var yO=m((Yse,bO)=>{"use strict";var Hf=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}},qf=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}},Ff=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bO.exports={InsertObject:Hf,NoSQLSeachObject:qf,DeleteResponseObject:Ff}});var ei=m((Wse,DO)=>{"use strict";var wO=vf(),Ok=NO(),Zn=V(),IO=require("moment"),CO=x(),{promisify:Nk,callbackify:bk}=require("util"),jn=A(),yk=ks(),Gf=Nk(yk.getTableSchema),xf=qr(),{DeleteResponseObject:Ik}=yO(),{handleHDBError:hn,hdb_errors:wk}=W(),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:mn}=wk,Ck="records successfully deleted",Uk=bk(UO);DO.exports={delete:Uk,deleteRecord:UO,deleteFilesBefore:Dk,deleteAuditLogsBefore:Lk};async function Dk(e){let t=wO(e,"date");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Zn.transformReq(e),!IO(e.date,IO.ISO_8601).isValid())throw hn(new Error,cl.INVALID_DATE,mn.BAD_REQUEST,jn.LOG_LEVELS.ERROR,cl.INVALID_DATE,!0);let s=Zn.checkSchemaTableExist(e.schema,e.table);if(s)throw hn(new Error,s,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,s,!0);let n=await xf.deleteRecordsBefore(e);if(await Gf(e.schema,e.table),CO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Dk,"deleteFilesBefore");async function Lk(e){let t=wO(e,"timestamp");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Zn.transformReq(e),isNaN(e.timestamp))throw hn(new Error,cl.INVALID_VALUE("Timestamp"),mn.BAD_REQUEST,jn.LOG_LEVELS.ERROR,cl.INVALID_VALUE("Timestamp"),!0);let r=Zn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,r,!0);let s=await xf.deleteAuditLogsBefore(e);return await Gf(e.schema,e.table),CO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Lk,"deleteAuditLogsBefore");async function UO(e){e.ids&&(e.hash_values=e.ids);let t=Ok(e);if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);Zn.transformReq(e);let r=Zn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,r,!0);try{await Gf(e.schema,e.table);let s=await xf.deleteRecords(e);return Zn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ck}`),s}catch(s){if(s.message===jn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ik;return n.message=jn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UO,"deleteRecord")});var ul=m((zse,PO)=>{var Mk=require("crypto"),LO=9;function Pk(e){let t=Bk(LO),r=MO(e+t);return t+r}a(Pk,"createHash");function vk(e,t){let r=e.substr(0,LO),s=r+MO(t+r);return e===s}a(vk,"validateHash");function Bk(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(Bk,"generateSalt");function MO(e){return Mk.createHash("md5").update(e).digest("hex")}a(MO,"md5");PO.exports={hash:Pk,validate:vk}});var BO=m((Xse,vO)=>{var kf=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 Hk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,kf.validateObject(e,It)}a(Hk,"addUserValidation");function qk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,kf.validateObject(e,It)}a(qk,"alterUserValidation");function Fk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,kf.validateObject(e,It)}a(Fk,"dropUserValidation");vO.exports={addUserValidation:Hk,alterUserValidation:qk,dropUserValidation:Fk}});var Be=m((ene,qO)=>{"use strict";var{platform:jse}=require("os"),Gk="nats-server.zip",Vf="nats-server",xk=process.platform==="win32"?`${Vf}.exe`:Vf,$f="HDB",kk=/^[^\s.,*>]+$/,HO="__request__",Vk=a(e=>`${e}.${HO}`,"REQUEST_SUBJECT"),$k={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Yk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Kk={HUB:"hub.pid",LEAF:"leaf.pid"},Wk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Qk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:$f,deliver_subject:"__HDB__.WORKQUEUE"},zk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:$f,deliver_subject:"HDB.SCHEMAQUEUE"},Jk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:$f,deliver_subject:"HDB.USERQUEUE"},Xk={SUCCESS:"success",ERROR:"error"},Zk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},jk={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eV={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},tV={debug:"-D",trace:"-DVV"};qO.exports={NATS_SERVER_ZIP:Gk,NATS_SERVER_NAME:Vf,NATS_BINARY_NAME:xk,PID_FILES:Kk,NATS_CONFIG_FILES:Yk,SERVER_SUFFIX:Wk,WORK_QUEUE_CONSUMER_NAMES:Qk,SCHEMA_QUEUE_CONSUMER_NAMES:zk,USER_QUEUE_CONSUMER_NAMES:Jk,NATS_TERM_CONSTRAINTS_RX:kk,REQUEST_SUFFIX:HO,UPDATE_REMOTE_RESPONSE_STATUSES:Xk,CLUSTER_STATUS_STATUSES:Zk,REQUEST_SUBJECT:Vk,SUBJECT_PREFIXES:jk,MSG_HEADERS:$k,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:tV,LOG_LEVEL_HIERARCHY:eV}});var GO=m((rne,FO)=>{"use strict";var ll=A(),_l=class{static{a(this,"BaseLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Yf=class extends _l{static{a(this,"ExtendedLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:_l,ExtendedLicense:Yf}});var ba=m((nne,KO)=>{"use strict";var Vi=require("fs-extra"),xO=ul(),kO=require("crypto"),rV=require("moment"),sV=require("uuid").v4,wt=x(),Wf=require("path"),nV=V(),Sn=A(),iV=GO().ExtendedLicense,ki="invalid license key format",oV="061183",aV="mofi25",cV="aes-256-cbc",uV=16,lV=32,VO=Q();VO.initSync();var Kf;KO.exports={validateLicense:$O,generateFingerPrint:dV,licenseSearch:YO,getLicense:hV};function Qf(){return Wf.join(VO.getHdbBasePath(),Sn.LICENSE_KEY_DIR_NAME,Sn.LICENSE_FILE_NAME)}a(Qf,"getLicenseDirPath");function _V(){let e=Qf();return Wf.join(e,Sn.LICENSE_FILE_NAME)}a(_V,"getLicenseFilePath");function zf(){let e=Qf();return Wf.join(e,Sn.REG_KEY_FILE_NAME)}a(zf,"getFingerPrintFilePath");async function dV(){let e=zf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await EV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(dV,"generateFingerPrint");async function EV(){let e=sV(),t=xO.hash(e),r=zf();try{await Vi.mkdirp(Qf()),await Vi.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(EV,"writeFingerprint");function $O(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Sn.RAM_ALLOCATION_ENUM.DEFAULT,version:Sn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=zf(),n=!1;try{n=Vi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=Vi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(aV),c=o[1];c=Buffer.concat([Buffer.from(c)],uV);let u=Buffer.concat([Buffer.from(i)],lV),l=kO.createDecipheriv(cV,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=fV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ki),wt.error(ki),new Error(ki)}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(ki),wt.error(ki),new Error(ki)}else r.exp_date=_;r.exp_date<rV().valueOf()&&(r.valid_date=!1),xO.validate(o[1],`${oV}${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($O,"validateLicense");function fV(e,t){try{let r=kO.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(fV,"checkOldLicense");function YO(){let e=new iV,t=[];try{t=Vi.readFileSync(_V(),"utf-8").split(Sn.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(nV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$O(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=Sn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Kf=e,e}a(YO,"licenseSearch");async function hV(){return Kf||await YO(),Kf}a(hV,"getLicense")});var br=m((une,cN)=>{"use strict";var XO="username is required",ZO="nothing to update, must supply active, role or password to update",jO="password cannot be an empty string",eN="If role is specified, it cannot be empty.",tN="active must be true or false";cN.exports={addUser:NV,alterUser:bV,dropUser:IV,getSuperUser:DV,userInfo:wV,listUsers:El,listUsersExternal:CV,setUsersToGlobal:Yi,findAndValidateUser:aN,getClusterUser:LV,USERNAME_REQUIRED:XO,ALTERUSER_NOTHING_TO_UPDATE:ZO,EMPTY_PASSWORD:jO,EMPTY_ROLE:eN,ACTIVE_BOOLEAN:tN};var rN=Nr(),mV=ei(),Xf=ul(),sN=BO(),nN=Or(),Zf=Vs(),or=V(),iN=require("validate.js"),ue=x(),{promisify:SV}=require("util"),jf=xs(),WO=A(),QO=Be(),pV=Tr(),one=Q(),ane=ba(),TV=Wn(),{table:cne}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:RV}=W(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:Jf,HDB_ERROR_MSGS:$i}=RV,{UserEventMsg:eh}=Fr(),zO=require("lodash"),{_assignPackageExport:gV}=require("../index");gV("getUser",aN);var oN={username:!0,active:!0,role:!0,password:!0},JO=new Map,dl=nN.searchByValue,AV=nN.searchByHash,OV=SV(mV.delete);async function NV(e){let t=iN.cleanAttributes(e,oN),r=sN.addUserValidation(t);if(r)throw is(new Error,r.message,os.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 dl(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 is(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,$i.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=jf.encrypt(t.password)),t.password=Xf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Yi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,$i.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Zf.signalUserChange(new eh(process.pid)),`${c.username} successfully added`}a(NV,"addUser");async function bV(e){let t=iN.cleanAttributes(e,oN);if(or.isEmptyOrZeroLength(t.username))throw new Error(XO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(ZO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(jO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(tN);let r=yV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jf.encrypt(t.password)),t.password=Xf.hash(t.password)),t.role==="")throw new Error(eN);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 dl(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=$i.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.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 rN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Yi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Zf.signalUserChange(new eh(process.pid)),n}a(bV,"alterUser");function yV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yV,"isClusterUser");async function IV(e){try{let t=sN.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 is(new Error,$i.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await OV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Yi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Zf.signalUserChange(new eh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(IV,"dropUser");async function wV(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 AV(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(wV,"userInfo");async function CV(){let e;try{e=await El()}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(CV,"listUsersExternal");async function El(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dl(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]=zO.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 dl(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=zO.cloneDeep(o),o.role=r[o.role],UV(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(El,"listUsers");function UV(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(TV)){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(UV,"appendSystemTablesToRole");async function Yi(){try{let e=await El();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function aN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw is(new Error,Jf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,Jf.USER_INACTIVE,os.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(JO.get(t)===s.password)return n;if(Xf.validate(s.password,t))JO.set(t,s.password);else throw is(new Error,Jf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aN,"findAndValidateUser");async function DV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(DV,"getSuperUser");async function LV(){let e=await El(),t=pV.getConfigFromFile(WO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===WO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QO.SERVER_SUFFIX.ADMIN,r}a(LV,"getClusterUser")});var Ia=m((Ene,dN)=>{"use strict";var ti=x(),ar=A(),MV=sO(),_ne=ks(),dne=zn(),PV=br(),{validateEvent:uN}=Fr(),ya=qr(),vV=require("process"),{resetDatabases:BV}=(de(),re(Ne)),HV={[ar.ITC_EVENT_TYPES.SCHEMA]:qV,[ar.ITC_EVENT_TYPES.USER]:_N};async function qV(e){let t=uN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await MV(e.message),await FV(e.message)}a(qV,"schemaHandler");async function FV(e){try{ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=BV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(FV,"syncSchemaMetadata");var lN=[];async function _N(e){try{try{ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=uN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${vV.pid} received user event:`,e),await PV.setUsersToGlobal();for(let r of lN)r()}catch(t){ti.error(t)}}a(_N,"userHandler");_N.addListener=function(e){lN.push(e)};dN.exports=HV});var Fr=m((Tne,fN)=>{"use strict";var hne=x(),th=V(),GV=A(),{ITC_ERRORS:wa}=rr(),{parentPort:mne,threadId:xV,isMainThread:kV,workerData:Sne}=require("worker_threads"),{onMessageFromWorkers:VV,broadcast:pne,broadcastWithAcknowledgement:$V}=dt();fN.exports={sendItcEvent:YV,validateEvent:EN,SchemaEventMsg:KV,UserEventMsg:WV};var fl;VV(async(e,t)=>{fl=fl||Ia(),EN(e),fl[e.type]&&await fl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function YV(e){return!kV&&e.message&&(e.message.originator=xV),$V(e)}a(YV,"sendItcEvent");function EN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||th.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||th.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||th.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(GV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(EN,"validateEvent");function KV(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(KV,"SchemaEventMsg");function WV(e){this.originator=e}a(WV,"UserEventMsg")});var Vs=m((Ane,pN)=>{"use strict";var hN=A(),gne=V(),hl=x(),mN=eO(),Ki,{sendItcEvent:SN}=Fr();function QV(e){try{hl.trace("signalSchemaChange called with message:",e),Ki=Ki||Ia();let t=new mN(hN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),SN(t)}catch(t){hl.error(t)}}a(QV,"signalSchemaChange");function zV(e){try{hl.trace("signalUserChange called with message:",e),Ki=Ki||Ia();let t=new mN(hN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),SN(t)}catch(t){hl.error(t)}}a(zV,"signalUserChange");pN.exports={signalSchemaChange:QV,signalUserChange:zV}});var ml=m((Nne,RN)=>{"use strict";var TN=V(),JV=A(),XV=x(),ZV=Zu(),jV=Xu(),e$=Vs(),{SchemaEventMsg:t$}=Fr(),r$="already exists in";RN.exports=s$;async function s$(e,t,r){if(TN.isEmptyOrZeroLength(r))return r;let s=[];TN.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 n$(e,t.schema,t.name,i)})),n}a(s$,"lmdbCheckForNewAttributes");async function n$(e,t,r,s){let n=new jV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await i$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(r$))XV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(n$,"createNewAttribute");async function i$(e){let t;return t=await ZV(e),e$.signalSchemaChange(new t$(process.pid,JV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(i$,"createAttribute")});var Wi=m((yne,gN)=>{"use strict";var rh=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}};gN.exports=rh});var ON=m((wne,AN)=>{"use strict";var o$=Wi(),a$=A().OPERATIONS_ENUM,sh=class extends o${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(a$.INSERT,r,s,n,i),this.records=t}};AN.exports=sh});var bN=m((Une,NN)=>{"use strict";var c$=Wi(),u$=A().OPERATIONS_ENUM,nh=class extends c${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(u$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};NN.exports=nh});var IN=m((Lne,yN)=>{"use strict";var l$=Wi(),_$=A().OPERATIONS_ENUM,ih=class extends l${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=ih});var CN=m((Pne,wN)=>{"use strict";var d$=Wi(),E$=A().OPERATIONS_ENUM,oh=class extends d${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(E$.DELETE,s,n,t,i),this.original_records=r}};wN.exports=oh});var Ca=m((Hne,MN)=>{"use strict";var Bne=require("path"),UN=ye(),f$=ON(),h$=bN(),m$=IN(),S$=CN(),Qi=xe(),DN=V(),{CONFIG_PARAMS:p$}=A(),LN=Q();LN.initSync();var Sl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:T$}=we();MN.exports=R$;async function R$(e,t){if(LN.get(p$.LOGGING_AUDITLOG)===!1)return;let r=T$(e.schema,e.table),s=await UN.openEnvironment(r,e.table,!0),n=g$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){UN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),DN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(R$,"writeTransaction");function g$(e,t){let r=DN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Sl.INSERT)return new f$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPDATE)return new h$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPSERT)return new m$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.DELETE)return new S$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(g$,"createTransactionObject")});var ah=m((Gne,PN)=>{"use strict";var A$=pa(),Fne=Ta(),Ua=A(),O$=Oa(),N$=Fi().insertRecords,b$=ye(),y$=x(),I$=ml(),{getSchemaPath:w$}=we(),C$=Ca();PN.exports=U$;async function U$(e){try{let{schema_table:t,attributes:r}=A$(e);O$(e,r,t.hash_attribute),e.schema!==Ua.SYSTEM_SCHEMA_NAME&&(r.includes(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await I$(e.hdb_auth_header,t,r),n=w$(e.schema,e.table),i=await b$.openEnvironment(n,e.table),o=await N$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await C$(e,o)}catch(c){y$.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(U$,"lmdbCreateRecords")});var HN=m((kne,BN)=>{"use strict";var vN=A(),D$=ah(),L$=Ta(),M$=require("fs-extra"),{getSchemaPath:P$}=we();BN.exports=v$;async function v$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new L$(vN.SYSTEM_SCHEMA_NAME,vN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await D$(r),await M$.mkdirp(P$(e.schema))}a(v$,"lmdbCreateSchema")});var FN=m(($ne,qN)=>{"use strict";var ch=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}};qN.exports=ch});var VN=m((zne,kN)=>{"use strict";var GN=ye(),uh=Ht(),lh=rr().LMDB_ERRORS_ENUM,B$=xe(),xN=x(),Kne=V(),H$=require("lmdb"),q$=FN(),F$=A(),{OVERFLOW_MARKER:Wne,MAX_SEARCH_KEY_LENGTH:Qne}=B$,G$=F$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function x$(e,t,r,s){if(uh.validateEnv(e),t===void 0)throw new Error(lh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lh.IDS_REQUIRED):new Error(lh.IDS_MUST_BE_ITERABLE);try{let n=GN.listDBIs(e);GN.initializeDBIs(e,t,n);let i=new q$,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[G$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,H$.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 $=uh.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{xN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){xN.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=uh.getNextMonotonicTime(),i}catch(n){throw n}}a(x$,"deleteRecords");kN.exports={deleteRecords:x$}});var Da=m((Xne,YN)=>{"use strict";var zi=V(),k$=VN(),V$=ye(),{getSchemaPath:$$}=we(),Y$=Ca(),K$=x();YN.exports=W$;async function W$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return $N([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.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=$$(e.schema,e.table),i=await V$.openEnvironment(n,e.table),o=await k$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Y$(e,o)}catch(c){K$.error(`unable to write transaction due to ${c.message}`)}return $N(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(W$,"lmdbDeleteRecords");function $N(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($N,"createDeleteResponse")});var dh=m((eie,KN)=>{"use strict";var Q$=A(),jne=Ht();function _h(e,t){let r=Object.create(null);if(t.length===1&&Q$.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(_h,"parseRow");function z$(e,t,r,s){let n=_h(r,e);s.push(n)}a(z$,"searchAll");function J$(e,t,r,s){let n=_h(r,e);s[t]=n}a(J$,"searchAllToMap");function X$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(X$,"iterateDBI");function ri(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(ri,"pushResults");function Z$(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(Z$,"endsWith");function j$(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(j$,"contains");function eY(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(eY,"greaterThanCompare");function tY(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a(tY,"greaterThanEqualCompare");function rY(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(rY,"lessThanCompare");function sY(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(sY,"lessThanEqualCompare");KN.exports={parseRow:_h,searchAll:z$,searchAllToMap:J$,iterateDBI:X$,endsWith:Z$,contains:j$,greaterThanCompare:eY,greaterThanEqualCompare:tY,lessThanCompare:rY,lessThanEqualCompare:sY,pushResults:ri}});var Ji=m((iie,jN)=>{"use strict";var pn=ye(),rie=x(),cr=Ht(),pl=xe(),ke=rr().LMDB_ERRORS_ENUM,sie=V(),nY=A(),Tl=dh(),{parseRow:iY}=Tl,nie=require("lmdb"),{OVERFLOW_MARKER:WN,MAX_SEARCH_KEY_LENGTH:oY}=pl;function QN(e,t,r,s=!1,n=void 0,i=void 0){return si(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(QN,"iterateFullIndex");function La(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(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(La,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=pn.openDBI(n,r);i[pl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&pn.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(si,"setupTransaction");function zN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(WN)){if(!n)if(r)n=pn.openDBI(e,r);else{let u=pn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=pn.openDBI(e,u[l]),!n[pl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(zN,"getOverflowCheck");function aY(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 si(e,t,t,(o,c,u)=>(Rl(r),r=Ma(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>iY(l.value,r))))}a(aY,"searchAll");function cY(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);Rl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of QN(e,t,t,s,n,i))o.set(c,Tl.parseRow(u,r));return o}a(cY,"searchAllToMap");function uY(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=QN(e,void 0,t,r,s,n),c=o.transaction,u=zN(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(uY,"iterateDBI");function lY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return pn.statDBI(e,t).entryCount}a(lY,"countAll");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return Tn(e,r,s),si(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(_Y,"equals");function dY(e,t,r){return Tn(e,t,r),pn.openDBI(e,t).getValuesCount(r)}a(dY,"count");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){return Tn(e,r,s),si(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(EY,"startsWith");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){return JN(e,t,r,s,n,i,o,!0)}a(fY,"endsWith");function JN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Tn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=zN(_,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(WN)?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[pl.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(JN,"contains");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!0,!1)}a(hY,"greaterThan");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!1,!1)}a(mY,"greaterThanEqual");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!0)}a(SY,"lessThan");function pY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!1)}a(pY,"lessThanEqual");function TY(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 La(e,t,r,s,n,i,o,c)}a(TY,"between");function RY(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(Rl(r),r=Ma(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=Tl.parseRow(c,r)),o}a(RY,"searchByHash");function gY(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(gY,"checkHashExists");function AY(e,t,r,s,n=[]){return ZN(e,t,r,s,n),XN(e,t,r,s,n).map(i=>i[1])}a(AY,"batchSearchByHash");function OY(e,t,r,s,n=[]){ZN(e,t,r,s,n);let i=new Map;for(let[o,c]of XN(e,t,r,s,n))i.set(o,c);return i}a(OY,"batchSearchByHashToMap");function XN(e,t,r,s,n=[]){return si(e,t,t,(i,o,c)=>{r=Ma(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Tl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(XN,"batchHashSearch");function ZN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(ZN,"initializeBatchSearchByHash");function Rl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Rl,"validateFetchAttributes");function Tn(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>oY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(Tn,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&nY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=pn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");jN.exports={searchAll:aY,searchAllToMap:cY,count:dY,countAll:lY,equals:_Y,startsWith:EY,endsWith:fY,contains:JN,searchByHash:RY,setGetWholeRowAttributes:Ma,batchSearchByHash:AY,batchSearchByHashToMap:OY,checkHashExists:gY,iterateDBI:uY,greaterThan:hY,greaterThanEqual:mY,lessThan:SY,lessThanEqual:pY,between:TY}});var Xi=m((aie,nb)=>{var eb=require("lodash"),tb=Pe(),Ce=require("joi"),NY=V(),{hdb_schema_table:gl,checkValidTable:rb,hdb_table:sb,hdb_database:Al}=ss(),{handleHDBError:bY,hdb_errors:yY}=W(),{getDatabases:IY}=(de(),re(Ne)),{HTTP_STATUS_CODES:wY}=yY,CY=Ce.object({database:Al,schema:Al,table:sb,search_attribute:gl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(gl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),UY=Ce.object({database:Al,schema:Al,table:sb,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(gl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:gl,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()});nb.exports=function(e,t){let r=null;switch(t){case"value":r=tb.validateBySchema(e,CY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rb("database",e.schema)),i(rb("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=tb.validateBySchema(e,UY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=NY.checkGlobalSchemaTable(e.schema,e.table);if(n)return bY(new Error,n,wY.NOT_FOUND);let o=IY()[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=eb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!eb.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 Eh=m((uie,ib)=>{"use strict";var DY=ye(),LY=Xi(),{getSchemaPath:MY}=we();ib.exports=PY;function PY(e){let t=LY(e,"hashes");if(t)throw t;let r=MY(e.schema,e.table);return DY.openEnvironment(r,e.table)}a(PY,"initialize")});var fh=m((_ie,ob)=>{"use strict";var vY=Ji(),BY=Eh();ob.exports=HY;async function HY(e){let t=await BY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return vY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(HY,"lmdbGetDataByHash")});var Zi=m((Eie,ab)=>{"use strict";var hh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ab.exports=hh});var ub=m((mie,cb)=>{"use strict";var hie=Zi(),qY=Ji(),FY=Eh();cb.exports=GY;async function GY(e){let t=await FY(e),r=global.hdb_schema[e.schema][e.table];return qY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(GY,"lmdbSearchByHash")});var as=m((pie,lb)=>{"use strict";var mh=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=_}};lb.exports=mh});var Ol=m((Rie,mb)=>{"use strict";var Ct=Ji(),xY=ye(),kY=V(),ie=xe(),ni=A(),VY=Wn(),_b=rr().LMDB_ERRORS_ENUM,{getSchemaPath:$Y}=we(),$s=ni.SEARCH_WILDCARDS;async function YY(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=VY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hb(e,s.hash_attribute,r,t);return Eb(e,n,s.hash_attribute,r)}a(YY,"prepSearch");async function Eb(e,t,r,s){let n=$Y(e.schema,e.table),i=await xY.openEnvironment(n,e.table),o=fb(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(KY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?db(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?db(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(Eb,"executeSearch");function fb(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(fb,"searchByType");function db(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(db,"createMapFromIterable");function KY(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(KY,"checkToFetchMore");function hb(e,t,r,s){if(kY.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),$s.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf($s[0])<0&&n.indexOf($s[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($s.indexOf(i)>=0&&$s.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if($s.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if($s.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes($s[0])||n.includes($s[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(_b.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_b.UNKNOWN_SEARCH_TYPE)}}a(hb,"createSearchTypeFromSearchObject");mb.exports={executeSearch:Eb,createSearchTypeFromSearchObject:hb,prepSearch:YY,searchByType:fb}});var pb=m((Oie,Sb)=>{"use strict";var Aie=as(),WY=Xi(),QY=V(),zY=A(),JY=Ol();Sb.exports=XY;function XY(e,t){if(!QY.isEmpty(t)&&zY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=WY(e,"value");if(s)throw s;let n=!0;return JY.prepSearch(e,t,n)}a(XY,"lmdbGetDataByValue")});var Pa=m((yie,Tb)=>{"use strict";var bie=as(),ZY=Xi(),jY=V(),eK=A(),tK=Ol();Tb.exports=rK;async function rK(e,t){if(!jY.isEmpty(t)&&eK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZY(e,"value");if(s)throw s;return tK.prepSearch(e,t,!1)}a(rK,"lmdbSearchByValue")});var gb=m((Cie,Rb)=>{"use strict";var wie=xe(),Sh=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}},ph=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Th=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Rb.exports={SearchByConditionsObject:Sh,SearchCondition:ph,SortAttribute:Th}});var yb=m((Mie,bb)=>{"use strict";var Die=gb().SearchByConditionsObject,sK=as(),nK=Xi(),Rh=Ji(),Nl=xe(),{Resource:Lie}=(jr(),re(FE)),Nb=Ol(),iK=dh(),oK=require("lodash"),{getSchemaPath:aK}=we(),Ab=ye(),{handleHDBError:cK,hdb_errors:uK}=W(),{HTTP_STATUS_CODES:lK}=uK,_K=1e8;bb.exports=dK;async function dK(e){let t=nK(e,"conditions");if(t)throw cK(t,t.message,lK.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=aK(e.schema,e.table),s=await Ab.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Ab.openDBI(s,l.search_attribute);let i=oK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Nl.SEARCH_TYPES.EQUALS?l.estimated_count=Rh.count(s,l.search_attribute,l.search_value):_===Nl.SEARCH_TYPES.CONTAINS||_===Nl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=_K}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ob(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(Nb.filterByType),d=_.length,E=Rh.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=>iK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ob(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=Rh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(dK,"lmdbSearchByConditions");async function Ob(e,t,r,s){let n=new sK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Nl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nb.searchByType(e,n,i,s).map(o=>o.value)}a(Ob,"executeConditionSearch")});var va=m((vie,Ib)=>{"use strict";var EK=A().OPERATIONS_ENUM,gh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=EK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ib.exports=gh});var Ah=m((Hie,vb)=>{"use strict";var Db=as(),Lb=va(),Mb=Pa(),Pb=Da(),Ft=A(),wb=V(),Cb=ye(),{getTransactionAuditStorePath:fK,getSchemaPath:hK}=we(),Ub=x();vb.exports=mK;async function mK(e){try{if(wb.isEmpty(global.hdb_schema[e.schema])||wb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await SK(e),await pK(e);let t=hK(e.schema,e.table);try{await Cb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fK(e.schema,e.table);await Cb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(mK,"lmdbDropTable");async function SK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Pb(n)}a(SK,"deleteAttributesFromSystem");async function pK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Pb(n)}catch(i){throw i}}a(pK,"dropTableFromSystem")});var Hb=m((Fie,Bb)=>{"use strict";var TK=require("fs-extra"),RK=as(),gK=Zi(),AK=va(),OK=Ah(),NK=Da(),bK=fh(),yK=Pa(),Ys=A(),{getSchemaPath:IK}=we(),{handleHDBError:wK,hdb_errors:CK}=W(),{HDB_ERROR_MSGS:UK,HTTP_STATUS_CODES:DK}=CK;Bb.exports=LK;async function LK(e){let t;try{t=await MK(e.schema);let r=new RK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await yK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await OK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new AK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await NK(n);let i=IK(t);await TK.remove(i)}catch(r){throw r}}a(LK,"lmdbDropSchema");async function MK(e){let t=new gK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await bK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw wK(new Error,UK.SCHEMA_NOT_FOUND(e),DK.NOT_FOUND,void 0,void 0,!0);return s}a(MK,"validateDropSchema")});var Nh=m((xie,qb)=>{"use strict";var Oh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};qb.exports=Oh});var Gb=m(($ie,Fb)=>{"use strict";var PK=require("fs-extra"),bl=ye(),{getTransactionAuditStorePath:vK}=we(),bh=xe(),Vie=Nh();Fb.exports=BK;async function BK(e){let t;try{let r=vK(e.schema,e.table);await PK.mkdirp(r),t=await bl.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{bl.createDBI(t,bh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bl.createDBI(t,bh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bl.createDBI(t,bh.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(BK,"createTransactionsAuditEnvironment")});var $b=m((Kie,Vb)=>{"use strict";var yh=A(),xb=ye(),HK=Fi(),{getSystemSchemaPath:qK,getSchemaPath:FK}=we(),GK=Wn(),xK=Zu(),Ih=Xu(),kK=x(),VK=Gb(),Ch=GK.hdb_table,kb=[];for(let e=0;e<Ch.attributes.length;e++)kb.push(Ch.attributes[e].attribute);Vb.exports=$K;async function $K(e,t){let r=FK(t.schema,t.table),s=new Ih(t.schema,t.table,yh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ih(t.schema,t.table,yh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ih(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xb.createEnvironment(r,t.table),e!==void 0){let o=await xb.openEnvironment(qK(),yh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HK.insertRecords(o,Ch.hash_attribute,kb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await wh(s),await wh(n),await wh(i)}await VK(t)}catch(o){throw o}}a($K,"lmdbCreateTable");async function wh(e){try{await xK(e)}catch(t){kK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wh,"createAttribute")});var Kb=m((Qie,Yb)=>{"use strict";var YK=pa(),KK=Oa(),WK=ml(),Ba=A(),QK=Fi().updateRecords,zK=ye(),{getSchemaPath:JK}=we(),XK=Ca(),ZK=x();Yb.exports=jK;async function jK(e){try{let{schema_table:t,attributes:r}=YK(e);KK(e,r,t.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(r.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WK(e.hdb_auth_header,t,r),n=JK(e.schema,e.table),i=await zK.openEnvironment(n,e.table),o=await QK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await XK(e,o)}catch(c){ZK.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(jK,"lmdbUpdateRecords")});var Qb=m((Jie,Wb)=>{"use strict";var e1=A().OPERATIONS_ENUM,Uh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=e1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Wb.exports=Uh});var Jb=m((jie,zb)=>{"use strict";var Zie=Qb(),t1=pa(),r1=Oa(),s1=ml(),Ha=A(),n1=Fi().upsertRecords,i1=ye(),{getSchemaPath:o1}=we(),a1=Ca(),c1=x(),{handleHDBError:u1,hdb_errors:l1}=W();zb.exports=_1;async function _1(e){let t;try{t=t1(e)}catch(u){throw u1(u,u.message,l1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;r1(e,s,r.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(s.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await s1(e.hdb_auth_header,r,s),i=o1(e.schema,e.table),o=await i1.openEnvironment(i,e.table),c=await n1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await a1(e,c)}catch(u){c1.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(_1,"lmdbUpsertRecords")});var Zb=m((toe,Xb)=>{"use strict";var Dh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Xb.exports=Dh});var ey=m((soe,jb)=>{"use strict";var Lh=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}};jb.exports=Lh});var sy=m((ooe,ry)=>{"use strict";var Mh=ye(),{getTransactionAuditStorePath:d1}=we(),ioe=Zb(),qa=xe(),E1=V(),ty=ey(),f1=require("util").promisify,h1=f1(setTimeout),m1=1e4,S1=100;ry.exports=p1;async function p1(e){let t=d1(e.schema,e.table),r=await Mh.openEnvironment(t,e.table,!0),s=Mh.listDBIs(r);Mh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ty;do n=await T1(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 h1(S1);while(n.transactions_deleted>0);return i}a(p1,"deleteAuditLogsBefore");async function T1(e,t){let r=new ty;try{let s=e.dbis[qa.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[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];E1.isEmpty(c)||(n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>m1)break}return await n,r}catch(s){throw s}}a(T1,"deleteTransactions")});var iy=m((coe,ny)=>{"use strict";var Ph=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ny.exports=Ph});var ay=m((_oe,oy)=>{"use strict";var R1=as(),g1=va(),loe=iy(),cs=A(),A1=V(),vh=ye(),O1=Wn(),N1=Pa(),b1=Da(),{getSchemaPath:y1}=we();oy.exports=I1;async function I1(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=O1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await C1(e),n=y1(e.schema,e.table),i=await vh.openEnvironment(n,e.table);return t===!0&&await w1(e,i,r.hash_attribute),vh.dropDBI(i,e.attribute),s}a(I1,"lmdbDropAttribute");async function w1(e,t,r){let s=vh.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(w1,"removeAttributeFromAllObjects");async function C1(e){let t=new R1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await N1(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(A1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new g1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return b1(i)}a(C1,"dropAttributeFromSystem")});var Ey=m((foe,dy)=>{"use strict";var Bh=ye(),ji=xe(),Eoe=Ht(),Hh=A(),cy=V(),{getTransactionAuditStorePath:U1}=we(),D1=Ji(),yl=Wi(),L1=x();dy.exports=M1;async function M1(e){let t=U1(e.schema,e.table),r=await Bh.openEnvironment(t,e.table,!0),s=Bh.listDBIs(r);Bh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uy(r,e.search_values);case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,v1(r,e.search_values,n);case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return P1(r,e.search_values);default:return uy(r)}}a(M1,"readAuditLog");function uy(e,t=[0,Date.now()]){cy.isEmpty(t[0])&&(t[0]=0),cy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ji.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 yl,n))}a(uy,"searchTransactionsByTimestamp");function P1(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[ji.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,_y(e,i))}return Object.fromEntries(r)}a(P1,"searchTransactionsByUsername");function v1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=D1.equals(e,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ji.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=_y(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ly(u,"records",r,_,o),ly(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(v1,"searchTransactionsByHashValues");function ly(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 yl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new yl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(ly,"loopRecords");function _y(e,t){let r=[];try{let s=e.dbis[ji.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 yl,i);r.push(o)}}catch(i){L1.warn(i)}return r}catch(s){throw s}}a(_y,"batchSearchTransactions")});var hy=m((poe,fy)=>{"use strict";var{getSchemaPath:moe}=we(),Soe=ye(),{database:B1}=(de(),re(Ne));fy.exports={writeTransaction:H1};async function H1(e,t,r){return B1({database:e,table:t}).transaction(r)}a(H1,"writeTransaction")});var Ty=m((Roe,py)=>{"use strict";var{getSchemaPath:my}=we(),Sy=ye();py.exports={flush:q1,resetReadTxn:F1};async function q1(e,t){return(await Sy.openEnvironment(my(e,t),t.toString())).flushed}a(q1,"flush");async function F1(e,t){try{(await Sy.openEnvironment(my(e,t),t.toString())).resetReadTxn()}catch{}}a(F1,"resetReadTxn")});var Oy=m((Aoe,Ay)=>{"use strict";var{Readable:G1}=require("stream"),{getDatabases:x1}=(de(),re(Ne)),{readSync:k1,openSync:V1,createReadStream:Ry}=require("fs"),{open:$1}=require("lmdb"),gy=xu(),Y1=Vu(),{INTERNAL_DBIS_NAME:K1}=xe();Ay.exports=Q1;var qh=32768,W1=100;async function Q1(e){let t=e.database||e.schema||"data",r=x1()[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=$1({noSync:!0,maxDbs:Y1.MAX_DBS}),E,f=d.openDB(K1,new gy(!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 gy(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),T++%W1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=Ry(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=V1(o.path);return o.transaction(()=>{let l=Buffer.alloc(qh);k1(c,l,0,qh);let _=o.useReadTransaction(),d=Ry(null,{fd:c,start:qh}),E=new G1.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(Q1,"getBackup")});var yy=m((Noe,by)=>{"use strict";var z1=x(),{handleHDBError:J1}=W(),X1=cA(),Z1=Zu(),j1=ah(),eW=HN(),tW=Da(),rW=fh(),sW=ub(),nW=pb(),iW=Pa(),oW=yb(),aW=Hb(),cW=$b(),uW=Kb(),lW=Jb(),_W=sy(),dW=Ah(),EW=ay(),fW=Ey(),hW=hy(),Ny=Ty(),mW=Oy(),Fh=class extends X1{static{a(this,"LMDBBridge")}async searchByConditions(t){return oW(t)}async getDataByHash(t){return await rW(t)}async searchByHash(t){return await sW(t)}async getDataByValue(t,r){return await nW(t,r)}async searchByValue(t){return await iW(t)}async createSchema(t){return await eW(t)}async dropSchema(t){return await aW(t)}async createTable(t,r){return await cW(t,r)}async dropTable(t){return await dW(t)}async createAttribute(t){return await Z1(t)}async createRecords(t){return await j1(t)}async updateRecords(t){return await uW(t)}async upsertRecords(t){try{return await lW(t)}catch(r){throw J1(r,null,null,z1.ERR,r)}}async deleteRecords(t){return await tW(t)}async dropAttribute(t){return await EW(t)}async deleteAuditLogsBefore(t){return await _W(t)}async readAuditLog(t){return await fW(t)}writeTransaction(t,r,s){return hW.writeTransaction(t,r,s)}flush(t,r){return Ny.flush(t,r)}resetReadTxn(t,r){return Ny.resetReadTxn(t,r)}getBackup(t){return mW(t)}};by.exports=Fh});var vy={};je(vy,{ResourceBridge:()=>kh});function Vh({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 wy(e,t){let r=us(e),s=Vh(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&&Pu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||pW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,SW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Cy(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*Uy(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 Dy,Il,Gr,Ly,My,kr,Gh,xh,Py,SW,pW,TW,RW,Iy,kh,By=Se(()=>{"use strict";Dy=C(yy()),Il=C(Xi()),Gr=C(W());de();Ly=C(pa()),My=C(Oa()),kr=C(A()),Gh=C(Vs()),xh=C(Fr()),Py=C(V());Yn();vu();({HDB_ERROR_MSGS:SW}=Gr.hdb_errors),pW="data",TW=1e4,RW=10,kh=class extends Dy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Iy=this}async searchByConditions(t){let r=(0,Il.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(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:Vh(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 us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(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){us(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Gh.signalSchemaChange(new xh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await $h(t.schema),Gh.signalSchemaChange(new xh.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,Iy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Ly.default)(t);(0,My.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=Pu(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 Cy(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,Py.async_set_timeout)(RW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%TW===0&&await l();return u.length>0&&await l(),n?Cy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Il.default)(t,"hashes");if(r)throw r;return wy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of wy(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,Il.default)(t,"value");if(s)throw s;let n=us(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:Vh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(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){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(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 Uy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Uy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Vh,"getSelect");a(wy,"getRecords");a(us,"getTable");a(Cy,"createDeleteResponse");a(Uy,"groupRecordsInHistory")});var qr=m((Uoe,Hy)=>{"use strict";var{ResourceBridge:gW}=(By(),re(vy)),AW=Q();AW.initSync();var wl;function OW(){return wl||(wl=new gW,wl)}a(OW,"getBridge");Hy.exports=OW()});var xy=m((Loe,Gy)=>{"use strict";var qy=require("lodash"),Ga=require("mathjs"),NW=require("jsonata"),Fy=V();Gy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?qy.uniqWith(e,qy.isEqual):e,searchJSON:bW,mad:xa.bind(null,Ga.mad),mean:xa.bind(null,Ga.mean),mode:xa.bind(null,Ga.mode),prod:xa.bind(null,Ga.prod),median:xa.bind(null,Ga.median)};function xa(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(xa,"aggregateFunction");function bW(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=NW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(bW,"searchJSON")});var Vy=m((Poe,ky)=>{"use strict";var We=require("moment"),Yh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;ky.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(Yh),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(Yh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Yh)}});var Wy=m((voe,Ky)=>{"use strict";var yW=require("@turf/area"),IW=require("@turf/length"),wW=require("@turf/circle"),CW=require("@turf/difference"),UW=require("@turf/distance"),DW=require("@turf/boolean-contains"),LW=require("@turf/boolean-equal"),MW=require("@turf/boolean-disjoint"),PW=require("@turf/helpers"),$y=A(),le=V();Ky.exports={geoArea:vW,geoLength:BW,geoCircle:HW,geoDifference:qW,geoDistance:Yy,geoNear:FW,geoContains:GW,geoEqual:xW,geoCrosses:kW,geoConvert:VW};var Kh="geo1 is required",Wh="geo2 is required";function vW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),yW.default(e)}a(vW,"geoArea");function BW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),IW.default(e,{units:t||"kilometers"})}a(BW,"geoLength");function HW(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)),wW.default(e,t,{units:r||"kilometers"})}a(HW,"geoCircle");function qW(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)),CW(e,t)}a(qW,"geoDifference");function Yy(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)),UW.default(e,t,{units:r||"kilometers"})}a(Yy,"geoDistance");function FW(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 Yy(e,t,s)<=r}a(FW,"geoNear");function GW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),DW.default(e,t)}a(GW,"geoContains");function xW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),LW.default(e,t)}a(xW,"geoEqual");function kW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!MW.default(e,t)}a(kW,"geoCrosses");function VW(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($y.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($y.GEO_CONVERSION_ENUM).join(",")}`);return PW[t](e,r)}a(VW,"geoConvert")});var Cl=m((Hoe,Qy)=>{var ii=xy(),ur=Vy(),ls=Wy();Qy.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.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=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var Zy=m((qoe,Xy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var $W=Cl(),zy=require("clone"),Ul=require("recursive-iterator"),se=x(),ne=V(),eo=qr(),YW=A(),{hdb_errors:KW}=W(),{getDatabases:Jy}=(de(),re(Ne)),WW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";$W(pt);var Qh=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 Ul(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(zy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ka.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=Jy()[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 Ul(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 Ul(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(YW.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&&ka.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(zy(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(WW)>-1&&this.tables.forEach(n=>{let i={columnid:Jy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ka.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 eo.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 eo.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 eo.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 eo.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=ka.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 Ul(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=ka.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 eo.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(KW.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 eo.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)}};Xy.exports=Qh});var Or=m((Goe,jy)=>{"use strict";var QW=oA();jy.exports={searchByConditions:JW,searchByHash:XW,searchByValue:ZW,search:jW};var zh=qr(),{transformReq:Jh}=V(),zW=Zy();async function JW(e){return Jh(e),zh.searchByConditions(e)}a(JW,"searchByConditions");async function XW(e){Jh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zh.searchByHash(e))r&&t.push(r);return t}a(XW,"searchByHash");async function ZW(e){Jh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zh.searchByValue(e))t.push(r);return t}a(ZW,"searchByValue");function jW(e,t){try{let r=new QW(e);r.validate(),new zW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jW,"search")});var Dl=m((koe,eI)=>{"use strict";var eQ=qr();eI.exports={writeTransaction:tQ};function tQ(e,t,r){return eQ.writeTransaction(e,t,r)}a(tQ,"writeTransaction")});var nI=m((Yoe,sI)=>{"use strict";var rQ=Or(),sQ=ks(),tI=x(),nQ=Nr(),$oe=Dl(),iQ=require("clone"),Zh=require("alasql"),oQ=Cl(),rI=require("util"),aQ=rI.promisify(sQ.getTableSchema),cQ=rI.promisify(rQ.search),uQ=A(),Xh=V();oQ(Zh);sI.exports={update:_Q};var lQ="There was a problem performing this update. Please check the logs and try again.";async function _Q({statement:e,hdb_user:t}){let r=await aQ(e.table.databaseid,e.table.tableid),s=dQ(e.columns);Xh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=iQ(n),c=Xh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Zh.parse(u).statements[0],_=await cQ(l),d=EQ(s,_);return fQ(o,d,t)}a(_Q,"update");function dQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Zh.compile(`SELECT ${r.expression.toString()} AS [${uQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tI.error(t),new Error(lQ)}}a(dQ,"createUpdateRecord");function EQ(e,t){return Xh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(EQ,"buildUpdateRecords");async function fQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await nQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(fQ,"updateRecords")});var oI=m((zoe,iI)=>{var hQ=require("alasql"),mQ=Or(),SQ=x(),pQ=qr(),em=require("util"),jh=V(),TQ=A(),RQ=ks(),Woe=Dl(),Qoe=Nr(),gQ="record",AQ="successfully deleted",OQ=em.callbackify(IQ),NQ=em.promisify(mQ.search),bQ=em.promisify(RQ.getTableSchema);iI.exports={convertDelete:OQ};function yQ(e){return`${e.deleted_hashes.length} ${gQ}${e.deleted_hashes.length===1?"":"s"} ${AQ}`}a(yQ,"generateReturnMessage");async function IQ({statement:e,hdb_user:t}){let r=await bQ(e.table.databaseid,e.table.tableid);jh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=jh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=hQ.parse(o).statements[0],u={operation:TQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await NQ(c);let l=await pQ.deleteRecords(u);return jh.isEmptyOrZeroLength(l.message)&&(l.message=yQ(l)),delete l.txn_time,l}catch(l){throw SQ.error(l),l.hdb_code?l.message:l}}a(IQ,"convertDelete")});var _I=m((Xoe,lI)=>{"use strict";var wQ=zn(),{hdb_errors:aI}=W(),{getDatabases:cI}=(de(),re(Ne));lI.exports={checkSchemaExists:uI,checkSchemaTableExists:CQ,schema_describe:wQ};async function uI(e){if(!cI()[e])return aI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uI,"checkSchemaExists");async function CQ(e,t){let r=await uI(e);if(r)return r;if(!cI()[e][t])return aI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(CQ,"checkSchemaTableExists")});var Va=m((joe,UQ)=>{UQ.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 Bl={};je(Bl,{addAnalyticsListener:()=>nm,recordAction:()=>_s,recordActionBinary:()=>to,setAnalyticsEnabled:()=>DQ});function DQ(e){gI=e}function _s(e,t,r,s,n){if(!gI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Pl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Pl.set(i,o)),Ml||LQ()}function to(e,t,r,s,n){_s(e?1:0,t,r,s,n)}function nm(e){OI.push(e)}function LQ(){Ml=performance.now(),setTimeout(()=>{let e=performance.now()-Ml;Ml=0;let t=[],r={time:Date.now(),period:e,threadId:oi.threadId,metrics:t};for(let[n,i]of Pl)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:oi.threadId,...s});for(let n of OI)n(t);Pl=new Map,oi.parentPort?oi.parentPort.postMessage({type:AI,report:r}):bI({report:r})},sm).unref()}async function MQ(e,t=6e4){let r=im(),s;for(let _ of r.primaryStore.getRange({start:Ll+"z",end:Ll,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 q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await PQ()}for(let[_,d]of i)d.id=Ll+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Ll+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-dI,active:l-EI,time:c}),dI=u,EI=l}async function vQ(e,t){let r=im(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function im(){return fI||(fI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function HQ(){NI=!0,setInterval(async()=>{await MQ(sm,rm),await vQ(BQ,sm)},rm/2).unref()}function bI(e,t){let r=e.report;r.threadId=t?.threadId||oi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(hI+=s.mean*s.count);r.totalBytesProcessed=hI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(mI.get(t))}),mI.set(t,t.performance.eventLoopUtilization())),r.id=(0,TI.getNextMonotonicTime)(),im().put(r),NI||HQ(),qQ&&(yI=GQ(r))}async function GQ(e){if(await yI,!Rn){let r=(0,$a.dirname)((0,pI.getLogFilePath)());try{Rn=await(0,tm.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{Rn=await(0,tm.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await Rn.stat()).size;if(t>FQ){let r=Buffer.alloc(t);await Rn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Rn.write(r,{position:0}),await Rn.truncate(r.length),t=r.length}await Rn.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}`)}OF(s,r),wE(s);let n=s.toJSON();if(hF.config=n,ft=kn(n),ft.logging_rotation_rotate)for(let i in sg)ft[i]&&rt.error(`Config ${sg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(SF)}}a(cg,"initConfig");function OF(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(OF,"checkForUpdatedConfig");function wE(e){let t=e.toJSON(),r=uF(t);if(r.error)throw Au.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(wE,"validateConfig");function NF(e,t){ft===void 0&&(ft={});let r=vs[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(NF,"updateConfigObject");function ug(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&cg();let o=ag(vs.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=_n(c),l;if(r===void 0&&e.toLowerCase()===ln.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=vs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=IE(E,t);u.setIn([...f],h)}else for(let E in r){let f=vs[E.toLowerCase()];if(f===ln.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=IE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&og(u,l),wE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&bF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=kn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ug,"updateConfigValue");function bF(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(pF),rt.error(r)}}a(bF,"backupConfigFile");var yF=["schemas"];function kn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!yF.includes(r)){let s=kn(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(kn,"flattenConfig");function IE(e,t){if(e===ln.CLUSTERING_NODENAME||e===ln.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(_F(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(IE,"castConfigValue");function IF(){let e=lt.getPropsFilePath(),t=xn(e);return _n(t).toJSON()}a(IF,"getConfiguration");async function wF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ug(void 0,void 0,n,!0),RF}catch(i){throw typeof i=="string"||i instanceof String?EF(i,i,fF.BAD_REQUEST,void 0,void 0,!0):i}}a(wF,"setConfiguration");function CE(){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=xn(e);return _n(t).toJSON()}a(CE,"readConfigFile");function _n(e){return lF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(_n,"parseYamlDoc");function CF(){let e=CE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=rg(t);if(r)throw Au.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=rg(s);if(n)throw Au.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 Au.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(CF,"getClusteringRoutes");function lg(e){let t=ng(e);ft={};for(let r in vs){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=vs[r].toLowerCase();n===ln.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(lg,"initOldConfig");function UF(e){let t=CE();return dF.get(t,e.replaceAll("_","."))}a(UF,"getConfigFromFile");async function DF(e,t){let r=_n(xn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(xn(),String(r))}a(DF,"addConfig");function LF(e){let t=xn(lt.getPropsFilePath()),r=_n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(LF,"deleteConfigFromFile")});var Q=m((jte,fg)=>{"use strict";var UE=require("fs-extra"),vr=require("path"),dg=require("os"),MF=require("properties-reader"),ea=x(),Vn=V(),te=A(),Nu=Tr(),PF="Error initializing environment manager",bu="BOOT_PROPS_FILE_PATH",Eg=!1,vF={[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},Bs={};fg.exports={BOOT_PROPS_FILE_PATH:bu,getHdbBasePath:BF,setHdbBasePath:HF,get:qF,initSync:GF,setProperty:Ee,initTestEnvironment:xF};function BF(){return Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(BF,"getHdbBasePath");function HF(e){Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(HF,"setHdbBasePath");function qF(e){let t=Nu.getConfigValue(e);return t===void 0?Bs[e]:t}a(qF,"get");function Ee(e,t){vF[e]&&(Bs[e]=t),Nu.updateConfigObject(e,t)}a(Ee,"setProperty");function FF(){let e;try{e=Vn.getPropsFilePath(),UE.accessSync(e,UE.constants.F_OK|UE.constants.R_OK),Eg=!0;let t=MF(e);return Bs[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Bs[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bs[bu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(FF,"doesPropFileExist");function GF(e=!1){try{(Eg||FF()||Vn.noBootFile())&&(Nu.initConfig(e),Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Nu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(PF),ea.error(t),console.error(t),process.exit(1)}}a(GF,"initSync");function xF(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");Bs[bu]=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,dg.userInfo()?dg.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,Vn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Vn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Vn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Vn.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,Vn.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 ${bu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(xF,"initTestEnvironment")});var we=m((tre,gg)=>{"use strict";var ia=A(),kF=V(),Bt=Q(),oa=require("path"),VF=require("minimist"),hg=require("fs-extra"),mg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:dn,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:yu}=ia,ra,sa,na;function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(dn.STORAGE_PATH)||oa.join(Bt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Sg,"getBaseSchemaPath");function pg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Rg(yu),sa}a(pg,"getSystemSchemaPath");function Tg(){if(na!==void 0)return na;if(Bt.getHdbBasePath()!==void 0)return na=Bt.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Bt.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(Tg,"getTransactionAuditStoreBasePath");function $F(e,t){let r=Bt.get(dn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(Tg(),e.toString())}a($F,"getTransactionAuditStorePath");function Rg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(Sg(),e)}a(Rg,"getSchemaPath");function YF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,VF(process.argv));let s=r[dn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!kF.isObject(s))throw o;i=s}for(let o of i){let c=o[yu];if(!c)continue;let u=Bt.get(dn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return mg.set(u,[yu,ta.TABLES,t,ta.PATH],l),Bt.setProperty(dn.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return mg.set(u,[yu,ta.PATH],_),Bt.setProperty(dn.SCHEMAS,u),_}}let n=r[dn.STORAGE_PATH.toUpperCase()];if(n){if(!hg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return hg.mkdirsSync(i),Bt.setProperty(dn.STORAGE_PATH,n),i}return pg()}a(YF,"initSystemSchemaPaths");function KF(){ra=void 0,sa=void 0,na=void 0}a(KF,"resetPaths");gg.exports={getBaseSchemaPath:Sg,getSystemSchemaPath:pg,getTransactionAuditStorePath:$F,getTransactionAuditStoreBasePath:Tg,getSchemaPath:Rg,initSystemSchemaPaths:YF,resetPaths:KF}});var Ht=m((ire,yg)=>{"use strict";var WF=rr().LMDB_ERRORS_ENUM,sre=require("lmdb"),QF=xe(),nre=require("buffer").Buffer,{OVERFLOW_MARKER:Ag,MAX_SEARCH_KEY_LENGTH:Iu}=QF,Og=["number","string","symbol","boolean","bigint"];function zF(e){if(e=e?.primaryStore||e,!e)throw new Error(WF.ENV_REQUIRED)}a(zF,"validateEnv");function JF(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(JF,"stringifyData");function XF(e){return e instanceof Date?e.valueOf():e}a(XF,"convertKeyValueToWrite");function ZF(e){if(e==null)return;if(Og.includes(typeof e))return e.length>Iu?[e.slice(0,Iu)+Ag]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Og.includes(typeof n))n.length>Iu?t.push(n.slice(0,Iu)+Ag):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(ZF,"getIndexedValues");var wu=0,Ng=0;function bg(){Ng=Date.now()-performance.now()}a(bg,"adjustStartTime");bg();var jF=6e4;setInterval(bg,jF).unref();function eG(){let e=performance.now()+Ng;return e>wu?(wu=e,e):(wu+=488e-6,wu)}a(eG,"getNextMonotonicTime");yg.exports={validateEnv:zF,stringifyData:JF,convertKeyValueToWrite:XF,getNextMonotonicTime:eG,getIndexedValues:ZF}});var Ig,Zr,DE,aa=Se(()=>{Ig=require("events"),Zr=class extends Ig.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new DE;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)}},DE=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 ca(e){return e[ht]||(e[ht]=Object.create(null))}function Mu(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=wg(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){ca(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,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(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 Cu.ClientError("Can not add a property to a sealed table schema");ca(this)[o]=c}),i("deleteProperty",function(o){ca(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 wg(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}},Mu(r,t)),new r(e)):new Uu(e);case Array:let s=new Lu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=wg(o,t?.elements)),s[n]=o}return s}}function Pu(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=Pu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ua(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=ua(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=ua(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Du(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[$n]||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(Du(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(Du(n))return!0}else return!0}else return!0}}return!1}var Cu,ht,Uu,$n,Lu,vu=Se(()=>{jr();Cu=C(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Mu,"assignTrackedAccessors");a(wg,"trackObject");Uu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Mu(Uu,{});a(Pu,"collapseData");a(ua,"deepFreeze");a(Du,"hasChanges");$n=Symbol.for("has-array-changes"),Lu=class extends Array{static{a(this,"TrackedArray")}[$n];constructor(t){super(t)}splice(...t){return this[$n]=!0,super.splice(...t)}push(...t){return this[$n]=!0,super.push(...t)}pop(){return this[$n]=!0,super.pop()}unshift(...t){return this[$n]=!0,super.unshift(...t)}shift(){return this[$n]=!0,super.shift()}};Lu.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 LE;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 Cg,Ug,LE,Yn=Se(()=>{Cg=C(Ht()),Ug=require("../index");jr();a(Ye,"transaction");(0,Ug._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()};LE=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,Cg.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 vE(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(rG[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]=ts.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 ME.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=BE(e);if(!p)throw new ME.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:Lg.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 BE(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 es(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return es(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()),es(r,n=>(0,ts.compareKeys)(n,s[0])>=0&&(0,ts.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)<=0);case"ne":return es(r,n=>(0,ts.compareKeys)(n,s)!==0);default:return}}function es(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Bu(e){if(!e)return;let t=new PE,r,s,n,i,o;for(;r=Dg.exec(e);){i=Dg.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=tG[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 ME,_t,ts,Lg,Dg,tG,rG,PE,Hu=Se(()=>{ME=C(W()),_t=C(xe()),ts=require("ordered-binary"),Lg=require("lmdb"),Dg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,tG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(vE,"idsForCondition");rG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(BE,"filterByType");a(es,"attributeComparator");a(Bu,"parseQuery");PE=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 FE={};je(FE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Hs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>qg,snake_case:()=>nG});function nG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Mg(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 qE(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[qg]=!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 qu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new qu(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 Hg.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 HE(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 Pg(e){if(typeof e=="string")return t=>HE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=HE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=HE(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 vg,Bg,Hg,Ae,ae,Hs,qg,ce,sG,mt,qu,qE,jr=Se(()=>{vg=require("crypto");aa();Bg=require("../index"),Hg=C(W());vu();Yn();Hu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Hs=Symbol("is-collection"),qg=Symbol("save-updates"),ce=Symbol("stored-record"),sG={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=Pg(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[Hs]){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,vg.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=Pg(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[Hs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[Hs]}static coerceId(t){return t}static parseQuery(t){return Bu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&sG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Mg(t,this)}}return Mg(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[Hs]=!0),n}connect(t){let r=new Zr;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,Bg._assignPackageExport)("Resource",mt);a(nG,"snake_case");qu=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(Mg,"pathToId");qE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(HE,"selectFromObject");a(Pg,"transformForSelect")});var kE={};je(kE,{loadGQLSchema:()=>oG,start:()=>xE,startOnMainThread:()=>iG});function xE({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 q of P.arguments)q.name.value==="role"&&z.push(q.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,GE.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,GE.dirname)(s)+"/"+T.name,p.tableClass)}}}var GE,iG,oG,Fg=Se(()=>{GE=require("path");de();a(xE,"start");iG=xE,oG=xE({ensureTable:st}).handleFile});async function Fu(e){return aG?(la||(la=cG(lG)),(await(await la).import(e)).namespace):import(e)}async function cG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),la=new Compartment({console,Math,Date,fetch:uG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xg.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,Gg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function uG(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 lG(){return{Resource:mt,tables:nr}}var Gg,xg,aG,la,VE=Se(()=>{jr();de();Gg=require("fs/promises"),xg=require("path"),aG=!1;a(Fu,"secureImport");a(cG,"getCompartment");a(uG,"secureOnlyFetch");a(lG,"getGlobalVars")});var YE={};je(YE,{handleFile:()=>_G});async function _G(e,t,r,s){let n=new Map,i=(0,kg.pathToFileURL)(r).toString(),o=await Fu(i);u(o.default)&&s.set((0,$E.dirname)(t),o.default),c(o,(0,$E.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 kg,$E,Vg=Se(()=>{kg=require("url");VE();$E=require("path");a(_G,"handleFile")});var WE={};je(WE,{start:()=>dG});function dG({resources:e}){e.set("login",KE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var KE,$g=Se(()=>{jr();a(dG,"start");KE=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 zE=m((Mre,Wg)=>{"use strict";var{Readable:EG}=require("stream"),fG=1e4;Wg.exports={streamAsJSON(e){return new QE({value:e})}};var QE=class extends EG{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),Yg)}catch(n){yield Yg(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);Kg(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>fG?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 Kg(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 Yg(e){return console.error(e),JSON.stringify(e.toString())}a(Yg,"handleError");function Kg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Kg,"when")});var oA=m((Bre,iA)=>{"use strict";var JE=require("recursive-iterator"),hG=require("alasql"),XE=require("clone"),Qg=V(),{handleHDBError:zg,hdb_errors:mG}=W(),{HDB_ERROR_MSGS:Jg,HTTP_STATUS_CODES:Xg}=mG,{getDatabases:SG}=(de(),re(Ne)),pG=["DISTINCT_ARRAY"],Zg=Symbol("validateTables"),ZE=Symbol("validateTable"),vre=Symbol("getAllColumns"),jg=Symbol("validateAllColumns"),Gu=Symbol("findColumn"),eA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),jE=Symbol("validateColumn"),tA=Symbol("setColumnsForTable"),rA=Symbol("checkColumnsForAsterisk"),sA=Symbol("validateGroupBy"),nA=Symbol("hasColumns"),ef=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Zg](),this[rA](),this[jg]()}[Zg](){if(this[nA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ZE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ZE](t.table)})}}[nA](){let t=!1,r=new JE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ZE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=SG();if(!r[t.databaseid])throw zg(new Error,Jg.SCHEMA_NOT_FOUND(t.databaseid),Xg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zg(new Error,Jg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Xg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=XE(n);i.table=XE(t),this.attributes.push(i)})}[Gu](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)}[rA](){let t=new JE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tA](r.tableid)}[tA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new hG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jg](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[sA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new JE(t),n=[];for(let{node:i,path:o}of s)!Qg.isEmpty(i)&&!Qg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eA](i):n.push(this[jE](i)));return n}[sA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&pG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=XE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gu](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[Gu](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`}[eA](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[jE](t)}[jE](t){let r=this[Gu](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]}};iA.exports=ef});var cA=m((qre,aA)=>{"use strict";var tf=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")}};aA.exports=tf});var lA=m((Gre,uA)=>{"use strict";var rf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uA.exports=rf});var xu=m((kre,_A)=>{"use strict";var nf=Q(),of=A();nf.initSync();var TG=nf.get(of.CONFIG_PARAMS.STORAGE_COMPRESSION),RG=nf.get(of.CONFIG_PARAMS.STORAGE_CACHING)!==!1,gG=of.UPDATES_PROPERTY,sf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=TG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=RG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===gG)}};_A.exports=sf});var Vu=m(($re,EA)=>{"use strict";var qi=Q(),da=A();qi.initSync();var AG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),OG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ku=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=AG,this.noFSAccess=!0,dA!==void 0&&(this.overlappingSync=dA),this.noReadAhead=OG}};EA.exports=ku;ku.MAX_DBS=1e4});var ye=m((Kre,OA)=>{"use strict";var cf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),$u=Ht(),mA=x(),qt=rr().LMDB_ERRORS_ENUM,Yu=lA(),uf=xu(),SA=Vu(),En=xe(),fA=A(),{table:NG,resetDatabases:bG}=(de(),re(Ne)),hA=Q(),Hr=En.INTERNAL_DBIS_NAME,pA=En.DBI_DEFINITION_NAME,yG="data.mdb",IG="lock.mdb",Ea=".mdb",wG="-lock",af=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[En.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[En.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new cf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ku(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(Ku,"pathEnvNameValidation");async function lf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+Ea);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,yG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(lf,"validateEnvironmentPath");function Wu(e,t){if($u.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Wu,"validateEnvDBIName");async function CG(e,t,r=!1,s=!1){Ku(e,t);let n=ir.basename(e);t=t.toString();let i=hA.get(fA.CONFIG_PARAMS.SCHEMAS);i||hA.setProperty(fA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await lf(e,t,s),TA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new SA(s?c:c+Ea,!1),l=cf.open(u);l.dbis=Object.create(null);let _=new uf(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=_f(e,t,r);return l[En.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(CG,"createEnvironment");async function UG(e,t,r,s=!0){Ku(e,t),t=t.toString();let n=ir.join(e,t);return NG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(UG,"copyEnvironment");async function TA(e,t,r=!1){Ku(e,t),t=t.toString();let s=_f(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 lf(e,t),i=ir.join(e,t+Ea),o=n!=i,c=new SA(n,o),u=cf.open(c);u.dbis=Object.create(null);let l=gA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[En.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(TA,"openEnvironment");async function DG(e,t,r=!1){Ku(e,t),t=t.toString();let s=ir.join(e,t+Ea),n=await lf(e,t);if(global.lmdb_map!==void 0){let i=_f(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+wG:ir.join(ir.dirname(n),IG))}a(DG,"deleteEnvironment");async function RA(e){$u.validateEnv(e);let t=e[En.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RA,"closeEnvironment");function _f(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(_f,"getCachedEnvironmentName");function LG(e){$u.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 Yu,n)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(LG,"listDBIDefinitions");function gA(e){$u.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(gA,"listDBIs");function MG(e,t){let s=Ar(e,Hr).getEntry(t),n=new Yu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(MG,"getDBIDefinition");function AA(e,t,r,s=!r){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new uf(r,s===!0),o=e.openDB(t,i),c=new Yu(r===!0,s);return o[pA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(AA,"createDBI");function Ar(e,t){if(Wu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=MG(e,t):r=new Yu,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new uf(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(qt.DBI_DOES_NOT_EXIST):n}return s[pA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function PG(e,t){Wu(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[En.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(PG,"statDBI");async function vG(e,t){try{let r=ir.join(e,t+Ea);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(vG,"environmentDataSize");function BG(e,t){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(BG,"dropDBI");function HG(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===qt.DBI_DOES_NOT_EXIST)AA(e,i,i!==t,i===t),s=!0;else throw o}}s&&bG()}a(HG,"initializeDBIs");OA.exports={openDBI:Ar,openEnvironment:TA,createEnvironment:CG,listDBIs:gA,listDBIDefinitions:LG,createDBI:AA,dropDBI:BG,statDBI:PG,deleteEnvironment:DG,initializeDBIs:HG,TransactionCursor:af,environmentDataSize:vG,copyEnvironment:UG,closeEnvironment:RA}});var bA=m((Qre,NA)=>{"use strict";var df=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};NA.exports=df});var IA=m((Jre,yA)=>{"use strict";var Ef=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}};yA.exports=Ef});var CA=m((Zre,wA)=>{"use strict";var ff=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wA.exports=ff});var Fi=m((sse,LA)=>{"use strict";var qG=ye(),FG=bA(),GG=IA(),xG=CA(),rs=Ht(),fa=rr().LMDB_ERRORS_ENUM,kG=xe(),qs=A(),VG=V(),$G=require("uuid"),ese=require("lmdb"),{handleHDBError:YG,hdb_errors:KG}=W(),{OVERFLOW_MARKER:tse,MAX_SEARCH_KEY_LENGTH:rse}=kG,UA=Q();UA.initSync();var Qu=UA.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hf=qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kn=qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WG(e,t,r,s,n=rs.getNextMonotonicTime()){Tf(e,t,r,s),mf(e,t,r);let i=new FG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];DA(l,!0,n);let _=QG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Sf(o,c,s,i,n)}a(WG,"insertRecords");function QG(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][qs.FUNC_VAL],s[o]=c)}let u=rs.getIndexedValues(c),l=e.dbis[o];if(u){Qu&&l.prefetch(u.map(_=>({key:_,value:n})),zu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Qu&&e.dbis[t].prefetch([n],zu),e.dbis[t].put(n,s,s[Kn])})}a(QG,"insertRecord");function zG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(zG,"removeSkippedRecords");function DA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Kn]))&&(e[Kn]=r||(r=rs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[hf]))&&(e[hf]=r||rs.getNextMonotonicTime()):delete e[hf]}a(DA,"setTimestamps");function mf(e,t,r){r.indexOf(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),qG.initializeDBIs(e,t,r)}a(mf,"initializeTransaction");async function JG(e,t,r,s,n=rs.getNextMonotonicTime()){Tf(e,t,r,s),mf(e,t,r);let i=new GG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=pf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Sf(c,u,s,i,n,o)}a(JG,"updateRecords");async function XG(e,t,r,s,n=rs.getNextMonotonicTime()){try{Tf(e,t,r,s)}catch(u){throw YG(u,u.message,KG.HTTP_STATUS_CODES.BAD_REQUEST)}mf(e,t,r);let i=new xG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;VG.isEmpty(l[t])?(_=$G.v4(),l[t]=_):_=l[t];let d=pf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Sf(o,c,s,i,n)}a(XG,"upsertRecords");async function Sf(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||rs.getNextMonotonicTime(),zG(r,i),s}a(Sf,"finalizeWrite");function pf(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(DA(r,!_,o),Number.isInteger(r[Kn])&&l[Kn]>r[Kn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][qs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=rs.getIndexedValues(R);if(O){Qu&&p.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=rs.getIndexedValues(T),O){Qu&&p.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Kn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:pf(e,t,r,s,n,i,o))}a(pf,"updateUpsertRecord");function ZG(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ZG,"validateBasic");function Tf(e,t,r,s){if(ZG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(Tf,"validateWrite");function zu(){}a(zu,"noop");LA.exports={insertRecords:WG,updateRecords:JG,upsertRecords:XG}});var Wn=m((ise,jG)=>{jG.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 ss=m((ose,vA)=>{"use strict";var PA=V(),MA=A(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fs=require("joi"),fn={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ex=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()).required(),tx=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()),rx=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()).required();function sx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>fn.schema_length.maximum?`'${e}' maximum of 250 characters`:Gi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sx,"checkValidTable");function nx(e,t){return PA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(nx,"validateSchemaExists");function ix(e,t){let r=t.state.ancestors[0].schema;return PA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ix,"validateTableExists");function ox(e,t){return e.toLowerCase()===MA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${MA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ox,"validateSchemaName");vA.exports={common_validators:fn,schema_regex:Gi,hdb_schema_table:ex,validateSchemaExists:nx,validateTableExists:ix,validateSchemaName:ox,checkValidTable:sx,hdb_database:tx,hdb_table:rx}});var Ju=m((cse,BA)=>{var{common_validators:ns}=ss(),ma=Pe(),ha="is required",Ke={database:{presence:!1,format:ns.schema_format,length:ns.schema_length},schema:{presence:!1,format:ns.schema_format,length:ns.schema_length},table:{presence:!0,format:ns.schema_format,length:ns.schema_length},attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length},hash_attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length}};function Sa(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(Sa,"makeAttributesStrings");function ax(e){return e=Sa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(ax,"schema_object");function cx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(cx,"table_object");function ux(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,ma.validateObject(e,Ke)}a(ux,"create_table_object");function lx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence={message:ha},Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(lx,"attribute_object");function _x(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(_x,"describe_table");function dx(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(dx,"validateTableResidence");BA.exports={schema_object:ax,create_table_object:ux,table_object:cx,attribute_object:lx,describe_table:_x,validateTableResidence:dx}});var qA=m((lse,HA)=>{"use strict";var Ex=require("uuid"),Rf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ex.v4(),this.schema_table=`${this.schema}.${this.table}`}};HA.exports=Rf});var Xu=m((dse,FA)=>{"use strict";var fx=qA(),gf=class extends fx{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=gf});var xA=m((fse,GA)=>{"use strict";GA.exports=mx;var hx="inserted";function mx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===hx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(mx,"returnObject")});var Zu=m((mse,KA)=>{"use strict";var Sx=A(),Af=ye(),px=Fi(),{getSystemSchemaPath:Tx,getSchemaPath:Rx}=we(),gx=Wn(),Ax=Ju(),Ox=Xu(),Nx=xA(),{handleHDBError:kA,hdb_errors:$A}=W(),VA=V(),{HTTP_STATUS_CODES:bx}=$A,Of=gx.hdb_attribute,YA=[];for(let e=0;e<Of.attributes.length;e++)YA.push(Of.attributes[e].attribute);var yx="inserted";KA.exports=Ix;async function Ix(e){let t=Ax.attribute_object(e);if(t)throw kA(new Error,t.message,$A.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&VA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kA(new Error,r,bx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VA.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 Ox(e.schema,e.table,e.attribute,e.id);try{let i=await Af.openEnvironment(Rx(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}`);Af.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Af.openEnvironment(Tx(),Sx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await px.insertRecords(o,Of.hash_attribute,YA,[n]);return Nx(yx,c,{records:[n]},u)}catch(i){throw i}}a(Ix,"lmdbCreateAttribute")});var bf=m((pse,QA)=>{var{hdb_table:wx,hdb_database:WA}=ss(),Cx=Pe(),Nf=require("joi"),Ux={undefined:"undefined",null:"null"},Dx=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||Ux[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"),Lx=Nf.object({database:WA,schema:WA,table:wx,records:Nf.array().items(Nf.object().custom(Dx)).required()});QA.exports=function(e){return Cx.validateBySchema(e,Lx)}});var pa=m((gse,JA)=>{"use strict";var Gs=V(),zA=x(),Rse=bf(),{getDatabases:Mx}=(de(),re(Ne)),{ClientError:Qn}=W();JA.exports=Px;function Px(e){if(Gs.isEmpty(e))throw new Qn("invalid update parameters defined.");if(Gs.isEmptyOrZeroLength(e.schema))throw new Qn("invalid schema specified.");if(Gs.isEmptyOrZeroLength(e.table))throw new Qn("invalid table specified.");if(!Array.isArray(e.records))throw new Qn("records must be an array");let t=Mx()[e.schema]?.[e.table];if(Gs.isEmpty(t))throw new Qn(`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&&Gs.isEmptyOrZeroLength(o[r]))throw zA.error("a valid hash attribute must be provided with update record:",o),new Qn("a valid hash attribute must be provided with update record, check log for more info");if(!Gs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Gs.isEmpty(o[r])&&o[r]!==""&&s.has(Gs.autoCast(o[r]))&&(o.skip=!0),s.add(Gs.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(Px,"insertUpdateValidate")});var Ta=m((Ose,XA)=>{"use strict";var vx=A().OPERATIONS_ENUM,yf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=vx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};XA.exports=yf});var Oa=m((yse,ZA)=>{"use strict";var bse=Ta(),ju=A(),wf=V(),If=x(),Bx=require("uuid"),{handleHDBError:Ra,hdb_errors:Hx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Hx;ZA.exports=qx;function qx(e,t,r){for(let n=0;n<t.length;n++)Fx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Gx(i,r,e.operation)}}a(qx,"processRows");function Fx(e){if(Buffer.byteLength(String(e))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ra(new Error,ga.ATTR_NAME_LENGTH_ERR(e),Aa.BAD_REQUEST,void 0,void 0,!0);if(wf.isEmptyOrZeroLength(e)||wf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateAttribute");function Gx(e,t,r){if(!e.hasOwnProperty(t)||wf.isEmptyOrZeroLength(e[t])){if(r===ju.OPERATIONS_ENUM.INSERT||r===ju.OPERATIONS_ENUM.UPSERT){e[t]=Bx.v4();return}throw If.error("Update transaction aborted due to record with no hash value:",e),Ra(new Error,ga.RECORD_MISSING_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw If.error(e),Ra(new Error,ga.HASH_VAL_LENGTH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw If.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Gx,"validateHash")});var eO=m((wse,jA)=>{"use strict";var Cf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jA.exports=Cf});var sO=m((Use,rO)=>{"use strict";var Uf=ye(),xx=x(),tO=rr().LMDB_ERRORS_ENUM;rO.exports=kx;async function kx(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 Uf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==tO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Uf.closeEnvironment(global.lmdb_map[s]),await Uf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tO.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){xx.error(t)}}a(kx,"cleanLMDBMap")});var xs=m((Lse,aO)=>{"use strict";var Na=require("crypto"),Vx=Q(),{CONFIG_PARAMS:$x}=A(),iO="aes-256-cbc",Yx=32,Kx=16,Df=64,oO=32,Wx=Df+oO,nO=new Map;aO.exports={encrypt:Qx,decrypt:zx,createNatsTableStreamName:Jx};function Qx(e){let t=Na.randomBytes(Yx),r=Na.randomBytes(Kx),s=Na.createCipheriv(iO,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(Qx,"encrypt");function zx(e){let t=e.substr(0,Df),r=e.substr(Df,oO),s=e.substr(Wx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(iO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(zx,"decrypt");function Jx(e,t){let r=Vx.get($x.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=nO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),nO.set(r,s)),s}a(Jx,"createNatsTableStreamName")});var zn=m((vse,uO)=>{"use strict";var Pse=Or(),el=x(),cO=Ju(),Xx=xs(),tl=V(),{handleHDBError:rl,hdb_errors:Zx}=W(),{HDB_ERROR_MSGS:sl,HTTP_STATUS_CODES:Lf}=Zx,jx=Q();jx.initSync();var{getDatabases:Mf}=(de(),re(Ne));uO.exports={describeAll:ek,describeTable:nl,describeSchema:tk};async function ek(e){try{let t=tl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Mf(),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 nl({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 nl({schema:l,table:d},f)}E&&c.push(E)}catch(E){el.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 el.error("Got an error in describeAll"),el.error(t),rl(new Error,sl.DESCRIBE_ALL_ERR)}}a(ek,"describeAll");async function nl(e,t){tl.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=cO.describe_table(e);if(i)throw i;let c=Mf()[r];if(!c)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Lf.NOT_FOUND);let u=c[s];if(!u)throw rl(new Error,sl.TABLE_NOT_FOUND(e.schema,e.table),Lf.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=Xx.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){el.warn(`unable to stat table dbi due to ${d}`)}return _}a(nl,"descTable");async function tk(e){tl.transformReq(e);let t=cO.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=Mf()[s];if(!i)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Lf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),tl.isEmpty(u)||u.describe){let l=await nl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(tk,"describeSchema")});var ks=m((Fse,fO)=>{var rk=Wn(),{callbackify:_O,promisify:sk}=require("util"),{getDatabases:dO}=(de(),re(Ne));fO.exports={setSchemaDataToGlobal:lO,getTableSchema:nk,getSystemSchema:ik,setSchemaDataToGlobalAsync:sk(lO)};var EO=zn(),Hse=_O(EO.describeAll),qse=_O(EO.describeTable);function lO(e){global.hdb_schema=dO(),e&&e()}a(lO,"setSchemaDataToGlobal");function nk(e,t,r){let s=dO()[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(nk,"getTableSchema");function ik(){return rk}a(ik,"getSystemSchema")});var Nr=m((xse,pO)=>{"use strict";var ol=bf(),St=V(),ok=require("util"),al=qr(),ak=ks(),hO=x(),{handleHDBError:Jn,hdb_errors:ck}=W(),{HTTP_STATUS_CODES:Xn}=ck,uk=ok.promisify(ak.getTableSchema),lk="updated",mO="inserted",SO="upserted";pO.exports={insert:dk,update:Ek,upsert:fk,validation:_k,flush:hk};async function _k(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 uk(e.schema,e.table),r=ol(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 hO.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 hO.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(_k,"validation");async function dk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.createRecords(e);return il(mO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(dk,"insertData");async function Ek(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.updateRecords(e);return St.isEmpty(s.existing_rows)?il(lk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):il(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Ek,"updateData");async function fk(e){if(e.operation!=="upsert")throw Jn(new Error,"invalid operation, must be upsert",Xn.INTERNAL_SERVER_ERROR);let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.upsertRecords(e);return il(SO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(fk,"upsertData");function il(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===mO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(il,"returnObject");function hk(e){return St.transformReq(e),al.flush(e.schema,e.table)}a(hk,"flush")});var vf=m((Vse,gO)=>{var mk=Pe(),Pf=require("joi"),{hdb_table:Sk,hdb_database:TO}=ss(),RO={schema:TO,database:TO,table:Sk},pk={date:Pf.date().iso().required()},Tk={timestamp:Pf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};gO.exports=function(e,t){let r=t==="timestamp"?{...RO,...Tk}:{...RO,...pk},s=Pf.object(r);return mk.validateBySchema(e,s)}});var NO=m(($se,OO)=>{var Rk=Pe(),Bf=require("joi"),{hdb_table:gk,hdb_database:AO}=ss(),Ak=Bf.object({schema:AO,database:AO,table:gk,hash_values:Bf.array().required(),ids:Bf.array()});OO.exports=function(e){return Rk.validateBySchema(e,Ak)}});var yO=m((Yse,bO)=>{"use strict";var Hf=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}},qf=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}},Ff=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bO.exports={InsertObject:Hf,NoSQLSeachObject:qf,DeleteResponseObject:Ff}});var ei=m((Wse,DO)=>{"use strict";var wO=vf(),Ok=NO(),Zn=V(),IO=require("moment"),CO=x(),{promisify:Nk,callbackify:bk}=require("util"),jn=A(),yk=ks(),Gf=Nk(yk.getTableSchema),xf=qr(),{DeleteResponseObject:Ik}=yO(),{handleHDBError:hn,hdb_errors:wk}=W(),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:mn}=wk,Ck="records successfully deleted",Uk=bk(UO);DO.exports={delete:Uk,deleteRecord:UO,deleteFilesBefore:Dk,deleteAuditLogsBefore:Lk};async function Dk(e){let t=wO(e,"date");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Zn.transformReq(e),!IO(e.date,IO.ISO_8601).isValid())throw hn(new Error,cl.INVALID_DATE,mn.BAD_REQUEST,jn.LOG_LEVELS.ERROR,cl.INVALID_DATE,!0);let s=Zn.checkSchemaTableExist(e.schema,e.table);if(s)throw hn(new Error,s,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,s,!0);let n=await xf.deleteRecordsBefore(e);if(await Gf(e.schema,e.table),CO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Dk,"deleteFilesBefore");async function Lk(e){let t=wO(e,"timestamp");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Zn.transformReq(e),isNaN(e.timestamp))throw hn(new Error,cl.INVALID_VALUE("Timestamp"),mn.BAD_REQUEST,jn.LOG_LEVELS.ERROR,cl.INVALID_VALUE("Timestamp"),!0);let r=Zn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,r,!0);let s=await xf.deleteAuditLogsBefore(e);return await Gf(e.schema,e.table),CO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Lk,"deleteAuditLogsBefore");async function UO(e){e.ids&&(e.hash_values=e.ids);let t=Ok(e);if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);Zn.transformReq(e);let r=Zn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,r,!0);try{await Gf(e.schema,e.table);let s=await xf.deleteRecords(e);return Zn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ck}`),s}catch(s){if(s.message===jn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ik;return n.message=jn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UO,"deleteRecord")});var ul=m((zse,PO)=>{var Mk=require("crypto"),LO=9;function Pk(e){let t=Bk(LO),r=MO(e+t);return t+r}a(Pk,"createHash");function vk(e,t){let r=e.substr(0,LO),s=r+MO(t+r);return e===s}a(vk,"validateHash");function Bk(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(Bk,"generateSalt");function MO(e){return Mk.createHash("md5").update(e).digest("hex")}a(MO,"md5");PO.exports={hash:Pk,validate:vk}});var BO=m((Xse,vO)=>{var kf=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 Hk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,kf.validateObject(e,It)}a(Hk,"addUserValidation");function qk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,kf.validateObject(e,It)}a(qk,"alterUserValidation");function Fk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,kf.validateObject(e,It)}a(Fk,"dropUserValidation");vO.exports={addUserValidation:Hk,alterUserValidation:qk,dropUserValidation:Fk}});var Be=m((ene,qO)=>{"use strict";var{platform:jse}=require("os"),Gk="nats-server.zip",Vf="nats-server",xk=process.platform==="win32"?`${Vf}.exe`:Vf,$f="HDB",kk=/^[^\s.,*>]+$/,HO="__request__",Vk=a(e=>`${e}.${HO}`,"REQUEST_SUBJECT"),$k={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Yk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Kk={HUB:"hub.pid",LEAF:"leaf.pid"},Wk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Qk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:$f,deliver_subject:"__HDB__.WORKQUEUE"},zk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:$f,deliver_subject:"HDB.SCHEMAQUEUE"},Jk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:$f,deliver_subject:"HDB.USERQUEUE"},Xk={SUCCESS:"success",ERROR:"error"},Zk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},jk={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eV={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},tV={debug:"-D",trace:"-DVV"};qO.exports={NATS_SERVER_ZIP:Gk,NATS_SERVER_NAME:Vf,NATS_BINARY_NAME:xk,PID_FILES:Kk,NATS_CONFIG_FILES:Yk,SERVER_SUFFIX:Wk,WORK_QUEUE_CONSUMER_NAMES:Qk,SCHEMA_QUEUE_CONSUMER_NAMES:zk,USER_QUEUE_CONSUMER_NAMES:Jk,NATS_TERM_CONSTRAINTS_RX:kk,REQUEST_SUFFIX:HO,UPDATE_REMOTE_RESPONSE_STATUSES:Xk,CLUSTER_STATUS_STATUSES:Zk,REQUEST_SUBJECT:Vk,SUBJECT_PREFIXES:jk,MSG_HEADERS:$k,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:tV,LOG_LEVEL_HIERARCHY:eV}});var GO=m((rne,FO)=>{"use strict";var ll=A(),_l=class{static{a(this,"BaseLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Yf=class extends _l{static{a(this,"ExtendedLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:_l,ExtendedLicense:Yf}});var ba=m((nne,KO)=>{"use strict";var Vi=require("fs-extra"),xO=ul(),kO=require("crypto"),rV=require("moment"),sV=require("uuid").v4,wt=x(),Wf=require("path"),nV=V(),Sn=A(),iV=GO().ExtendedLicense,ki="invalid license key format",oV="061183",aV="mofi25",cV="aes-256-cbc",uV=16,lV=32,VO=Q();VO.initSync();var Kf;KO.exports={validateLicense:$O,generateFingerPrint:dV,licenseSearch:YO,getLicense:hV};function Qf(){return Wf.join(VO.getHdbBasePath(),Sn.LICENSE_KEY_DIR_NAME,Sn.LICENSE_FILE_NAME)}a(Qf,"getLicenseDirPath");function _V(){let e=Qf();return Wf.join(e,Sn.LICENSE_FILE_NAME)}a(_V,"getLicenseFilePath");function zf(){let e=Qf();return Wf.join(e,Sn.REG_KEY_FILE_NAME)}a(zf,"getFingerPrintFilePath");async function dV(){let e=zf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await EV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(dV,"generateFingerPrint");async function EV(){let e=sV(),t=xO.hash(e),r=zf();try{await Vi.mkdirp(Qf()),await Vi.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(EV,"writeFingerprint");function $O(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Sn.RAM_ALLOCATION_ENUM.DEFAULT,version:Sn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=zf(),n=!1;try{n=Vi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=Vi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(aV),c=o[1];c=Buffer.concat([Buffer.from(c)],uV);let u=Buffer.concat([Buffer.from(i)],lV),l=kO.createDecipheriv(cV,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=fV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ki),wt.error(ki),new Error(ki)}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(ki),wt.error(ki),new Error(ki)}else r.exp_date=_;r.exp_date<rV().valueOf()&&(r.valid_date=!1),xO.validate(o[1],`${oV}${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($O,"validateLicense");function fV(e,t){try{let r=kO.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(fV,"checkOldLicense");function YO(){let e=new iV,t=[];try{t=Vi.readFileSync(_V(),"utf-8").split(Sn.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(nV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$O(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=Sn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Kf=e,e}a(YO,"licenseSearch");async function hV(){return Kf||await YO(),Kf}a(hV,"getLicense")});var br=m((une,cN)=>{"use strict";var XO="username is required",ZO="nothing to update, must supply active, role or password to update",jO="password cannot be an empty string",eN="If role is specified, it cannot be empty.",tN="active must be true or false";cN.exports={addUser:NV,alterUser:bV,dropUser:IV,getSuperUser:DV,userInfo:wV,listUsers:El,listUsersExternal:CV,setUsersToGlobal:Yi,findAndValidateUser:aN,getClusterUser:LV,USERNAME_REQUIRED:XO,ALTERUSER_NOTHING_TO_UPDATE:ZO,EMPTY_PASSWORD:jO,EMPTY_ROLE:eN,ACTIVE_BOOLEAN:tN};var rN=Nr(),mV=ei(),Xf=ul(),sN=BO(),nN=Or(),Zf=Vs(),or=V(),iN=require("validate.js"),ue=x(),{promisify:SV}=require("util"),jf=xs(),WO=A(),QO=Be(),pV=Tr(),one=Q(),ane=ba(),TV=Wn(),{table:cne}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:RV}=W(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:Jf,HDB_ERROR_MSGS:$i}=RV,{UserEventMsg:eh}=Fr(),zO=require("lodash"),{_assignPackageExport:gV}=require("../index");gV("getUser",aN);var oN={username:!0,active:!0,role:!0,password:!0},JO=new Map,dl=nN.searchByValue,AV=nN.searchByHash,OV=SV(mV.delete);async function NV(e){let t=iN.cleanAttributes(e,oN),r=sN.addUserValidation(t);if(r)throw is(new Error,r.message,os.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 dl(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 is(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,$i.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=jf.encrypt(t.password)),t.password=Xf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Yi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,$i.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Zf.signalUserChange(new eh(process.pid)),`${c.username} successfully added`}a(NV,"addUser");async function bV(e){let t=iN.cleanAttributes(e,oN);if(or.isEmptyOrZeroLength(t.username))throw new Error(XO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(ZO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(jO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(tN);let r=yV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jf.encrypt(t.password)),t.password=Xf.hash(t.password)),t.role==="")throw new Error(eN);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 dl(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=$i.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.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 rN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Yi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Zf.signalUserChange(new eh(process.pid)),n}a(bV,"alterUser");function yV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yV,"isClusterUser");async function IV(e){try{let t=sN.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 is(new Error,$i.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await OV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Yi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Zf.signalUserChange(new eh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(IV,"dropUser");async function wV(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 AV(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(wV,"userInfo");async function CV(){let e;try{e=await El()}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(CV,"listUsersExternal");async function El(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dl(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]=zO.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 dl(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=zO.cloneDeep(o),o.role=r[o.role],UV(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(El,"listUsers");function UV(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(TV)){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(UV,"appendSystemTablesToRole");async function Yi(){try{let e=await El();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function aN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw is(new Error,Jf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,Jf.USER_INACTIVE,os.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(JO.get(t)===s.password)return n;if(Xf.validate(s.password,t))JO.set(t,s.password);else throw is(new Error,Jf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aN,"findAndValidateUser");async function DV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(DV,"getSuperUser");async function LV(){let e=await El(),t=pV.getConfigFromFile(WO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===WO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QO.SERVER_SUFFIX.ADMIN,r}a(LV,"getClusterUser")});var Ia=m((Ene,dN)=>{"use strict";var ti=x(),ar=A(),MV=sO(),_ne=ks(),dne=zn(),PV=br(),{validateEvent:uN}=Fr(),ya=qr(),vV=require("process"),{resetDatabases:BV}=(de(),re(Ne)),HV={[ar.ITC_EVENT_TYPES.SCHEMA]:qV,[ar.ITC_EVENT_TYPES.USER]:_N};async function qV(e){let t=uN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await MV(e.message),await FV(e.message)}a(qV,"schemaHandler");async function FV(e){try{ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=BV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(FV,"syncSchemaMetadata");var lN=[];async function _N(e){try{try{ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=uN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${vV.pid} received user event:`,e),await PV.setUsersToGlobal();for(let r of lN)r()}catch(t){ti.error(t)}}a(_N,"userHandler");_N.addListener=function(e){lN.push(e)};dN.exports=HV});var Fr=m((Tne,fN)=>{"use strict";var hne=x(),th=V(),GV=A(),{ITC_ERRORS:wa}=rr(),{parentPort:mne,threadId:xV,isMainThread:kV,workerData:Sne}=require("worker_threads"),{onMessageFromWorkers:VV,broadcast:pne,broadcastWithAcknowledgement:$V}=dt();fN.exports={sendItcEvent:YV,validateEvent:EN,SchemaEventMsg:KV,UserEventMsg:WV};var fl;VV(async(e,t)=>{fl=fl||Ia(),EN(e),fl[e.type]&&await fl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function YV(e){return!kV&&e.message&&(e.message.originator=xV),$V(e)}a(YV,"sendItcEvent");function EN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||th.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||th.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||th.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(GV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(EN,"validateEvent");function KV(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(KV,"SchemaEventMsg");function WV(e){this.originator=e}a(WV,"UserEventMsg")});var Vs=m((Ane,pN)=>{"use strict";var hN=A(),gne=V(),hl=x(),mN=eO(),Ki,{sendItcEvent:SN}=Fr();function QV(e){try{hl.trace("signalSchemaChange called with message:",e),Ki=Ki||Ia();let t=new mN(hN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),SN(t)}catch(t){hl.error(t)}}a(QV,"signalSchemaChange");function zV(e){try{hl.trace("signalUserChange called with message:",e),Ki=Ki||Ia();let t=new mN(hN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),SN(t)}catch(t){hl.error(t)}}a(zV,"signalUserChange");pN.exports={signalSchemaChange:QV,signalUserChange:zV}});var ml=m((Nne,RN)=>{"use strict";var TN=V(),JV=A(),XV=x(),ZV=Zu(),jV=Xu(),e$=Vs(),{SchemaEventMsg:t$}=Fr(),r$="already exists in";RN.exports=s$;async function s$(e,t,r){if(TN.isEmptyOrZeroLength(r))return r;let s=[];TN.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 n$(e,t.schema,t.name,i)})),n}a(s$,"lmdbCheckForNewAttributes");async function n$(e,t,r,s){let n=new jV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await i$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(r$))XV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(n$,"createNewAttribute");async function i$(e){let t;return t=await ZV(e),e$.signalSchemaChange(new t$(process.pid,JV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(i$,"createAttribute")});var Wi=m((yne,gN)=>{"use strict";var rh=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}};gN.exports=rh});var ON=m((wne,AN)=>{"use strict";var o$=Wi(),a$=A().OPERATIONS_ENUM,sh=class extends o${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(a$.INSERT,r,s,n,i),this.records=t}};AN.exports=sh});var bN=m((Une,NN)=>{"use strict";var c$=Wi(),u$=A().OPERATIONS_ENUM,nh=class extends c${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(u$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};NN.exports=nh});var IN=m((Lne,yN)=>{"use strict";var l$=Wi(),_$=A().OPERATIONS_ENUM,ih=class extends l${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=ih});var CN=m((Pne,wN)=>{"use strict";var d$=Wi(),E$=A().OPERATIONS_ENUM,oh=class extends d${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(E$.DELETE,s,n,t,i),this.original_records=r}};wN.exports=oh});var Ca=m((Hne,MN)=>{"use strict";var Bne=require("path"),UN=ye(),f$=ON(),h$=bN(),m$=IN(),S$=CN(),Qi=xe(),DN=V(),{CONFIG_PARAMS:p$}=A(),LN=Q();LN.initSync();var Sl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:T$}=we();MN.exports=R$;async function R$(e,t){if(LN.get(p$.LOGGING_AUDITLOG)===!1)return;let r=T$(e.schema,e.table),s=await UN.openEnvironment(r,e.table,!0),n=g$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){UN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),DN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(R$,"writeTransaction");function g$(e,t){let r=DN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Sl.INSERT)return new f$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPDATE)return new h$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPSERT)return new m$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.DELETE)return new S$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(g$,"createTransactionObject")});var ah=m((Gne,PN)=>{"use strict";var A$=pa(),Fne=Ta(),Ua=A(),O$=Oa(),N$=Fi().insertRecords,b$=ye(),y$=x(),I$=ml(),{getSchemaPath:w$}=we(),C$=Ca();PN.exports=U$;async function U$(e){try{let{schema_table:t,attributes:r}=A$(e);O$(e,r,t.hash_attribute),e.schema!==Ua.SYSTEM_SCHEMA_NAME&&(r.includes(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await I$(e.hdb_auth_header,t,r),n=w$(e.schema,e.table),i=await b$.openEnvironment(n,e.table),o=await N$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await C$(e,o)}catch(c){y$.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(U$,"lmdbCreateRecords")});var HN=m((kne,BN)=>{"use strict";var vN=A(),D$=ah(),L$=Ta(),M$=require("fs-extra"),{getSchemaPath:P$}=we();BN.exports=v$;async function v$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new L$(vN.SYSTEM_SCHEMA_NAME,vN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await D$(r),await M$.mkdirp(P$(e.schema))}a(v$,"lmdbCreateSchema")});var FN=m(($ne,qN)=>{"use strict";var ch=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}};qN.exports=ch});var VN=m((zne,kN)=>{"use strict";var GN=ye(),uh=Ht(),lh=rr().LMDB_ERRORS_ENUM,B$=xe(),xN=x(),Kne=V(),H$=require("lmdb"),q$=FN(),F$=A(),{OVERFLOW_MARKER:Wne,MAX_SEARCH_KEY_LENGTH:Qne}=B$,G$=F$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function x$(e,t,r,s){if(uh.validateEnv(e),t===void 0)throw new Error(lh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lh.IDS_REQUIRED):new Error(lh.IDS_MUST_BE_ITERABLE);try{let n=GN.listDBIs(e);GN.initializeDBIs(e,t,n);let i=new q$,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[G$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,H$.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 $=uh.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{xN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){xN.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=uh.getNextMonotonicTime(),i}catch(n){throw n}}a(x$,"deleteRecords");kN.exports={deleteRecords:x$}});var Da=m((Xne,YN)=>{"use strict";var zi=V(),k$=VN(),V$=ye(),{getSchemaPath:$$}=we(),Y$=Ca(),K$=x();YN.exports=W$;async function W$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return $N([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.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=$$(e.schema,e.table),i=await V$.openEnvironment(n,e.table),o=await k$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Y$(e,o)}catch(c){K$.error(`unable to write transaction due to ${c.message}`)}return $N(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(W$,"lmdbDeleteRecords");function $N(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($N,"createDeleteResponse")});var dh=m((eie,KN)=>{"use strict";var Q$=A(),jne=Ht();function _h(e,t){let r=Object.create(null);if(t.length===1&&Q$.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(_h,"parseRow");function z$(e,t,r,s){let n=_h(r,e);s.push(n)}a(z$,"searchAll");function J$(e,t,r,s){let n=_h(r,e);s[t]=n}a(J$,"searchAllToMap");function X$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(X$,"iterateDBI");function ri(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(ri,"pushResults");function Z$(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(Z$,"endsWith");function j$(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(j$,"contains");function eY(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(eY,"greaterThanCompare");function tY(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a(tY,"greaterThanEqualCompare");function rY(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(rY,"lessThanCompare");function sY(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(sY,"lessThanEqualCompare");KN.exports={parseRow:_h,searchAll:z$,searchAllToMap:J$,iterateDBI:X$,endsWith:Z$,contains:j$,greaterThanCompare:eY,greaterThanEqualCompare:tY,lessThanCompare:rY,lessThanEqualCompare:sY,pushResults:ri}});var Ji=m((iie,jN)=>{"use strict";var pn=ye(),rie=x(),cr=Ht(),pl=xe(),ke=rr().LMDB_ERRORS_ENUM,sie=V(),nY=A(),Tl=dh(),{parseRow:iY}=Tl,nie=require("lmdb"),{OVERFLOW_MARKER:WN,MAX_SEARCH_KEY_LENGTH:oY}=pl;function QN(e,t,r,s=!1,n=void 0,i=void 0){return si(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(QN,"iterateFullIndex");function La(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(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(La,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=pn.openDBI(n,r);i[pl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&pn.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(si,"setupTransaction");function zN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(WN)){if(!n)if(r)n=pn.openDBI(e,r);else{let u=pn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=pn.openDBI(e,u[l]),!n[pl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(zN,"getOverflowCheck");function aY(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 si(e,t,t,(o,c,u)=>(Rl(r),r=Ma(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>iY(l.value,r))))}a(aY,"searchAll");function cY(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);Rl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of QN(e,t,t,s,n,i))o.set(c,Tl.parseRow(u,r));return o}a(cY,"searchAllToMap");function uY(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=QN(e,void 0,t,r,s,n),c=o.transaction,u=zN(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(uY,"iterateDBI");function lY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return pn.statDBI(e,t).entryCount}a(lY,"countAll");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return Tn(e,r,s),si(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(_Y,"equals");function dY(e,t,r){return Tn(e,t,r),pn.openDBI(e,t).getValuesCount(r)}a(dY,"count");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){return Tn(e,r,s),si(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(EY,"startsWith");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){return JN(e,t,r,s,n,i,o,!0)}a(fY,"endsWith");function JN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Tn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=zN(_,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(WN)?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[pl.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(JN,"contains");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!0,!1)}a(hY,"greaterThan");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!1,!1)}a(mY,"greaterThanEqual");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!0)}a(SY,"lessThan");function pY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!1)}a(pY,"lessThanEqual");function TY(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 La(e,t,r,s,n,i,o,c)}a(TY,"between");function RY(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(Rl(r),r=Ma(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=Tl.parseRow(c,r)),o}a(RY,"searchByHash");function gY(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(gY,"checkHashExists");function AY(e,t,r,s,n=[]){return ZN(e,t,r,s,n),XN(e,t,r,s,n).map(i=>i[1])}a(AY,"batchSearchByHash");function OY(e,t,r,s,n=[]){ZN(e,t,r,s,n);let i=new Map;for(let[o,c]of XN(e,t,r,s,n))i.set(o,c);return i}a(OY,"batchSearchByHashToMap");function XN(e,t,r,s,n=[]){return si(e,t,t,(i,o,c)=>{r=Ma(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Tl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(XN,"batchHashSearch");function ZN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(ZN,"initializeBatchSearchByHash");function Rl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Rl,"validateFetchAttributes");function Tn(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>oY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(Tn,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&nY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=pn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");jN.exports={searchAll:aY,searchAllToMap:cY,count:dY,countAll:lY,equals:_Y,startsWith:EY,endsWith:fY,contains:JN,searchByHash:RY,setGetWholeRowAttributes:Ma,batchSearchByHash:AY,batchSearchByHashToMap:OY,checkHashExists:gY,iterateDBI:uY,greaterThan:hY,greaterThanEqual:mY,lessThan:SY,lessThanEqual:pY,between:TY}});var Xi=m((aie,nb)=>{var eb=require("lodash"),tb=Pe(),Ce=require("joi"),NY=V(),{hdb_schema_table:gl,checkValidTable:rb,hdb_table:sb,hdb_database:Al}=ss(),{handleHDBError:bY,hdb_errors:yY}=W(),{getDatabases:IY}=(de(),re(Ne)),{HTTP_STATUS_CODES:wY}=yY,CY=Ce.object({database:Al,schema:Al,table:sb,search_attribute:gl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(gl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),UY=Ce.object({database:Al,schema:Al,table:sb,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(gl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:gl,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()});nb.exports=function(e,t){let r=null;switch(t){case"value":r=tb.validateBySchema(e,CY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rb("database",e.schema)),i(rb("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=tb.validateBySchema(e,UY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=NY.checkGlobalSchemaTable(e.schema,e.table);if(n)return bY(new Error,n,wY.NOT_FOUND);let o=IY()[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=eb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!eb.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 Eh=m((uie,ib)=>{"use strict";var DY=ye(),LY=Xi(),{getSchemaPath:MY}=we();ib.exports=PY;function PY(e){let t=LY(e,"hashes");if(t)throw t;let r=MY(e.schema,e.table);return DY.openEnvironment(r,e.table)}a(PY,"initialize")});var fh=m((_ie,ob)=>{"use strict";var vY=Ji(),BY=Eh();ob.exports=HY;async function HY(e){let t=await BY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return vY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(HY,"lmdbGetDataByHash")});var Zi=m((Eie,ab)=>{"use strict";var hh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ab.exports=hh});var ub=m((mie,cb)=>{"use strict";var hie=Zi(),qY=Ji(),FY=Eh();cb.exports=GY;async function GY(e){let t=await FY(e),r=global.hdb_schema[e.schema][e.table];return qY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(GY,"lmdbSearchByHash")});var as=m((pie,lb)=>{"use strict";var mh=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=_}};lb.exports=mh});var Ol=m((Rie,mb)=>{"use strict";var Ct=Ji(),xY=ye(),kY=V(),ie=xe(),ni=A(),VY=Wn(),_b=rr().LMDB_ERRORS_ENUM,{getSchemaPath:$Y}=we(),$s=ni.SEARCH_WILDCARDS;async function YY(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=VY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hb(e,s.hash_attribute,r,t);return Eb(e,n,s.hash_attribute,r)}a(YY,"prepSearch");async function Eb(e,t,r,s){let n=$Y(e.schema,e.table),i=await xY.openEnvironment(n,e.table),o=fb(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(KY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?db(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?db(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(Eb,"executeSearch");function fb(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(fb,"searchByType");function db(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(db,"createMapFromIterable");function KY(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(KY,"checkToFetchMore");function hb(e,t,r,s){if(kY.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),$s.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf($s[0])<0&&n.indexOf($s[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($s.indexOf(i)>=0&&$s.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if($s.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if($s.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes($s[0])||n.includes($s[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(_b.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_b.UNKNOWN_SEARCH_TYPE)}}a(hb,"createSearchTypeFromSearchObject");mb.exports={executeSearch:Eb,createSearchTypeFromSearchObject:hb,prepSearch:YY,searchByType:fb}});var pb=m((Oie,Sb)=>{"use strict";var Aie=as(),WY=Xi(),QY=V(),zY=A(),JY=Ol();Sb.exports=XY;function XY(e,t){if(!QY.isEmpty(t)&&zY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=WY(e,"value");if(s)throw s;let n=!0;return JY.prepSearch(e,t,n)}a(XY,"lmdbGetDataByValue")});var Pa=m((yie,Tb)=>{"use strict";var bie=as(),ZY=Xi(),jY=V(),eK=A(),tK=Ol();Tb.exports=rK;async function rK(e,t){if(!jY.isEmpty(t)&&eK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZY(e,"value");if(s)throw s;return tK.prepSearch(e,t,!1)}a(rK,"lmdbSearchByValue")});var gb=m((Cie,Rb)=>{"use strict";var wie=xe(),Sh=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}},ph=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Th=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Rb.exports={SearchByConditionsObject:Sh,SearchCondition:ph,SortAttribute:Th}});var yb=m((Mie,bb)=>{"use strict";var Die=gb().SearchByConditionsObject,sK=as(),nK=Xi(),Rh=Ji(),Nl=xe(),{Resource:Lie}=(jr(),re(FE)),Nb=Ol(),iK=dh(),oK=require("lodash"),{getSchemaPath:aK}=we(),Ab=ye(),{handleHDBError:cK,hdb_errors:uK}=W(),{HTTP_STATUS_CODES:lK}=uK,_K=1e8;bb.exports=dK;async function dK(e){let t=nK(e,"conditions");if(t)throw cK(t,t.message,lK.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=aK(e.schema,e.table),s=await Ab.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Ab.openDBI(s,l.search_attribute);let i=oK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Nl.SEARCH_TYPES.EQUALS?l.estimated_count=Rh.count(s,l.search_attribute,l.search_value):_===Nl.SEARCH_TYPES.CONTAINS||_===Nl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=_K}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ob(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(Nb.filterByType),d=_.length,E=Rh.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=>iK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ob(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=Rh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(dK,"lmdbSearchByConditions");async function Ob(e,t,r,s){let n=new sK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Nl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nb.searchByType(e,n,i,s).map(o=>o.value)}a(Ob,"executeConditionSearch")});var va=m((vie,Ib)=>{"use strict";var EK=A().OPERATIONS_ENUM,gh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=EK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ib.exports=gh});var Ah=m((Hie,vb)=>{"use strict";var Db=as(),Lb=va(),Mb=Pa(),Pb=Da(),Ft=A(),wb=V(),Cb=ye(),{getTransactionAuditStorePath:fK,getSchemaPath:hK}=we(),Ub=x();vb.exports=mK;async function mK(e){try{if(wb.isEmpty(global.hdb_schema[e.schema])||wb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await SK(e),await pK(e);let t=hK(e.schema,e.table);try{await Cb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fK(e.schema,e.table);await Cb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(mK,"lmdbDropTable");async function SK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Pb(n)}a(SK,"deleteAttributesFromSystem");async function pK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Pb(n)}catch(i){throw i}}a(pK,"dropTableFromSystem")});var Hb=m((Fie,Bb)=>{"use strict";var TK=require("fs-extra"),RK=as(),gK=Zi(),AK=va(),OK=Ah(),NK=Da(),bK=fh(),yK=Pa(),Ys=A(),{getSchemaPath:IK}=we(),{handleHDBError:wK,hdb_errors:CK}=W(),{HDB_ERROR_MSGS:UK,HTTP_STATUS_CODES:DK}=CK;Bb.exports=LK;async function LK(e){let t;try{t=await MK(e.schema);let r=new RK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await yK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await OK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new AK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await NK(n);let i=IK(t);await TK.remove(i)}catch(r){throw r}}a(LK,"lmdbDropSchema");async function MK(e){let t=new gK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await bK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw wK(new Error,UK.SCHEMA_NOT_FOUND(e),DK.NOT_FOUND,void 0,void 0,!0);return s}a(MK,"validateDropSchema")});var Nh=m((xie,qb)=>{"use strict";var Oh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};qb.exports=Oh});var Gb=m(($ie,Fb)=>{"use strict";var PK=require("fs-extra"),bl=ye(),{getTransactionAuditStorePath:vK}=we(),bh=xe(),Vie=Nh();Fb.exports=BK;async function BK(e){let t;try{let r=vK(e.schema,e.table);await PK.mkdirp(r),t=await bl.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{bl.createDBI(t,bh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bl.createDBI(t,bh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bl.createDBI(t,bh.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(BK,"createTransactionsAuditEnvironment")});var $b=m((Kie,Vb)=>{"use strict";var yh=A(),xb=ye(),HK=Fi(),{getSystemSchemaPath:qK,getSchemaPath:FK}=we(),GK=Wn(),xK=Zu(),Ih=Xu(),kK=x(),VK=Gb(),Ch=GK.hdb_table,kb=[];for(let e=0;e<Ch.attributes.length;e++)kb.push(Ch.attributes[e].attribute);Vb.exports=$K;async function $K(e,t){let r=FK(t.schema,t.table),s=new Ih(t.schema,t.table,yh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ih(t.schema,t.table,yh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ih(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xb.createEnvironment(r,t.table),e!==void 0){let o=await xb.openEnvironment(qK(),yh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HK.insertRecords(o,Ch.hash_attribute,kb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await wh(s),await wh(n),await wh(i)}await VK(t)}catch(o){throw o}}a($K,"lmdbCreateTable");async function wh(e){try{await xK(e)}catch(t){kK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wh,"createAttribute")});var Kb=m((Qie,Yb)=>{"use strict";var YK=pa(),KK=Oa(),WK=ml(),Ba=A(),QK=Fi().updateRecords,zK=ye(),{getSchemaPath:JK}=we(),XK=Ca(),ZK=x();Yb.exports=jK;async function jK(e){try{let{schema_table:t,attributes:r}=YK(e);KK(e,r,t.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(r.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WK(e.hdb_auth_header,t,r),n=JK(e.schema,e.table),i=await zK.openEnvironment(n,e.table),o=await QK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await XK(e,o)}catch(c){ZK.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(jK,"lmdbUpdateRecords")});var Qb=m((Jie,Wb)=>{"use strict";var e1=A().OPERATIONS_ENUM,Uh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=e1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Wb.exports=Uh});var Jb=m((jie,zb)=>{"use strict";var Zie=Qb(),t1=pa(),r1=Oa(),s1=ml(),Ha=A(),n1=Fi().upsertRecords,i1=ye(),{getSchemaPath:o1}=we(),a1=Ca(),c1=x(),{handleHDBError:u1,hdb_errors:l1}=W();zb.exports=_1;async function _1(e){let t;try{t=t1(e)}catch(u){throw u1(u,u.message,l1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;r1(e,s,r.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(s.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await s1(e.hdb_auth_header,r,s),i=o1(e.schema,e.table),o=await i1.openEnvironment(i,e.table),c=await n1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await a1(e,c)}catch(u){c1.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(_1,"lmdbUpsertRecords")});var Zb=m((toe,Xb)=>{"use strict";var Dh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Xb.exports=Dh});var ey=m((soe,jb)=>{"use strict";var Lh=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}};jb.exports=Lh});var sy=m((ooe,ry)=>{"use strict";var Mh=ye(),{getTransactionAuditStorePath:d1}=we(),ioe=Zb(),qa=xe(),E1=V(),ty=ey(),f1=require("util").promisify,h1=f1(setTimeout),m1=1e4,S1=100;ry.exports=p1;async function p1(e){let t=d1(e.schema,e.table),r=await Mh.openEnvironment(t,e.table,!0),s=Mh.listDBIs(r);Mh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ty;do n=await T1(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 h1(S1);while(n.transactions_deleted>0);return i}a(p1,"deleteAuditLogsBefore");async function T1(e,t){let r=new ty;try{let s=e.dbis[qa.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[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];E1.isEmpty(c)||(n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>m1)break}return await n,r}catch(s){throw s}}a(T1,"deleteTransactions")});var iy=m((coe,ny)=>{"use strict";var Ph=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ny.exports=Ph});var ay=m((_oe,oy)=>{"use strict";var R1=as(),g1=va(),loe=iy(),cs=A(),A1=V(),vh=ye(),O1=Wn(),N1=Pa(),b1=Da(),{getSchemaPath:y1}=we();oy.exports=I1;async function I1(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=O1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await C1(e),n=y1(e.schema,e.table),i=await vh.openEnvironment(n,e.table);return t===!0&&await w1(e,i,r.hash_attribute),vh.dropDBI(i,e.attribute),s}a(I1,"lmdbDropAttribute");async function w1(e,t,r){let s=vh.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(w1,"removeAttributeFromAllObjects");async function C1(e){let t=new R1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await N1(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(A1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new g1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return b1(i)}a(C1,"dropAttributeFromSystem")});var Ey=m((foe,dy)=>{"use strict";var Bh=ye(),ji=xe(),Eoe=Ht(),Hh=A(),cy=V(),{getTransactionAuditStorePath:U1}=we(),D1=Ji(),yl=Wi(),L1=x();dy.exports=M1;async function M1(e){let t=U1(e.schema,e.table),r=await Bh.openEnvironment(t,e.table,!0),s=Bh.listDBIs(r);Bh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uy(r,e.search_values);case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,v1(r,e.search_values,n);case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return P1(r,e.search_values);default:return uy(r)}}a(M1,"readAuditLog");function uy(e,t=[0,Date.now()]){cy.isEmpty(t[0])&&(t[0]=0),cy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ji.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 yl,n))}a(uy,"searchTransactionsByTimestamp");function P1(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[ji.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,_y(e,i))}return Object.fromEntries(r)}a(P1,"searchTransactionsByUsername");function v1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=D1.equals(e,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ji.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=_y(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ly(u,"records",r,_,o),ly(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(v1,"searchTransactionsByHashValues");function ly(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 yl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new yl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(ly,"loopRecords");function _y(e,t){let r=[];try{let s=e.dbis[ji.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 yl,i);r.push(o)}}catch(i){L1.warn(i)}return r}catch(s){throw s}}a(_y,"batchSearchTransactions")});var hy=m((poe,fy)=>{"use strict";var{getSchemaPath:moe}=we(),Soe=ye(),{database:B1}=(de(),re(Ne));fy.exports={writeTransaction:H1};async function H1(e,t,r){return B1({database:e,table:t}).transaction(r)}a(H1,"writeTransaction")});var Ty=m((Roe,py)=>{"use strict";var{getSchemaPath:my}=we(),Sy=ye();py.exports={flush:q1,resetReadTxn:F1};async function q1(e,t){return(await Sy.openEnvironment(my(e,t),t.toString())).flushed}a(q1,"flush");async function F1(e,t){try{(await Sy.openEnvironment(my(e,t),t.toString())).resetReadTxn()}catch{}}a(F1,"resetReadTxn")});var Oy=m((Aoe,Ay)=>{"use strict";var{Readable:G1}=require("stream"),{getDatabases:x1}=(de(),re(Ne)),{readSync:k1,openSync:V1,createReadStream:Ry}=require("fs"),{open:$1}=require("lmdb"),gy=xu(),Y1=Vu(),{INTERNAL_DBIS_NAME:K1}=xe();Ay.exports=Q1;var qh=32768,W1=100;async function Q1(e){let t=e.database||e.schema||"data",r=x1()[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=$1({noSync:!0,maxDbs:Y1.MAX_DBS}),E,f=d.openDB(K1,new gy(!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 gy(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),T++%W1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=Ry(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=V1(o.path);return o.transaction(()=>{let l=Buffer.alloc(qh);k1(c,l,0,qh);let _=o.useReadTransaction(),d=Ry(null,{fd:c,start:qh}),E=new G1.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(Q1,"getBackup")});var yy=m((Noe,by)=>{"use strict";var z1=x(),{handleHDBError:J1}=W(),X1=cA(),Z1=Zu(),j1=ah(),eW=HN(),tW=Da(),rW=fh(),sW=ub(),nW=pb(),iW=Pa(),oW=yb(),aW=Hb(),cW=$b(),uW=Kb(),lW=Jb(),_W=sy(),dW=Ah(),EW=ay(),fW=Ey(),hW=hy(),Ny=Ty(),mW=Oy(),Fh=class extends X1{static{a(this,"LMDBBridge")}async searchByConditions(t){return oW(t)}async getDataByHash(t){return await rW(t)}async searchByHash(t){return await sW(t)}async getDataByValue(t,r){return await nW(t,r)}async searchByValue(t){return await iW(t)}async createSchema(t){return await eW(t)}async dropSchema(t){return await aW(t)}async createTable(t,r){return await cW(t,r)}async dropTable(t){return await dW(t)}async createAttribute(t){return await Z1(t)}async createRecords(t){return await j1(t)}async updateRecords(t){return await uW(t)}async upsertRecords(t){try{return await lW(t)}catch(r){throw J1(r,null,null,z1.ERR,r)}}async deleteRecords(t){return await tW(t)}async dropAttribute(t){return await EW(t)}async deleteAuditLogsBefore(t){return await _W(t)}async readAuditLog(t){return await fW(t)}writeTransaction(t,r,s){return hW.writeTransaction(t,r,s)}flush(t,r){return Ny.flush(t,r)}resetReadTxn(t,r){return Ny.resetReadTxn(t,r)}getBackup(t){return mW(t)}};by.exports=Fh});var vy={};je(vy,{ResourceBridge:()=>kh});function Vh({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 wy(e,t){let r=us(e),s=Vh(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&&Pu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||pW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,SW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Cy(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*Uy(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 Dy,Il,Gr,Ly,My,kr,Gh,xh,Py,SW,pW,TW,RW,Iy,kh,By=Se(()=>{"use strict";Dy=C(yy()),Il=C(Xi()),Gr=C(W());de();Ly=C(pa()),My=C(Oa()),kr=C(A()),Gh=C(Vs()),xh=C(Fr()),Py=C(V());Yn();vu();({HDB_ERROR_MSGS:SW}=Gr.hdb_errors),pW="data",TW=1e4,RW=10,kh=class extends Dy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Iy=this}async searchByConditions(t){let r=(0,Il.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(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:Vh(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 us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(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){us(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Gh.signalSchemaChange(new xh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await $h(t.schema),Gh.signalSchemaChange(new xh.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,Iy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Ly.default)(t);(0,My.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=Pu(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 Cy(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,Py.async_set_timeout)(RW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%TW===0&&await l();return u.length>0&&await l(),n?Cy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Il.default)(t,"hashes");if(r)throw r;return wy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of wy(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,Il.default)(t,"value");if(s)throw s;let n=us(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:Vh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(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){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(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 Uy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Uy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Vh,"getSelect");a(wy,"getRecords");a(us,"getTable");a(Cy,"createDeleteResponse");a(Uy,"groupRecordsInHistory")});var qr=m((Uoe,Hy)=>{"use strict";var{ResourceBridge:gW}=(By(),re(vy)),AW=Q();AW.initSync();var wl;function OW(){return wl||(wl=new gW,wl)}a(OW,"getBridge");Hy.exports=OW()});var xy=m((Loe,Gy)=>{"use strict";var qy=require("lodash"),Ga=require("mathjs"),NW=require("jsonata"),Fy=V();Gy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?qy.uniqWith(e,qy.isEqual):e,searchJSON:bW,mad:xa.bind(null,Ga.mad),mean:xa.bind(null,Ga.mean),mode:xa.bind(null,Ga.mode),prod:xa.bind(null,Ga.prod),median:xa.bind(null,Ga.median)};function xa(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(xa,"aggregateFunction");function bW(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=NW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(bW,"searchJSON")});var Vy=m((Poe,ky)=>{"use strict";var We=require("moment"),Yh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;ky.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(Yh),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(Yh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Yh)}});var Wy=m((voe,Ky)=>{"use strict";var yW=require("@turf/area"),IW=require("@turf/length"),wW=require("@turf/circle"),CW=require("@turf/difference"),UW=require("@turf/distance"),DW=require("@turf/boolean-contains"),LW=require("@turf/boolean-equal"),MW=require("@turf/boolean-disjoint"),PW=require("@turf/helpers"),$y=A(),le=V();Ky.exports={geoArea:vW,geoLength:BW,geoCircle:HW,geoDifference:qW,geoDistance:Yy,geoNear:FW,geoContains:GW,geoEqual:xW,geoCrosses:kW,geoConvert:VW};var Kh="geo1 is required",Wh="geo2 is required";function vW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),yW.default(e)}a(vW,"geoArea");function BW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),IW.default(e,{units:t||"kilometers"})}a(BW,"geoLength");function HW(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)),wW.default(e,t,{units:r||"kilometers"})}a(HW,"geoCircle");function qW(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)),CW(e,t)}a(qW,"geoDifference");function Yy(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)),UW.default(e,t,{units:r||"kilometers"})}a(Yy,"geoDistance");function FW(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 Yy(e,t,s)<=r}a(FW,"geoNear");function GW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),DW.default(e,t)}a(GW,"geoContains");function xW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),LW.default(e,t)}a(xW,"geoEqual");function kW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!MW.default(e,t)}a(kW,"geoCrosses");function VW(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($y.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($y.GEO_CONVERSION_ENUM).join(",")}`);return PW[t](e,r)}a(VW,"geoConvert")});var Cl=m((Hoe,Qy)=>{var ii=xy(),ur=Vy(),ls=Wy();Qy.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.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=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var Zy=m((qoe,Xy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var $W=Cl(),zy=require("clone"),Ul=require("recursive-iterator"),se=x(),ne=V(),eo=qr(),YW=A(),{hdb_errors:KW}=W(),{getDatabases:Jy}=(de(),re(Ne)),WW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";$W(pt);var Qh=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 Ul(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(zy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ka.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=Jy()[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 Ul(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 Ul(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(YW.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&&ka.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(zy(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(WW)>-1&&this.tables.forEach(n=>{let i={columnid:Jy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ka.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 eo.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 eo.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 eo.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 eo.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=ka.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 Ul(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=ka.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 eo.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(KW.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 eo.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)}};Xy.exports=Qh});var Or=m((Goe,jy)=>{"use strict";var QW=oA();jy.exports={searchByConditions:JW,searchByHash:XW,searchByValue:ZW,search:jW};var zh=qr(),{transformReq:Jh}=V(),zW=Zy();async function JW(e){return Jh(e),zh.searchByConditions(e)}a(JW,"searchByConditions");async function XW(e){Jh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zh.searchByHash(e))r&&t.push(r);return t}a(XW,"searchByHash");async function ZW(e){Jh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zh.searchByValue(e))t.push(r);return t}a(ZW,"searchByValue");function jW(e,t){try{let r=new QW(e);r.validate(),new zW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jW,"search")});var Dl=m((koe,eI)=>{"use strict";var eQ=qr();eI.exports={writeTransaction:tQ};function tQ(e,t,r){return eQ.writeTransaction(e,t,r)}a(tQ,"writeTransaction")});var nI=m((Yoe,sI)=>{"use strict";var rQ=Or(),sQ=ks(),tI=x(),nQ=Nr(),$oe=Dl(),iQ=require("clone"),Zh=require("alasql"),oQ=Cl(),rI=require("util"),aQ=rI.promisify(sQ.getTableSchema),cQ=rI.promisify(rQ.search),uQ=A(),Xh=V();oQ(Zh);sI.exports={update:_Q};var lQ="There was a problem performing this update. Please check the logs and try again.";async function _Q({statement:e,hdb_user:t}){let r=await aQ(e.table.databaseid,e.table.tableid),s=dQ(e.columns);Xh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=iQ(n),c=Xh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Zh.parse(u).statements[0],_=await cQ(l),d=EQ(s,_);return fQ(o,d,t)}a(_Q,"update");function dQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Zh.compile(`SELECT ${r.expression.toString()} AS [${uQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tI.error(t),new Error(lQ)}}a(dQ,"createUpdateRecord");function EQ(e,t){return Xh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(EQ,"buildUpdateRecords");async function fQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await nQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(fQ,"updateRecords")});var oI=m((zoe,iI)=>{var hQ=require("alasql"),mQ=Or(),SQ=x(),pQ=qr(),em=require("util"),jh=V(),TQ=A(),RQ=ks(),Woe=Dl(),Qoe=Nr(),gQ="record",AQ="successfully deleted",OQ=em.callbackify(IQ),NQ=em.promisify(mQ.search),bQ=em.promisify(RQ.getTableSchema);iI.exports={convertDelete:OQ};function yQ(e){return`${e.deleted_hashes.length} ${gQ}${e.deleted_hashes.length===1?"":"s"} ${AQ}`}a(yQ,"generateReturnMessage");async function IQ({statement:e,hdb_user:t}){let r=await bQ(e.table.databaseid,e.table.tableid);jh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=jh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=hQ.parse(o).statements[0],u={operation:TQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await NQ(c);let l=await pQ.deleteRecords(u);return jh.isEmptyOrZeroLength(l.message)&&(l.message=yQ(l)),delete l.txn_time,l}catch(l){throw SQ.error(l),l.hdb_code?l.message:l}}a(IQ,"convertDelete")});var _I=m((Xoe,lI)=>{"use strict";var wQ=zn(),{hdb_errors:aI}=W(),{getDatabases:cI}=(de(),re(Ne));lI.exports={checkSchemaExists:uI,checkSchemaTableExists:CQ,schema_describe:wQ};async function uI(e){if(!cI()[e])return aI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uI,"checkSchemaExists");async function CQ(e,t){let r=await uI(e);if(r)return r;if(!cI()[e][t])return aI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(CQ,"checkSchemaTableExists")});var Va=m((joe,UQ)=>{UQ.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 Bl={};je(Bl,{addAnalyticsListener:()=>nm,recordAction:()=>_s,recordActionBinary:()=>to,setAnalyticsEnabled:()=>DQ});function DQ(e){gI=e}function _s(e,t,r,s,n){if(!gI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Pl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Pl.set(i,o)),Ml||LQ()}function to(e,t,r,s,n){_s(e?1:0,t,r,s,n)}function nm(e){OI.push(e)}function LQ(){Ml=performance.now(),setTimeout(()=>{let e=performance.now()-Ml;Ml=0;let t=[],r={time:Date.now(),period:e,threadId:oi.threadId,metrics:t};for(let[n,i]of Pl)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:oi.threadId,...s});for(let n of OI)n(t);Pl=new Map,oi.parentPort?oi.parentPort.postMessage({type:AI,report:r}):bI({report:r})},sm).unref()}async function MQ(e,t=6e4){let r=im(),s;for(let _ of r.primaryStore.getRange({start:Ll+"z",end:Ll,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 q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await PQ()}for(let[_,d]of i)d.id=Ll+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Ll+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-dI,active:l-EI,time:c}),dI=u,EI=l}async function vQ(e,t){let r=im(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function im(){return fI||(fI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function HQ(){NI=!0,setInterval(async()=>{await MQ(sm,rm),await vQ(BQ,sm)},rm/2).unref()}function bI(e,t){let r=e.report;r.threadId=t?.threadId||oi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(hI+=s.mean*s.count);r.totalBytesProcessed=hI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(mI.get(t))}),mI.set(t,t.performance.eventLoopUtilization())),r.id=(0,TI.getNextMonotonicTime)(),im().put(r),NI||HQ(),qQ&&(yI=GQ(r))}async function GQ(e){if(await yI,!Rn){let r=(0,$a.dirname)((0,pI.getLogFilePath)());try{Rn=await(0,tm.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{Rn=await(0,tm.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await Rn.stat()).size;if(t>FQ){let r=Buffer.alloc(t);await Rn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Rn.write(r,{position:0}),await Rn.truncate(r.length),t=r.length}await Rn.write(JSON.stringify(e)+`
6
6
  `,t)}var oi,SI,pI,$a,tm,TI,vl,RI,Pl,rm,gI,Ml,sm,AI,OI,Ll,dI,EI,PQ,BQ,fI,NI,hI,mI,qQ,yI,Rn,FQ,ai=Se(()=>{oi=require("worker_threads"),SI=C(dt());de();pI=C(x()),$a=require("path"),tm=require("fs/promises"),TI=C(Ht()),vl=C(Q()),RI=C(A());Xr();(0,vl.initSync)();Pl=new Map,rm=(0,vl.get)(RI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,gI=rm>0;a(DQ,"setAnalyticsEnabled");a(_s,"recordAction");tt.recordAnalytics=_s;a(to,"recordActionBinary");Ml=0,sm=1e3,AI="analytics-report",OI=[];a(nm,"addAnalyticsListener");a(LQ,"sendAnalytics");Ll="sum-";a(MQ,"aggregation");dI=0,EI=0,PQ=a(()=>new Promise(setImmediate),"rest");a(vQ,"cleanup");BQ=36e5;a(im,"getAnalyticsTable");(0,SI.setChildListenerByType)(AI,bI);a(HQ,"startScheduledTasks");hI=0,mI=new Map,qQ=!1;a(bI,"recordAnalytics");FQ=1e6;a(GQ,"logAnalytics")});var nt=m((Eae,YI)=>{"use strict";var Tt=Q();Tt.initSync();var xQ=require("fs-extra"),kQ=require("semver"),Qa=require("path"),{monotonicFactory:VQ}=require("ulidx"),um=VQ(),$Q=require("util"),wI=require("child_process"),YQ=$Q.promisify(wI.exec),KQ=wI.spawn,_e=Be(),Te=A(),Hl=V(),yr=x(),ql=xs(),WQ=Dl(),Ya=Tr(),{Encoder:QQ,decode:lm}=require("msgpackr"),CI=new QQ,{isEmpty:ci}=Hl,UI=br(),DI=12e10,zQ=48*36e11,JQ=5e9,{connect:XQ,StorageType:LI,RetentionPolicy:MI,AckPolicy:Fl,DeliverPolicy:Gl,DiscardPolicy:ZQ,NatsConnection:uae,JetStreamManager:lae,JetStreamClient:_ae,StringCodec:dae,JSONCodec:jQ,createInbox:_m,headers:ez,ErrorCode:II}=require("nats"),{PACKAGE_ROOT:tz}=A(),rz=Va(),{recordAction:sz}=(ai(),re(Bl)),PI=jQ(),nz="clustering",iz=rz.engines[_e.NATS_SERVER_NAME],oz=Qa.join(tz,"dependencies"),cm=Qa.join(oz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),om,am,Ka,ro,so;YI.exports={runCommand:vI,checkNATSServerInstalled:az,createConnection:dm,getConnection:xl,getJetStreamManager:za,getJetStream:BI,getNATSReferences:Gt,getServerList:uz,createLocalStream:Em,listStreams:HI,deleteLocalStream:lz,getServerConfig:Ja,listRemoteStreams:_z,viewStream:dz,viewStreamIterator:Ez,publishToStream:fz,createWorkQueueStream:hz,addSourceToWorkStream:FI,request:Sz,removeSourceFromWorkStream:xI,reloadNATS:fm,reloadNATSHub:pz,reloadNATSLeaf:Tz,extractServerName:GI,requestErrorHandler:Rz,updateWorkStream:gz,createLocalTableStream:VI,createTableStreams:Az,purgeTableStream:$I,purgeSchemaTableStreams:Oz,getStreamInfo:Nz,updateLocalStreams:yz,closeConnection:cz,getJsmServerName:Xa,addNatsMsgHeader:qI,updateIngestStreamConsumer:mz};async function vI(e,t=void 0){let{stdout:r,stderr:s}=await YQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
8
  `,"")}a(vI,"runCommand");async function az(){try{await xQ.access(cm)}catch{return!1}let e=await vI(`${cm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kQ.eq(t,iz)}a(az,"checkNATSServerInstalled");async function dm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await UI.getClusterUser();if(ci(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 XQ({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(dm,"createConnection");async function cz(){ds&&(await ds.drain(),ds=void 0,ro=void 0,so=void 0,Wa=void 0)}a(cz,"closeConnection");var ds,Wa;async function xl(){return Wa||(Wa=dm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ds=await Wa),ds||Wa}a(xl,"getConnection");async function za(){if(ro)return ro;ci(ds)&&await xl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=await ds.jetstreamManager({domain:e}),ro}a(za,"getJetStreamManager");async function BI(){if(so)return so;ci(ds)&&await xl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=ds.jetstream({domain:e}),so}a(BI,"getJetStream");async function Gt(){let e=ds||await xl(),t=ro||await za(),r=so||await BI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function uz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await UI.getClusterUser(),n=await dm(t,r,s),i=_m(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=PI.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 Hl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(uz,"getServerList");async function Em(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:LI.File,retention:MI.Limits,subjects:t,discard:ZQ.Old,duplicate_window:DI,max_msgs:n,max_bytes:i,max_age:s})}a(Em,"createLocalStream");async function HI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(HI,"listStreams");async function lz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(lz,"deleteLocalStream");async function _z(e){let{connection:t}=await Gt(),r=[],s=_m(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(PI.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(_z,"listRemoteStreams");async function dz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=um(),o={durable_name:i,ack_policy:Fl.Explicit};t&&(o.deliver_policy=Gl.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=lm(_.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(dz,"viewStream");async function*Ez(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=um(),o={durable_name:i,ack_policy:Fl.Explicit};t&&(o.deliver_policy=Gl.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 _=lm(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(Ez,"viewStreamIterator");async function fz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=qI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:CI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),sz(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 kI(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 Em(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(fz,"publishToStream");function qI(e,t){t===void 0&&(t=ez());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Hl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${um()}`;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(qI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),nz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ci(am)&&(am={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Qa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),am;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ci(om)&&(om={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Qa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),om;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function hz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:LI.File,retention:MI.Limits,duplicate_window:DI,max_age:zQ,max_bytes:JQ,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:Fl.Explicit,durable_name:e.durable_name,deliver_policy:Gl.All,max_ack_pending:1e4});else throw s}}a(hz,"createWorkQueueStream");async function mz(){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:Fl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Gl.All,max_ack_pending:1e4}))}a(mz,"updateIngestStreamConsumer");async function FI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=GI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=ql.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 GI(e){return e.split(".")[1]}a(GI,"extractServerName");async function xI(e,t,r){let{schema:s,table:n}=r,i=ql.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(xI,"removeSourceFromWorkStream");async function Sz(e,t,r=2e4,s=_m()){if(!Hl.isObject(t))throw new Error("data param must be an object");let n=CI.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 lm(c.data)}a(Sz,"request");function fm(e){return new Promise(async(t,r)=>{let s=KQ(cm,["--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(fm,"reloadNATS");async function pz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fm(e)}a(pz,"reloadNATSHub");async function Tz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fm(e)}a(Tz,"reloadNATSLeaf");function Rz(e,t,r){let s;switch(e.code){case II.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case II.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Rz,"requestErrorHandler");async function gz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await kI(async()=>{e.subscribe===!0?await FI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await xI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(gz,"updateWorkStream");function kI(e){return WQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(kI,"exclusiveLock");async function VI(e,t){let r=ql.createNatsTableStreamName(e,t),s=await Xa(),n=bz(e,t,s);await Em(r,[n])}a(VI,"createLocalTableStream");async function Az(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await VI(s,n)}}a(Az,"createTableStreams");async function $I(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ql.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($I,"purgeTableStream");async function Oz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await $I(e,t[r])}a(Oz,"purgeSchemaTableStreams");async function Nz(e){return(await za()).streams.info(e)}a(Nz,"getStreamInfo");function bz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(bz,"createSubjectName");async function Xa(){if(Ka)return Ka;if(Ka=(await za())?.nc?.info?.server_name,Ka===void 0)throw new Error("Unable to get jetstream manager server name");return Ka}a(Xa,"getJsmServerName");async function yz(){let e=await za(),t=await Xa(),r=await HI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Iz(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(yz,"updateLocalStreams");function Iz(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(Iz,"updateStreamLimits")});var Yl=m((mae,zI)=>{"use strict";var no=Ju(),io=_I(),wz=x(),Cz=require("uuid").v4,hae=require("clone"),Vl=Vs(),oo=A(),Uz=require("util"),gn=qr(),{handleHDBError:xt,hdb_errors:Dz}=W(),{HDB_ERROR_MSGS:kl,HTTP_STATUS_CODES:kt}=Dz,{SchemaEventMsg:$l}=Fr(),KI=nt(),{getDatabases:Lz}=(de(),re(Ne)),{transformReq:ao}=V();zI.exports={createSchema:Mz,createSchemaStructure:WI,createTable:Pz,createTableStructure:QI,createAttribute:Fz,dropSchema:vz,dropTable:Bz,dropAttribute:Hz,getBackup:Gz};async function Mz(e){let t=await WI(e);return Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema)),t}a(Mz,"createSchema");async function WI(e){let t=no.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(ao(e),!await io.checkSchemaExists(e.schema))throw xt(new Error,kl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,kl.SCHEMA_EXISTS_ERR(e.schema),!0);return await gn.createSchema(e),`database '${e.schema}' successfully created`}a(WI,"createSchemaStructure");async function Pz(e){return ao(e),await QI(e)}a(Pz,"createTable");async function QI(e){let t=no.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(no.validateTableResidence(e.residence),!await io.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,kl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,kl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Cz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await gn.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 gn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(QI,"createTableStructure");async function vz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=no.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let n=await io.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,n,!0);let i=await io.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await gn.dropSchema(e),Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema)),await KI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(vz,"dropSchema");async function Bz(e){let t=no.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let r=await io.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,r,!0);return await gn.dropTable(e),await KI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Bz,"dropTable");async function Hz(e){let t=no.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let r=await io.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,oo.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(oo.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 gn.dropAttribute(e),qz(e),Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw wz.error(`Got an error deleting attribute ${Uz.inspect(e)}.`),s}}a(Hz,"dropAttribute");function qz(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(qz,"dropAttributeFromGlobal");async function Fz(e){ao(e);let t=Lz()[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 gn.createAttribute(e),Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Fz,"createAttribute");function Gz(e){return gn.getBackup(e)}a(Gz,"getBackup")});var XI=m((pae,JI)=>{"use strict";var{OPERATIONS_ENUM:xz}=A(),hm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=xz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};JI.exports=hm});var mm=m((gae,rw)=>{"use strict";var kz=qr(),Rae=XI(),Kl=V(),Wl=A(),Vz=Q(),{handleHDBError:ZI,hdb_errors:$z}=W(),{HDB_ERROR_MSGS:jI,HTTP_STATUS_CODES:ew}=$z,Yz=Object.values(Wl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),tw="To use this operation audit log must be enabled in harperdb-config.yaml";rw.exports=Kz;async function Kz(e){if(Kl.isEmpty(e.schema))throw new Error(jI.SCHEMA_REQUIRED_ERR);if(Kl.isEmpty(e.table))throw new Error(jI.TABLE_REQUIRED_ERR);if(!Vz.get(Wl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ZI(new Error,tw,ew.BAD_REQUEST,Wl.LOG_LEVELS.ERROR,tw,!0);let t=Kl.checkSchemaTableExist(e.schema,e.table);if(t)throw ZI(new Error,t,ew.NOT_FOUND,Wl.LOG_LEVELS.ERROR,t,!0);if(!Kl.isEmpty(e.search_type)&&Yz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await kz.readAuditLog(e)}a(Kz,"readAuditLog")});var nw=m((Oae,sw)=>{"use strict";var{OPERATIONS_ENUM:Wz}=A(),Sm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Wz.GET_BACKUP,this.schema=t,this.table=r}};sw.exports=Sm});var aw=m((Iae,ow)=>{"use strict";var Qz=qr(),bae=nw(),pm=V(),zz=A(),yae=Q(),{handleHDBError:Jz,hdb_errors:Xz}=W(),{HDB_ERROR_MSGS:iw,HTTP_STATUS_CODES:Zz}=Xz;ow.exports=jz;async function jz(e){if(pm.isEmpty(e.schema))throw new Error(iw.SCHEMA_REQUIRED_ERR);if(pm.isEmpty(e.table))throw new Error(iw.TABLE_REQUIRED_ERR);let t=pm.checkSchemaTableExist(e.schema,e.table);if(t)throw Jz(new Error,t,Zz.NOT_FOUND,zz.LOG_LEVELS.ERROR,t,!0);return await Qz.getBackup(read_audit_log_object)}a(jz,"getBackup")});var Ew=m((Cae,dw)=>{var An=require("validate.js"),uw=Pe(),co=A(),{handleHDBError:eJ,hdb_errors:tJ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:rJ}=tJ,Tm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),sJ={STRUCTURE_USER:"structure_user"},cw=Object.values(co.ROLE_TYPES_ENUM),nJ="attribute_permissions",iJ="attribute_name",{PERMS_CRUD_ENUM:uo}=co,oJ=[nJ,...Object.values(uo)],lw=[uo.READ,uo.INSERT,uo.UPDATE],aJ=[iJ,...lw];function cJ(e){let t=Tm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,_w(e,t)}a(cJ,"addRoleValidation");function uJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,_w(e,t)}a(uJ,"alterRoleValidation");function lJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,uw.validateObject(e,t)}a(lJ,"dropRoleValidation");var _J=["operation","role","id","permission","hdb_user","hdb_auth_header"];function _w(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)_J.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=uw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=dJ(e);o&&Qe(o,r),cw.forEach(c=>{e.permission[c]&&!An.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(cw.indexOf(o)<0){if(o===sJ.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(_=>{oJ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(uo).forEach(_=>{An.isDefined(l[_])?An.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),An.isDefined(l.attribute_permissions)){if(!An.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=>{!aJ.includes(T)&&T!==uo.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!An.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}lw.forEach(T=>{An.isDefined(f[T])?An.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 EJ(r)}a(_w,"customValidate");dw.exports={addRoleValidation:cJ,alterRoleValidation:uJ,dropRoleValidation:lJ};function dJ(e){let{operation:t,permission:r}=e;if(t===co.OPERATIONS_ENUM.ADD_ROLE||t===co.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?co.ROLE_TYPES_ENUM.SUPER_USER:co.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(dJ,"validateNoSUPerms");function EJ(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 eJ(new Error,s,rJ.BAD_REQUEST)}else return null}a(EJ,"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 bm=m((Dae,Sw)=>{"use strict";var fw=Nr(),hw=Or(),fJ=ei(),gm=Ew(),Am=Vs(),hJ=require("uuid").v4,mJ=require("util"),Ql=A(),SJ=V(),Om=hw.searchByValue,pJ=hw.searchByHash,TJ=mJ.promisify(fJ.delete),RJ=as(),gJ=Zi(),{hdb_errors:AJ,handleHDBError:lo}=W(),{HDB_ERROR_MSGS:mw,HTTP_STATUS_CODES:zl}=AJ,{UserEventMsg:Nm}=Fr();Sw.exports={addRole:OJ,alterRole:NJ,dropRole:bJ,listRoles:yJ};function Rm(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(Rm,"scrubRoleDetails");async function OJ(e){let t=gm.addRoleValidation(e);if(t)throw t;e=Rm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Om(r)||[])}catch(i){throw lo(i)}if(s&&s.length>0)throw lo(new Error,mw.ROLE_ALREADY_EXISTS(e.role),zl.CONFLICT,void 0,void 0,!0);e.id||(e.id=hJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await fw.insert(n),Am.signalUserChange(new Nm(process.pid)),e=Rm(e),e}a(OJ,"addRole");async function NJ(e){let t=gm.alterRoleValidation(e);if(t)throw t;e=Rm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await fw.update(r)}catch(n){throw lo(n)}if(s&&s?.message==="updated 0 of 1 records")throw lo(new Error,"Invalid role id",zl.BAD_REQUEST,void 0,void 0,!0);return await Am.signalUserChange(new Nm(process.pid)),e}a(NJ,"alterRole");async function bJ(e){let t=gm.dropRoleValidation(e);if(t)throw lo(new Error,t,zl.BAD_REQUEST,void 0,void 0,!0);let r=new gJ(Ql.SYSTEM_SCHEMA_NAME,Ql.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await pJ(r));if(s.length===0)throw lo(new Error,mw.ROLE_NOT_FOUND,zl.NOT_FOUND,void 0,void 0,!0);let n=new RJ(Ql.SYSTEM_SCHEMA_NAME,Ql.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Om(n)),o=!1;if(SJ.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 TJ(c),Am.signalUserChange(new Nm(process.pid)),`${s[0].role} successfully deleted`}a(bJ,"dropRole");async function yJ(){return Om({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(yJ,"listRoles")});var gw=m((Mae,Rw)=>{"use strict";var IJ=Q(),On=require("joi"),wJ=Pe(),pw=require("moment"),CJ=require("fs-extra"),ym=require("path"),UJ=require("lodash"),Za=A(),{LOG_LEVELS:ui}=A(),DJ="YYYY-MM-DD hh:mm:ss",LJ=ym.resolve(__dirname,"../logs");Rw.exports=function(e){return wJ.validateBySchema(e,MJ)};var MJ=On.object({from:On.custom(Tw),until:On.custom(Tw),level:On.valid(ui.NOTIFY,ui.FATAL,ui.ERROR,ui.WARN,ui.INFO,ui.DEBUG,ui.TRACE),order:On.valid("asc","desc"),limit:On.number().min(1),start:On.number().min(0),log_name:On.custom(PJ)});function Tw(e,t){if(pw(e,pw.ISO_8601).format(DJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Tw,"validateDatetime");function PJ(e,t){if(UJ.invert(Za.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=IJ.get(Za.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Za.LOG_NAMES.HDB:e,i=n===Za.LOG_NAMES.INSTALL?ym.join(LJ,Za.LOG_NAMES.INSTALL):ym.join(s,n);return CJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(PJ,"validateReadLogPath")});var wm=m((vae,Ow)=>{"use strict";var Jl=A(),vJ=x(),BJ=Q(),HJ=gw(),Im=require("path"),Aw=require("fs-extra"),{once:qJ}=require("events"),{handleHDBError:FJ,hdb_errors:GJ}=W(),{PACKAGE_ROOT:xJ}=A(),kJ=Im.join(xJ,"logs"),VJ=1e3,$J=200;Ow.exports=YJ;async function YJ(e){let t=HJ(e);if(t)throw FJ(t,t.message,GJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=BJ.get(Jl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Jl.LOG_NAMES.HDB:e.log_name,n=s===Jl.LOG_NAMES.INSTALL?Im.join(kJ,Jl.LOG_NAMES.INSTALL):Im.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?VJ: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(Aw.statSync(n).size-(h+5)*$J,0));let p=Aw.createReadStream(n,{start:T});p.on("error",b=>{vJ.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,q;for(;(q=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,Ze,cu]=q,Mi=cu.split("] ["),$o=Mi[0],Fn=Mi[1];Mi.splice(0,2),$={timestamp:Ze,thread:$o,level:Fn,tags:Mi,message:""},z=q.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,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&R<f?R++:b.level===o&&P>=z&&P<=q&&(Nn(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&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&R<f?R++:P>=z&&P<=q&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(Nn(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&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(Nn(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(Nn(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await qJ(p,"close"),O}a(YJ,"readLog");function Nn(e,t,r){t==="desc"?KJ(e,r):t==="asc"?WJ(e,r):r.push(e)}a(Nn,"pushLineToResult");function KJ(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(KJ,"insertDescending");function WJ(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(WJ,"insertAscending")});var Zl=m((Gae,Iw)=>{"use strict";var Cm=require("joi"),{string:Xl,boolean:Nw,date:QJ}=Cm.types(),zJ=Pe(),{validateSchemaExists:Hae,validateTableExists:qae,validateSchemaName:Fae}=ss(),JJ=A(),XJ=Be(),bw=Q();bw.initSync();var ZJ=Xl.invalid(bw.get(JJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(XJ.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(),yw={operation:Xl.valid("add_node","update_node"),node_name:ZJ,subscriptions:Cm.array().items({table:Xl.optional(),schema:Xl.required(),subscribe:Nw.required(),publish:Nw.required().custom(e2),start_time:QJ.iso()}).min(1).required()};function jJ(e){return zJ.validateBySchema(e,Cm.object(yw))}a(jJ,"addUpdateNodeValidator");function e2(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(e2,"checkForFalsy");Iw.exports={addUpdateNodeValidator:jJ,validation_schema:yw}});var Cw=m((kae,ww)=>{var t2=Pe(),r2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ww.exports=function(e){return t2.validateObject(e,r2)}});var Dm=m((Vae,Uw)=>{"use strict";var s2=A().OPERATIONS_ENUM,Um=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=s2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Uw.exports=Um});var Lw=m((Yae,Dw)=>{"use strict";var n2={OPERATION:"operation",REFRESH:"refresh"},Lm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Mm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Dw.exports={JWTTokens:Lm,TOKEN_TYPE_ENUM:n2,JWTRSAKeys:Mm}});var tc=m((Wae,Bw)=>{"use strict";var ec=require("jsonwebtoken"),Pm=require("fs-extra"),vm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:i2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=i2,ja=x(),Mw=ul(),qm=br(),o2=Nr().update,a2=Dm(),c2=Vs(),{UserEventMsg:u2}=Fr(),bn=Q();bn.initSync();var Bm=require("path"),{JWTTokens:l2,JWTRSAKeys:_2,TOKEN_TYPE_ENUM:jl}=Lw(),d2=bn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?bn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",E2=bn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?bn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",e_="RS256",Hm;Bw.exports={createTokens:f2,validateOperationToken:m2,refreshOperationToken:h2,validateRefreshToken:vw};async function f2(e){if(vm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ja.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await t_(),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 Pw(i,r.private_key,r.passphrase),c=await ec.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:E2,algorithm:e_,subject:jl.REFRESH}),u=Mw.hash(c),l=new a2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await o2(l)}catch(E){ja.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 c2.signalUserChange(new u2(process.pid)),new l2(o,c)}a(f2,"createTokens");async function Pw(e,t,r){return await ec.sign(e,{key:t,passphrase:r},{expiresIn:d2,algorithm:e_,subject:jl.OPERATION})}a(Pw,"signOperationToken");async function t_(){if(Hm===void 0)try{let e=Bm.join(bn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bm.join(bn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bm.join(bn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pm.readFile(e)).toString(),n=(await Pm.readFile(t)).toString(),i=(await Pm.readFile(r)).toString();Hm=new _2(i,n,s)}catch(e){throw ja.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Hm}a(t_,"getJWTRSAKeys");async function h2(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 vw(e.refresh_token);let t=await t_(),r=await ec.decode(e.refresh_token);return{operation_token:await Pw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(h2,"refreshOperationToken");async function m2(e){try{let t=await t_(),r=await ec.verify(e,t.public_key,{algorithms:e_,subject:jl.OPERATION});return await qm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ja.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(m2,"validateOperationToken");async function vw(e){let t;try{let r=await t_(),s=await ec.verify(e,r.public_key,{algorithms:e_,subject:jl.REFRESH});t=await qm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ja.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Mw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(vw,"validateRefreshToken")});var Fm=m((Jae,Fw)=>{"use strict";var S2=Cw(),_o=require("passport"),p2=require("passport-local").Strategy,T2=require("passport-http").BasicStrategy,R2=require("util"),g2=br(),qw=R2.callbackify(g2.findAndValidateUser),zae=rr(),A2=A(),Hw=tc();_o.use(new p2(function(e,t,r){qw(e,t,r)}));_o.use(new T2(function(e,t,r){qw(e,t,r)}));_o.serializeUser(function(e,t){t(null,e)});_o.deserializeUser(function(e,t){t(null,e)});function O2(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":_o.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===A2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Hw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Hw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:_o.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(O2,"authorize");function N2(e,t){let r=S2(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(N2,"checkPermissions");Fw.exports={authorize:O2,checkPermissions:N2}});var Eo=m((Zae,Gw)=>{"use strict";var Gm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},xm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Gw.exports={Node:Gm,NodeSubscription:xm}});var kw=m((ece,xw)=>{"use strict";var b2=A().OPERATIONS_ENUM,km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=b2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};xw.exports=km});var rc=m((rce,Vw)=>{"use strict";var Vm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},$m=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)}};Vw.exports={RemotePayloadObject:Vm,RemotePayloadSubscription:$m}});var Yw=m((nce,$w)=>{"use strict";var Ym=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}};$w.exports=Ym});var Qw=m((uce,Ww)=>{"use strict";var y2=Yw(),oce=xe(),Kw=ye(),I2=x(),{getSchemaPath:ace,getTransactionAuditStorePath:cce}=we(),{getDatabases:w2}=(de(),re(Ne));Ww.exports=C2;async function C2(e){let t=new y2;try{let r=w2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Kw.environmentDataSize(schema_path,e.name),o=await Kw.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){I2.warn(`unable to stat table dbi due to ${r}`)}return t}a(C2,"lmdbGetTableSize")});var Jw=m((_ce,zw)=>{"use strict";var Km=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}};zw.exports=Km});var fo=m((hce,eC)=>{"use strict";var U2=require("fs-extra"),D2=require("path"),Ut=require("systeminformation"),yn=x(),L2=nt(),Wm=Be(),s_=A(),M2=Qw(),jw=zn(),{getThreadInfo:Xw}=dt(),sS=Q();sS.initSync();var P2=Jw(),{openEnvironment:Ece}=ye(),{getSchemaPath:fce}=we(),{database:v2}=(de(),re(Ne)),r_;eC.exports={getHDBProcessInfo:Xm,getNetworkInfo:jm,getDiskInfo:Zm,getMemoryInfo:Jm,getCPUInfo:zm,getTimeInfo:Qm,getSystemInformation:eS,systemInformation:B2,getTableSize:tS,getMetrics:rS};function Qm(){return Ut.time()}a(Qm,"getTimeInfo");async function zm(){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:q,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return yn.error(`error in getCPUInfo: ${e}`),{}}}a(zm,"getCPUInfo");async function Jm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return yn.error(`error in getMemoryInfo: ${e}`),{}}}a(Jm,"getMemoryInfo");async function Xm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await U2.readFile(D2.join(sS.get(s_.CONFIG_PARAMS.ROOTPATH),s_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===s_.NODE_ERROR_CODES.ENOENT)yn.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 yn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Xm,"getHDBProcessInfo");async function Zm(){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 yn.error(`error in getDiskInfo: ${t}`),e}}a(Zm,"getDiskInfo");async function jm(){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 yn.error(`error in getNetworkInfo: ${t}`),e}}a(jm,"getNetworkInfo");async function eS(){if(r_!==void 0)return r_;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,r_=e,r_}catch(t){return yn.error(`error in getSystemInformation: ${t}`),e}}a(eS,"getSystemInformation");async function tS(){let e=[],t=await jw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await M2(s));return e}a(tS,"getTableSize");async function rS(){let e=await jw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=v2({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){yn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(rS,"getMetrics");async function Zw(){if(sS.get(s_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await L2.getNATSReferences(),r=await t.streams.info(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Wm.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(Zw,"getNatsStreamInfo");async function B2(e){let t=new P2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eS(),t.time=Qm(),t.cpu=await zm(),t.memory=await Jm(),t.disk=await Zm(),t.network=await jm(),t.harperdb_processes=await Xm(),t.table_size=await tS(),t.metrics=await rS(),t.threads=await Xw(),t.replication=await Zw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eS();break;case"time":t.time=Qm();break;case"cpu":t.cpu=await zm();break;case"memory":t.memory=await Jm();break;case"disk":t.disk=await Zm();break;case"network":t.network=await jm();break;case"harperdb_processes":t.harperdb_processes=await Xm();break;case"table_size":t.table_size=await tS();break;case"database_metrics":case"metrics":t.metrics=await rS();break;case"threads":t.threads=await Xw();break;case"replication":t.replication=await Zw();break;default:break}return t}a(B2,"systemInformation")});var nS=m((Tce,tC)=>{"use strict";var Sce=require("fs-extra"),pce=x();tC.exports={version:H2,printVersion:F2,nodeVersion:q2};var In=Va();function H2(){if(In)return In.version}a(H2,"version");function q2(){if(In&&In.engines&&In.engines["preferred-node"])return In.engines["preferred-node"]}a(q2,"nodeVersion");function F2(){In&&console.log(`HarperDB Version ${In.version}`)}a(F2,"printVersion")});var Es=m((Oce,iC)=>{"use strict";var G2=Nr(),iS=V(),x2=require("util"),li=A(),rC=Q();rC.initSync();var k2=Fm(),sC=Or(),{Node:gce,NodeSubscription:Ace}=Eo(),V2=Zi(),$2=kw(),{RemotePayloadObject:Y2,RemotePayloadSubscription:K2}=rc(),{handleHDBError:W2,hdb_errors:Q2}=W(),{HTTP_STATUS_CODES:z2,HDB_ERROR_MSGS:J2}=Q2,X2=as(),Z2=fo(),j2=nS(),{getDatabases:e3}=(de(),re(Ne)),t3=x2.promisify(k2.authorize),r3=sC.searchByHash,s3=sC.searchByValue;iC.exports={authHeaderToUser:n3,isEmpty:i3,getNodeRecord:o3,upsertNodeRecord:a3,buildNodePayloads:c3,checkClusteringEnabled:u3,getAllNodeRecords:l3,getSystemInfo:_3,reverseSubscription:nC};async function n3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await t3(t,null),e}a(n3,"authHeaderToUser");function i3(e){return e==null}a(i3,"isEmpty");async function o3(e){let t=new V2(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return r3(t)}a(o3,"getNodeRecord");async function a3(e){let t=new $2(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return G2.upsert(t)}a(a3,"upsertNodeRecord");function nC(e){if(iS.isEmpty(e.subscribe)||iS.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(nC,"reverseSubscription");function c3(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,_=iS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=nC(c),f=e3()[u]?.[l],h=new K2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new Y2(r,t,n,s)}a(c3,"buildNodePayloads");function u3(){if(!rC.get(li.CONFIG_PARAMS.CLUSTERING_ENABLED))throw W2(new Error,J2.CLUSTERING_NOT_ENABLED,z2.BAD_REQUEST,void 0,void 0,!0)}a(u3,"checkClusteringEnabled");async function l3(){let e=new X2(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await s3(e))}a(l3,"getAllNodeRecords");async function _3(){let e=await Z2.getSystemInformation();return{hdb_version:j2.version(),node_version:e.node_version,platform:e.platform}}a(_3,"getSystemInfo")});var oS=m((bce,EC)=>{"use strict";var n_=nt(),oC=V(),aC=Be(),cC=A(),i_=x(),uC=Yl(),d3=Nh(),{RemotePayloadObject:E3}=rc(),{handleHDBError:lC,hdb_errors:f3}=W(),{HTTP_STATUS_CODES:_C}=f3,{NodeSubscription:dC}=Eo();EC.exports=h3;async function h3(e,t){let r;try{r=await n_.request(`${t}.${aC.REQUEST_SUFFIX}`,new E3(cC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),i_.trace("Response from remote describe all request:",r)}catch(o){i_.error(`addNode received error from describe all request to remote node: ${o}`);let c=n_.requestErrorHandler(o,"add_node",t);throw lC(new Error,c,_C.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===aC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw lC(new Error,o,_C.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===cC.SYSTEM_SCHEMA_NAME){await n_.createLocalTableStream(c,u);let h=new dC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=oC.doesSchemaExist(c),_=s[c]!==void 0,d=u?oC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(i_.trace(`addNode creating schema: ${c}`),await uC.createSchema({operation:"create_schema",schema:c})),!d&&E){i_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new d3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await uC.createTable(h)}await n_.createLocalTableStream(c,u);let f=new dC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(h3,"reviewSubscriptions")});var ic=m((Ice,mC)=>{"use strict";var{handleHDBError:o_,hdb_errors:m3}=W(),{HTTP_STATUS_CODES:a_}=m3,{addUpdateNodeValidator:S3}=Zl(),sc=x(),hC=A(),fC=Be(),p3=V(),aS=nt(),nc=Es(),T3=Q(),R3=oS(),{Node:g3,NodeSubscription:A3}=Eo(),{broadcast:O3}=dt(),N3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",b3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",y3=T3.get(hC.CONFIG_PARAMS.CLUSTERING_NODENAME);mC.exports=I3;async function I3(e,t=!1){sc.trace("addNode called with:",e),nc.checkClusteringEnabled();let r=S3(e);if(r)throw o_(r,r.message,a_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await nc.getNodeRecord(s);if(!p3.isEmptyOrZeroLength(d))throw o_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await R3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=N3,o;let c=nc.buildNodePayloads(n,y3,hC.OPERATIONS_ENUM.ADD_NODE,await nc.getSystemInfo());sc.trace("addNode sending remote payload:",c);let u;try{u=await aS.request(`${s}.${fC.REQUEST_SUFFIX}`,c)}catch(d){sc.error(`addNode received error from request: ${d}`);let E=aS.requestErrorHandler(d,"add_node",s);throw o_(new Error,E,a_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===fC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw o_(new Error,d,a_.INTERNAL_SERVER_ERROR,"error",d)}sc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];sc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await aS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new A3(f.schema,f.table,f.publish,f.subscribe))}let _=new g3(s,l,u.system_info);return await nc.upsertNodeRecord(_),O3({type:"nats_update"}),i.length>0?o.message=b3:o.message=`Successfully added '${s}' to manifest`,o}a(I3,"addNode")});var uS=m((Cce,TC)=>{"use strict";var{handleHDBError:c_,hdb_errors:w3}=W(),{HTTP_STATUS_CODES:u_}=w3,{addUpdateNodeValidator:C3}=Zl(),oc=x(),pC=A(),SC=Be(),U3=V(),cS=nt(),ac=Es(),D3=Q(),{cloneDeep:L3}=require("lodash"),M3=oS(),{NodeSubscription:P3}=Eo(),{broadcast:v3}=dt(),B3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",H3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",q3=D3.get(pC.CONFIG_PARAMS.CLUSTERING_NODENAME);TC.exports=F3;async function F3(e){oc.trace("updateNode called with:",e),ac.checkClusteringEnabled();let t=C3(e);if(t)throw c_(t,t.message,u_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=L3(await ac.getNodeRecord(r));if(U3.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,u_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await M3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=B3,o;let c=ac.buildNodePayloads(n,q3,pC.OPERATIONS_ENUM.UPDATE_NODE,await ac.getSystemInfo());oc.trace("updateNode sending remote payload:",c);let u;try{u=await cS.request(`${r}.${SC.REQUEST_SUFFIX}`,c)}catch(l){oc.error(`updateNode received error from request: ${l}`);let _=cS.requestErrorHandler(l,"update_node",r);throw c_(new Error,_,u_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===SC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw c_(new Error,l,u_.INTERNAL_SERVER_ERROR,"error",l)}oc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];oc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await cS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await G3(s[0],n,u.system_info),i.length>0?o.message=H3:o.message=`Successfully updated '${r}'`,o}a(F3,"updateNode");async function G3(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 P3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ac.upsertNodeRecord(s),v3({type:"nats_update"})}a(G3,"updateNodeTable")});var NC=m((Dce,OC)=>{"use strict";var AC=require("joi"),{string:RC}=AC.types(),x3=Pe(),gC=A(),k3=Q(),V3=Be();OC.exports=$3;function $3(e){let t=RC.invalid(k3.get(gC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(V3.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=AC.object({operation:RC.valid(gC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return x3.validateBySchema(e,r)}a($3,"removeNodeValidator")});var uc=m((Mce,UC)=>{"use strict";var{handleHDBError:bC,hdb_errors:Y3}=W(),{HTTP_STATUS_CODES:yC}=Y3,K3=NC(),cc=x(),IC=Es(),W3=V(),l_=A(),wC=Be(),CC=nt(),Q3=Q(),{RemotePayloadObject:z3}=rc(),{NodeSubscription:J3}=Eo(),X3=va(),Z3=ei(),{broadcast:j3}=dt(),e4=Q3.get(l_.CONFIG_PARAMS.CLUSTERING_NODENAME);UC.exports=t4;async function t4(e){cc.trace("removeNode called with:",e),IC.checkClusteringEnabled();let t=K3(e);if(t)throw bC(t,t.message,yC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await IC.getNodeRecord(r);if(W3.isEmptyOrZeroLength(s))throw bC(new Error,`Node '${r}' was not found.`,yC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new z3(l_.OPERATIONS_ENUM.REMOVE_NODE,e4,[]),i,o=!1;try{i=await CC.request(`${r}.${wC.REQUEST_SUFFIX}`,n),cc.trace("Remove node reply from remote node:",r,i)}catch(u){cc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];cc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new J3(_.schema,_.table,!1,!1);await CC.updateWorkStream(d,r)}let c=new X3(l_.SYSTEM_SCHEMA_NAME,l_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Z3.deleteRecord(c),j3({type:"nats_update"}),i?.status===wC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cc.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(t4,"removeNode")});var MC=m((vce,LC)=>{"use strict";var DC=require("joi"),{string:r4,array:s4}=DC.types(),n4=Pe(),i4=Zl();LC.exports=o4;function o4(e){let t=DC.object({operation:r4.valid("configure_cluster").required(),connections:s4.items(i4.validation_schema).required()});return n4.validateBySchema(e,t)}a(o4,"configureClusterValidator")});var lS=m((Hce,qC)=>{"use strict";var a4=A(),__=x(),c4=V(),u4=uc(),l4=ic(),PC=Es(),_4=MC(),{handleHDBError:vC,hdb_errors:d4}=W(),{HTTP_STATUS_CODES:BC}=d4,E4="Configure cluster complete.",f4="Failed to configure the cluster. Check the logs for more details.",h4="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";qC.exports=m4;async function m4(e){__.trace("configure cluster called with:",e),PC.checkClusteringEnabled();let t=_4(e);if(t)throw vC(t,t.message,BC.BAD_REQUEST,void 0,void 0,!0);let r=await PC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(HC(u4,{operation:a4.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);__.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(HC(l4,f,f.node_name))}let c=await Promise.allSettled(i);__.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"&&(__.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(c4.isEmptyOrZeroLength(u))return{message:E4,connections:l};if(_)return{message:h4,failed_nodes:u,connections:l};throw vC(new Error,f4,BC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(m4,"configureCluster");async function HC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(HC,"functionWrapper")});var GC=m((Fce,FC)=>{"use strict";var d_=require("joi"),S4=Pe(),{validateSchemaExists:p4,validateTableExists:T4,validateSchemaName:R4}=ss(),g4=d_.object({operation:d_.string().valid("purge_stream"),schema:d_.string().custom(p4).custom(R4).required(),table:d_.string().custom(T4).required()});function A4(e){return S4.validateBySchema(e,g4)}a(A4,"purgeStreamValidator");FC.exports=A4});var _S=m((xce,xC)=>{"use strict";var{handleHDBError:O4,hdb_errors:N4}=W(),{HTTP_STATUS_CODES:b4}=N4,y4=GC(),I4=nt(),w4=Es();xC.exports=C4;async function C4(e){let t=y4(e);if(t)throw O4(t,t.message,b4.BAD_REQUEST,void 0,void 0,!0);w4.checkClusteringEnabled();let{schema:r,table:s}=e;return await I4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(C4,"purgeStream")});var f_=m((Vce,WC)=>{"use strict";var ES=Es(),U4=nt(),$C=Q(),E_=A(),_i=Be(),D4=V(),dS=x(),{RemotePayloadObject:L4}=rc(),{ErrorCode:kC}=require("nats"),VC=$C.get(E_.CONFIG_PARAMS.CLUSTERING_ENABLED),YC=$C.get(E_.CONFIG_PARAMS.CLUSTERING_NODENAME);WC.exports={clusterStatus:M4,buildNodeStatus:KC};async function M4(){let e={node_name:YC,is_enabled:VC,connections:[]};if(!VC)return e;let t=await ES.getAllNodeRecords();if(D4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(KC(t[s],e.connections));return await Promise.allSettled(r),e}a(M4,"clusterStatus");async function KC(e,t){let r=e.name,s=new L4(E_.OPERATIONS_ENUM.CLUSTER_STATUS,YC,void 0,await ES.getSystemInfo()),n,i,o=_i.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await U4.request(_i.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===_i.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=_i.CLUSTER_STATUS_STATUSES.CLOSED,dS.error(`Error getting node status from ${r} `,n))}catch(u){dS.warn(`Error getting node status from ${r}`,u),u.code===kC.NoResponders?o=_i.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===kC.Timeout?o=_i.CLUSTER_STATUS_STATUSES.TIMEOUT:o=_i.CLUSTER_STATUS_STATUSES.CLOSED}let c=new P4(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==E_.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){dS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(KC,"buildNodeStatus");function P4(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(P4,"NodeStatusObject")});var hS=m((Yce,QC)=>{"use strict";var{handleHDBError:v4,hdb_errors:B4}=W(),{HTTP_STATUS_CODES:H4}=B4,q4=nt(),F4=Es(),fS=V(),h_=require("joi"),G4=Pe(),x4=2e3,k4=h_.object({timeout:h_.number().min(1),connected_nodes:h_.boolean(),routes:h_.boolean()});QC.exports=V4;async function V4(e){F4.checkClusteringEnabled();let t=G4.validateBySchema(e,k4);if(t)throw v4(t,t.message,H4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||fS.autoCastBoolean(s),o=n===void 0||fS.autoCastBoolean(n),c={nodes:[]},u=await q4.getServerList(r??x4),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:fS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(V4,"clusterNetwork")});var ZC=m((Wce,XC)=>{"use strict";var mS=require("joi"),zC=Pe(),{route_constraints:JC}=yE();XC.exports={setRoutesValidator:$4,deleteRoutesValidator:Y4};function $4(e){let t=mS.object({server:mS.valid("hub","leaf").required(),routes:JC.required()});return zC.validateBySchema(e,t)}a($4,"setRoutesValidator");function Y4(e){let t=mS.object({routes:JC.required()});return zC.validateBySchema(e,t)}a(Y4,"deleteRoutesValidator")});var pS=m((zce,rU)=>{"use strict";var di=Tr(),SS=V(),m_=A(),jC=ZC(),{handleHDBError:eU,hdb_errors:K4}=W(),{HTTP_STATUS_CODES:tU}=K4,W4="cluster routes successfully set",Q4="cluster routes successfully deleted";rU.exports={setRoutes:z4,getRoutes:J4,deleteRoutes:X4};function z4(e){let t=jC.setRoutesValidator(e);if(t)throw eU(t,t.message,tU.BAD_REQUEST,void 0,void 0,!0);let r=di.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=SS.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"?di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:W4,set:o,skipped:i}}a(z4,"setRoutes");function J4(){let e=di.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(J4,"getRoutes");function X4(e){let t=jC.deleteRoutesValidator(e);if(t)throw eU(t,t.message,tU.BAD_REQUEST,void 0,void 0,!0);let r=di.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=SS.isEmptyOrZeroLength(s)?null:s,di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=SS.isEmptyOrZeroLength(n)?null:n,di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Q4,deleted:i,skipped:o}}a(X4,"deleteRoutes")});var nU=m((Xce,sU)=>{"use strict";var lc=require("alasql"),Ei=require("recursive-iterator"),$r=x(),Z4=V(),_c=A(),TS=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,eX(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=>_c.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=>!_c.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][_c.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=j4(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=>!_c.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new lc.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 j4(e){return e.filter(t=>t[_c.PERMS_CRUD_ENUM.READ])}a(j4,"filterReadRestrictedAttrs");function eX(e,t,r,s,n){tX(e,t,r,s,n)}a(eX,"interpretAST");function dc(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(dc,"addSchemaTableToMap");function tX(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof lc.yy.Insert?iX(e,t,r):e instanceof lc.yy.Select?rX(e,t,r,s,n):e instanceof lc.yy.Update?sX(e,t,r):e instanceof lc.yy.Delete?nX(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(tX,"getRecordAttributesAST");function rX(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(Z4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{dc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),dc(c.table,t,r,s,n)});let o=new Ei(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 Ei(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 Ei(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 Ei(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(rX,"getSelectAttributes");function sX(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.table.databaseid;dc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(sX,"getUpdateAttributes");function nX(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ei(e.where),n=e.table.databaseid;dc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(nX,"getDeleteAttributes");function iX(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.into.databaseid;dc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.into.tableid,n,i.columnid,t,r)}a(iX,"getInsertAttributes");function RS(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(RS,"pushAttribute");sU.exports=TS});var OS=m((jce,cU)=>{var S_=ba(),iU=require("chalk"),lr=x(),oU=require("prompt"),{promisify:oX}=require("util"),gS=A(),aX=require("fs-extra"),cX=require("path"),uX=V(),lX=nS(),aU=Q();aU.initSync();var _X=require("moment"),dX=oX(oU.get),EX=cX.join(aU.getHdbBasePath(),gS.LICENSE_KEY_DIR_NAME,gS.LICENSE_FILE_NAME,gS.LICENSE_FILE_NAME);cU.exports={getFingerprint:hX,setLicense:fX,parseLicense:AS,register:mX,getRegistrationInfo:pX};async function fX(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await AS(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(fX,"setLicense");async function hX(){let e={};try{e=await S_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(hX,"getFingerprint");async function AS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=S_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await aX.writeFile(EX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(AS,"parseLicense");async function mX(){let e=await SX();return AS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(mX,"register");async function SX(){let e=await S_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:iU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:iU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{oU.start()}catch(s){lr.error(s)}let r;try{r=await dX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(SX,"promptForRegistration");async function pX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await S_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(uX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=lX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=_X.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(pX,"getRegistrationInfo")});var lU=m((tue,uU)=>{"use strict";var TX=Be(),NS=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+TX.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"}};uU.exports=NS});var EU=m((sue,dU)=>{"use strict";var _U=Be(),bS=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+_U.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+_U.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"}};dU.exports=bS});var hU=m((iue,fU)=>{"use strict";var yS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};fU.exports=yS});var SU=m((aue,mU)=>{"use strict";var RX=Be(),IS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+RX.SERVER_SUFFIX.ADMIN,this.password=r}};mU.exports=IS});var US=m((uue,RU)=>{"use strict";var Ec=require("path"),g_=require("fs-extra"),gX=lU(),AX=EU(),OX=hU(),NX=SU(),wS=br(),ho=V(),Kt=Tr(),R_=A(),p_=Be(),{CONFIG_PARAMS:ze}=R_,hc=x(),A_=Q(),pU=xs(),CS=nt(),fc="clustering",bX=1e4,TU=5;RU.exports={generateNatsConfig:yX,removeNatsConfig:IX};async function yX(e=!1,t=void 0){A_.initSync();let r=A_.get(ze.ROOTPATH),s=Ec.join(r,fc,p_.PID_FILES.HUB),n=Ec.join(r,fc,p_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ec.join(r,fc,p_.NATS_CONFIG_FILES.HUB_SERVER),c=Ec.join(r,fc,p_.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 CS.checkNATSServerInstalled()||O_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await wS.listUsers(),p=Kt.getConfigFromFile(ze.CLUSTERING_USER),R=await wS.getClusterUser();(ho.isEmpty(R)||R.active!==!0)&&O_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await T_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await T_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await T_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await T_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of T.entries())Ze.role.role===R_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new NX(Ze.username,pU.decrypt(Ze.hash))),k.push(new OX(Ze.username,pU.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!ho.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 gX(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=ho.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await g_.writeJson(o,b),hc.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}`,q=new AX(Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await g_.writeJson(c,q),hc.trace(`Leaf server config written to ${c}`))}a(yX,"generateNatsConfig");async function T_(e){let t=A_.get(e);return ho.isEmpty(t)&&O_(`port undefined for '${e}'`),await ho.isPortTaken(t)&&O_(`'${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(T_,"isPortAvailable");function O_(e){let t=`Error generating clustering config: ${e}`;hc.error(t),console.error(t),process.exit(1)}a(O_,"generateNatsConfigError");async function IX(e){let{port:t,config_file:r}=CS.getServerConfig(e),{username:s,decrypt_hash:n}=await wS.getClusterUser(),i=0,o=500;for(;i<TU;){try{let l=await CS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){hc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=TU)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 ho.async_set_timeout(o*i)}let c="0".repeat(bX),u=Ec.join(A_.get(ze.ROOTPATH),fc,r);await g_.writeFile(u,c),await g_.remove(u),hc.notify(e,"started.")}a(IX,"removeNatsConfig")});var yU=m((_ue,bU)=>{"use strict";var _r=Q(),wX=ba(),oe=A(),mc=Be(),Ks=require("path"),{PACKAGE_ROOT:b_}=A(),gU=Q(),N_=V(),mo="/dev/null",CX=Ks.join(b_,"launchServiceScripts"),AU=Ks.join(b_,"utility/scripts"),UX=Ks.join(AU,oe.HDB_RESTART_SCRIPT),OU=Ks.resolve(b_,"dependencies",`${process.platform}-${process.arch}`,mc.NATS_BINARY_NAME);function NU(){let t=wX.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 N_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:b_}}a(NU,"generateMainServerConfig");var DX=9930;function LX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",mc.NATS_CONFIG_FILES.HUB_SERVER),r=Ks.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=gU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=mc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==DX?"-"+s:""),script:OU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(LX,"generateNatsHubServerConfig");var MX=9940;function PX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",mc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ks.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=gU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=mc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==MX?"-"+s:""),script:OU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(PX,"generateNatsLeafServerConfig");function vX(){_r.initSync();let e=Ks.join(_r.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:CX,autorestart:!1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mo,t.error_file=mo),t}a(vX,"generateClusteringUpgradeV4ServiceConfig");function BX(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return N_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:AU},script:UX}}a(BX,"generateRestart");function HX(){return{apps:[NU()]}}a(HX,"generateAllServiceConfigs");bU.exports={generateAllServiceConfigs:HX,generateMainServerConfig:NU,generateRestart:BX,generateNatsHubServerConfig:LX,generateNatsLeafServerConfig:PX,generateClusteringUpgradeV4ServiceConfig:vX}});var PS=m((pue,GU)=>{"use strict";var Re=A(),qX=V(),Sc=US(),pc=nt(),hs=Be(),wn=yU(),y_=Q(),Ws=x(),FX=Es(),{startWorker:IU,onMessageFromWorkers:GX}=dt(),xX=fo(),kX=require("util"),CU=require("child_process"),{execFile:VX}=CU,Eue=kX.promisify(CU.exec),fue=require("systeminformation"),fe;GU.exports={enterPM2Mode:$X,start:fi,stop:DS,reload:UU,restart:DU,list:LS,describe:MU,connect:Qs,kill:zX,startAllServices:JX,startService:MS,getUniqueServicesList:PU,restartAllServices:XX,isServiceRegistered:vU,reloadStopStart:BU,restartHdb:LU,deleteProcess:WX,startClusteringProcesses:qU,startClusteringThreads:FU,isHdbRestartRunning:QX,isClusteringRunning:jX,stopClustering:ZX,reloadClustering:eZ};var{PACKAGE_ROOT:hue}=A(),mue=A(),{loggerWithTag:Sue}=Ws,Tc=!1;GX(e=>{e.type==="restart"&&y_.initSync(!0)});function $X(){Tc=!0}a($X,"enterPM2Mode");function Qs(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ws.setupConsoleLogging(),r&&t(r),e(s)})})}a(Qs,"connect");var Wt,YX=10,wU;function fi(e){if(Tc)return KX(e);let t=VX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!wU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<YX&&fi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=y_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&hs.LOG_LEVEL_HIERARCHY[i]>=hs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===hs.LOG_LEVELS.ERR||l===hs.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=hs.LOG_LEVELS[d]}if(hs.LOG_LEVEL_HIERARCHY[i]>=hs.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===hs.LOG_LEVELS.ERR||l===hs.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{wU=!0,Wt&&(Wt.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)}Wt.push(t)}a(fi,"start");function KX(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(KX,"startWithPM2");function DS(e){if(!Tc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(DS,"stop");function UU(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(UU,"reload");function DU(e){if(!Tc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(DU,"restart");function WX(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(WX,"deleteProcess");async function LU(){await fi(wn.generateRestart())}a(LU,"restartHdb");async function QX(){let e=await LS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(QX,"isHdbRestartRunning");function LS(){return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(LS,"list");function MU(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(MU,"describe");function zX(){if(!Tc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(zX,"kill");async function JX(){try{await qU(),await FU(),await fi(wn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(JX,"startAllServices");async function MS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=wn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=wn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=wn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=wn.generateNatsHubServerConfig(),await fi(t),await Sc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=wn.generateNatsLeafServerConfig(),await fi(t),await Sc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=wn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fi(t)}catch(t){throw fe.disconnect(),t}}a(MS,"startService");async function PU(){try{let e=await LS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw fe.disconnect(),e}}a(PU,"getUniqueServicesList");async function XX(e=[]){try{let t=!1,r=await PU();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 DU(o))}t&&await BU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(XX,"restartAllServices");async function vU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await xX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(vU,"isServiceRegistered");async function BU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?y_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):y_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await MU(e),s=qX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await DS(e),await MS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await LU():await UU(e)}a(BU,"reloadStopStart");var HU;async function qU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await MS(t)}}a(qU,"startClusteringProcesses");async function FU(){HU=IU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await pc.createWorkQueueStream(hs.WORK_QUEUE_CONSUMER_NAMES),await pc.updateIngestStreamConsumer(),await pc.updateLocalStreams();let e=await FX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ws.info("Starting clustering upgrade 4.0.0 process"),IU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(FU,"startClusteringThreads");async function ZX(){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 HU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await DS(t)}}a(ZX,"stopClustering");async function jX(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await vU(t)===!1)return!1}return!0}a(jX,"isClusteringRunning");async function eZ(){await Sc.generateNatsConfig(!0),await pc.reloadNATSHub(),await pc.reloadNATSLeaf(),await Sc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Sc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(eZ,"reloadClustering")});var xS=m((Rue,KU)=>{"use strict";var tZ=require("minimist"),{isMainThread:HS,parentPort:VU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:Rc}=He,ms=x(),qS=V(),I_=US(),So=nt(),vS=Be(),$U=Tr(),Ss=PS(),xU=fo(),rZ=hE(),{restartWorkers:w_,onMessageByType:sZ}=dt(),{handleHDBError:nZ,hdb_errors:iZ}=W(),{HTTP_STATUS_CODES:oZ}=iZ,C_=Q();C_.initSync();var gc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,aZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",kU="Clustering is not enabled so cannot be restarted",cZ="Invalid service",hi,Yr;KU.exports={restart:YU,restartService:FS};HS&&sZ(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?FS({service:e.workerType}):YU({operation:"restart"})});async function YU(e){Yr=Object.keys(e).length===0,hi=await Ss.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=tZ(process.argv);if(t.service){await FS(t);return}if(Yr&&!hi){console.error(aZ);return}if(Yr&&console.log(gc),hi){Ss.enterPM2Mode(),ms.notify(gc);let r=rZ(Object.keys(He.CONFIG_PARAM_MAP),!0);return qS.isEmptyOrZeroLength(Object.keys(r))||$U.updateConfigValue(void 0,void 0,r,!0,!0),lZ(),gc}return HS?(ms.notify(gc),await GS(),setTimeout(()=>{w_()},50)):VU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),gc}a(YU,"restart");async function FS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw nZ(new Error,cZ,oZ.BAD_REQUEST,void 0,void 0,!0);if(hi=await Ss.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!HS)return VU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Rc.clustering:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=kU;break}Yr&&console.log("Restarting clustering"),ms.notify("Restarting clustering"),await GS();break;case Rc.clustering_config:case Rc["clustering config"]:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=kU;break}Yr&&console.log("Restarting clustering_config"),ms.notify("Restarting clustering_config"),await Ss.reloadClustering();break;case"custom_functions":case"custom functions":case Rc.harperdb:case Rc.http_workers:if(Yr&&!hi){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"),ms.notify("Restarting http_workers"),hi?await Ss.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{w_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ms.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(FS,"restartService");async function uZ(){await So.publishToStream(`${vS.SUBJECT_PREFIXES.TXN}.${vS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,vS.WORK_QUEUE_CONSUMER_NAMES.stream_name,So.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(uZ,"postDummyNatsMsg");async function lZ(){await GS(),await Ss.restart(He.HDB_PROC_DESCRIPTOR),await qS.async_set_timeout(2e3),C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await BS(),Yr&&(await So.closeConnection(),process.exit(0))}a(lZ,"restartPM2Mode");async function GS(){if(!$U.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await xU.getHDBProcessInfo()).clustering.length===0)ms.trace("Clustering not running, restart will start clustering services"),await I_.generateNatsConfig(!0),await Ss.startClusteringProcesses(),await Ss.startClusteringThreads(),await BS(),Yr&&await So.closeConnection();else{await uZ(),await I_.generateNatsConfig(!0),hi?(ms.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ss.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ss.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await xU.getHDBProcessInfo()).clustering.forEach(n=>{ms.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await qS.async_set_timeout(3e3),await BS(),await So.updateLocalStreams(),Yr&&await So.closeConnection(),ms.trace("Restart clustering restarting ingest and reply service threads");let t=w_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=w_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(GS,"restartClustering");async function BS(){await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(BS,"removeNatsConfig")});var sD=m((Oue,rD)=>{"use strict";var Aue=require("lodash"),Qt=A(),{handleHDBError:WU,hdb_errors:_Z}=W(),{HDB_ERROR_MSGS:dZ,HTTP_STATUS_CODES:EZ}=_Z,kS=x();rD.exports={getRolePermissions:hZ};var mi=Object.create(null),fZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),XU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),ZU=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),VS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...ZU(t,r,s,n)}),"table_perms_template"),QU=a((e,t=ZU())=>({attribute_name:e,describe:tD(t),[Ac]:t[Ac],[$S]:t[$S],[YS]:t[YS]}),"attr_perms_template"),zU=a((e,t=!1)=>({attribute_name:e,describe:t,[Ac]:t}),"timestamp_attr_perms_template"),{READ:Ac,INSERT:$S,UPDATE:YS}=Qt.PERMS_CRUD_ENUM,jU=Object.values(Qt.PERMS_CRUD_ENUM),eD=[Ac,$S,YS];function hZ(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[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(mi[t]&&mi[t].key===s)return mi[t].perms;let n=mZ(e,r);return mi[t]?mi[t].key=s:mi[t]=fZ(s),mi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.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 kS.error(s),kS.debug(r),WU(new Error,dZ.OUTDATED_PERMS_TRANSLATION_ERROR,EZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
@@ -23,4 +23,4 @@
23
23
 
24
24
  `+zp.readFileSync(o):"")},s.http2=!0}return s}a(V6,"getServerOptions");KM.exports=V6});var JM=m((Qle,zM)=>{"use strict";var Jp=Q();Jp.initSync();var{CONFIG_PARAMS:QM}=A();function $6(){let e=Jp.get(QM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Jp.get(QM.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($6,"getCORSOptions");zM.exports=$6});var jM=m((Jle,ZM)=>{"use strict";var XM=Q();XM.initSync();var Y6=A();function K6(){return XM.get(Y6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(K6,"getHeaderTimeoutConfig");ZM.exports=K6});var jp={};je(jp,{customFunctionsServer:()=>z6,handleFile:()=>Q6,ready:()=>Z6});async function Q6(e,t,r,s){if(!rn){let c=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);rn=dP(c),tt.http((await rn).server)}let n=await rn,i=(0,tP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),eP.has(i)||(eP.add(i),n.register(X6(i,o)))}async function z6(){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 J6();let e=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=rn=await dP(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 J6(){try{Ue.info("Custom Functions starting configuration."),await aP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function X6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,rP.existsSync)(e)&&r.register(oP.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 dP(e){Ue.info("Custom Functions starting buildServer.");let t=(0,cP.default)(e),r=(0,sP.default)(t);r.server.headersTimeout=(0,lP.default)(),r.setErrorHandler(_P.serverErrorHandler);let s=(0,uP.default)();return s&&r.register(nP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(iP.default),await r.register(W6),await r.after(),mp(r),Ue.info("Custom Functions completed buildServer."),r}function Z6(){if(rn)return rn.then?rn.then(e=>e.ready()):rn.ready()}var tP,rP,sP,nP,iP,oP,Xp,Zp,Ue,W6,aP,cP,uP,lP,_P,rn,eP,EP=Se(()=>{tP=require("path"),rP=require("fs"),sP=C(require("fastify")),nP=C(require("@fastify/cors")),iP=C(gp()),oP=C(require("@fastify/autoload")),Xp=C(Q()),Zp=C(A()),Ue=C(x()),W6=C(YM()),aP=C(br()),cP=C(WM()),uP=C(JM()),lP=C(jM()),_P=C(Ad());go();Xr();eP=new Set;a(Q6,"handleFile");a(z6,"customFunctionsServer");a(J6,"setUp");a(X6,"buildRouteFolder");a(dP,"buildServer");a(Z6,"ready")});var eT={};je(eT,{start:()=>j6});function j6(e){let t=e.root;return{handleFile(r,s,n){hP||(hP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=fP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,mP.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))),fP.set(s,n)}}}var mP,fP,hP,SP=Se(()=>{mP=C(require("send")),fP=new Map;a(j6,"start")});function r9(e,t=1,r){if(tT++,(0,Oi.startWorker)("server/threads/threadServer.js",{name:bd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===bd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});t9.push(n),await n,Mo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Nd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Mo.indexOf(s);o>-1&&Mo.splice(o,1)}if(a(i,"removeWorker"),Po){let o=Po;Po=[];for(let c of o)gP[c.localPort](c)}}}),r){let s=setInterval(()=>{rT?rT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oi.shutdownWorkers)(),tT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function AP(e=0,t){if(typeof e=="string")try{(0,Id.existsSync)(e)&&(0,Id.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=s9:r=n9(t):r=sT;let s=(0,RP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},gP[e]=i=>{rT=!0,r(i,(o,c)=>{if(!o){pP?(pP.deliverSocket(i,e,c),i.resume()):tT>0?(Po.length===0&&setTimeout(()=>{Po.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(),Po.push(i)):(console.log("start up a dynamic thread to handle request"),r9(0));return}o.requests++;let u=i._handle.fd;yd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):c9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Va();return yd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function sT(e,t){let r,s=0;for(let n of Mo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Od)return Od=i,t(r);s=i}Od=0,t(r)}function s9(e,t){let r=e.remoteAddress,s=vo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);sT(e,i=>{vo.set(r,{worker:i,lastUsed:n}),t(i)})}function n9(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=vo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);sT(s,_=>{vo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function o9(){Od=0;for(let e of Mo)e.expectedIdle=e.recentELU.idle+i9,e.requests=1;Mo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function c9(e,t,r){let s=a9++;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(),Nd.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")),Nd.delete(s)),n.event=="destroy"&&(e.destroy(),Nd.delete(s))})}var Oi,RP,bd,yd,Id,e9,Mo,Po,gP,pP,tT,t9,rT,Od,TP,vo,i9,Nd,a9,OP=Se(()=>{Oi=C(dt()),RP=require("net"),bd=C(A()),yd=C(x()),Id=require("fs"),{isMainThread:e9}=require("worker_threads"),Mo=[],Po=[],gP=[],tT=0,t9=[];e9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(r9,"startHTTPWorker");a(AP,"startSocketServer");Od=0;a(sT,"findMostIdleWorker");TP=36e5,vo=new Map;a(s9,"findByRemoteAddressAffinity");a(n9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vo)r.lastUsed+TP<e&&vo.delete(t)},TP).unref();i9=1e3;a(o9,"updateWorkerIdleness");(0,Oi.setMonitorListener)(o9);Nd=new Map,a9=1;a(c9,"proxySocket")});var wP=m((a_e,IP)=>{"use strict";var u9=require("cluster"),Qr=Q();Qr.initSync();var bP=A(),n_e=require("util"),sn=x(),nT=require("fs"),l9=require("fastify"),i_e=Va(),_9=require("@fastify/cors"),d9=require("@fastify/compress"),E9=require("@fastify/static"),f9=gp(),h9=require("path"),{PACKAGE_ROOT:m9}=A(),S9=ks(),p9=V(),T9=br(),R9=ba(),{server:g9}=(Xr(),re(gu)),{authHandler:A9,handlePostRequest:O9,serverErrorHandler:N9,reqBodyValidationHandler:b9}=Ad(),o_e=require("net"),{registerContentHandlers:y9}=(go(),re(bL)),I9=1024*1024*1024,yP="TRUE",{HDB_SETTINGS_NAMES:bi,CONFIG_PARAMS:w9}=bP,C9=bi.CORS_ENABLED_KEY,U9="CORS_ACCESSLIST",D9=bi.SERVER_TIMEOUT_KEY,L9=bi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,M9=bi.SERVER_HEADERS_TIMEOUT_KEY,P9=bi.PRIVATE_KEY_KEY,v9=bi.CERT_KEY,B9=bi.HTTP_SECURE_ENABLED_KEY,Ni;IP.exports={hdbServer:NP,start:NP};async function NP(e){try{sn.info("In Fastify server"+process.cwd()),sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=u9.isMaster,await H9();let t=Qr.get(B9),r=t&&(t===!0||t.toUpperCase()===yP);Ni=q9(r),await Ni.ready(),e||(e={}),e.isOperationsServer=!0,Ni.server.cantCleanupProperly=!0;try{g9.http(Ni.server,e),Ni.server.closeIdleConnections||await Ni.listen({port:0,host:"::"})}catch(s){throw Ni.close(),sn.error(s),sn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),sn.fatal(t),process.exit(1)}}a(NP,"operationsServer");async function H9(){sn.trace("Configuring HarperDB process."),S9.setSchemaDataToGlobal(),await T9.setUsersToGlobal(),await R9.getLicense()}a(H9,"setUp");function q9(e){sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=F9(e),r=l9(t);r.server.headersTimeout=x9(),r.setErrorHandler(N9);let s=G9();s&&r.register(_9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(f9),r.register(d9),r.register(E9,{root:h9.join(m9,"docs")}),y9(r);let n=Qr.get(bP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!p9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[b9,A9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),O9(i,o)}),r.get("/health",()=>"HarperDB is running."),sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(q9,"buildServer");function F9(e){let t=Qr.get(D9),r=Qr.get(L9),s={bodyLimit:I9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(P9),i=Qr.get(v9),o=Qr.get(w9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:nT.readFileSync(n),cert:nT.readFileSync(i)+(o?`
25
25
 
26
- `+nT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(F9,"getServerOptions");function G9(){let e=Qr.get(C9),t=Qr.get(U9),r;return e&&(e===!0||e.toUpperCase()===yP)&&(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(G9,"getCORSOpts");function x9(){return Qr.get(M9)}a(x9,"getHeaderTimeoutConfig")});var GP=m((__e,FP)=>{"use strict";var{decode:k9}=require("msgpackr"),{isMainThread:V9,parentPort:$9,threadId:u_e}=require("worker_threads"),iT=nt(),Bo=Be(),Y9=A(),Wc=x(),CP=Q(),LP=A();dt();var K9=xs(),{recordAction:W9,recordActionBinary:Q9}=(ai(),re(Bl)),{publishToStream:z9}=iT,l_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},J9,X9,Z9,MP,PP;FP.exports={initialize:vP,workQueueListener:qP,setSubscription:j9,setIgnoreOrigin:t7,getDatabaseSubscriptions:e7};async function vP(){PP=!0,Wc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iT.getNATSReferences();J9=e,X9=e.info.server_name,Z9=t,MP=r}a(vP,"initialize");var Cd=new Map;function j9(e,t,r){let s=Cd.get(e);s||Cd.set(e,s=new Map),s.set(t,r),PP||vP().then(qP)}a(j9,"setSubscription");function e7(){return Cd}a(e7,"getDatabaseSubscriptions");var BP;function t7(e){BP=e}a(t7,"setIgnoreOrigin");var HP=100,UP=new Array(HP),wd=0;async function qP(){let t=await(await MP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await UP[wd],UP[wd]=r7(r).catch(s=>{Wc.error(s)}),++wd>=HP&&(wd=0)}a(qP,"workQueueListener");V9||$9.on("message",async e=>{let{type:t}=e;t===LP.ITC_EVENT_TYPES.SHUTDOWN&&iT.closeConnection()});async function r7(e){let t=k9(e.data);W9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===CP.get(Y9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!BP;if(Q9(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;Wc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Wc.trace(`messageProcessor nats msg id: ${e.headers.get(Bo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Cd.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:DP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:DP(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(LP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&z9(e.subject.split(".").slice(0,-1).join("."),K9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Wc.error(i)}e.ack()}a(r7,"messageProcessor");function DP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(DP,"convertOperation")});var _T={};je(_T,{disableNATS:()=>n7,setNATSReplicator:()=>oT,start:()=>s7});function s7(){Dd.default.get(Ld.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&o7()}function n7(e=!0){YP=e}function o7(){if(YP)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];oT(n,r,i)}}dT((r,s)=>{oT(r.tableName,r.databaseName,r),s&&WP(r)}),!xP&&(xP=!0)}function oT(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){WP(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 Zr;return(0,kP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<i7}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 Ud(i.transaction,i)),o.user=i.user):o=KP),o}a(n,"getNATSTransaction")}function WP(e){let t=Dd.default.get(Ld.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lT.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 cT,uT,lT,kP,VP,Dd,Ld,$P,YP,i7,KP,xP,Ud,aT,QP=Se(()=>{de();jr();cT=C(nt()),uT=C(Be()),lT=C(xs());aa();kP=C(GP()),VP=C(Ht()),Dd=C(Q()),Ld=C(A()),$P=C(x());a(s7,"start");a(n7,"disableNATS");i7=2;a(o7,"assignReplicationSource");a(oT,"setNATSReplicator");a(WP,"publishSchema");Ud=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=Dd.default.get(Ld.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||($P.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,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,lT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},aT=class extends Ud{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,VP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};KP=new aT});async function JP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ET.getResource(e,{});n=new hT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ET.get(e);i&&i.delete()}n=new Pd(e,t)}return n}function fT(){return Md++,Md>65500&&(Md=1),Md}var zP,Qc,ET,Md,Pd,hT,XP=Se(()=>{de();Oc();zP=C(Ht()),Qc=C(x());Yn();ET=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(JP,"getSession");Md=1;a(fT,"getNextMessageId");Pd=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=Cn.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)):$=fT();let U=k.id;Array.isArray(U)&&(U=po(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Qc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return fT()}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=Cn.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=[]}},hT=class extends Pd{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=fT();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,Qc.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,zP.getNextMonotonicTime)()),(0,Qc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ET.put(this.sessionRecord)),t.qos}}});var pT={};je(pT,{start:()=>c7});async function c7({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:_}=ev(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,nn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;a7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,tv.getSuperUser)());let{onMessage:u,onClose:l}=ev(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,nn.info)("Socket error",_)})},{port:t,securePort:s})}function ev(e,t,r,s,n){jP||(jP=!0,nm(_=>{_.push({metric:"mqtt-connections",connections:mT})})),mT++;let i,o={protocolVersion:4},c=(0,vd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){mT--,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,ST.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZP.notify({username:s.username,status:on.AUTH_AUDIT_STATUS.SUCCESS,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ST.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZP.error({username:s.username,status:on.AUTH_AUDIT_STATUS.FAILURE,type:on.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=JP({user:s,..._}),i=await i}catch(O){return(0,nn.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,nn.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,nn.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=yo(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,vd.generate)(f,o);t(T),_s(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var vd,tv,ST,on,nn,ZP,a7,jP,mT,rv=Se(()=>{vd=require("mqtt-packet");XP();tv=C(br());go();ai();Xr();ST=C(Q()),on=C(A()),nn=C(x()),ZP=(0,nn.loggerWithTag)("auth-event"),a7=!0;a(c7,"start");mT=0;a(ev,"onSocket")});var dv={};je(dv,{loadComponent:()=>Bd,loadComponentDirectories:()=>_v});function _v(e,t){t&&(RT=t),e&&(gT=e);let r=[];if((0,As.existsSync)(TT)){let n=(0,As.readdirSync)(TT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(TT,o);r.push(Bd(c,RT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Bd(s,RT,s)),Promise.all(r).then(()=>{lv=!0})}async function Bd(e,t,r,s,n){if(!nv.has(e)){nv.set(e,!0),n&&(gT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(o)?i=(0,iv.parseDocument)((0,As.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=d7;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,As.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,uv.getHdbBasePath)().length){f=null;break}if(f)_=await Bd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=_7[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(zc.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&&!sv.includes(p)){sv.push(p);let R=AT.get(OT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);AP(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})||_),gT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,cv.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,ov.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 l7(O);zc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else zc.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 Jc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Jc(E),null,!0)}}if(zc.isMainThread&&!lv&&(0,av.watchDir)(e,async()=>_v()),i.extensionModule)return await Fu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Jc(i))}}}var As,Mr,zc,iv,AT,OT,ov,av,cv,uv,u7,l7,TT,gT,lv,RT,_7,d7,sv,nv,Jc,Ev=Se(()=>{As=require("fs"),Mr=require("path"),zc=require("worker_threads"),iv=require("yaml"),AT=C(Q()),OT=C(A());Fg();Vg();$g();wL();EP();SP();ov=C(require("fast-glob")),av=C(dt());VE();Xr();cv=C(W());jr();de();OP();uv=C(Q()),u7=C(wP());v_();QP();rv();({readFile:l7}=As.promises),TT=AT.get(OT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),gT=new Map;a(_v,"loadComponentDirectories");_7={REST:Rp,graphqlSchema:kE,jsResource:YE,fastifyRoutes:jp,login:WE,static:eT,operationsApi:u7,customFunctions:{},clustering:_T,authentication:Nc,mqtt:pT},d7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},sv=[],nv=new Map;a(Bd,"loadComponent");Jc=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 Tv=m((F_e,pv)=>{"use strict";var Fd=require("fs-extra"),NT=require("path"),Hd=x(),fv=V(),qd=A(),Sv=Q(),E7=Tr();pv.exports=f7;async function f7(){let e=h7(),t=Sv.get(qd.CONFIG_PARAMS.ROOTPATH),r=NT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+qd.PACKAGE_ROOT}},n=NT.join(t,"node_modules");await Fd.ensureDir(n);let i,o=!0,c=!1;try{i=await Fd.readJson(r)}catch(u){if(fv.isEmptyOrZeroLength(e))return;if(u.code!==qd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!fv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await hv(l);s.dependencies[u]=_+l}if(!o){Hd.notify("Installing components"),await mv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await hv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Hd.notify("Removing component",u),c=!0);c&&(Hd.notify("Updating components."),await mv(r,s))}a(f7,"installComponents");function h7(){let e=E7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(h7,"getComponentsConfig");async function hv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":NT.extname(e)||await Fd.pathExists(e)?"file:":"github:"}a(hv,"getPkgPrefix");async function mv(e,t){Hd.trace("npm installing components package.json",t),await Fd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(Sv.get(qd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(mv,"installPackages")});var Av=m((x_e,gv)=>{var{isMainThread:Rv}=require("worker_threads"),{getTables:m7}=(de(),re(Ne)),{loadComponentDirectories:S7,loadComponent:p7}=(Ev(),re(dv)),{resetResources:T7}=(Oc(),re(nD)),R7=Tv(),g7=Tr(),{dirname:A7}=require("path"),{getConnection:O7}=nt(),N7=Q(),b7=A(),bT=new Map;async function y7(e=!1){!Rv&&N7.get(b7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&O7(),Rv&&await R7();let t=T7();m7(),t.isWorker=e,await p7(A7(g7.getConfigFilePath()),t,"hdb",!0,bT),await S7(bT,t);let r=[];for(let[s]of bT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(y7,"loadRootComponents");gv.exports.loadRootComponents=y7});var dt=m(($_e,vn)=>{"use strict";var{Worker:I7,MessageChannel:w7,parentPort:Os,isMainThread:UT,threadId:C7,workerData:Xc}=require("worker_threads"),{PACKAGE_ROOT:U7}=A(),{join:bv,isAbsolute:D7,extname:xd}=require("path"),{server:L7}=(Xr(),re(gu)),{watch:M7,readdir:P7}=require("fs/promises"),{totalmem:Ov}=require("os"),DT=A(),yi=x(),V_e=A(),{randomBytes:v7}=require("crypto"),B7=1024*1024,Pn=[],Mn=[],H7=50,yv=1e4,q7="restart",Iv="request_thread_info",wv="resource_report",Cv="thread_info",Uv="added-port",F7="ack",yT;vn.exports={startWorker:IT,restartWorkers:LT,shutdownWorkers:V7,workers:Pn,setMonitorListener:X7,onMessageFromWorkers:$7,onMessageByType:Y7,broadcast:K7,broadcastWithAcknowledgement:Q7,setChildListenerByType:k7,getWorkerIndex:Lv,getTicketKeys:Mv,setMainIsWorker:G7,restartNumber:Xc?.restartNumber||1};var Dv;function Lv(){return Xc?Xc.workerIndex:Dv?0:void 0}a(Lv,"getWorkerIndex");function G7(e){Dv=e}a(G7,"setMainIsWorker");var Gd;function Mv(){return Gd||(Gd=UT?v7(48):Xc.ticketKeys,Gd)}a(Mv,"getTicketKeys");Object.defineProperty(L7,"workerIndex",{get(){return Lv()}});var Pv={[Iv](e,t){z7(t)},[wv](e,t){J7(t,e)}};function IT(e,t={}){let r=process.constrainedMemory?.()||Ov();r=Math.min(r,Ov());let s=Math.max(Math.floor(r/B7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Mn){let{port1:u,port2:l}=new w7;c.postMessage({type:Uv,port:u},[u]),i.push(l)}xd(e)||(e+=".js");let o=new I7(D7(e)?e:bv(U7,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:vn.exports.restartNumber,ticketKeys:Mv()},transferList:i},t));return Vd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{IT(e,t)},o.on("error",c=>{console.error("Worker error:",c),yi.error("Worker error:",c)}),o.on("exit",c=>{Pn.splice(Pn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<H7?(t.unexpectedRestarts=o.unexpectedRestarts+1,IT(e,t)):yi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Pv[c.type]?.(c,o)}),Pn.push(o),j7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(IT,"startWorker");var x7=[DT.THREAD_TYPES.HTTP];async function LT(e=null,t=2,r=!0){if(UT){if(r){let{loadRootComponents:n}=Av();await n()}vn.exports.restartNumber++,t<1&&(t=t*Pn.length);let s=[];for(let n of Pn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:vn.exports.restartNumber,type:DT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=x7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),yv*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 Os.postMessage({type:q7,workerType:e})}a(LT,"restartWorkers");function k7(e,t){Pv[e]=t}a(k7,"setChildListenerByType");function V7(e){return LT(e,1/0,!1)}a(V7,"shutdownWorkers");var vv=[];function $7(e){vv.push(e)}a($7,"onMessageFromWorkers");var wT=new Map;function Y7(e,t){let r=wT.get(e);r||wT.set(e,r=[]),r.push(t)}a(Y7,"onMessageByType");function K7(e){for(let t of Mn)try{t.postMessage(e)}catch(r){yi.error("Unable to send message to worker",r)}}a(K7,"broadcast");var kd=new Map,W7=1;function Q7(e){return new Promise(t=>{let r=0;for(let s of Mn)try{let n=W7++,i=a(()=>{kd.delete(n),--r===0&&t(),s!==Os&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,kd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of kd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yi.error("Unable to send message to worker",n)}r===0&&t()})}a(Q7,"broadcastWithAcknowledgement");function z7(e){e.postMessage({type:Cv,workers:Bv()})}a(z7,"sendThreadInfo");function Bv(){let e=Date.now();return Pn.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(Bv,"getChildWorkerInfo");function J7(e,t){e.resources=t,e.resources.updated=Date.now()}a(J7,"recordResourceReport");var CT;function X7(e){CT=e}a(X7,"setMonitorListener");var Z7=1e3,Nv=!1;function j7(){Nv||(Nv=!0,setInterval(()=>{for(let e of Pn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}CT&&CT()},Z7).unref())}a(j7,"startMonitoring");var eee=1e3;if(Os){Vd(Os);for(let e of Xc.addPorts)Vd(e);setInterval(()=>{let e=process.memoryUsage();Os.postMessage({type:wv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},eee).unref(),yT=a(()=>new Promise((e,t)=>{Os.on("message",r),Os.postMessage({type:Iv});function r(s){s.type===Cv&&(Os.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yT=Bv;vn.exports.getThreadInfo=yT;function Vd(e,t){Mn.push(e),e.on("message",r=>{if(r.type===Uv)Vd(r.port);else if(r.type===F7){let s=kd.get(r.id);s&&s()}else{for(let n of vv)n(r,e);let s=wT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yi.error(i)}}}).on("close",()=>{Mn.splice(Mn.indexOf(e),1)}).on("exit",()=>{Mn.splice(Mn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Vd,"addPort");if(UT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await P7(s,{withFileTypes:!0}))i.isDirectory()&&r(bv(s,i.name));for await(let{filename:i}of M7(s,{persistent:!1}))(xd(i)===".ts"||xd(i)===".js"||xd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LT(),yi.info("Reloaded HarperDB components")},100))},"watch_dir");vn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Os.on("message",async e=>{let{type:t}=e;t===DT.ITC_EVENT_TYPES.SHUTDOWN&&(vn.exports.restartNumber=e.restartNumber,Os.unref(),setTimeout(()=>{yi.warn("Thread did not voluntarily terminate",C7),process.exit(0)},yv).unref())})});function HT(e){let t=e.auditStore=e.openDB(xv.AUDIT_STORE_NAME,ree);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Vv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{PT||(PT=setTimeout(()=>{if(PT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Hv,0]})){if((n[0]&15)===BT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Hv/10).unref())}),t}function Kd(e,t,r){let s=Kv[r.type],n=3;if(t?t.length>80?(s|=$d,n=(0,an.writeKey)(t,Ns,e?14:6),MT.setUint16(2,n)):(n=(0,an.writeKey)(t,Ns,e?11:3),Ns[1]=n):Ns[1]=0,e){s|=Yv;let i=s&$d?6:3;MT.setFloat64(i,e),t||(n=i+8)}return Ns[0]=s,s&$d?MT.setUint16(4,0):Ns[2]=0,r.value?Buffer.concat([Ns.slice(0,n),r.value]):Ns.subarray(0,n)}function Bn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&$d,i=n?6:3,o;r&Yv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&vT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Kv[r&7],value:u,lastVersion:o,get user(){return c?(0,an.readKey)(e,i,c):void 0}}}var an,Yd,xv,kv,Vv,$v,Ns,MT,tee,ree,Hv,PT,vT,qv,BT,Fv,Gv,$d,Yv,Kv,Zc=Se(()=>{an=require("ordered-binary"),Yd=C(Q()),xv=C(xe()),kv=C(A()),Vv=C(dt()),$v=C(V());(0,Yd.initSync)();Ns=Buffer.alloc(1024),MT=new DataView(Ns.buffer,Ns.byteOffset,1024),tee={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,an.writeKey)(e[2],t,r+12)}else return(0,an.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,an.readKey)(e,t+12,r)]}else return(0,an.readKey)(e,t,r)}},ree={encoding:"binary",keyEncoder:tee},Hv=(0,$v.convertToMS)((0,Yd.get)(kv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,PT=null;a(HT,"openAuditStore");vT=16,qv=1,BT=2,Fv=3,Gv=4,$d=128,Yv=64,Kv={put:qv|vT,[qv]:"put",delete:BT,[BT]:"delete",message:Fv|vT,[Fv]:"message",invalidate:Gv,[Gv]:"invalidate"};a(Kd,"createAuditEntry");a(Bn,"readAuditEntry")});var qT,Ii,see,jc,Wd,Wv=Se(()=>{qT=C(Ht());Zc();Ii=Symbol("completion"),see=100,jc=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,qT.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[Ii]&&(i||(i=[]),i.push(d[Ii])),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,Kd(_.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<see>>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=[]}},Wd=class extends jc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,qT.getNextMonotonicTime)())}getReadTxn(){}}});function Xv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;qo||((0,wi.onMessageByType)(zv,d=>{let E=d.auditIds;GT(d.path,E,d.txnId)}),(0,wi.onMessageByType)(Jv,d=>{(0,bs.trace)("confirming to proceed with txn",d.txnId)}),qo=Object.create(null));let c=qo[i]||(qo[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=po(t);let l=new FT(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 GT(e,t,r,s){if(!qo)return;let n=qo[e];if(n){if(Ho&&Ho+1!==r){(0,bs.trace)("Waiting to ensure latest txn id",Ho,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Qd)o<r&&((0,bs.trace)("Txn",r,"waiting for txn",o),await c);if(Ho+1!==r){await(0,wi.broadcastWithAcknowledgement)({type:Jv,txnId:r});for(let[o,c]of Qd)o<r&&((0,bs.trace)("Txn",r,"waiting for txn",o),await c)}Qd.delete(r),(0,bs.trace)("Proceeding with txn id",r),Ho=r-1,GT(e,t,r,s)})();return Qd.set(r,i),i}(0,bs.trace)("Notifying with txn id",r,s),Ho=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,Qv.writeKey)(i,iee,0);let _=i[3];_&&(i.length=3);let d,E=po(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,bs.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=Bn(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,bs.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 Zv(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&nee)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,wi.broadcast)({type:zv,path:n,auditIds:l,txnId:c,start:u}),GT(n,l,c,!0))})}}var bs,wi,Qv,zv,Jv,nee,qo,iee,FT,Ho,Qd,jv=Se(()=>{bs=C(x()),wi=C(dt()),Qv=require("ordered-binary");aa();Oc();Zc();zv="transaction",Jv="transaction-await",nee=67108864,iee=Buffer.alloc(4096);a(Xv,"addSubscription");FT=class extends Zr{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"}}},Qd=new Map;a(GT,"notifyFromTransactionData");a(Zv,"listenToCommits")});var Bp={};je(Bp,{coerceType:()=>zd,makeTable:()=>Xd,setServerUtilities:()=>lee});function Xd(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=[]),Zv(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&&ZT();class q 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,F=w.table?ve[c][w.table]:q;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[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,eu);switch(w.type){case"put":return L._writeUpdate(v,eu);case"delete":return L._writeDelete(eu);case"publish":return L._writePublish(v,eu);case"invalidate":return L.invalidate(eu);default:Di.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,Ui.getWorkerIndex)()):(0,Ui.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)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"}),su.signalSchemaChange(new nu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&su.signalUserChange(new nu.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,F,G={transaction:w?.getReadTxn()},X;return cu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ui.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&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ZT(),q.audit=!0}static coerceId(S){return S===""?null:zd(S,k)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.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));su.signalSchemaChange(new nu.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[Hs])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=xT(y,"read");N.select=w.filter(F=>v[F])}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=xT(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.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=xT(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[Zt],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=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ii]:F}}})}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,cB.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,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);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=ua(S);else{if(S[rB]&&(w=!Du(S),w))return;t&&S[t]!==F&&(S[t]=F),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=ua(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Di.trace("Checking timestamp for put",F,this[Zt]>L,this[Zt],L),this[Zt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Fo.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[Ii]: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[Zt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){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=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Zt]>v))return Ze(this[ae],L),Di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||XT(),F||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[Ii]: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(cn=>cn.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,Ci.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>zd(De,j)):zd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,oB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===tu.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let cn=r[De];Y.estimated_count=cn?cn.getValuesCount(Y[1]??Y.value):1/0}}else j===tu.SEARCH_TYPES.CONTAINS||j===tu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===tu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=aee:Y.estimated_count=oee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Fo.SKIP);else{let Y=vE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(BE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let cn=y[De],oE=vE(cn,v,D,q,S.allowFullScan);Y=Y.concat(oE)}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,cn={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(oE=>new Promise(aE=>cu(oE,X,cn,null,!1,DB=>{let cE=DB?.value;if(!cE)return aE(Fo.SKIP);for(let uE=0;uE<De;uE++)if(!j[uE](cE))return aE(Fo.SKIP);aE(cE)})))}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=Xv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Hs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Hs]){if(w){if(y)throw new Ci.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}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=Bn(F,i);(D==null||iB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||iB(D,J)){let Y=Bn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Di.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,aB.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=Bn(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Zt],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[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.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||XT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[Ii]:w};return!D.hasWrittenTime&&this[Zt]>F&&(F=X.newTxnTime=this[Zt]+.001),i.put(y,G??null,F),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 jc(i,S.user,u)),D}else return new Wd(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?.(F=>typeof F=="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 Ci.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[sB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ci.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ci.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({table:n,database:c,schemaDefined:l,attributes:N}),q.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(){Mu(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,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}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,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=Bn(y,i);L.id=F,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],F=u.get(v);if(F){let L=Bn(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[rB]=!0,d&&q.setTTLExpiration(d/1e3),b&&UB(),q;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ru.getIndexedValues)(L);if(G){eB&&w.prefetch(G.map(X=>({key:X,value:Z})),nB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ru.getIndexedValues)(F),G){eB&&w.prefetch(G.map(X=>({key:X,value:Z})),nB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function cu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" 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&&to(Y,"cache-hit",n),Y&&!y&&(D&&(D[sB]=!0),R))return $o(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(cu,"loadRecord");function Mi(){P=new Set,(0,Ui.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Mi,"setupCommitListeners");async function $o(Z,S=null,N,D){if(N<0){let L;return P||Mi(),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($o(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G($o(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},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;_s(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ru.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],Kd(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($o,"getFromSource");function Fn(Z){T||(T=i.get([tB,kT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([tB,kT.threadId],T)},50))}a(Fn,"recordDeletion");function XT(){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)}}},q.getRecordCount()*100+uee).unref())}a(XT,"enqueueDeletionCleanup");function ZT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(ZT,"addDeleteRemoval");function UB(){(0,Ui.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()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Di.error("Error in evicting old records",Z)}},cee).unref()}a(UB,"runRecordExpirationEviction")}function xT(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 nB(){}function lee(e){cB=e}function zd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!_ee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Jd.autoCast)(e)}function iB(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,Fo,ru,oB,kT,tu,iu,Ci,su,nu,Di,aB,Ui,Jd,cB,oee,aee,cee,eB,tB,Zt,rB,Ede,sB,eu,uee,_ee,Ed=Se(()=>{zr=C(A()),Fo=require("lmdb"),ru=C(Ht()),oB=require("lodash"),kT=require("worker_threads");jr();Wv();tu=C(xe()),iu=C(Q());jv();Ci=C(W()),su=C(Vs()),nu=C(Fr());de();Hu();Di=C(x());vu();Yn();aB=require("ordered-binary"),Ui=C(dt());Zc();Jd=C(V());ai();oee=1e8,aee=1e7,cee=6e4;iu.initSync();eB=iu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tB=Symbol.for("deletions"),Zt=Symbol.for("version"),rB=Symbol.for("incremental-update"),Ede=Symbol("source-resource"),sB=Symbol("load-from-source"),eu={isNotification:!0,allowInvalidated:!0},uee=(0,Jd.convertToMS)(iu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Xd,"makeTable");a(xT,"attributesAsObject");a(nB,"noop");a(lee,"setServerUtilities");_ee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(zd,"coerceType");a(iB,"isDescendantId")});var Ne={};je(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>$h,dropTableMeta:()=>See,getDatabases:()=>xr,getTables:()=>dee,onUpdatedTable:()=>dT,readMetaDb:()=>ou,resetDatabases:()=>Eee,table:()=>st,tables:()=>nr});function dee(){return tE||xr(),nr||{}}function xr(){if(tE)return ve;tE=!0,Vo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.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)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ou((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,ko.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,ko.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,ko.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,ko.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);ou((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&ou((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&ou(u,o,r,null,!0)}}for(let r in ve){let s=Vo.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[rE]}}return Vo=null,ve}}function Eee(){tE=!1;for(let[,e]of Hn)e.needsDeletion=!0;xr();for(let[e,t]of Hn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Hn.delete(e));return ve}function ou(e,t,r=YT,s,n){let i=new VT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Hn.get(e);o?o.needsDeletion=!1:(o=(0,Zd.open)(i),Hn.set(e,o));let c=new Li.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Go.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,Zd.open)(i),l.isLegacy=!0):l=HT(o));let _=dB(r),d=_[rE],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 q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;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)(jt.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(xo)||0)&&u.putSync(xo,$+1):(p.tableId=$=u.get(xo),$||($=1),u.putSync(xo,$+1),u.putSync(p.key,p));let q=new Li.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let Ze=new Li.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,Ze)}let Oe=k.find(Ze=>Ze.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=EB(_,f,Xd({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 q of KT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function dB(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)),Vo&&!Vo.has(e)){let r=new Set;t[rE]=r,Vo.set(e,r)}return t}function EB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=YT),xr();let r=dB(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Hn.get(i);if(!o){let c=new VT.default(i,!1);o=(0,Zd.open)(c),Hn.set(i,o)}return o}async function $h(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;Hn.delete(n.path),n.status==="open"&&(await n.close(),await uB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[rE]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=YT);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 Li.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=HT(u)),E=s.find(q=>q.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)(jt.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 Li.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Go.INTERNAL_DBIS_NAME,T),z.tableId=h.get(xo),z.tableId||(z.tableId=1),h.putSync(xo,z.tableId+1),E.tableId=z.tableId,_=EB(l,e,Xd({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 ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Go.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 q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}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 q=new Li.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.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=mee(_,k,O):p&&jd.signalSchemaChange(new eE.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 mee(e,t,r){try{let s=e.schemaVersion;await jd.signalSchemaChange(new eE.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,lB.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)}),au.workerData&&au.workerData.restartNumber!==_B.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>fee?await n:u>hee&&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 jd.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function See({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 dT(e){KT.push(e)}var yt,Go,Zd,Me,fr,ko,Li,VT,jt,uB,$T,lB,jd,eE,au,Le,_B,YT,rE,nr,ve,xo,KT,tE,Hn,Vo,fee,hee,de=Se(()=>{yt=C(Q()),Go=C(xe()),Zd=require("lmdb"),Me=require("path"),fr=require("fs"),ko=C(we());Ed();Li=C(xu()),VT=C(Vu()),jt=C(A()),uB=C(require("fs-extra")),$T=require("../index"),lB=C(Ht()),jd=C(Vs()),eE=C(Fr()),au=require("worker_threads"),Le=C(x()),_B=C(dt());Zc();YT="data",rE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,$T._assignPackageExport)("databases",ve);(0,$T._assignPackageExport)("tables",nr);xo=Symbol.for("next-table-id"),KT=[],Hn=new Map;a(dee,"getTables");a(xr,"getDatabases");a(Eee,"resetDatabases");a(ou,"readMetaDb");a(dB,"ensureDB");a(EB,"setTable");a(Fa,"database");a($h,"dropDatabase");a(st,"table");fee=1e3,hee=10;a(mee,"runIndexing");a(See,"dropTableMeta");a(dT,"onUpdatedTable")});var V=m((Ade,IB)=>{"use strict";var qn=require("path"),pB=require("fs-extra"),er=x(),fB=require("fs-extra"),sE=require("os"),pee=require("net"),Tee=require("recursive-iterator"),Ge=A(),Ree=DR(),hB=require("papaparse"),nE=require("moment"),{inspect:gee}=require("util"),mB=require("is-number"),gde=require("lodash"),Aee=require("minimist"),Oee=require("https"),Nee=require("http"),{hdb_errors:iE}=W(),bee=/^((\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)))$/,TB=require("util").promisify(setTimeout),yee=100,Iee=5,wee="",Cee=4,SB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};IB.exports={isEmpty:hr,isEmptyOrZeroLength:ys,arrayHasEmptyValues:Lee,arrayHasEmptyOrZeroLengthValues:Mee,buildFolderPath:Pee,isBoolean:RB,errorizeMessage:Uee,stripFileExtension:Bee,autoCast:Hee,autoCastJSON:gB,autoCastJSONDeep:QT,removeDir:qee,compareVersions:Fee,isCompatibleDataVersion:Gee,escapeRawValue:xee,unescapeValue:kee,stringifyProps:Vee,timeoutPromise:Yee,isClusterOperation:Wee,getClusterUser:zee,checkGlobalSchemaTable:Qee,getHomeDir:OB,getPropsFilePath:$ee,promisifyPapaParse:Jee,removeBOM:NB,createEventPromise:Xee,checkProcessRunning:Zee,checkSchemaTableExist:jee,checkSchemaExists:bB,checkTableExists:yB,getStartOfTomorrowInSeconds:ete,getLimitKey:tte,isObject:vee,isNotEmptyAndHasValue:Dee,autoCasterIsNumberCheck:AB,backtickASTSchemaItems:rte,isPortTaken:Kee,createForkArgs:ste,autoCastBoolean:nte,async_set_timeout:TB,getTableHashAttribute:ite,doesSchemaExist:ote,doesTableExist:ate,stringifyObj:cte,ms_to_time:ute,changeExtension:lte,getEnvCliRootPath:zT,noBootFile:_te,httpRequest:dte,transformReq:Ete,convertToMS:fte,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Uee(e){return e instanceof Error?e:new Error(e)}a(Uee,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function Dee(e){return!hr(e)&&(e||e===0||e===""||RB(e))}a(Dee,"isNotEmptyAndHasValue");function ys(e){return hr(e)||e.length===0||e.size===0}a(ys,"isEmptyOrZeroLength");function Lee(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(Lee,"arrayHasEmptyValues");function Mee(e){if(ys(e))return!0;for(let t=0;t<e.length;t++)if(ys(e[t]))return!0;return!1}a(Mee,"arrayHasEmptyOrZeroLengthValues");function Pee(...e){try{return e.join(qn.sep)}catch{console.error(e)}}a(Pee,"buildFolderPath");function RB(e){return hr(e)?!1:e===!0||e===!1}a(RB,"isBoolean");function vee(e){return hr(e)?!1:typeof e=="object"}a(vee,"isObject");function Bee(e){return ys(e)?wee:e.slice(0,-Cee)}a(Bee,"stripFileExtension");function Hee(e){return hr(e)||e===""||typeof e!="string"?e:SB[e]!==void 0?SB[e]:AB(e)===!0?Number(e):bee.test(e)?new Date(e):e}a(Hee,"autoCast");function gB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gB,"autoCastJSON");function QT(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=QT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=QT(r);s!==r&&(e[t]=s)}return e}else return gB(e)}a(QT,"autoCastJSONDeep");function AB(e){if(e.startsWith("0.")&&mB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&mB(e))}a(AB,"autoCasterIsNumberCheck");async function qee(e){if(ys(e))throw new Error(`Directory path: ${e} does not exist`);try{await fB.emptyDir(e),await fB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(qee,"removeDir");function Fee(e,t){if(ys(e)){er.info("Invalid current version sent as parameter.");return}if(ys(t)){er.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(Fee,"compareVersions");function Gee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Gee,"isCompatibleDataVersion");function xee(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(xee,"escapeRawValue");function kee(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(kee,"unescapeValue");function Vee(e,t){if(hr(e))return er.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+sE.EOL}!ys(s)&&s[0]===";"?r+=" "+s+n+sE.EOL:ys(s)||(r+=s+"="+n+sE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Vee,"stringifyProps");function OB(){let e;try{e=sE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(OB,"getHomeDir");function $ee(){let e=qn.join(OB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return pB.existsSync(e)||(e=qn.join(__dirname,"../","hdb_boot_properties.file")),e}a($ee,"getPropsFilePath");function Yee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Yee,"timeoutPromise");async function Kee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=pee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Kee,"isPortTaken");function Wee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Wee,"isClusterOperation");function Qee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qee,"checkGlobalSchemaTable");function zee(e,t){if(hr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||ys(e)){er.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){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(zee,"getClusterUser");function Jee(){hB.parsePromise=function(e,t,r){return new Promise(function(s,n){hB.parse(e,{header:!0,transformHeader:NB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Jee,"promisifyPapaParse");function NB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(NB,"removeBOM");function Xee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${gee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Xee,"createEventPromise");async function Zee(e){let t=!0,r=0;do await TB(yee*r++),(await Ree.findPs(e)).length>0&&(t=!1);while(t&&r<Iee);if(t)throw new Error(`process ${e} was not started`)}a(Zee,"checkProcessRunning");function jee(e,t){let r=bB(e);if(r)return r;let s=yB(e,t);if(s)return s}a(jee,"checkSchemaTableExist");function bB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bB,"checkSchemaExists");function yB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yB,"checkTableExists");function ete(){let e=nE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=nE().utc().unix();return e-t}a(ete,"getStartOfTomorrowInSeconds");function tte(){return nE().utc().format("DD-MM-YYYY")}a(tte,"getLimitKey");function rte(e){try{let t=new Tee(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){er.error("Got an error back ticking items."),er.error(t)}}a(rte,"backtickASTSchemaItems");function ste(e){return[e]}a(ste,"createForkArgs");function nte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(nte,"autoCastBoolean");function ite(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ite,"getTableHashAttribute");function ote(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(ote,"doesSchemaExist");function ate(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ate,"doesTableExist");function cte(e){try{return JSON.stringify(e)}catch{return e}}a(cte,"stringifyObj");function ute(e){let t=nE.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(ute,"ms_to_time");function lte(e,t){let r=qn.basename(e,qn.extname(e));return qn.join(qn.dirname(e),r+t)}a(lte,"changeExtension");function zT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Aee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zT,"getEnvCliRootPath");var WT;function _te(){if(WT)return WT;let e=zT();zT()&&pB.pathExistsSync(qn.join(e,Ge.HDB_CONFIG_FILE))&&(WT=!0)}a(_te,"noBootFile");function dte(e,t){let r;return e.protocol==="http:"?r=Nee:r=Oee,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(dte,"httpRequest");function Ete(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Ete,"transformReq");function fte(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(fte,"convertToMS")});var CB=m((bde,wB)=>{"use strict";var JT=A(),hte=V(),mte=Es(),Jr=x(),Ste=f_(),pte=ic(),Nde=PS(),Tte=ks(),Rte=uc(),gte=require("semver/functions/gte"),Ate=3e4,Ote=7;wB.exports=Nte;async function Nte(){try{Jr.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await Tte.setSchemaDataToGlobalAsync();let e=await mte.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===JT.PRE_4_0_0_VERSION&&t.push(bte(n))}await Promise.allSettled(t),Jr.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Jr.error(e),e}}a(Nte,"updateAllNodes");async function bte(e){try{let{name:t,subscriptions:r}=e;Jr.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<Ote;){let i=[];if(await Ste.buildNodeStatus(e,i),Jr.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&gte(i[0].system_info.hdb_version,"4.0.0")){Jr.notify("Received open status from node:",t,"calling add node");let o={operation:JT.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await pte(o,!0),Jr.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Jr.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await hte.async_set_timeout(Ate)}s||(Jr.error("4.0.0 node update was unable to update connection to node:",t),Jr.error("Removing following node record from hdb_nodes",e),await Rte({operation:JT.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Jr.error(t),t}}a(bte,"updateNode")});var yte=CB();(async()=>{try{await yte()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
26
+ `+nT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(F9,"getServerOptions");function G9(){let e=Qr.get(C9),t=Qr.get(U9),r;return e&&(e===!0||e.toUpperCase()===yP)&&(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(G9,"getCORSOpts");function x9(){return Qr.get(M9)}a(x9,"getHeaderTimeoutConfig")});var GP=m((__e,FP)=>{"use strict";var{decode:k9}=require("msgpackr"),{isMainThread:V9,parentPort:$9,threadId:u_e}=require("worker_threads"),iT=nt(),Bo=Be(),Y9=A(),Wc=x(),CP=Q(),LP=A();dt();var K9=xs(),{recordAction:W9,recordActionBinary:Q9}=(ai(),re(Bl)),{publishToStream:z9}=iT,l_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},J9,X9,Z9,MP,PP;FP.exports={initialize:vP,workQueueListener:qP,setSubscription:j9,setIgnoreOrigin:t7,getDatabaseSubscriptions:e7};async function vP(){PP=!0,Wc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iT.getNATSReferences();J9=e,X9=e.info.server_name,Z9=t,MP=r}a(vP,"initialize");var Cd=new Map;function j9(e,t,r){let s=Cd.get(e);s||Cd.set(e,s=new Map),s.set(t,r),PP||vP().then(qP)}a(j9,"setSubscription");function e7(){return Cd}a(e7,"getDatabaseSubscriptions");var BP;function t7(e){BP=e}a(t7,"setIgnoreOrigin");var HP=100,UP=new Array(HP),wd=0;async function qP(){let t=await(await MP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await UP[wd],UP[wd]=r7(r).catch(s=>{Wc.error(s)}),++wd>=HP&&(wd=0)}a(qP,"workQueueListener");V9||$9.on("message",async e=>{let{type:t}=e;t===LP.ITC_EVENT_TYPES.SHUTDOWN&&iT.closeConnection()});async function r7(e){let t=k9(e.data);W9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===CP.get(Y9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!BP;if(Q9(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;Wc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Wc.trace(`messageProcessor nats msg id: ${e.headers.get(Bo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Cd.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:DP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:DP(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(LP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&z9(e.subject.split(".").slice(0,-1).join("."),K9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Wc.error(i)}e.ack()}a(r7,"messageProcessor");function DP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(DP,"convertOperation")});var _T={};je(_T,{disableNATS:()=>n7,setNATSReplicator:()=>oT,start:()=>s7});function s7(){Dd.default.get(Ld.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&o7()}function n7(e=!0){YP=e}function o7(){if(YP)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];oT(n,r,i)}}dT((r,s)=>{oT(r.tableName,r.databaseName,r),s&&WP(r)}),!xP&&(xP=!0)}function oT(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){WP(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 Zr;return(0,kP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<i7}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 Ud(i.transaction,i)),o.user=i.user):o=KP),o}a(n,"getNATSTransaction")}function WP(e){let t=Dd.default.get(Ld.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lT.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 cT,uT,lT,kP,VP,Dd,Ld,$P,YP,i7,KP,xP,Ud,aT,QP=Se(()=>{de();jr();cT=C(nt()),uT=C(Be()),lT=C(xs());aa();kP=C(GP()),VP=C(Ht()),Dd=C(Q()),Ld=C(A()),$P=C(x());a(s7,"start");a(n7,"disableNATS");i7=2;a(o7,"assignReplicationSource");a(oT,"setNATSReplicator");a(WP,"publishSchema");Ud=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=Dd.default.get(Ld.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||($P.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,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,lT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},aT=class extends Ud{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,VP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};KP=new aT});async function JP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ET.getResource(e,{});n=new hT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ET.get(e);i&&i.delete()}n=new Pd(e,t)}return n}function fT(){return Md++,Md>65500&&(Md=1),Md}var zP,Qc,ET,Md,Pd,hT,XP=Se(()=>{de();Oc();zP=C(Ht()),Qc=C(x());Yn();ET=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(JP,"getSession");Md=1;a(fT,"getNextMessageId");Pd=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=Cn.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)):$=fT();let U=k.id;Array.isArray(U)&&(U=po(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Qc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return fT()}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=Cn.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=[]}},hT=class extends Pd{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=fT();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,Qc.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,zP.getNextMonotonicTime)()),(0,Qc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ET.put(this.sessionRecord)),t.qos}}});var pT={};je(pT,{start:()=>c7});async function c7({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:_}=ev(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,nn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;a7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,tv.getSuperUser)());let{onMessage:u,onClose:l}=ev(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,nn.info)("Socket error",_)})},{port:t,securePort:s})}function ev(e,t,r,s,n){jP||(jP=!0,nm(_=>{_.push({metric:"mqtt-connections",connections:mT})})),mT++;let i,o={protocolVersion:4},c=(0,vd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){mT--,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,ST.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZP.notify({username:s.username,status:on.AUTH_AUDIT_STATUS.SUCCESS,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ST.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZP.error({username:s.username,status:on.AUTH_AUDIT_STATUS.FAILURE,type:on.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=JP({user:s,..._}),i=await i}catch(O){return(0,nn.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,nn.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,nn.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=yo(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,vd.generate)(f,o);t(T),_s(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var vd,tv,ST,on,nn,ZP,a7,jP,mT,rv=Se(()=>{vd=require("mqtt-packet");XP();tv=C(br());go();ai();Xr();ST=C(Q()),on=C(A()),nn=C(x()),ZP=(0,nn.loggerWithTag)("auth-event"),a7=!0;a(c7,"start");mT=0;a(ev,"onSocket")});var dv={};je(dv,{loadComponent:()=>Bd,loadComponentDirectories:()=>_v});function _v(e,t){t&&(RT=t),e&&(gT=e);let r=[];if((0,As.existsSync)(TT)){let n=(0,As.readdirSync)(TT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(TT,o);r.push(Bd(c,RT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Bd(s,RT,s)),Promise.all(r).then(()=>{lv=!0})}async function Bd(e,t,r,s,n){if(!nv.has(e)){nv.set(e,!0),n&&(gT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(o)?i=(0,iv.parseDocument)((0,As.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=d7;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,As.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,uv.getHdbBasePath)().length){f=null;break}if(f)_=await Bd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=_7[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(zc.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&&!sv.includes(p)){sv.push(p);let R=AT.get(OT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);AP(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})||_),gT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,cv.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,ov.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 l7(O);zc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else zc.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 Jc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Jc(E),null,!0)}}if(zc.isMainThread&&!lv&&(0,av.watchDir)(e,async()=>_v()),i.extensionModule)return await Fu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Jc(i))}}}var As,Mr,zc,iv,AT,OT,ov,av,cv,uv,u7,l7,TT,gT,lv,RT,_7,d7,sv,nv,Jc,Ev=Se(()=>{As=require("fs"),Mr=require("path"),zc=require("worker_threads"),iv=require("yaml"),AT=C(Q()),OT=C(A());Fg();Vg();$g();wL();EP();SP();ov=C(require("fast-glob")),av=C(dt());VE();Xr();cv=C(W());jr();de();OP();uv=C(Q()),u7=C(wP());v_();QP();rv();({readFile:l7}=As.promises),TT=AT.get(OT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),gT=new Map;a(_v,"loadComponentDirectories");_7={REST:Rp,graphqlSchema:kE,jsResource:YE,fastifyRoutes:jp,login:WE,static:eT,operationsApi:u7,customFunctions:{},clustering:_T,authentication:Nc,mqtt:pT},d7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},sv=[],nv=new Map;a(Bd,"loadComponent");Jc=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 Tv=m((F_e,pv)=>{"use strict";var Fd=require("fs-extra"),NT=require("path"),Hd=x(),fv=V(),qd=A(),Sv=Q(),E7=Tr();pv.exports=f7;async function f7(){let e=h7(),t=Sv.get(qd.CONFIG_PARAMS.ROOTPATH),r=NT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+qd.PACKAGE_ROOT}},n=NT.join(t,"node_modules");await Fd.ensureDir(n);let i,o=!0,c=!1;try{i=await Fd.readJson(r)}catch(u){if(fv.isEmptyOrZeroLength(e))return;if(u.code!==qd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!fv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await hv(l);s.dependencies[u]=_+l}if(!o){Hd.notify("Installing components"),await mv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await hv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Hd.notify("Removing component",u),c=!0);c&&(Hd.notify("Updating components."),await mv(r,s))}a(f7,"installComponents");function h7(){let e=E7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(h7,"getComponentsConfig");async function hv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":NT.extname(e)||await Fd.pathExists(e)?"file:":"github:"}a(hv,"getPkgPrefix");async function mv(e,t){Hd.trace("npm installing components package.json",t),await Fd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(Sv.get(qd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(mv,"installPackages")});var Av=m((x_e,gv)=>{var{isMainThread:Rv}=require("worker_threads"),{getTables:m7}=(de(),re(Ne)),{loadComponentDirectories:S7,loadComponent:p7}=(Ev(),re(dv)),{resetResources:T7}=(Oc(),re(nD)),R7=Tv(),g7=Tr(),{dirname:A7}=require("path"),{getConnection:O7}=nt(),N7=Q(),b7=A(),bT=new Map;async function y7(e=!1){!Rv&&N7.get(b7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&O7(),Rv&&await R7();let t=T7();m7(),t.isWorker=e,await p7(A7(g7.getConfigFilePath()),t,"hdb",!0,bT),await S7(bT,t);let r=[];for(let[s]of bT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(y7,"loadRootComponents");gv.exports.loadRootComponents=y7});var dt=m(($_e,vn)=>{"use strict";var{Worker:I7,MessageChannel:w7,parentPort:Os,isMainThread:UT,threadId:C7,workerData:Xc}=require("worker_threads"),{PACKAGE_ROOT:U7}=A(),{join:bv,isAbsolute:D7,extname:xd}=require("path"),{server:L7}=(Xr(),re(gu)),{watch:M7,readdir:P7}=require("fs/promises"),{totalmem:Ov}=require("os"),DT=A(),yi=x(),V_e=A(),{randomBytes:v7}=require("crypto"),B7=1024*1024,Pn=[],Mn=[],H7=50,yv=1e4,q7="restart",Iv="request_thread_info",wv="resource_report",Cv="thread_info",Uv="added-port",F7="ack",yT;vn.exports={startWorker:IT,restartWorkers:LT,shutdownWorkers:V7,workers:Pn,setMonitorListener:X7,onMessageFromWorkers:$7,onMessageByType:Y7,broadcast:K7,broadcastWithAcknowledgement:Q7,setChildListenerByType:k7,getWorkerIndex:Lv,getTicketKeys:Mv,setMainIsWorker:G7,restartNumber:Xc?.restartNumber||1};var Dv;function Lv(){return Xc?Xc.workerIndex:Dv?0:void 0}a(Lv,"getWorkerIndex");function G7(e){Dv=e}a(G7,"setMainIsWorker");var Gd;function Mv(){return Gd||(Gd=UT?v7(48):Xc.ticketKeys,Gd)}a(Mv,"getTicketKeys");Object.defineProperty(L7,"workerIndex",{get(){return Lv()}});var Pv={[Iv](e,t){z7(t)},[wv](e,t){J7(t,e)}};function IT(e,t={}){let r=process.constrainedMemory?.()||Ov();r=Math.min(r,Ov());let s=Math.max(Math.floor(r/B7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Mn){let{port1:u,port2:l}=new w7;c.postMessage({type:Uv,port:u},[u]),i.push(l)}xd(e)||(e+=".js");let o=new I7(D7(e)?e:bv(U7,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:vn.exports.restartNumber,ticketKeys:Mv()},transferList:i},t));return Vd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{IT(e,t)},o.on("error",c=>{console.error("Worker error:",c),yi.error("Worker error:",c)}),o.on("exit",c=>{Pn.splice(Pn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<H7?(t.unexpectedRestarts=o.unexpectedRestarts+1,IT(e,t)):yi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Pv[c.type]?.(c,o)}),Pn.push(o),j7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(IT,"startWorker");var x7=[DT.THREAD_TYPES.HTTP];async function LT(e=null,t=2,r=!0){if(UT){if(r){let{loadRootComponents:n}=Av();await n()}vn.exports.restartNumber++,t<1&&(t=t*Pn.length);let s=[];for(let n of Pn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:vn.exports.restartNumber,type:DT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=x7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),yv*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 Os.postMessage({type:q7,workerType:e})}a(LT,"restartWorkers");function k7(e,t){Pv[e]=t}a(k7,"setChildListenerByType");function V7(e){return LT(e,1/0,!1)}a(V7,"shutdownWorkers");var vv=[];function $7(e){vv.push(e)}a($7,"onMessageFromWorkers");var wT=new Map;function Y7(e,t){let r=wT.get(e);r||wT.set(e,r=[]),r.push(t)}a(Y7,"onMessageByType");function K7(e){for(let t of Mn)try{t.postMessage(e)}catch(r){yi.error("Unable to send message to worker",r)}}a(K7,"broadcast");var kd=new Map,W7=1;function Q7(e){return new Promise(t=>{let r=0;for(let s of Mn)try{let n=W7++,i=a(()=>{kd.delete(n),--r===0&&t(),s!==Os&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,kd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of kd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yi.error("Unable to send message to worker",n)}r===0&&t()})}a(Q7,"broadcastWithAcknowledgement");function z7(e){e.postMessage({type:Cv,workers:Bv()})}a(z7,"sendThreadInfo");function Bv(){let e=Date.now();return Pn.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(Bv,"getChildWorkerInfo");function J7(e,t){e.resources=t,e.resources.updated=Date.now()}a(J7,"recordResourceReport");var CT;function X7(e){CT=e}a(X7,"setMonitorListener");var Z7=1e3,Nv=!1;function j7(){Nv||(Nv=!0,setInterval(()=>{for(let e of Pn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}CT&&CT()},Z7).unref())}a(j7,"startMonitoring");var eee=1e3;if(Os){Vd(Os);for(let e of Xc.addPorts)Vd(e);setInterval(()=>{let e=process.memoryUsage();Os.postMessage({type:wv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},eee).unref(),yT=a(()=>new Promise((e,t)=>{Os.on("message",r),Os.postMessage({type:Iv});function r(s){s.type===Cv&&(Os.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yT=Bv;vn.exports.getThreadInfo=yT;function Vd(e,t){Mn.push(e),e.on("message",r=>{if(r.type===Uv)Vd(r.port);else if(r.type===F7){let s=kd.get(r.id);s&&s()}else{for(let n of vv)n(r,e);let s=wT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yi.error(i)}}}).on("close",()=>{Mn.splice(Mn.indexOf(e),1)}).on("exit",()=>{Mn.splice(Mn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Vd,"addPort");if(UT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await P7(s,{withFileTypes:!0}))i.isDirectory()&&r(bv(s,i.name));for await(let{filename:i}of M7(s,{persistent:!1}))(xd(i)===".ts"||xd(i)===".js"||xd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LT(),yi.info("Reloaded HarperDB components")},100))},"watch_dir");vn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Os.on("message",async e=>{let{type:t}=e;t===DT.ITC_EVENT_TYPES.SHUTDOWN&&(vn.exports.restartNumber=e.restartNumber,Os.unref(),setTimeout(()=>{yi.warn("Thread did not voluntarily terminate",C7),process.exit(0)},yv).unref())})});function HT(e){let t=e.auditStore=e.openDB(xv.AUDIT_STORE_NAME,ree);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Vv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{PT||(PT=setTimeout(()=>{if(PT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Hv,0]})){if((n[0]&15)===BT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Hv/10).unref())}),t}function Kd(e,t,r){let s=Kv[r.type],n=3;if(t?t.length>80?(s|=$d,n=(0,an.writeKey)(t,Ns,e?14:6),MT.setUint16(2,n)):(n=(0,an.writeKey)(t,Ns,e?11:3),Ns[1]=n):Ns[1]=0,e){s|=Yv;let i=s&$d?6:3;MT.setFloat64(i,e),t||(n=i+8)}return Ns[0]=s,s&$d?MT.setUint16(4,0):Ns[2]=0,r.value?Buffer.concat([Ns.slice(0,n),r.value]):Ns.subarray(0,n)}function Bn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&$d,i=n?6:3,o;r&Yv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&vT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Kv[r&7],value:u,lastVersion:o,get user(){return c?(0,an.readKey)(e,i,c):void 0}}}var an,Yd,xv,kv,Vv,$v,Ns,MT,tee,ree,Hv,PT,vT,qv,BT,Fv,Gv,$d,Yv,Kv,Zc=Se(()=>{an=require("ordered-binary"),Yd=C(Q()),xv=C(xe()),kv=C(A()),Vv=C(dt()),$v=C(V());(0,Yd.initSync)();Ns=Buffer.alloc(1024),MT=new DataView(Ns.buffer,Ns.byteOffset,1024),tee={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,an.writeKey)(e[2],t,r+12)}else return(0,an.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,an.readKey)(e,t+12,r)]}else return(0,an.readKey)(e,t,r)}},ree={encoding:"binary",keyEncoder:tee},Hv=(0,$v.convertToMS)((0,Yd.get)(kv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,PT=null;a(HT,"openAuditStore");vT=16,qv=1,BT=2,Fv=3,Gv=4,$d=128,Yv=64,Kv={put:qv|vT,[qv]:"put",delete:BT,[BT]:"delete",message:Fv|vT,[Fv]:"message",invalidate:Gv,[Gv]:"invalidate"};a(Kd,"createAuditEntry");a(Bn,"readAuditEntry")});var qT,Ii,see,jc,Wd,Wv=Se(()=>{qT=C(Ht());Zc();Ii=Symbol("completion"),see=100,jc=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,qT.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[Ii]&&(i||(i=[]),i.push(d[Ii])),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,Kd(_.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<see>>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=[]}},Wd=class extends jc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,qT.getNextMonotonicTime)())}getReadTxn(){}}});function Xv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;qo||((0,wi.onMessageByType)(zv,d=>{let E=d.auditIds;GT(d.path,E,d.txnId)}),(0,wi.onMessageByType)(Jv,d=>{(0,bs.trace)("confirming to proceed with txn",d.txnId)}),qo=Object.create(null));let c=qo[i]||(qo[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=po(t);let l=new FT(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 GT(e,t,r,s){if(!qo)return;let n=qo[e];if(n){if(Ho&&Ho+1!==r){(0,bs.trace)("Waiting to ensure latest txn id",Ho,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Qd)o<r&&((0,bs.trace)("Txn",r,"waiting for txn",o),await c);if(Ho+1!==r){await(0,wi.broadcastWithAcknowledgement)({type:Jv,txnId:r});for(let[o,c]of Qd)o<r&&((0,bs.trace)("Txn",r,"waiting for txn",o),await c)}Qd.delete(r),(0,bs.trace)("Proceeding with txn id",r),Ho=r-1,GT(e,t,r,s)})();return Qd.set(r,i),i}(0,bs.trace)("Notifying with txn id",r,s),Ho=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,Qv.writeKey)(i,iee,0);let _=i[3];_&&(i.length=3);let d,E=po(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,bs.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=Bn(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,bs.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 Zv(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&nee)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,wi.broadcast)({type:zv,path:n,auditIds:l,txnId:c,start:u}),GT(n,l,c,!0))})}}var bs,wi,Qv,zv,Jv,nee,qo,iee,FT,Ho,Qd,jv=Se(()=>{bs=C(x()),wi=C(dt()),Qv=require("ordered-binary");aa();Oc();Zc();zv="transaction",Jv="transaction-await",nee=67108864,iee=Buffer.alloc(4096);a(Xv,"addSubscription");FT=class extends Zr{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"}}},Qd=new Map;a(GT,"notifyFromTransactionData");a(Zv,"listenToCommits")});var Bp={};je(Bp,{coerceType:()=>zd,makeTable:()=>Xd,setServerUtilities:()=>lee});function Xd(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=[]),Zv(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&&ZT();class q 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,F=w.table?ve[c][w.table]:q;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[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,eu);switch(w.type){case"put":return L._writeUpdate(v,eu);case"delete":return L._writeDelete(eu);case"publish":return L._writePublish(v,eu);case"invalidate":return L.invalidate(eu);default:Di.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,Ui.getWorkerIndex)()):(0,Ui.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)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"}),su.signalSchemaChange(new nu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&su.signalUserChange(new nu.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,F,G={transaction:w?.getReadTxn()},X;return cu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ui.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&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ZT(),q.audit=!0}static coerceId(S){return S===""?null:zd(S,k)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.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));su.signalSchemaChange(new nu.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[Hs])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=xT(y,"read");N.select=w.filter(F=>v[F])}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=xT(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.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=xT(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[Zt],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=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ii]:F}}})}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,cB.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,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);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=ua(S);else{if(S[rB]&&(w=!Du(S),w))return;t&&S[t]!==F&&(S[t]=F),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=ua(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Di.trace("Checking timestamp for put",F,this[Zt]>L,this[Zt],L),this[Zt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Fo.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[Ii]: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[Zt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){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=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Zt]>v))return Ze(this[ae],L),Di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||XT(),F||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[Ii]: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(cn=>cn.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,Ci.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>zd(De,j)):zd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,oB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===tu.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let cn=r[De];Y.estimated_count=cn?cn.getValuesCount(Y[1]??Y.value):1/0}}else j===tu.SEARCH_TYPES.CONTAINS||j===tu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===tu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=aee:Y.estimated_count=oee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Fo.SKIP);else{let Y=vE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(BE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let cn=y[De],oE=vE(cn,v,D,q,S.allowFullScan);Y=Y.concat(oE)}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,cn={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(oE=>new Promise(aE=>cu(oE,X,cn,null,!1,DB=>{let cE=DB?.value;if(!cE)return aE(Fo.SKIP);for(let uE=0;uE<De;uE++)if(!j[uE](cE))return aE(Fo.SKIP);aE(cE)})))}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=Xv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Hs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Hs]){if(w){if(y)throw new Ci.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}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=Bn(F,i);(D==null||iB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||iB(D,J)){let Y=Bn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Di.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,aB.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=Bn(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Zt],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[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.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||XT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[Ii]:w};return!D.hasWrittenTime&&this[Zt]>F&&(F=X.newTxnTime=this[Zt]+.001),i.put(y,G??null,F),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 jc(i,S.user,u)),D}else return new Wd(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?.(F=>typeof F=="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 Ci.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[sB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ci.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ci.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({table:n,database:c,schemaDefined:l,attributes:N}),q.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(){Mu(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,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}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,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=Bn(y,i);L.id=F,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],F=u.get(v);if(F){let L=Bn(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[rB]=!0,d&&q.setTTLExpiration(d/1e3),b&&UB(),q;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ru.getIndexedValues)(L);if(G){eB&&w.prefetch(G.map(X=>({key:X,value:Z})),nB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ru.getIndexedValues)(F),G){eB&&w.prefetch(G.map(X=>({key:X,value:Z})),nB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function cu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" 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&&to(Y,"cache-hit",n),Y&&!y&&(D&&(D[sB]=!0),R))return $o(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(cu,"loadRecord");function Mi(){P=new Set,(0,Ui.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Mi,"setupCommitListeners");async function $o(Z,S=null,N,D){if(N<0){let L;return P||Mi(),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($o(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G($o(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},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;_s(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ru.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],Kd(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($o,"getFromSource");function Fn(Z){T||(T=i.get([tB,kT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([tB,kT.threadId],T)},50))}a(Fn,"recordDeletion");function XT(){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)}}},q.getRecordCount()*100+uee).unref())}a(XT,"enqueueDeletionCleanup");function ZT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(ZT,"addDeleteRemoval");function UB(){(0,Ui.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()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Di.error("Error in evicting old records",Z)}},cee).unref()}a(UB,"runRecordExpirationEviction")}function xT(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 nB(){}function lee(e){cB=e}function zd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!_ee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Jd.autoCast)(e)}function iB(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,Fo,ru,oB,kT,tu,iu,Ci,su,nu,Di,aB,Ui,Jd,cB,oee,aee,cee,eB,tB,Zt,rB,Ede,sB,eu,uee,_ee,Ed=Se(()=>{zr=C(A()),Fo=require("lmdb"),ru=C(Ht()),oB=require("lodash"),kT=require("worker_threads");jr();Wv();tu=C(xe()),iu=C(Q());jv();Ci=C(W()),su=C(Vs()),nu=C(Fr());de();Hu();Di=C(x());vu();Yn();aB=require("ordered-binary"),Ui=C(dt());Zc();Jd=C(V());ai();oee=1e8,aee=1e7,cee=6e4;iu.initSync();eB=iu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tB=Symbol.for("deletions"),Zt=Symbol.for("version"),rB=Symbol.for("incremental-update"),Ede=Symbol("source-resource"),sB=Symbol("load-from-source"),eu={isNotification:!0,allowInvalidated:!0},uee=(0,Jd.convertToMS)(iu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Xd,"makeTable");a(xT,"attributesAsObject");a(nB,"noop");a(lee,"setServerUtilities");_ee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(zd,"coerceType");a(iB,"isDescendantId")});var Ne={};je(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>$h,dropTableMeta:()=>See,getDatabases:()=>xr,getTables:()=>dee,onUpdatedTable:()=>dT,readMetaDb:()=>ou,resetDatabases:()=>Eee,table:()=>st,tables:()=>nr});function dee(){return tE||xr(),nr||{}}function xr(){if(tE)return ve;tE=!0,Vo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.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)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ou((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,ko.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,ko.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,ko.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,ko.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);ou((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&ou((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&ou(u,o,r,null,!0)}}for(let r in ve){let s=Vo.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[rE]}}return Vo=null,ve}}function Eee(){tE=!1;for(let[,e]of Hn)e.needsDeletion=!0;xr();for(let[e,t]of Hn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Hn.delete(e));return ve}function ou(e,t,r=YT,s,n){let i=new VT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Hn.get(e);o?o.needsDeletion=!1:(o=(0,Zd.open)(i),Hn.set(e,o));let c=new Li.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Go.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,Zd.open)(i),l.isLegacy=!0):l=HT(o));let _=dB(r),d=_[rE],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 q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;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)(jt.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(xo)||0)&&u.putSync(xo,$+1):(p.tableId=$=u.get(xo),$||($=1),u.putSync(xo,$+1),u.putSync(p.key,p));let q=new Li.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let Ze=new Li.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,Ze)}let Oe=k.find(Ze=>Ze.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=EB(_,f,Xd({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 q of KT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function dB(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)),Vo&&!Vo.has(e)){let r=new Set;t[rE]=r,Vo.set(e,r)}return t}function EB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=YT),xr();let r=dB(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Hn.get(i);if(!o){let c=new VT.default(i,!1);o=(0,Zd.open)(c),Hn.set(i,o)}return o}async function $h(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;Hn.delete(n.path),n.status==="open"&&(await n.close(),await uB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[rE]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=YT);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 Li.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=HT(u)),E=s.find(q=>q.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)(jt.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 Li.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Go.INTERNAL_DBIS_NAME,T),z.tableId=h.get(xo),z.tableId||(z.tableId=1),h.putSync(xo,z.tableId+1),E.tableId=z.tableId,_=EB(l,e,Xd({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 ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Go.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 q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}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 q=new Li.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.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=mee(_,k,O):p&&jd.signalSchemaChange(new eE.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 mee(e,t,r){try{let s=e.schemaVersion;await jd.signalSchemaChange(new eE.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,lB.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)}),au.workerData&&au.workerData.restartNumber!==_B.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>fee?await n:u>hee&&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 jd.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function See({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 dT(e){KT.push(e)}var yt,Go,Zd,Me,fr,ko,Li,VT,jt,uB,$T,lB,jd,eE,au,Le,_B,YT,rE,nr,ve,xo,KT,tE,Hn,Vo,fee,hee,de=Se(()=>{yt=C(Q()),Go=C(xe()),Zd=require("lmdb"),Me=require("path"),fr=require("fs"),ko=C(we());Ed();Li=C(xu()),VT=C(Vu()),jt=C(A()),uB=C(require("fs-extra")),$T=require("../index"),lB=C(Ht()),jd=C(Vs()),eE=C(Fr()),au=require("worker_threads"),Le=C(x()),_B=C(dt());Zc();YT="data",rE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,$T._assignPackageExport)("databases",ve);(0,$T._assignPackageExport)("tables",nr);xo=Symbol.for("next-table-id"),KT=[],Hn=new Map;a(dee,"getTables");a(xr,"getDatabases");a(Eee,"resetDatabases");a(ou,"readMetaDb");a(dB,"ensureDB");a(EB,"setTable");a(Fa,"database");a($h,"dropDatabase");a(st,"table");fee=1e3,hee=10;a(mee,"runIndexing");a(See,"dropTableMeta");a(dT,"onUpdatedTable")});var V=m((Ade,IB)=>{"use strict";var qn=require("path"),pB=require("fs-extra"),er=x(),fB=require("fs-extra"),sE=require("os"),pee=require("net"),Tee=require("recursive-iterator"),Ge=A(),Ree=DR(),hB=require("papaparse"),nE=require("moment"),{inspect:gee}=require("util"),mB=require("is-number"),gde=require("lodash"),Aee=require("minimist"),Oee=require("https"),Nee=require("http"),{hdb_errors:iE}=W(),bee=/^((\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)))$/,TB=require("util").promisify(setTimeout),yee=100,Iee=5,wee="",Cee=4,SB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};IB.exports={isEmpty:hr,isEmptyOrZeroLength:ys,arrayHasEmptyValues:Lee,arrayHasEmptyOrZeroLengthValues:Mee,buildFolderPath:Pee,isBoolean:RB,errorizeMessage:Uee,stripFileExtension:Bee,autoCast:Hee,autoCastJSON:gB,autoCastJSONDeep:QT,removeDir:qee,compareVersions:Fee,isCompatibleDataVersion:Gee,escapeRawValue:xee,unescapeValue:kee,stringifyProps:Vee,timeoutPromise:Yee,isClusterOperation:Wee,getClusterUser:zee,checkGlobalSchemaTable:Qee,getHomeDir:OB,getPropsFilePath:$ee,promisifyPapaParse:Jee,removeBOM:NB,createEventPromise:Xee,checkProcessRunning:Zee,checkSchemaTableExist:jee,checkSchemaExists:bB,checkTableExists:yB,getStartOfTomorrowInSeconds:ete,getLimitKey:tte,isObject:vee,isNotEmptyAndHasValue:Dee,autoCasterIsNumberCheck:AB,backtickASTSchemaItems:rte,isPortTaken:Kee,createForkArgs:ste,autoCastBoolean:nte,async_set_timeout:TB,getTableHashAttribute:ite,doesSchemaExist:ote,doesTableExist:ate,stringifyObj:cte,ms_to_time:ute,changeExtension:lte,getEnvCliRootPath:zT,noBootFile:_te,httpRequest:dte,transformReq:Ete,convertToMS:fte,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Uee(e){return e instanceof Error?e:new Error(e)}a(Uee,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function Dee(e){return!hr(e)&&(e||e===0||e===""||RB(e))}a(Dee,"isNotEmptyAndHasValue");function ys(e){return hr(e)||e.length===0||e.size===0}a(ys,"isEmptyOrZeroLength");function Lee(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(Lee,"arrayHasEmptyValues");function Mee(e){if(ys(e))return!0;for(let t=0;t<e.length;t++)if(ys(e[t]))return!0;return!1}a(Mee,"arrayHasEmptyOrZeroLengthValues");function Pee(...e){try{return e.join(qn.sep)}catch{console.error(e)}}a(Pee,"buildFolderPath");function RB(e){return hr(e)?!1:e===!0||e===!1}a(RB,"isBoolean");function vee(e){return hr(e)?!1:typeof e=="object"}a(vee,"isObject");function Bee(e){return ys(e)?wee:e.slice(0,-Cee)}a(Bee,"stripFileExtension");function Hee(e){return hr(e)||e===""||typeof e!="string"?e:SB[e]!==void 0?SB[e]:AB(e)===!0?Number(e):bee.test(e)?new Date(e):e}a(Hee,"autoCast");function gB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gB,"autoCastJSON");function QT(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=QT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=QT(r);s!==r&&(e[t]=s)}return e}else return gB(e)}a(QT,"autoCastJSONDeep");function AB(e){if(e.startsWith("0.")&&mB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&mB(e))}a(AB,"autoCasterIsNumberCheck");async function qee(e){if(ys(e))throw new Error(`Directory path: ${e} does not exist`);try{await fB.emptyDir(e),await fB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(qee,"removeDir");function Fee(e,t){if(ys(e)){er.info("Invalid current version sent as parameter.");return}if(ys(t)){er.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(Fee,"compareVersions");function Gee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Gee,"isCompatibleDataVersion");function xee(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(xee,"escapeRawValue");function kee(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(kee,"unescapeValue");function Vee(e,t){if(hr(e))return er.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+sE.EOL}!ys(s)&&s[0]===";"?r+=" "+s+n+sE.EOL:ys(s)||(r+=s+"="+n+sE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Vee,"stringifyProps");function OB(){let e;try{e=sE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(OB,"getHomeDir");function $ee(){let e=qn.join(OB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return pB.existsSync(e)||(e=qn.join(__dirname,"../","hdb_boot_properties.file")),e}a($ee,"getPropsFilePath");function Yee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Yee,"timeoutPromise");async function Kee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=pee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Kee,"isPortTaken");function Wee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Wee,"isClusterOperation");function Qee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qee,"checkGlobalSchemaTable");function zee(e,t){if(hr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||ys(e)){er.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){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(zee,"getClusterUser");function Jee(){hB.parsePromise=function(e,t,r){return new Promise(function(s,n){hB.parse(e,{header:!0,transformHeader:NB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Jee,"promisifyPapaParse");function NB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(NB,"removeBOM");function Xee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${gee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Xee,"createEventPromise");async function Zee(e){let t=!0,r=0;do await TB(yee*r++),(await Ree.findPs(e)).length>0&&(t=!1);while(t&&r<Iee);if(t)throw new Error(`process ${e} was not started`)}a(Zee,"checkProcessRunning");function jee(e,t){let r=bB(e);if(r)return r;let s=yB(e,t);if(s)return s}a(jee,"checkSchemaTableExist");function bB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bB,"checkSchemaExists");function yB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yB,"checkTableExists");function ete(){let e=nE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=nE().utc().unix();return e-t}a(ete,"getStartOfTomorrowInSeconds");function tte(){return nE().utc().format("DD-MM-YYYY")}a(tte,"getLimitKey");function rte(e){try{let t=new Tee(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){er.error("Got an error back ticking items."),er.error(t)}}a(rte,"backtickASTSchemaItems");function ste(e){return[e]}a(ste,"createForkArgs");function nte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(nte,"autoCastBoolean");function ite(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ite,"getTableHashAttribute");function ote(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(ote,"doesSchemaExist");function ate(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ate,"doesTableExist");function cte(e){try{return JSON.stringify(e)}catch{return e}}a(cte,"stringifyObj");function ute(e){let t=nE.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(ute,"ms_to_time");function lte(e,t){let r=qn.basename(e,qn.extname(e));return qn.join(qn.dirname(e),r+t)}a(lte,"changeExtension");function zT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Aee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zT,"getEnvCliRootPath");var WT;function _te(){if(WT)return WT;let e=zT();zT()&&pB.pathExistsSync(qn.join(e,Ge.HDB_CONFIG_FILE))&&(WT=!0)}a(_te,"noBootFile");function dte(e,t){let r;return e.protocol==="http:"?r=Nee:r=Oee,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(dte,"httpRequest");function Ete(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Ete,"transformReq");function fte(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(fte,"convertToMS")});var CB=m((bde,wB)=>{"use strict";var JT=A(),hte=V(),mte=Es(),Jr=x(),Ste=f_(),pte=ic(),Nde=PS(),Tte=ks(),Rte=uc(),gte=require("semver/functions/gte"),Ate=3e4,Ote=7;wB.exports=Nte;async function Nte(){try{Jr.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await Tte.setSchemaDataToGlobalAsync();let e=await mte.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===JT.PRE_4_0_0_VERSION&&t.push(bte(n))}await Promise.allSettled(t),Jr.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Jr.error(e),e}}a(Nte,"updateAllNodes");async function bte(e){try{let{name:t,subscriptions:r}=e;Jr.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<Ote;){let i=[];if(await Ste.buildNodeStatus(e,i),Jr.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&gte(i[0].system_info.hdb_version,"4.0.0")){Jr.notify("Received open status from node:",t,"calling add node");let o={operation:JT.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await pte(o,!0),Jr.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Jr.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await hte.async_set_timeout(Ate)}s||(Jr.error("4.0.0 node update was unable to update connection to node:",t),Jr.error("Removing following node record from hdb_nodes",e),await Rte({operation:JT.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Jr.error(t),t}}a(bte,"updateNode")});var yte=CB();(async()=>{try{await yte()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();