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
  `,P0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},v0=["*","%"],B0="unauthorized_access",H0="func_val",q0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},F0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},G0={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"},x0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},k0={HTTP:"http"},V0={STOPPED:"stopped",ONLINE:"online"},$0="3.x.x",Y0={SUCCESS:"success",FAILURE:"failure"},K0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:cR,HDB_SUPPORT_URL:lR,HDB_PRICING_URL:mH,SUPPORT_HELP_MSG:SH,LICENSE_HELP_MSG:_R,HDB_PROC_NAME:oR,HDB_PROC_DESCRIPTOR:mE,CLUSTERING_LEAF_PROC_DESCRIPTOR:_u,CLUSTERING_HUB_PROC_DESCRIPTOR:lu,SYSTEM_SCHEMA_NAME:BH,HASH_FOLDER_NAME:HH,HDB_HOME_DIR_NAME:qH,UPDATE_FILE_NAME:kH,LICENSE_KEY_DIR_NAME:GH,BOOT_PROPS_FILE_NAME:xH,JOB_TYPE_ENUM:p0,JOB_STATUS_ENUM:l0,SYSTEM_TABLE_NAMES:n0,SYSTEM_TABLE_HASH_ATTRIBUTES:i0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:_0,S3_BUCKET_AUTH_KEYS:d0,VALID_SQL_OPS_ENUM:E0,GEO_CONVERSION_ENUM:h0,HDB_SETTINGS_NAMES:fR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:m0,SERVICE_ACTIONS_ENUM:f0,CLUSTER_MESSAGE_TYPE_ENUM:T0,CLUSTER_CONNECTION_DIRECTION_ENUM:R0,CLUSTER_EVENTS_DEFS_ENUM:O0,PERIOD_REGEX:NH,DOUBLE_PERIOD_REGEX:bH,UNICODE_PERIOD:yH,FORWARD_SLASH_REGEX:IH,UNICODE_FORWARD_SLASH:wH,ESCAPED_FORWARD_SLASH_REGEX:CH,ESCAPED_PERIOD_REGEX:UH,ESCAPED_DOUBLE_PERIOD_REGEX:DH,REG_KEY_FILE_NAME:c0,RESTART_TIMEOUT_MS:YH,HDB_FILE_PERMISSIONS:KH,DATABASES_DIR_NAME:zH,LEGACY_DATABASES_DIR_NAME:JH,TRANSACTIONS_DIR_NAME:XH,LIMIT_COUNT_NAME:ZH,ID_ATTRIBUTE_STRING:jH,INSERT_MODULE_ENUM:r0,UPGRADE_JSON_FIELD_NAMES_ENUM:s0,RESTART_CODE:VH,RESTART_CODE_NUM:$H,CLUSTER_OPERATIONS:Wo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:a0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:o0,CLUSTERING_MESSAGE_TYPES:D0,HDB_FILE_SUFFIX:FH,BLOB_FOLDER_NAME:WH,HDB_TRASH_DIR:QH,ORIGINATOR_SET_VALUE:L0,LICENSE_VALUES:g0,RAM_ALLOCATION_ENUM:A0,TIME_STAMP_NAMES_ENUM:mR,TIME_STAMP_NAMES:w0,PERMS_UPDATE_RELEASE_TIMESTAMP:C0,SEARCH_NOT_FOUND_MESSAGE:pH,SEARCH_ATTRIBUTE_NOT_FOUND:TH,LICENSE_ROLE_DENIED_RESPONSE:RH,LICENSE_MAX_CONNS_REACHED:gH,BASIC_LICENSE_MAX_NON_CU_ROLES:uR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:hH,VALUE_SEARCH_COMPARATORS:SR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:U0,LICENSE_FILE_NAME:u0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:N0,NEW_LINE:M0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:OH,MOMENT_DAYS_TAG:LH,API_TURNOVER_SEC:MH,LOOPBACK:AH,CODE_EXTENSION:uu,WILDCARD_SEARCH_VALUE:PH,NODE_ERROR_CODES:b0,JAVASCRIPT_EXTENSION:iR,PERMS_CRUD_ENUM:P0,UNAUTHORIZED_PERMISSION_NAME:B0,SEARCH_WILDCARDS:v0,FUNC_VAL:H0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:q0,JWT_ENUM:F0,CLUSTERING_FLAG:I0,ITC_EVENT_TYPES:G0,CUSTOM_FUNCTION_PROC_NAME:aR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:cu,SERVICES:x0,THREAD_TYPES:k0,MEM_SETTING_KEY:vH,HDB_RESTART_SCRIPT:eH,PROCESS_DESCRIPTORS:oH,SERVICE_SERVERS:_H,SERVICE_SERVERS_CWD:hE,PROCESS_DESCRIPTORS_VALIDATE:uH,LAUNCH_SERVICE_SCRIPTS:dH,LOG_LEVELS:cH,PROCESS_NAME_ENV_PROP:e0,LOG_NAMES:aH,PM2_PROCESS_STATUSES:V0,CONFIG_PARAM_MAP:hR,CONFIG_PARAMS:g,HDB_CONFIG_FILE:XB,HDB_DEFAULT_CONFIG_FILE:ZB,ROLE_TYPES_ENUM:EH,BOOT_PROP_PARAMS:dR,INSTALL_PROMPTS:t0,HDB_ROOT_DIR_NAME:jB,CLUSTERING_PROCESSES:lH,FOREGROUND_PID_FILE:sH,PACKAGE_ROOT:cn,PRE_4_0_0_VERSION:$0,SCHEMAS_PARAM_CONFIG:S0,METADATA_PROPERTY:y0,AUTH_AUDIT_STATUS:Y0,AUTH_AUDIT_TYPES:K0,HDB_PID_FILE:nH,DEFAULT_DATABASE_NAME:iH};nR()});var SE=m((Ute,gR)=>{"use strict";var TR=require("minimist");gR.exports=W0;function W0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=RR(process.env),s=RR(TR(process.argv))):(r=process.env,s=TR(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(W0,"assignCMDENVVariables");function RR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(RR,"objKeysToLowerCase")});var x=m((Lte,NE)=>{"use strict";var Fn=require("fs-extra"),{workerData:Q0,threadId:z0}=require("worker_threads"),ws=require("path"),NR=require("yaml"),bR=require("properties-reader"),tt=A(),AR=SE(),J0=require("os"),{PACKAGE_ROOT:TE}=A(),{_assignPackageExport:X0}=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},yR={STDOUT:"stdOut",STDERR:"stdErr"},Z0=ws.join(TE,"logs"),j0=ws.join(TE,"config/yaml/",tt.HDB_DEFAULT_CONFIG_FILE),eq=1e4,ys,Is,Lt,du,Eu,Jo,vi,Qo;Qo===void 0&&IR();NE.exports={notify:UR,fatal:DR,error:Xo,warn:OE,info:fu,debug:AE,trace:gE,setLogLevel:aq,log_level:Lt,loggerWithTag:tq,suppressLogging:rq,initLogSettings:IR,setupConsoleLogging:wR,logCustomLevel:iq,closeLogFile:RE,getLogFilePath:()=>Jo,OUTPUTS:yR,AuthAuditLog:lq};X0("logger",NE.exports);function IR(e=!1){try{if(Qo===void 0||e){RE();let t=oq(),r=AR(["ROOTPATH"]);try{Qo=bR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fn.pathExistsSync(ws.join(r.ROOTPATH,tt.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:Eu,to_file:ys,to_stream:Is}=cq(r.ROOTPATH?ws.join(r.ROOTPATH,tt.HDB_CONFIG_FILE):Qo.get("settings_path"))),du=tt.LOG_NAMES.HDB,Jo=ws.join(Eu,du)}}catch(t){if(Qo=void 0,t.code===tt.NODE_ERROR_CODES.ENOENT){let r=AR(Object.keys(tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===tt.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===tt.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=uq();ys=ys===void 0?n:ys,ys=OR(ys),Is=Is===void 0?i:Is,Is=OR(Is),Lt=Lt===void 0?s:Lt,Eu=Z0,du=tt.LOG_NAMES.INSTALL,Jo=ws.join(Eu,du);return}throw Xo("Error initializing log settings"),Xo(t),t}wR()}a(IR,"initLogSettings");var pE=!0;function wR(){Pi("error",Xo),Pi("warn",OE),Pi("log",fu),Pi("info",fu),Pi("debug",AE),Pi("trace",gE)}a(wR,"setupConsoleLogging");function Pi(e,t){console[e]=function(...r){if(pE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return zo[e](...r)}}a(Pi,"logConsole");function tq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(UR),fatal:r(DR),error:r(Xo),warn:r(OE),info:r(fu),debug:r(AE),trace:r(gE)};function r(s){return function(...n){return s(t,...n)}}}a(tq,"loggerWithTag");function rq(e){try{pE=!1,e()}finally{pE=!0}}a(rq,"suppressLogging");var sq=Q0?.name?.replace(/ /g,"-")||"main";function Cs(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||sq+"/"+z0);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
3
  `}a(Cs,"createLogRecord");function Zo(e){ys&&CR(e),Is&&process.stdout.write(e)}a(Zo,"logStdOut");function hu(e){ys&&CR(e),Is&&process.stderr.write(e)}a(hu,"logStdErr");function CR(e){nq(),vi?Fn.appendFileSync(vi,e):zo.log(e)}a(CR,"logToFile");function RE(){try{Fn.closeSync(vi)}catch{}vi=null}a(RE,"closeLogFile");function nq(){if(!vi){try{if(!Jo)debugger;vi=Fn.openSync(Jo,"a")}catch(e){zo.error(e)}setTimeout(()=>{RE()},eq).unref()}}a(nq,"openLogFile");function fu(...e){Mt[Lt]<=Mt.info&&Zo(Cs("info",e))}a(fu,"info");function gE(...e){Mt[Lt]<=Mt.trace&&Zo(Cs("trace",e))}a(gE,"trace");function Xo(...e){Mt[Lt]<=Mt.error&&hu(Cs("error",e))}a(Xo,"error");function AE(...e){Mt[Lt]<=Mt.debug&&Zo(Cs("debug",e))}a(AE,"debug");function UR(...e){Mt[Lt]<=Mt.notify&&Zo(Cs("notify",e))}a(UR,"notify");function DR(...e){Mt[Lt]<=Mt.fatal&&hu(Cs("fatal",e))}a(DR,"fatal");function OE(...e){Mt[Lt]<=Mt.warn&&hu(Cs("warn",e))}a(OE,"warn");function iq(e,t,...r){t===yR.STDERR?hu(Cs(e,r)):Zo(Cs(e,r))}a(iq,"logCustomLevel");function oq(){let e;try{e=J0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,tt.HDB_HOME_DIR_NAME,tt.BOOT_PROPS_FILE_NAME);return Fn.existsSync(t)||(t=ws.join(TE,"utility/hdb_boot_properties.file")),t}a(oq,"getPropsFilePath");function aq(e){Lt=e}a(aq,"setLogLevel");function OR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(OR,"autoCastBoolean");function cq(e){try{if(e.includes("config/settings.js")){let o=bR(e);return{level:o.get(tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=NR.parseDocument(Fn.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===tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(cq,"getLogConfig");function uq(){try{let e=NR.parseDocument(Fn.readFileSync(j0,"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(uq,"getDefaultConfig");function lq(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(lq,"AuthAuditLog")});var MR=m((Pte,LR)=>{"use strict";var _q=require("util"),dq=require("path"),Eq=require("child_process"),fq=_q.promisify(Eq.execFile),hq=1e3*1e3*10;LR.exports={findPs:mq};async function mq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await fq("ps",["wwxo",`pid,${r}`],{maxBuffer:hq});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:dq.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(mq,"findPs")});var xe=m((Bte,vR)=>{"use strict";var Sq="__dbis__",pq="__txns__",Tq="__environment_name__",Rq="__dbi_defintion__",gq={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"},Aq=["__createdtime__","__updatedtime__"],Oq="\uFFFF",PR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Nq=Object.values(PR);vR.exports={AUDIT_STORE_NAME:pq,INTERNAL_DBIS_NAME:Sq,DBI_DEFINITION_NAME:Rq,SEARCH_TYPES:gq,TIMESTAMP_NAMES:Aq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Tq,TRANSACTIONS_DBI_NAMES_ENUM:PR,TRANSACTIONS_DBIS:Nq,OVERFLOW_MARKER:Oq}});var rr=m((Hte,$R)=>{"use strict";var BR=A(),HR=xe(),qR={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},FR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),GR={500:FR("There was an error processing your request."),400:"Invalid request"},bq=GR[qR.INTERNAL_SERVER_ERROR],yq={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.`},Iq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},wq={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"},Cq={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 ${HR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${HR.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"},Uq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${BR.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 ${BR.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"},xR={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"},Dq={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."},Lq={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`},Mq={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"},Pq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},vq={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`},kR={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.`},VR={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}`},Bq={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."},Hq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},qq={...xR,...wq,...yq,...Dq,...Lq,...Mq,...Pq,...vq,...Uq,...kR,...VR,...Bq,...Hq,...Iq};$R.exports={CHECK_LOGS_WRAPPER:FR,HDB_ERROR_MSGS:qq,DEFAULT_ERROR_MSGS:GR,DEFAULT_ERROR_RESP:bq,HTTP_STATUS_CODES:qR,LMDB_ERRORS_ENUM:Cq,AUTHENTICATION_ERROR_MSGS:xR,VALIDATION_ERROR_MSGS:kR,ITC_ERRORS:VR}});var W=m((Fte,WR)=>{"use strict";var Bi=rr(),Fq=x(),Gq=A(),mu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,YR),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&&Fq[n](i)}},bE=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}},yE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function YR(e,t,r,s=Gq.LOG_LEVELS.ERROR,n=null,i=!1){if(KR(e))return e;let o=new mu(e,t,r,s,n);return i&&delete o.stack,o}a(YR,"handleHDBError");function KR(e){return e.__proto__.constructor.name===mu.name}a(KR,"isHDBError");WR.exports={isHDBError:KR,handleHDBError:YR,ClientError:bE,ServerError:yE,hdb_errors:Bi}});var zR=m((xte,QR)=>{"use strict";var xq={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))},kq="certificate.pem",Vq="privateKey.pem",$q="ca.pem";QR.exports={CERTIFICATE_VALUES:xq,CERTIFICATE_PEM_NAME:kq,PRIVATEKEY_PEM_NAME:Vq,CA_PEM_NAME:$q}});var Pe=m((kte,JR)=>{"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};JR.exports={validateObject:Yq,validateObjectAsync:Kq,validateBySchema:Wq};function Yq(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(Yq,"validateObject");async function Kq(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(Kq,"validateObjectAsync");function Wq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Wq,"validateBySchema")});var wE=m((Yte,rg)=>{"use strict";var eg=require("fs-extra"),ee=require("joi"),Qq=require("os"),{boolean:pe,string:Ds,number:sr,array:IE}=ee.types(),{totalmem:XR}=require("os"),Hi=require("path"),zq=x(),pu=V(),$te=zR(),ZR=A(),Jq=Pe(),jR="log",Xq="components",Zq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",jq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",eF="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",tF="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",rF="rootPath config parameter is undefined",sF="clustering.enabled config parameter is undefined",Us=sr.min(0).required(),Tu=IE.items({host:Ds.required(),port:Us}).empty(null),Ls;rg.exports={configValidator:nF,routesValidator:lF,route_constraints:Tu};function nF(e){if(Ls=e.rootPath,pu.isEmpty(Ls))throw rF;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(uF),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Su),i=ee.custom(iF).messages({"any.custom":"{:#label} {:#error}"}),o=Ds.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(Su),u=ee.custom(oF).empty(null).default(Su),l=e.clustering?.enabled;if(pu.isEmpty(l))throw sF;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Us,routes:Tu}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Us}).required()}).required(),network:ee.object({port:Us}).required()}).required(),leafServer:ee.object({network:ee.object({port:Us,routes:Tu}).required(),streams:ee.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ds.optional().empty(null)}).required():_=ee.object({enabled:t,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),ee.object({authentication:ee.object({authorizeLocal:pe,cacheTTL:sr.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:sr}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:IE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}),nodeEnv:r,root:n,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ee.object({enabled:t}).required(),logging:ee.object({auditAuthEvents:ee.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ee.object({enabled:pe.optional(),compress:pe.optional(),interval:Ds.custom(cF).optional().empty(null),maxSize:Ds.custom(aF).optional().empty(null),path:Ds.optional().empty(null).default(Su)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:IE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Us,securePort:Us}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:ee.object({threads:s}).required(),storage:ee.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(nF,"configValidator");function tg(e){return eg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(tg,"doesPathExist");function iF(e,t){if(e===null)return;let r=tg(e);return r?t.message(r):e}a(iF,"validatePemFile");function oF(e,t){ee.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=tg(e);if(r)return t.message(r)}a(oF,"validatePath");function aF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Zq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(eF):e}a(aF,"validateRotationMaxSize");function cF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(jq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(tF):e}a(cF,"validateRotationInterval");function uF(e,t){let r=t.state.path.join("."),s=Qq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||XR();return i=Math.round(Math.min(i,XR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),zq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(uF,"setDefaultThreads");function Su(e,t){if(!pu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(pu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Hi.join(Ls,Xq);case"logging.root":return Hi.join(Ls,jR);case"clustering.leafServer.streams.path":return Hi.join(Ls,"clustering","leaf");case"storage.path":let s=Hi.join(Ls,ZR.LEGACY_DATABASES_DIR_NAME);return eg.existsSync(s)?s:Hi.join(Ls,ZR.DATABASES_DIR_NAME);case"logging.rotation.path":return Hi.join(Ls,jR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Su,"setDefaultRoot");function lF(e){let t=ee.object({routes:Tu});return Jq.validateBySchema({routes:e},t)}a(lF,"routesValidator")});var Ru={};et(Ru,{server:()=>rt});var sg,rt,Jr=Se(()=>{sg=require("../../index"),rt={};(0,sg._assignPackageExport)("server",rt)});var Rr=m((Qte,Eg)=>{"use strict";var Tr=A(),lt=V(),st=x(),{configValidator:_F,routesValidator:ng}=wE(),vt=require("fs-extra"),dF=require("yaml"),Pr=require("path"),EF=require("is-number"),og=require("properties-reader"),fF=require("lodash"),{handleHDBError:hF}=W(),{HTTP_STATUS_CODES:mF,HDB_ERROR_MSGS:gu}=rr(),Wte=require("minimist"),{server:SF}=(Jr(),re(Ru)),{SCHEMAS_PARAM_CONFIG:jo,CONFIG_PARAMS:un,CONFIG_PARAM_MAP:Ms}=Tr,pF="Unable to get config value because config is uninitialized",TF="Config successfully initialized",RF="Error backing up config file",gF="Empty parameter sent to getConfigValue",ag=Pr.join(Tr.PACKAGE_ROOT,"config","yaml",Tr.HDB_DEFAULT_CONFIG_FILE),AF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ig={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"},Au,ft;Eg.exports={createConfigFile:OF,getDefaultConfig:NF,getConfigValue:ug,initConfig:lg,flattenConfig:xn,updateConfigValue:_g,updateConfigObject:yF,getConfiguration:CF,setConfiguration:UF,readConfigFile:DE,getClusteringRoutes:DF,initOldConfig:dg,getConfigFromFile:LF,getConfigFilePath:Gn,addConfig:MF,deleteConfigFromFile:PF};function OF(e){let t=ln(ag);Au=xn(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===un.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=CE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){st.error(_)}}}r&&cg(t,r),UE(t);let s=t.toJSON();ft=xn(s);let n=t.getIn(["rootPath"]),i=Pr.join(n,Tr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),st.trace(`Config file written to ${i}`)}a(OF,"createConfigFile");function cg(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=[un.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=[un.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){st.error("Error parsing schemas CLI/env config arguments",s)}}a(cg,"setSchemasConfig");function NF(e){if(Au===void 0){let r=ln(ag);Au=xn(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Au[t.toLowerCase()]}a(NF,"getDefaultConfig");function ug(e){if(e==null){st.error(gF);return}if(ft===void 0){st.trace(pF);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(ug,"getConfigValue");function Gn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,Tr.HDB_CONFIG_FILE):og(e).get(Tr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Gn,"getConfigFilePath");function lg(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 st.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gn(t),s;if(r.includes("config/settings.js"))try{dg(r);return}catch(i){if(i.code!==Tr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ln(r)}catch(i){if(i.code===Tr.NODE_ERROR_CODES.ENOENT){st.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw st.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bF(s,r),UE(s);let n=s.toJSON();if(SF.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in ig)ft[i]&&st.error(`Config ${ig[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(TF)}}a(lg,"initConfig");function bF(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&&(st.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(bF,"checkForUpdatedConfig");function UE(e){let t=e.toJSON(),r=_F(t);if(r.error)throw gu.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(UE,"validateConfig");function yF(e,t){ft===void 0&&(ft={});let r=Ms[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(yF,"updateConfigObject");function _g(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&lg();let o=ug(Ms.hdb_root),c=Pr.join(o,Tr.HDB_CONFIG_FILE),u=ln(c),l;if(r===void 0&&e.toLowerCase()===un.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=CE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===un.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=CE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){st.error(p)}}}l&&cg(u,l),UE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,Tr.HDB_CONFIG_FILE);s===!0&&IF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_g,"updateConfigValue");function IF(e,t){try{let r=Pr.join(t,"backup",`${Tr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(RF),st.error(r)}}a(IF,"backupConfigFile");var wF=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!wF.includes(r)){let s=xn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(xn,"flattenConfig");function CE(e,t){if(e===un.CLUSTERING_NODENAME||e===un.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(EF(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(CE,"castConfigValue");function CF(){let e=lt.getPropsFilePath(),t=Gn(e);return ln(t).toJSON()}a(CF,"getConfiguration");async function UF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return _g(void 0,void 0,n,!0),AF}catch(i){throw typeof i=="string"||i instanceof String?hF(i,i,mF.BAD_REQUEST,void 0,void 0,!0):i}}a(UF,"setConfiguration");function DE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return ln(t).toJSON()}a(DE,"readConfigFile");function ln(e){return dF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ln,"parseYamlDoc");function DF(){let e=DE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=ng(t);if(r)throw gu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=ng(s);if(n)throw gu.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 gu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(DF,"getClusteringRoutes");function dg(e){let t=og(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===un.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(dg,"initOldConfig");function LF(e){let t=DE();return fF.get(t,e.replaceAll("_","."))}a(LF,"getConfigFromFile");async function MF(e,t){let r=ln(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(MF,"addConfig");function PF(e){let t=Gn(lt.getPropsFilePath()),r=ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,Tr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(PF,"deleteConfigFromFile")});var Q=m((Jte,mg)=>{"use strict";var LE=require("fs-extra"),vr=require("path"),fg=require("os"),vF=require("properties-reader"),ea=x(),kn=V(),te=A(),Ou=Rr(),BF="Error initializing environment manager",Nu="BOOT_PROPS_FILE_PATH",hg=!1,HF={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ps={};mg.exports={BOOT_PROPS_FILE_PATH:Nu,getHdbBasePath:qF,setHdbBasePath:FF,get:GF,initSync:kF,setProperty:Ee,initTestEnvironment:VF};function qF(){return Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qF,"getHdbBasePath");function FF(e){Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(FF,"setHdbBasePath");function GF(e){let t=Ou.getConfigValue(e);return t===void 0?Ps[e]:t}a(GF,"get");function Ee(e,t){HF[e]&&(Ps[e]=t),Ou.updateConfigObject(e,t)}a(Ee,"setProperty");function xF(){let e;try{e=kn.getPropsFilePath(),LE.accessSync(e,LE.constants.F_OK|LE.constants.R_OK),hg=!0;let t=vF(e);return Ps[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Nu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(xF,"doesPropFileExist");function kF(e=!1){try{(hg||xF()||kn.noBootFile())&&(Ou.initConfig(e),Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ou.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(BF),ea.error(t),console.error(t),process.exit(1)}}a(kF,"initSync");function VF(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=vr.join(__dirname,"../../","unitTests");Ps[Nu]=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,fg.userInfo()?fg.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Nu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(VF,"initTestEnvironment")});var we=m((Zte,Og)=>{"use strict";var ia=A(),$F=V(),Bt=Q(),oa=require("path"),YF=require("minimist"),Sg=require("fs-extra"),pg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:bu}=ia,ra,sa,na;function Tg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(_n.STORAGE_PATH)||oa.join(Bt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Tg,"getBaseSchemaPath");function Rg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Ag(bu),sa}a(Rg,"getSystemSchemaPath");function gg(){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(gg,"getTransactionAuditStoreBasePath");function KF(e,t){let r=Bt.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(gg(),e.toString())}a(KF,"getTransactionAuditStorePath");function Ag(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(Tg(),e)}a(Ag,"getSchemaPath");function WF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,YF(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!$F.isObject(s))throw o;i=s}for(let o of i){let c=o[bu];if(!c)continue;let u=Bt.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return pg.set(u,[bu,ta.TABLES,t,ta.PATH],l),Bt.setProperty(_n.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return pg.set(u,[bu,ta.PATH],_),Bt.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!Sg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return Sg.mkdirsSync(i),Bt.setProperty(_n.STORAGE_PATH,n),i}return Rg()}a(WF,"initSystemSchemaPaths");function QF(){ra=void 0,sa=void 0,na=void 0}a(QF,"resetPaths");Og.exports={getBaseSchemaPath:Tg,getSystemSchemaPath:Rg,getTransactionAuditStorePath:KF,getTransactionAuditStoreBasePath:gg,getSchemaPath:Ag,initSystemSchemaPaths:WF,resetPaths:QF}});var Ht=m((rre,wg)=>{"use strict";var zF=rr().LMDB_ERRORS_ENUM,ere=require("lmdb"),JF=xe(),tre=require("buffer").Buffer,{OVERFLOW_MARKER:Ng,MAX_SEARCH_KEY_LENGTH:yu}=JF,bg=["number","string","symbol","boolean","bigint"];function XF(e){if(e=e?.primaryStore||e,!e)throw new Error(zF.ENV_REQUIRED)}a(XF,"validateEnv");function ZF(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(ZF,"stringifyData");function jF(e){return e instanceof Date?e.valueOf():e}a(jF,"convertKeyValueToWrite");function eG(e){if(e==null)return;if(bg.includes(typeof e))return e.length>yu?[e.slice(0,yu)+Ng]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(bg.includes(typeof n))n.length>yu?t.push(n.slice(0,yu)+Ng):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(eG,"getIndexedValues");var Iu=0,yg=0;function Ig(){yg=Date.now()-performance.now()}a(Ig,"adjustStartTime");Ig();var tG=6e4;setInterval(Ig,tG).unref();function rG(){let e=performance.now()+yg;return e>Iu?(Iu=e,e):(Iu+=488e-6,Iu)}a(rG,"getNextMonotonicTime");wg.exports={validateEnv:XF,stringifyData:ZF,convertKeyValueToWrite:jF,getNextMonotonicTime:rG,getIndexedValues:eG}});var Cg,Xr,ME,aa=Se(()=>{Cg=require("events"),Xr=class extends Cg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new ME;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)}},ME=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 Lu(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=Ug(_,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,wu.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,wu.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 wu.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 Ug(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}},Lu(r,t)),new r(e)):new Cu(e);case Array:let s=new Du(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ug(o,t?.elements)),s[n]=o}return s}}function Mu(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=Mu(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 Uu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(Uu(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(Uu(n))return!0}else return!0}else return!0}}return!1}var wu,ht,Cu,Vn,Du,Pu=Se(()=>{Zr();wu=C(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Lu,"assignTrackedAccessors");a(Ug,"trackObject");Cu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Lu(Cu,{});a(Mu,"collapseData");a(ua,"deepFreeze");a(Uu,"hasChanges");Vn=Symbol.for("has-array-changes"),Du=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Du.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 PE;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 Dg,Lg,PE,$n=Se(()=>{Dg=C(Ht()),Lg=require("../../index");Zr();a(Ye,"transaction");(0,Lg._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()};PE=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,Dg.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 HE(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(nG[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=es.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new vE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=qE(e);if(!p)throw new vE.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:Pg.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 qE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function vu(e){if(!e)return;let t=new BE,r,s,n,i,o;for(;r=Mg.exec(e);){i=Mg.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=sG[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 vE,_t,es,Pg,Mg,sG,nG,BE,Bu=Se(()=>{vE=C(W()),_t=C(xe()),es=require("ordered-binary"),Pg=require("lmdb"),Mg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,sG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(HE,"idsForCondition");nG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(qE,"filterByType");a(jr,"attributeComparator");a(vu,"parseQuery");BE=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 xE={};et(xE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>Gg,snake_case:()=>oG});function oG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vg(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 GE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function gr(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[Gg]=!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 Hu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Hu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Ar(e,t){let r=new Fg.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 FE(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 Bg(e){if(typeof e=="string")return t=>FE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=FE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=FE(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 Hg,qg,Fg,Ae,ae,vs,Gg,ce,iG,mt,Hu,GE,Zr=Se(()=>{Hg=require("crypto");aa();qg=require("../../index"),Fg=C(W());Pu();$n();Bu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),Gg=Symbol("save-updates"),ce=Symbol("stored-record"),iG={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=gr(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=Bg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=gr(function(t,r,s,n){if(Array.isArray(n)&&t[vs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):Ar(t,"put")},{hasContent:!0,type:"update"});static delete=gr(function(t,r,s,n){return t.delete?t.delete(r):Ar(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Hg.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):Ar(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=gr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Ar(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=gr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=gr(function(t,r,s,n){return t.connect?t.connect(r):Ar(t,"connect")},{type:"read"});static subscribe=gr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Ar(t,"subscribe")},{type:"read"});static publish=gr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Ar(t,"publish")},{hasContent:!0,type:"create"});static search=gr(function(t,r,s,n){let i=t.search?t.search(s):Ar(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Bg(o);return i.map(c)}return i},{type:"read"});static query=gr(function(t,r,s,n){return t.search?t.search(n,r):Ar(t,"search")},{hasContent:!0,type:"read"});static copy=gr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Ar(t,"copy")},{type:"create"});static move=gr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Ar(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ae],t,this[Ae]);Ar(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return vu(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&&iG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:vg(t,this)}}return vg(t,this)}static getResource(t,r,s){let n,i=r[Ae],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[vs]=!0),n}connect(t){let r=new Xr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,qg._assignPackageExport)("Resource",mt);a(oG,"snake_case");Hu=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(vg,"pathToId");GE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(gr,"transactional");a(Ar,"missingMethod");a(FE,"selectFromObject");a(Bg,"transformForSelect")});var $E={};et($E,{loadGQLSchema:()=>cG,start:()=>VE,startOnMainThread:()=>aG});function VE({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,kE.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,kE.dirname)(s)+"/"+T.name,p.tableClass)}}}var kE,aG,cG,xg=Se(()=>{kE=require("path");de();a(VE,"start");aG=VE,cG=VE({ensureTable:nt}).handleFile});async function qu(e){return uG?(la||(la=lG(dG)),(await(await la).import(e)).namespace):import(e)}async function lG(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:_G,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Vg.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,kg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function _G(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 dG(){return{Resource:mt,tables:nr}}var kg,Vg,uG,la,YE=Se(()=>{Zr();de();kg=require("fs/promises"),Vg=require("path"),uG=!1;a(qu,"secureImport");a(lG,"getCompartment");a(_G,"secureOnlyFetch");a(dG,"getGlobalVars")});var WE={};et(WE,{handleFile:()=>EG});async function EG(e,t,r,s){let n=new Map,i=(0,$g.pathToFileURL)(r).toString(),o=await qu(i);u(o.default)&&s.set((0,KE.dirname)(t),o.default),c(o,(0,KE.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var $g,KE,Yg=Se(()=>{$g=require("url");YE();KE=require("path");a(EG,"handleFile")});var zE={};et(zE,{start:()=>fG});function fG({resources:e}){e.set("login",QE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var QE,Kg=Se(()=>{Zr();a(fG,"start");QE=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 XE=m((Ure,zg)=>{"use strict";var{Readable:hG}=require("stream"),mG=1e4;zg.exports={streamAsJSON(e){return new JE({value:e})}};var JE=class extends hG{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),Wg)}catch(n){yield Wg(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);Qg(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>mG?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 Qg(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 Wg(e){return console.error(e),JSON.stringify(e.toString())}a(Wg,"handleError");function Qg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Qg,"when")});var cA=m((Mre,aA)=>{"use strict";var ZE=require("recursive-iterator"),SG=require("alasql"),jE=require("clone"),Jg=V(),{handleHDBError:Xg,hdb_errors:pG}=W(),{HDB_ERROR_MSGS:Zg,HTTP_STATUS_CODES:jg}=pG,{getDatabases:TG}=(de(),re(Ne)),RG=["DISTINCT_ARRAY"],eA=Symbol("validateTables"),ef=Symbol("validateTable"),Lre=Symbol("getAllColumns"),tA=Symbol("validateAllColumns"),Fu=Symbol("findColumn"),rA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),tf=Symbol("validateColumn"),sA=Symbol("setColumnsForTable"),nA=Symbol("checkColumnsForAsterisk"),iA=Symbol("validateGroupBy"),oA=Symbol("hasColumns"),rf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eA](),this[nA](),this[tA]()}[eA](){if(this[oA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ef](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ef](t.table)})}}[oA](){let t=!1,r=new ZE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ef](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=TG();if(!r[t.databaseid])throw Xg(new Error,Zg.SCHEMA_NOT_FOUND(t.databaseid),jg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Xg(new Error,Zg.TABLE_NOT_FOUND(t.databaseid,t.tableid),jg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=jE(n);i.table=jE(t),this.attributes.push(i)})}[Fu](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)}[nA](){let t=new ZE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sA](r.tableid)}[sA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new SG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tA](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[iA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new ZE(t),n=[];for(let{node:i,path:o}of s)!Jg.isEmpty(i)&&!Jg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rA](i):n.push(this[tf](i)));return n}[iA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&RG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=jE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Fu](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[Fu](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`}[rA](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[tf](t)}[tf](t){let r=this[Fu](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]}};aA.exports=rf});var lA=m((vre,uA)=>{"use strict";var sf=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")}};uA.exports=sf});var dA=m((Hre,_A)=>{"use strict";var nf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_A.exports=nf});var Gu=m((Fre,EA)=>{"use strict";var af=Q(),cf=A();af.initSync();var gG=af.get(cf.CONFIG_PARAMS.STORAGE_COMPRESSION),AG=af.get(cf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,OG=cf.UPDATES_PROPERTY,of=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=gG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=AG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===OG)}};EA.exports=of});var ku=m((xre,hA)=>{"use strict";var qi=Q(),da=A();qi.initSync();var NG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",fA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),bG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),xu=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=NG,this.noFSAccess=!0,fA!==void 0&&(this.overlappingSync=fA),this.noReadAhead=bG}};hA.exports=xu;xu.MAX_DBS=1e4});var ye=m((Vre,bA)=>{"use strict";var lf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Vu=Ht(),pA=x(),qt=rr().LMDB_ERRORS_ENUM,$u=dA(),_f=Gu(),TA=ku(),dn=xe(),mA=A(),{table:yG,resetDatabases:IG}=(de(),re(Ne)),SA=Q(),Hr=dn.INTERNAL_DBIS_NAME,RA=dn.DBI_DEFINITION_NAME,wG="data.mdb",CG="lock.mdb",Ea=".mdb",UG="-lock",uf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Or(t,r),this.key_type=this.dbi[dn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new lf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Yu(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(Yu,"pathEnvNameValidation");async function df(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,wG),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(df,"validateEnvironmentPath");function Ku(e,t){if(Vu.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Ku,"validateEnvDBIName");async function DG(e,t,r=!1,s=!1){Yu(e,t);let n=ir.basename(e);t=t.toString();let i=SA.get(mA.CONFIG_PARAMS.SCHEMAS);i||SA.setProperty(mA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await df(e,t,s),gA(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 TA(s?c:c+Ea,!1),l=lf.open(u);l.dbis=Object.create(null);let _=new _f(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Ef(e,t,r);return l[dn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(DG,"createEnvironment");async function LG(e,t,r,s=!0){Yu(e,t),t=t.toString();let n=ir.join(e,t);return yG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(LG,"copyEnvironment");async function gA(e,t,r=!1){Yu(e,t),t=t.toString();let s=Ef(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 df(e,t),i=ir.join(e,t+Ea),o=n!=i,c=new TA(n,o),u=lf.open(c);u.dbis=Object.create(null);let l=OA(u);for(let _=0;_<l.length;_++)Or(u,l[_]);return u[dn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(gA,"openEnvironment");async function MG(e,t,r=!1){Yu(e,t),t=t.toString();let s=ir.join(e,t+Ea),n=await df(e,t);if(global.lmdb_map!==void 0){let i=Ef(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+UG:ir.join(ir.dirname(n),CG))}a(MG,"deleteEnvironment");async function AA(e){Vu.validateEnv(e);let t=e[dn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(AA,"closeEnvironment");function Ef(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ef,"getCachedEnvironmentName");function PG(e){Vu.validateEnv(e);let t=Object.create(null),r=Or(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new $u,n)}catch{pA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(PG,"listDBIDefinitions");function OA(e){Vu.validateEnv(e);let t=[],r=Or(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(OA,"listDBIs");function vG(e,t){let s=Or(e,Hr).getEntry(t),n=new $u;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{pA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(vG,"getDBIDefinition");function NA(e,t,r,s=!r){if(Ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Or(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new _f(r,s===!0),o=e.openDB(t,i),c=new $u(r===!0,s);return o[RA]=c,Or(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(NA,"createDBI");function Or(e,t){if(Ku(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=vG(e,t):r=new $u,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new _f(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[RA]=r,e.dbis[t]=s,s}a(Or,"openDBI");function BG(e,t){Ku(e,t),t=t.toString();let r=Or(e,t),s=r.getStats();return r[dn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(BG,"statDBI");async function HG(e,t){try{let r=ir.join(e,t+Ea);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(HG,"environmentDataSize");function qG(e,t){if(Ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Or(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Or(e,Hr).removeSync(t)}a(qG,"dropDBI");function FG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Or(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)NA(e,i,i!==t,i===t),s=!0;else throw o}}s&&IG()}a(FG,"initializeDBIs");bA.exports={openDBI:Or,openEnvironment:gA,createEnvironment:DG,listDBIs:OA,listDBIDefinitions:PG,createDBI:NA,dropDBI:qG,statDBI:BG,deleteEnvironment:MG,initializeDBIs:FG,TransactionCursor:uf,environmentDataSize:HG,copyEnvironment:LG,closeEnvironment:AA}});var IA=m((Yre,yA)=>{"use strict";var ff=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};yA.exports=ff});var CA=m((Wre,wA)=>{"use strict";var hf=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}};wA.exports=hf});var DA=m((zre,UA)=>{"use strict";var mf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};UA.exports=mf});var Fi=m((ese,PA)=>{"use strict";var GG=ye(),xG=IA(),kG=CA(),VG=DA(),ts=Ht(),fa=rr().LMDB_ERRORS_ENUM,$G=xe(),Bs=A(),YG=V(),KG=require("uuid"),Xre=require("lmdb"),{handleHDBError:WG,hdb_errors:QG}=W(),{OVERFLOW_MARKER:Zre,MAX_SEARCH_KEY_LENGTH:jre}=$G,LA=Q();LA.initSync();var Wu=LA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sf=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zG(e,t,r,s,n=ts.getNextMonotonicTime()){gf(e,t,r,s),pf(e,t,r);let i=new xG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];MA(l,!0,n);let _=JG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Tf(o,c,s,i,n)}a(zG,"insertRecords");function JG(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let _=c([[{}]]);Array.isArray(_)&&(c=_[0][Bs.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Wu&&l.prefetch(u.map(_=>({key:_,value:n})),Qu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Wu&&e.dbis[t].prefetch([n],Qu),e.dbis[t].put(n,s,s[Yn])})}a(JG,"insertRecord");function XG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(XG,"removeSkippedRecords");function MA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sf]))&&(e[Sf]=r||ts.getNextMonotonicTime()):delete e[Sf]}a(MA,"setTimestamps");function pf(e,t,r){r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),GG.initializeDBIs(e,t,r)}a(pf,"initializeTransaction");async function ZG(e,t,r,s,n=ts.getNextMonotonicTime()){gf(e,t,r,s),pf(e,t,r);let i=new kG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Rf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Tf(c,u,s,i,n,o)}a(ZG,"updateRecords");async function jG(e,t,r,s,n=ts.getNextMonotonicTime()){try{gf(e,t,r,s)}catch(u){throw WG(u,u.message,QG.HTTP_STATUS_CODES.BAD_REQUEST)}pf(e,t,r);let i=new VG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;YG.isEmpty(l[t])?(_=KG.v4(),l[t]=_):_=l[t];let d=Rf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Tf(o,c,s,i,n)}a(jG,"upsertRecords");async function Tf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ts.getNextMonotonicTime(),XG(r,i),s}a(Tf,"finalizeWrite");function Rf(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(MA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][Bs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ts.getIndexedValues(R);if(O){Wu&&p.prefetch(O.map(k=>({key:k,value:s})),Qu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Wu&&p.prefetch(O.map(k=>({key:k,value:s})),Qu);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Rf(e,t,r,s,n,i,o))}a(Rf,"updateUpsertRecord");function ex(e,t,r){if(ts.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(ex,"validateBasic");function gf(e,t,r,s){if(ex(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(gf,"validateWrite");function Qu(){}a(Qu,"noop");PA.exports={insertRecords:zG,updateRecords:ZG,upsertRecords:jG}});var Kn=m((rse,tx)=>{tx.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var rs=m((sse,HA)=>{"use strict";var BA=V(),vA=A(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),En={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required(),sx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()),nx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required();function ix(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>En.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(ix,"checkValidTable");function ox(e,t){return BA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ox,"validateSchemaExists");function ax(e,t){let r=t.state.ancestors[0].schema;return BA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ax,"validateTableExists");function cx(e,t){return e.toLowerCase()===vA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${vA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(cx,"validateSchemaName");HA.exports={common_validators:En,schema_regex:Gi,hdb_schema_table:rx,validateSchemaExists:ox,validateTableExists:ax,validateSchemaName:cx,checkValidTable:ix,hdb_database:sx,hdb_table:nx}});var zu=m((ise,qA)=>{var{common_validators:ss}=rs(),ma=Pe(),ha="is required",Ke={database:{presence:!1,format:ss.schema_format,length:ss.schema_length},schema:{presence:!1,format:ss.schema_format,length:ss.schema_length},table:{presence:!0,format:ss.schema_format,length:ss.schema_length},attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length},hash_attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length}};function 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 ux(e){return e=Sa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(ux,"schema_object");function lx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(lx,"table_object");function _x(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,ma.validateObject(e,Ke)}a(_x,"create_table_object");function dx(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(dx,"attribute_object");function Ex(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(Ex,"describe_table");function fx(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(fx,"validateTableResidence");qA.exports={schema_object:ux,create_table_object:_x,table_object:lx,attribute_object:dx,describe_table:Ex,validateTableResidence:fx}});var GA=m((ase,FA)=>{"use strict";var hx=require("uuid"),Af=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||hx.v4(),this.schema_table=`${this.schema}.${this.table}`}};FA.exports=Af});var Ju=m((use,xA)=>{"use strict";var mx=GA(),Of=class extends mx{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}};xA.exports=Of});var VA=m((_se,kA)=>{"use strict";kA.exports=px;var Sx="inserted";function px(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Sx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(px,"returnObject")});var Xu=m((Ese,QA)=>{"use strict";var Tx=A(),Nf=ye(),Rx=Fi(),{getSystemSchemaPath:gx,getSchemaPath:Ax}=we(),Ox=Kn(),Nx=zu(),bx=Ju(),yx=VA(),{handleHDBError:$A,hdb_errors:KA}=W(),YA=V(),{HTTP_STATUS_CODES:Ix}=KA,bf=Ox.hdb_attribute,WA=[];for(let e=0;e<bf.attributes.length;e++)WA.push(bf.attributes[e].attribute);var wx="inserted";QA.exports=Cx;async function Cx(e){let t=Nx.attribute_object(e);if(t)throw $A(new Error,t.message,KA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&YA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw $A(new Error,r,Ix.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=YA.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 bx(e.schema,e.table,e.attribute,e.id);try{let i=await Nf.openEnvironment(Ax(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}`);Nf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nf.openEnvironment(gx(),Tx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Rx.insertRecords(o,bf.hash_attribute,WA,[n]);return yx(wx,c,{records:[n]},u)}catch(i){throw i}}a(Cx,"lmdbCreateAttribute")});var If=m((hse,JA)=>{var{hdb_table:Ux,hdb_database:zA}=rs(),Dx=Pe(),yf=require("joi"),Lx={undefined:"undefined",null:"null"},Mx=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||Lx[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"),Px=yf.object({database:zA,schema:zA,table:Ux,records:yf.array().items(yf.object().custom(Mx)).required()});JA.exports=function(e){return Dx.validateBySchema(e,Px)}});var pa=m((pse,ZA)=>{"use strict";var qs=V(),XA=x(),Sse=If(),{getDatabases:vx}=(de(),re(Ne)),{ClientError:Wn}=W();ZA.exports=Bx;function Bx(e){if(qs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(qs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(qs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=vx()[e.schema]?.[e.table];if(qs.isEmpty(t))throw new Wn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&qs.isEmptyOrZeroLength(o[r]))throw XA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!qs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw XA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!qs.isEmpty(o[r])&&o[r]!==""&&s.has(qs.autoCast(o[r]))&&(o.skip=!0),s.add(qs.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(Bx,"insertUpdateValidate")});var Ta=m((Rse,jA)=>{"use strict";var Hx=A().OPERATIONS_ENUM,wf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Hx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};jA.exports=wf});var Oa=m((Ose,eO)=>{"use strict";var Ase=Ta(),Zu=A(),Uf=V(),Cf=x(),qx=require("uuid"),{handleHDBError:Ra,hdb_errors:Fx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Fx;eO.exports=Gx;function Gx(e,t,r){for(let n=0;n<t.length;n++)xx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];kx(i,r,e.operation)}}a(Gx,"processRows");function xx(e){if(Buffer.byteLength(String(e))>Zu.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(Uf.isEmptyOrZeroLength(e)||Uf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(xx,"validateAttribute");function kx(e,t,r){if(!e.hasOwnProperty(t)||Uf.isEmptyOrZeroLength(e[t])){if(r===Zu.OPERATIONS_ENUM.INSERT||r===Zu.OPERATIONS_ENUM.UPSERT){e[t]=qx.v4();return}throw Cf.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]))>Zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cf.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 Cf.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(kx,"validateHash")});var rO=m((bse,tO)=>{"use strict";var Df=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};tO.exports=Df});var iO=m((Ise,nO)=>{"use strict";var Lf=ye(),Vx=x(),sO=rr().LMDB_ERRORS_ENUM;nO.exports=$x;async function $x(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 Lf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==sO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Lf.closeEnvironment(global.lmdb_map[s]),await Lf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==sO.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){Vx.error(t)}}a($x,"cleanLMDBMap")});var Fs=m((Cse,uO)=>{"use strict";var Na=require("crypto"),Yx=Q(),{CONFIG_PARAMS:Kx}=A(),aO="aes-256-cbc",Wx=32,Qx=16,Mf=64,cO=32,zx=Mf+cO,oO=new Map;uO.exports={encrypt:Jx,decrypt:Xx,createNatsTableStreamName:Zx};function Jx(e){let t=Na.randomBytes(Wx),r=Na.randomBytes(Qx),s=Na.createCipheriv(aO,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(Jx,"encrypt");function Xx(e){let t=e.substr(0,Mf),r=e.substr(Mf,cO),s=e.substr(zx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(aO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Xx,"decrypt");function Zx(e,t){let r=Yx.get(Kx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=oO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),oO.set(r,s)),s}a(Zx,"createNatsTableStreamName")});var Qn=m((Lse,_O)=>{"use strict";var Dse=Nr(),ju=x(),lO=zu(),jx=Fs(),el=V(),{handleHDBError:tl,hdb_errors:ek}=W(),{HDB_ERROR_MSGS:rl,HTTP_STATUS_CODES:Pf}=ek,tk=Q();tk.initSync();var{getDatabases:vf}=(de(),re(Ne));_O.exports={describeAll:rk,describeTable:sl,describeSchema:sk};async function rk(e){try{let t=el.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vf(),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 sl({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 sl({schema:l,table:d},f)}E&&c.push(E)}catch(E){ju.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 ju.error("Got an error in describeAll"),ju.error(t),tl(new Error,rl.DESCRIBE_ALL_ERR)}}a(rk,"describeAll");async function sl(e,t){el.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=lO.describe_table(e);if(i)throw i;let c=vf()[r];if(!c)throw tl(new Error,rl.SCHEMA_NOT_FOUND(e.schema),Pf.NOT_FOUND);let u=c[s];if(!u)throw tl(new Error,rl.TABLE_NOT_FOUND(e.schema,e.table),Pf.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=jx.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){ju.warn(`unable to stat table dbi due to ${d}`)}return _}a(sl,"descTable");async function sk(e){el.transformReq(e);let t=lO.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=vf()[s];if(!i)throw tl(new Error,rl.SCHEMA_NOT_FOUND(e.schema),Pf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),el.isEmpty(u)||u.describe){let l=await sl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(sk,"describeSchema")});var Gs=m((Bse,mO)=>{var nk=Kn(),{callbackify:EO,promisify:ik}=require("util"),{getDatabases:fO}=(de(),re(Ne));mO.exports={setSchemaDataToGlobal:dO,getTableSchema:ok,getSystemSchema:ak,setSchemaDataToGlobalAsync:ik(dO)};var hO=Qn(),Pse=EO(hO.describeAll),vse=EO(hO.describeTable);function dO(e){global.hdb_schema=fO(),e&&e()}a(dO,"setSchemaDataToGlobal");function ok(e,t,r){let s=fO()[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(ok,"getTableSchema");function ak(){return nk}a(ak,"getSystemSchema")});var br=m((qse,RO)=>{"use strict";var il=If(),St=V(),ck=require("util"),ol=qr(),uk=Gs(),SO=x(),{handleHDBError:zn,hdb_errors:lk}=W(),{HTTP_STATUS_CODES:Jn}=lk,_k=ck.promisify(uk.getTableSchema),dk="updated",pO="inserted",TO="upserted";RO.exports={insert:fk,update:hk,upsert:mk,validation:Ek,flush:Sk};async function Ek(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 _k(e.schema,e.table),r=il(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 SO.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 SO.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(Ek,"validation");async function fk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=il(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await ol.createRecords(e);return nl(pO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(fk,"insertData");async function hk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=il(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await ol.updateRecords(e);return St.isEmpty(s.existing_rows)?nl(dk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):nl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(hk,"updateData");async function mk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=il(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await ol.upsertRecords(e);return nl(TO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(mk,"upsertData");function nl(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===pO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(nl,"returnObject");function Sk(e){return St.transformReq(e),ol.flush(e.schema,e.table)}a(Sk,"flush")});var Hf=m((Gse,OO)=>{var pk=Pe(),Bf=require("joi"),{hdb_table:Tk,hdb_database:gO}=rs(),AO={schema:gO,database:gO,table:Tk},Rk={date:Bf.date().iso().required()},gk={timestamp:Bf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OO.exports=function(e,t){let r=t==="timestamp"?{...AO,...gk}:{...AO,...Rk},s=Bf.object(r);return pk.validateBySchema(e,s)}});var yO=m((xse,bO)=>{var Ak=Pe(),qf=require("joi"),{hdb_table:Ok,hdb_database:NO}=rs(),Nk=qf.object({schema:NO,database:NO,table:Ok,hash_values:qf.array().required(),ids:qf.array()});bO.exports=function(e){return Ak.validateBySchema(e,Nk)}});var wO=m((kse,IO)=>{"use strict";var Ff=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}},Gf=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}},xf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};IO.exports={InsertObject:Ff,NoSQLSeachObject:Gf,DeleteResponseObject:xf}});var jn=m(($se,MO)=>{"use strict";var UO=Hf(),bk=yO(),Xn=V(),CO=require("moment"),DO=x(),{promisify:yk,callbackify:Ik}=require("util"),Zn=A(),wk=Gs(),kf=yk(wk.getTableSchema),Vf=qr(),{DeleteResponseObject:Ck}=wO(),{handleHDBError:fn,hdb_errors:Uk}=W(),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:hn}=Uk,Dk="records successfully deleted",Lk=Ik(LO);MO.exports={delete:Lk,deleteRecord:LO,deleteFilesBefore:Mk,deleteAuditLogsBefore:Pk};async function Mk(e){let t=UO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!CO(e.date,CO.ISO_8601).isValid())throw fn(new Error,al.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,al.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await Vf.deleteRecordsBefore(e);if(await kf(e.schema,e.table),DO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Mk,"deleteFilesBefore");async function Pk(e){let t=UO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,al.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,al.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await Vf.deleteAuditLogsBefore(e);return await kf(e.schema,e.table),DO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Pk,"deleteAuditLogsBefore");async function LO(e){e.ids&&(e.hash_values=e.ids);let t=bk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await kf(e.schema,e.table);let s=await Vf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Dk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ck;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LO,"deleteRecord")});var cl=m((Kse,BO)=>{var vk=require("crypto"),PO=9;function Bk(e){let t=qk(PO),r=vO(e+t);return t+r}a(Bk,"createHash");function Hk(e,t){let r=e.substr(0,PO),s=r+vO(t+r);return e===s}a(Hk,"validateHash");function qk(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(qk,"generateSalt");function vO(e){return vk.createHash("md5").update(e).digest("hex")}a(vO,"md5");BO.exports={hash:Bk,validate:Hk}});var qO=m((Qse,HO)=>{var $f=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 Fk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,$f.validateObject(e,It)}a(Fk,"addUserValidation");function Gk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,$f.validateObject(e,It)}a(Gk,"alterUserValidation");function xk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,$f.validateObject(e,It)}a(xk,"dropUserValidation");HO.exports={addUserValidation:Fk,alterUserValidation:Gk,dropUserValidation:xk}});var Be=m((Xse,GO)=>{"use strict";var{platform:Jse}=require("os"),kk="nats-server.zip",Yf="nats-server",Vk=process.platform==="win32"?`${Yf}.exe`:Yf,Kf="HDB",$k=/^[^\s.,*>]+$/,FO="__request__",Yk=a(e=>`${e}.${FO}`,"REQUEST_SUBJECT"),Kk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Wk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Qk={HUB:"hub.pid",LEAF:"leaf.pid"},zk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Jk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Kf,deliver_subject:"__HDB__.WORKQUEUE"},Xk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Kf,deliver_subject:"HDB.SCHEMAQUEUE"},Zk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Kf,deliver_subject:"HDB.USERQUEUE"},jk={SUCCESS:"success",ERROR:"error"},eV={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tV={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rV={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},sV={debug:"-D",trace:"-DVV"};GO.exports={NATS_SERVER_ZIP:kk,NATS_SERVER_NAME:Yf,NATS_BINARY_NAME:Vk,PID_FILES:Qk,NATS_CONFIG_FILES:Wk,SERVER_SUFFIX:zk,WORK_QUEUE_CONSUMER_NAMES:Jk,SCHEMA_QUEUE_CONSUMER_NAMES:Xk,USER_QUEUE_CONSUMER_NAMES:Zk,NATS_TERM_CONSTRAINTS_RX:$k,REQUEST_SUFFIX:FO,UPDATE_REMOTE_RESPONSE_STATUSES:jk,CLUSTER_STATUS_STATUSES:eV,REQUEST_SUBJECT:Yk,SUBJECT_PREFIXES:tV,MSG_HEADERS:Kk,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:sV,LOG_LEVEL_HIERARCHY:rV}});var kO=m((jse,xO)=>{"use strict";var ul=A(),ll=class{static{a(this,"BaseLicense")}constructor(t=0,r=ul.RAM_ALLOCATION_ENUM.DEFAULT,s=ul.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Wf=class extends ll{static{a(this,"ExtendedLicense")}constructor(t=0,r=ul.RAM_ALLOCATION_ENUM.DEFAULT,s=ul.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};xO.exports={BaseLicense:ll,ExtendedLicense:Wf}});var ba=m((tne,QO)=>{"use strict";var Vi=require("fs-extra"),VO=cl(),$O=require("crypto"),nV=require("moment"),iV=require("uuid").v4,wt=x(),zf=require("path"),oV=V(),mn=A(),aV=kO().ExtendedLicense,ki="invalid license key format",cV="061183",uV="mofi25",lV="aes-256-cbc",_V=16,dV=32,YO=Q();YO.initSync();var Qf;QO.exports={validateLicense:KO,generateFingerPrint:fV,licenseSearch:WO,getLicense:SV};function Jf(){return zf.join(YO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Jf,"getLicenseDirPath");function EV(){let e=Jf();return zf.join(e,mn.LICENSE_FILE_NAME)}a(EV,"getLicenseFilePath");function Xf(){let e=Jf();return zf.join(e,mn.REG_KEY_FILE_NAME)}a(Xf,"getFingerPrintFilePath");async function fV(){let e=Xf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await hV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(fV,"generateFingerPrint");async function hV(){let e=iV(),t=VO.hash(e),r=Xf();try{await Vi.mkdirp(Jf()),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(hV,"writeFingerprint");function KO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Xf(),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(uV),c=o[1];c=Buffer.concat([Buffer.from(c)],_V);let u=Buffer.concat([Buffer.from(i)],dV),l=$O.createDecipheriv(lV,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=mV(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<nV().valueOf()&&(r.valid_date=!1),VO.validate(o[1],`${cV}${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(KO,"validateLicense");function mV(e,t){try{let r=$O.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(mV,"checkOldLicense");function WO(){let e=new aV,t=[];try{t=Vi.readFileSync(EV(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(oV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=KO(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Qf=e,e}a(WO,"licenseSearch");async function SV(){return Qf||await WO(),Qf}a(SV,"getLicense")});var ar=m((one,lN)=>{"use strict";var jO="username is required",eN="nothing to update, must supply active, role or password to update",tN="password cannot be an empty string",rN="If role is specified, it cannot be empty.",sN="active must be true or false";lN.exports={addUser:yV,alterUser:IV,dropUser:CV,getSuperUser:MV,userInfo:UV,listUsers:dl,listUsersExternal:DV,setUsersToGlobal:Yi,findAndValidateUser:uN,getClusterUser:PV,USERNAME_REQUIRED:jO,ALTERUSER_NOTHING_TO_UPDATE:eN,EMPTY_PASSWORD:tN,EMPTY_ROLE:rN,ACTIVE_BOOLEAN:sN};var nN=br(),pV=jn(),jf=cl(),iN=qO(),oN=Nr(),eh=xs(),or=V(),aN=require("validate.js"),ue=x(),{promisify:TV}=require("util"),th=Fs(),zO=A(),JO=Be(),RV=Rr(),sne=Q(),nne=ba(),gV=Kn(),{table:ine}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:AV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Zf,HDB_ERROR_MSGS:$i}=AV,{UserEventMsg:rh}=Fr(),XO=require("lodash"),{_assignPackageExport:OV}=require("../../index");OV("getUser",uN);var cN={username:!0,active:!0,role:!0,password:!0},ZO=new Map,_l=oN.searchByValue,NV=oN.searchByHash,bV=TV(pV.delete);async function yV(e){let t=aN.cleanAttributes(e,cN),r=iN.addUserValidation(t);if(r)throw ns(new Error,r.message,is.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await _l(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,$i.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=th.encrypt(t.password)),t.password=jf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nN.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 ns(new Error,$i.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],eh.signalUserChange(new rh(process.pid)),`${c.username} successfully added`}a(yV,"addUser");async function IV(e){let t=aN.cleanAttributes(e,cN);if(or.isEmptyOrZeroLength(t.username))throw new Error(jO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(eN);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(tN);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(sN);let r=wV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=th.encrypt(t.password)),t.password=jf.hash(t.password)),t.role==="")throw new Error(rN);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 _l(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),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await nN.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 eh.signalUserChange(new rh(process.pid)),n}a(IV,"alterUser");function wV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(wV,"isClusterUser");async function CV(e){try{let t=iN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,$i.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await bV(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 eh.signalUserChange(new rh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(CV,"dropUser");async function UV(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 NV(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(UV,"userInfo");async function DV(){let e;try{e=await dl()}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(DV,"listUsersExternal");async function dl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await _l(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]=XO.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 _l(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=XO.cloneDeep(o),o.role=r[o.role],LV(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(dl,"listUsers");function LV(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(gV)){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(LV,"appendSystemTablesToRole");async function Yi(){try{let e=await dl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function uN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Zf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Zf.USER_INACTIVE,is.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(ZO.get(t)===s.password)return n;if(jf.validate(s.password,t))ZO.set(t,s.password);else throw ns(new Error,Zf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(uN,"findAndValidateUser");async function MV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(MV,"getSuperUser");async function PV(){let e=await dl(),t=RV.getConfigFromFile(zO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===zO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=th.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+JO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+JO.SERVER_SUFFIX.ADMIN,r}a(PV,"getClusterUser")});var Ia=m((lne,fN)=>{"use strict";var ei=x(),cr=A(),vV=iO(),cne=Gs(),une=Qn(),BV=ar(),{validateEvent:_N}=Fr(),ya=qr(),HV=require("process"),{resetDatabases:qV}=(de(),re(Ne)),FV={[cr.ITC_EVENT_TYPES.SCHEMA]:GV,[cr.ITC_EVENT_TYPES.USER]:EN};async function GV(e){let t=_N(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await vV(e.message),await xV(e.message)}a(GV,"schemaHandler");async function xV(e){try{ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=qV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(xV,"syncSchemaMetadata");var dN=[];async function EN(e){try{try{ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=_N(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${HV.pid} received user event:`,e),await BV.setUsersToGlobal();for(let r of dN)r()}catch(t){ei.error(t)}}a(EN,"userHandler");EN.addListener=function(e){dN.push(e)};fN.exports=FV});var Fr=m((mne,mN)=>{"use strict";var dne=x(),sh=V(),kV=A(),{ITC_ERRORS:wa}=rr(),{parentPort:Ene,threadId:VV,isMainThread:$V,workerData:fne}=require("worker_threads"),{onMessageFromWorkers:YV,broadcast:hne,broadcastWithAcknowledgement:KV}=dt();mN.exports={sendItcEvent:WV,validateEvent:hN,SchemaEventMsg:QV,UserEventMsg:zV};var El;YV(async(e,t)=>{El=El||Ia(),hN(e),El[e.type]&&await El[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function WV(e){return!$V&&e.message&&(e.message.originator=VV),KV(e)}a(WV,"sendItcEvent");function hN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||sh.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||sh.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||sh.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(kV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(hN,"validateEvent");function QV(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(QV,"SchemaEventMsg");function zV(e){this.originator=e}a(zV,"UserEventMsg")});var xs=m((Tne,RN)=>{"use strict";var SN=A(),pne=V(),fl=x(),pN=rO(),Ki,{sendItcEvent:TN}=Fr();function JV(e){try{fl.trace("signalSchemaChange called with message:",e),Ki=Ki||Ia();let t=new pN(SN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),TN(t)}catch(t){fl.error(t)}}a(JV,"signalSchemaChange");function XV(e){try{fl.trace("signalUserChange called with message:",e),Ki=Ki||Ia();let t=new pN(SN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),TN(t)}catch(t){fl.error(t)}}a(XV,"signalUserChange");RN.exports={signalSchemaChange:JV,signalUserChange:XV}});var hl=m((gne,AN)=>{"use strict";var gN=V(),ZV=A(),jV=x(),e$=Xu(),t$=Ju(),r$=xs(),{SchemaEventMsg:s$}=Fr(),n$="already exists in";AN.exports=i$;async function i$(e,t,r){if(gN.isEmptyOrZeroLength(r))return r;let s=[];gN.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 o$(e,t.schema,t.name,i)})),n}a(i$,"lmdbCheckForNewAttributes");async function o$(e,t,r,s){let n=new t$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await a$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(n$))jV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(o$,"createNewAttribute");async function a$(e){let t;return t=await e$(e),r$.signalSchemaChange(new s$(process.pid,ZV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(a$,"createAttribute")});var Wi=m((One,ON)=>{"use strict";var nh=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}};ON.exports=nh});var bN=m((bne,NN)=>{"use strict";var c$=Wi(),u$=A().OPERATIONS_ENUM,ih=class extends c${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(u$.INSERT,r,s,n,i),this.records=t}};NN.exports=ih});var IN=m((Ine,yN)=>{"use strict";var l$=Wi(),_$=A().OPERATIONS_ENUM,oh=class extends l${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=oh});var CN=m((Cne,wN)=>{"use strict";var d$=Wi(),E$=A().OPERATIONS_ENUM,ah=class extends d${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(E$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};wN.exports=ah});var DN=m((Dne,UN)=>{"use strict";var f$=Wi(),h$=A().OPERATIONS_ENUM,ch=class extends f${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(h$.DELETE,s,n,t,i),this.original_records=r}};UN.exports=ch});var Ca=m((Pne,vN)=>{"use strict";var Mne=require("path"),LN=ye(),m$=bN(),S$=IN(),p$=CN(),T$=DN(),Qi=xe(),MN=V(),{CONFIG_PARAMS:R$}=A(),PN=Q();PN.initSync();var ml=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:g$}=we();vN.exports=A$;async function A$(e,t){if(PN.get(R$.LOGGING_AUDITLOG)===!1)return;let r=g$(e.schema,e.table),s=await LN.openEnvironment(r,e.table,!0),n=O$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){LN.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),MN.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(A$,"writeTransaction");function O$(e,t){let r=MN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ml.INSERT)return new m$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.UPDATE)return new S$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.UPSERT)return new p$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.DELETE)return new T$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O$,"createTransactionObject")});var uh=m((Hne,BN)=>{"use strict";var N$=pa(),Bne=Ta(),Ua=A(),b$=Oa(),y$=Fi().insertRecords,I$=ye(),w$=x(),C$=hl(),{getSchemaPath:U$}=we(),D$=Ca();BN.exports=L$;async function L$(e){try{let{schema_table:t,attributes:r}=N$(e);b$(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 C$(e.hdb_auth_header,t,r),n=U$(e.schema,e.table),i=await I$.openEnvironment(n,e.table),o=await y$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await D$(e,o)}catch(c){w$.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(L$,"lmdbCreateRecords")});var FN=m((Fne,qN)=>{"use strict";var HN=A(),M$=uh(),P$=Ta(),v$=require("fs-extra"),{getSchemaPath:B$}=we();qN.exports=H$;async function H$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new P$(HN.SYSTEM_SCHEMA_NAME,HN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await M$(r),await v$.mkdirp(B$(e.schema))}a(H$,"lmdbCreateSchema")});var xN=m((xne,GN)=>{"use strict";var lh=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}};GN.exports=lh});var YN=m((Kne,$N)=>{"use strict";var kN=ye(),_h=Ht(),dh=rr().LMDB_ERRORS_ENUM,q$=xe(),VN=x(),Vne=V(),F$=require("lmdb"),G$=xN(),x$=A(),{OVERFLOW_MARKER:$ne,MAX_SEARCH_KEY_LENGTH:Yne}=q$,k$=x$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function V$(e,t,r,s){if(_h.validateEnv(e),t===void 0)throw new Error(dh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(dh.IDS_REQUIRED):new Error(dh.IDS_MUST_BE_ITERABLE);try{let n=kN.listDBIs(e);kN.initializeDBIs(e,t,n);let i=new G$,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[k$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,F$.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 $=_h.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{VN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){VN.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=_h.getNextMonotonicTime(),i}catch(n){throw n}}a(V$,"deleteRecords");$N.exports={deleteRecords:V$}});var Da=m((Qne,WN)=>{"use strict";var zi=V(),$$=YN(),Y$=ye(),{getSchemaPath:K$}=we(),W$=Ca(),Q$=x();WN.exports=z$;async function z$(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 KN([],[]);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=K$(e.schema,e.table),i=await Y$.openEnvironment(n,e.table),o=await $$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await W$(e,o)}catch(c){Q$.error(`unable to write transaction due to ${c.message}`)}return KN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(z$,"lmdbDeleteRecords");function KN(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(KN,"createDeleteResponse")});var fh=m((Xne,QN)=>{"use strict";var J$=A(),Jne=Ht();function Eh(e,t){let r=Object.create(null);if(t.length===1&&J$.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(Eh,"parseRow");function X$(e,t,r,s){let n=Eh(r,e);s.push(n)}a(X$,"searchAll");function Z$(e,t,r,s){let n=Eh(r,e);s[t]=n}a(Z$,"searchAllToMap");function j$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(j$,"iterateDBI");function ti(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ti,"pushResults");function eY(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(eY,"endsWith");function tY(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(tY,"contains");function rY(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(rY,"greaterThanCompare");function sY(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(sY,"greaterThanEqualCompare");function nY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(nY,"lessThanCompare");function iY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(iY,"lessThanEqualCompare");QN.exports={parseRow:Eh,searchAll:X$,searchAllToMap:Z$,iterateDBI:j$,endsWith:eY,contains:tY,greaterThanCompare:rY,greaterThanEqualCompare:sY,lessThanCompare:nY,lessThanEqualCompare:iY,pushResults:ti}});var Ji=m((rie,tb)=>{"use strict";var Sn=ye(),jne=x(),ur=Ht(),Sl=xe(),ke=rr().LMDB_ERRORS_ENUM,eie=V(),oY=A(),pl=fh(),{parseRow:aY}=pl,tie=require("lmdb"),{OVERFLOW_MARKER:zN,MAX_SEARCH_KEY_LENGTH:cY}=Sl;function JN(e,t,r,s=!1,n=void 0,i=void 0){return ri(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(JN,"iterateFullIndex");function La(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(La,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[Sl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ri,"setupTransaction");function XN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(zN)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[Sl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(XN,"getOverflowCheck");function uY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(Tl(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=>aY(l.value,r))))}a(uY,"searchAll");function lY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);Tl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of JN(e,t,t,s,n,i))o.set(c,pl.parseRow(u,r));return o}a(lY,"searchAllToMap");function _Y(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=JN(e,void 0,t,r,s,n),c=o.transaction,u=XN(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(_Y,"iterateDBI");function dY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(dY,"countAll");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,t,r,(c,u,l,_)=>(s=ur.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(EY,"equals");function fY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(fY,"count");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,null,r,(c,u)=>{s=ur.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(hY,"startsWith");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){return ZN(e,t,r,s,n,i,o,!0)}a(mY,"endsWith");function ZN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=XN(_,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(zN)?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[Sl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ZN,"contains");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!0,!1)}a(SY,"greaterThan");function pY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!1,!1)}a(pY,"greaterThanEqual");function TY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!0)}a(TY,"lessThan");function RY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!1)}a(RY,"lessThanEqual");function gY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.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=ur.convertKeyValueToWrite(s),n=ur.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(gY,"between");function AY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Tl(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=pl.parseRow(c,r)),o}a(AY,"searchByHash");function OY(e,t,r){ur.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(OY,"checkHashExists");function NY(e,t,r,s,n=[]){return eb(e,t,r,s,n),jN(e,t,r,s,n).map(i=>i[1])}a(NY,"batchSearchByHash");function bY(e,t,r,s,n=[]){eb(e,t,r,s,n);let i=new Map;for(let[o,c]of jN(e,t,r,s,n))i.set(o,c);return i}a(bY,"batchSearchByHashToMap");function jN(e,t,r,s,n=[]){return ri(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,pl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(jN,"batchHashSearch");function eb(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Tl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(eb,"initializeBatchSearchByHash");function Tl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Tl,"validateFetchAttributes");function pn(e,t,r){if(ur.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>cY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&oY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");tb.exports={searchAll:uY,searchAllToMap:lY,count:fY,countAll:dY,equals:EY,startsWith:hY,endsWith:mY,contains:ZN,searchByHash:AY,setGetWholeRowAttributes:Ma,batchSearchByHash:NY,batchSearchByHashToMap:bY,checkHashExists:OY,iterateDBI:_Y,greaterThan:SY,greaterThanEqual:pY,lessThan:TY,lessThanEqual:RY,between:gY}});var Xi=m((nie,ob)=>{var rb=require("lodash"),sb=Pe(),Ce=require("joi"),yY=V(),{hdb_schema_table:Rl,checkValidTable:nb,hdb_table:ib,hdb_database:gl}=rs(),{handleHDBError:IY,hdb_errors:wY}=W(),{getDatabases:CY}=(de(),re(Ne)),{HTTP_STATUS_CODES:UY}=wY,DY=Ce.object({database:gl,schema:gl,table:ib,search_attribute:Rl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(Rl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),LY=Ce.object({database:gl,schema:gl,table:ib,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(Rl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:Rl,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()});ob.exports=function(e,t){let r=null;switch(t){case"value":r=sb.validateBySchema(e,DY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(nb("database",e.schema)),i(nb("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=sb.validateBySchema(e,LY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=yY.checkGlobalSchemaTable(e.schema,e.table);if(n)return IY(new Error,n,UY.NOT_FOUND);let o=CY()[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=rb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!rb.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 hh=m((oie,ab)=>{"use strict";var MY=ye(),PY=Xi(),{getSchemaPath:vY}=we();ab.exports=BY;function BY(e){let t=PY(e,"hashes");if(t)throw t;let r=vY(e.schema,e.table);return MY.openEnvironment(r,e.table)}a(BY,"initialize")});var mh=m((cie,cb)=>{"use strict";var HY=Ji(),qY=hh();cb.exports=FY;async function FY(e){let t=await qY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return HY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(FY,"lmdbGetDataByHash")});var Zi=m((lie,ub)=>{"use strict";var Sh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ub.exports=Sh});var _b=m((Eie,lb)=>{"use strict";var die=Zi(),GY=Ji(),xY=hh();lb.exports=kY;async function kY(e){let t=await xY(e),r=global.hdb_schema[e.schema][e.table];return GY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(kY,"lmdbSearchByHash")});var os=m((hie,db)=>{"use strict";var ph=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=_}};db.exports=ph});var Al=m((Sie,pb)=>{"use strict";var Ct=Ji(),VY=ye(),$Y=V(),ie=xe(),si=A(),YY=Kn(),Eb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:KY}=we(),ks=si.SEARCH_WILDCARDS;async function WY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=YY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Sb(e,s.hash_attribute,r,t);return hb(e,n,s.hash_attribute,r)}a(WY,"prepSearch");async function hb(e,t,r,s){let n=KY(e.schema,e.table),i=await VY.openEnvironment(n,e.table),o=mb(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(QY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?fb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?fb(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(hb,"executeSearch");function mb(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(mb,"searchByType");function fb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(fb,"createMapFromIterable");function QY(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(QY,"checkToFetchMore");function Sb(e,t,r,s){if($Y.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),ks.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[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(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(Eb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Eb.UNKNOWN_SEARCH_TYPE)}}a(Sb,"createSearchTypeFromSearchObject");pb.exports={executeSearch:hb,createSearchTypeFromSearchObject:Sb,prepSearch:WY,searchByType:mb}});var Rb=m((Rie,Tb)=>{"use strict";var Tie=os(),zY=Xi(),JY=V(),XY=A(),ZY=Al();Tb.exports=jY;function jY(e,t){if(!JY.isEmpty(t)&&XY.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;let n=!0;return ZY.prepSearch(e,t,n)}a(jY,"lmdbGetDataByValue")});var Pa=m((Oie,gb)=>{"use strict";var Aie=os(),eK=Xi(),tK=V(),rK=A(),sK=Al();gb.exports=nK;async function nK(e,t){if(!tK.isEmpty(t)&&rK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=eK(e,"value");if(s)throw s;return sK.prepSearch(e,t,!1)}a(nK,"lmdbSearchByValue")});var Ob=m((yie,Ab)=>{"use strict";var bie=xe(),Th=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}},Rh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},gh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Ab.exports={SearchByConditionsObject:Th,SearchCondition:Rh,SortAttribute:gh}});var wb=m((Uie,Ib)=>{"use strict";var wie=Ob().SearchByConditionsObject,iK=os(),oK=Xi(),Ah=Ji(),Ol=xe(),{Resource:Cie}=(Zr(),re(xE)),yb=Al(),aK=fh(),cK=require("lodash"),{getSchemaPath:uK}=we(),Nb=ye(),{handleHDBError:lK,hdb_errors:_K}=W(),{HTTP_STATUS_CODES:dK}=_K,EK=1e8;Ib.exports=fK;async function fK(e){let t=oK(e,"conditions");if(t)throw lK(t,t.message,dK.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=uK(e.schema,e.table),s=await Nb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Nb.openDBI(s,l.search_attribute);let i=cK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Ol.SEARCH_TYPES.EQUALS?l.estimated_count=Ah.count(s,l.search_attribute,l.search_value):_===Ol.SEARCH_TYPES.CONTAINS||_===Ol.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=EK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await bb(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(yb.filterByType),d=_.length,E=Ah.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=>aK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await bb(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=Ah.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(fK,"lmdbSearchByConditions");async function bb(e,t,r,s){let n=new iK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ol.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,yb.searchByType(e,n,i,s).map(o=>o.value)}a(bb,"executeConditionSearch")});var va=m((Lie,Cb)=>{"use strict";var hK=A().OPERATIONS_ENUM,Oh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=hK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Cb.exports=Oh});var Nh=m((Pie,Hb)=>{"use strict";var Mb=os(),Pb=va(),vb=Pa(),Bb=Da(),Ft=A(),Ub=V(),Db=ye(),{getTransactionAuditStorePath:mK,getSchemaPath:SK}=we(),Lb=x();Hb.exports=pK;async function pK(e){try{if(Ub.isEmpty(global.hdb_schema[e.schema])||Ub.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await TK(e),await RK(e);let t=SK(e.schema,e.table);try{await Db.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Lb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=mK(e.schema,e.table);await Db.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Lb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pK,"lmdbDropTable");async function TK(e){let t=new Mb(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 vb(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 Pb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Bb(n)}a(TK,"deleteAttributesFromSystem");async function RK(e){let t=new Mb(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 vb(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 Pb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Bb(n)}catch(i){throw i}}a(RK,"dropTableFromSystem")});var Fb=m((Bie,qb)=>{"use strict";var gK=require("fs-extra"),AK=os(),OK=Zi(),NK=va(),bK=Nh(),yK=Da(),IK=mh(),wK=Pa(),Vs=A(),{getSchemaPath:CK}=we(),{handleHDBError:UK,hdb_errors:DK}=W(),{HDB_ERROR_MSGS:LK,HTTP_STATUS_CODES:MK}=DK;qb.exports=PK;async function PK(e){let t;try{t=await vK(e.schema);let r=new AK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await wK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await bK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new NK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yK(n);let i=CK(t);await gK.remove(i)}catch(r){throw r}}a(PK,"lmdbDropSchema");async function vK(e){let t=new OK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await IK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw UK(new Error,LK.SCHEMA_NOT_FOUND(e),MK.NOT_FOUND,void 0,void 0,!0);return s}a(vK,"validateDropSchema")});var yh=m((qie,Gb)=>{"use strict";var bh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Gb.exports=bh});var kb=m((xie,xb)=>{"use strict";var BK=require("fs-extra"),Nl=ye(),{getTransactionAuditStorePath:HK}=we(),Ih=xe(),Gie=yh();xb.exports=qK;async function qK(e){let t;try{let r=HK(e.schema,e.table);await BK.mkdirp(r),t=await Nl.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{Nl.createDBI(t,Ih.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Nl.createDBI(t,Ih.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Nl.createDBI(t,Ih.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(qK,"createTransactionsAuditEnvironment")});var Kb=m((Vie,Yb)=>{"use strict";var wh=A(),Vb=ye(),FK=Fi(),{getSystemSchemaPath:GK,getSchemaPath:xK}=we(),kK=Kn(),VK=Xu(),Ch=Ju(),$K=x(),YK=kb(),Dh=kK.hdb_table,$b=[];for(let e=0;e<Dh.attributes.length;e++)$b.push(Dh.attributes[e].attribute);Yb.exports=KK;async function KK(e,t){let r=xK(t.schema,t.table),s=new Ch(t.schema,t.table,wh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ch(t.schema,t.table,wh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ch(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Vb.createEnvironment(r,t.table),e!==void 0){let o=await Vb.openEnvironment(GK(),wh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await FK.insertRecords(o,Dh.hash_attribute,$b,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Uh(s),await Uh(n),await Uh(i)}await YK(t)}catch(o){throw o}}a(KK,"lmdbCreateTable");async function Uh(e){try{await VK(e)}catch(t){$K.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Uh,"createAttribute")});var Qb=m((Yie,Wb)=>{"use strict";var WK=pa(),QK=Oa(),zK=hl(),Ba=A(),JK=Fi().updateRecords,XK=ye(),{getSchemaPath:ZK}=we(),jK=Ca(),e1=x();Wb.exports=t1;async function t1(e){try{let{schema_table:t,attributes:r}=WK(e);QK(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 zK(e.hdb_auth_header,t,r),n=ZK(e.schema,e.table),i=await XK.openEnvironment(n,e.table),o=await JK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await jK(e,o)}catch(c){e1.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(t1,"lmdbUpdateRecords")});var Jb=m((Wie,zb)=>{"use strict";var r1=A().OPERATIONS_ENUM,Lh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=r1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};zb.exports=Lh});var Zb=m((Jie,Xb)=>{"use strict";var zie=Jb(),s1=pa(),n1=Oa(),i1=hl(),Ha=A(),o1=Fi().upsertRecords,a1=ye(),{getSchemaPath:c1}=we(),u1=Ca(),l1=x(),{handleHDBError:_1,hdb_errors:d1}=W();Xb.exports=E1;async function E1(e){let t;try{t=s1(e)}catch(u){throw _1(u,u.message,d1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;n1(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 i1(e.hdb_auth_header,r,s),i=c1(e.schema,e.table),o=await a1.openEnvironment(i,e.table),c=await o1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await u1(e,c)}catch(u){l1.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(E1,"lmdbUpsertRecords")});var ey=m((Zie,jb)=>{"use strict";var Mh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};jb.exports=Mh});var ry=m((eoe,ty)=>{"use strict";var Ph=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}};ty.exports=Ph});var iy=m((soe,ny)=>{"use strict";var vh=ye(),{getTransactionAuditStorePath:f1}=we(),roe=ey(),qa=xe(),h1=V(),sy=ry(),m1=require("util").promisify,S1=m1(setTimeout),p1=1e4,T1=100;ny.exports=R1;async function R1(e){let t=f1(e.schema,e.table),r=await vh.openEnvironment(t,e.table,!0),s=vh.listDBIs(r);vh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new sy;do n=await g1(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await S1(T1);while(n.transactions_deleted>0);return i}a(R1,"deleteAuditLogsBefore");async function g1(e,t){let r=new sy;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];h1.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>p1)break}return await n,r}catch(s){throw s}}a(g1,"deleteTransactions")});var ay=m((ioe,oy)=>{"use strict";var Bh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};oy.exports=Bh});var uy=m((coe,cy)=>{"use strict";var A1=os(),O1=va(),aoe=ay(),as=A(),N1=V(),Hh=ye(),b1=Kn(),y1=Pa(),I1=Da(),{getSchemaPath:w1}=we();cy.exports=C1;async function C1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=b1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await D1(e),n=w1(e.schema,e.table),i=await Hh.openEnvironment(n,e.table);return t===!0&&await U1(e,i,r.hash_attribute),Hh.dropDBI(i,e.attribute),s}a(C1,"lmdbDropAttribute");async function U1(e,t,r){let s=Hh.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(U1,"removeAttributeFromAllObjects");async function D1(e){let t=new A1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await y1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(N1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new O1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return I1(i)}a(D1,"dropAttributeFromSystem")});var hy=m((_oe,fy)=>{"use strict";var qh=ye(),ji=xe(),loe=Ht(),Fh=A(),ly=V(),{getTransactionAuditStorePath:L1}=we(),M1=Ji(),bl=Wi(),P1=x();fy.exports=v1;async function v1(e){let t=L1(e.schema,e.table),r=await qh.openEnvironment(t,e.table,!0),s=qh.listDBIs(r);qh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _y(r,e.search_values);case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,H1(r,e.search_values,n);case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return B1(r,e.search_values);default:return _y(r)}}a(v1,"readAuditLog");function _y(e,t=[0,Date.now()]){ly.isEmpty(t[0])&&(t[0]=0),ly.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 bl,n))}a(_y,"searchTransactionsByTimestamp");function B1(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,Ey(e,i))}return Object.fromEntries(r)}a(B1,"searchTransactionsByUsername");function H1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=M1.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=Ey(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);dy(u,"records",r,_,o),dy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(H1,"searchTransactionsByHashValues");function dy(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 bl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new bl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(dy,"loopRecords");function Ey(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 bl,i);r.push(o)}}catch(i){P1.warn(i)}return r}catch(s){throw s}}a(Ey,"batchSearchTransactions")});var Sy=m((hoe,my)=>{"use strict";var{getSchemaPath:Eoe}=we(),foe=ye(),{database:q1}=(de(),re(Ne));my.exports={writeTransaction:F1};async function F1(e,t,r){return q1({database:e,table:t}).transaction(r)}a(F1,"writeTransaction")});var gy=m((Soe,Ry)=>{"use strict";var{getSchemaPath:py}=we(),Ty=ye();Ry.exports={flush:G1,resetReadTxn:x1};async function G1(e,t){return(await Ty.openEnvironment(py(e,t),t.toString())).flushed}a(G1,"flush");async function x1(e,t){try{(await Ty.openEnvironment(py(e,t),t.toString())).resetReadTxn()}catch{}}a(x1,"resetReadTxn")});var by=m((Toe,Ny)=>{"use strict";var{Readable:k1}=require("stream"),{getDatabases:V1}=(de(),re(Ne)),{readSync:$1,openSync:Y1,createReadStream:Ay}=require("fs"),{open:K1}=require("lmdb"),Oy=Gu(),W1=ku(),{INTERNAL_DBIS_NAME:Q1}=xe();Ny.exports=J1;var Gh=32768,z1=100;async function J1(e){let t=e.database||e.schema||"data",r=V1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=K1({noSync:!0,maxDbs:W1.MAX_DBS}),E,f=d.openDB(Q1,new Oy(!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 Oy(!$,$);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++%z1===0&&await new Promise(je=>setTimeout(je,20))}await E;let p=Ay(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=Y1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Gh);$1(c,l,0,Gh);let _=o.useReadTransaction(),d=Ay(null,{fd:c,start:Gh}),E=new k1.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(J1,"getBackup")});var wy=m((goe,Iy)=>{"use strict";var X1=x(),{handleHDBError:Z1}=W(),j1=lA(),eW=Xu(),tW=uh(),rW=FN(),sW=Da(),nW=mh(),iW=_b(),oW=Rb(),aW=Pa(),cW=wb(),uW=Fb(),lW=Kb(),_W=Qb(),dW=Zb(),EW=iy(),fW=Nh(),hW=uy(),mW=hy(),SW=Sy(),yy=gy(),pW=by(),xh=class extends j1{static{a(this,"LMDBBridge")}async searchByConditions(t){return cW(t)}async getDataByHash(t){return await nW(t)}async searchByHash(t){return await iW(t)}async getDataByValue(t,r){return await oW(t,r)}async searchByValue(t){return await aW(t)}async createSchema(t){return await rW(t)}async dropSchema(t){return await uW(t)}async createTable(t,r){return await lW(t,r)}async dropTable(t){return await fW(t)}async createAttribute(t){return await eW(t)}async createRecords(t){return await tW(t)}async updateRecords(t){return await _W(t)}async upsertRecords(t){try{return await dW(t)}catch(r){throw Z1(r,null,null,X1.ERR,r)}}async deleteRecords(t){return await sW(t)}async dropAttribute(t){return await hW(t)}async deleteAuditLogsBefore(t){return await EW(t)}async readAuditLog(t){return await mW(t)}writeTransaction(t,r,s){return SW.writeTransaction(t,r,s)}flush(t,r){return yy.flush(t,r)}resetReadTxn(t,r){return yy.resetReadTxn(t,r)}getBackup(t){return pW(t)}};Iy.exports=xh});var Hy={};et(Hy,{ResourceBridge:()=>$h});function Yh({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 Uy(e,t){let r=cs(e),s=Yh(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&&Mu(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||RW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,TW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Dy(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*Ly(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 My,yl,Gr,Py,vy,kr,kh,Vh,By,TW,RW,gW,AW,Cy,$h,qy=Se(()=>{"use strict";My=C(wy()),yl=C(Xi()),Gr=C(W());de();Py=C(pa()),vy=C(Oa()),kr=C(A()),kh=C(xs()),Vh=C(Fr()),By=C(V());$n();Pu();({HDB_ERROR_MSGS:TW}=Gr.hdb_errors),RW="data",gW=1e4,AW=10,$h=class extends My.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Cy=this}async searchByConditions(t){let r=(0,yl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Yh(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}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){cs(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),kh.signalSchemaChange(new Vh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Kh(t.schema),kh.signalSchemaChange(new Vh.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,Cy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Py.default)(t);(0,vy.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=Mu(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 Dy(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,By.async_set_timeout)(AW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%gW===0&&await l();return u.length>0&&await l(),n?Dy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,yl.default)(t,"hashes");if(r)throw r;return Uy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Uy(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,yl.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Yh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Ly(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Ly(r,t.search_values?.[0],t.search_values?.[1])}}};a(Yh,"getSelect");a(Uy,"getRecords");a(cs,"getTable");a(Dy,"createDeleteResponse");a(Ly,"groupRecordsInHistory")});var qr=m((Ioe,Fy)=>{"use strict";var{ResourceBridge:OW}=(qy(),re(Hy)),NW=Q();NW.initSync();var Il;function bW(){return Il||(Il=new OW,Il)}a(bW,"getBridge");Fy.exports=bW()});var Vy=m((Coe,ky)=>{"use strict";var Gy=require("lodash"),Ga=require("mathjs"),yW=require("jsonata"),xy=V();ky.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Gy.uniqWith(e,Gy.isEqual):e,searchJSON:IW,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 IW(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(xy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xy.isEmpty(this.__ala__.res[r])){let s=yW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(IW,"searchJSON")});var Yy=m((Doe,$y)=>{"use strict";var We=require("moment"),Wh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;$y.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(Wh),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(Wh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Wh)}});var zy=m((Loe,Qy)=>{"use strict";var wW=require("@turf/area"),CW=require("@turf/length"),UW=require("@turf/circle"),DW=require("@turf/difference"),LW=require("@turf/distance"),MW=require("@turf/boolean-contains"),PW=require("@turf/boolean-equal"),vW=require("@turf/boolean-disjoint"),BW=require("@turf/helpers"),Ky=A(),le=V();Qy.exports={geoArea:HW,geoLength:qW,geoCircle:FW,geoDifference:GW,geoDistance:Wy,geoNear:xW,geoContains:kW,geoEqual:VW,geoCrosses:$W,geoConvert:YW};var Qh="geo1 is required",zh="geo2 is required";function HW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),wW.default(e)}a(HW,"geoArea");function qW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),CW.default(e,{units:t||"kilometers"})}a(qW,"geoLength");function FW(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)),UW.default(e,t,{units:r||"kilometers"})}a(FW,"geoCircle");function GW(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)),DW(e,t)}a(GW,"geoDifference");function Wy(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)),LW.default(e,t,{units:r||"kilometers"})}a(Wy,"geoDistance");function xW(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 Wy(e,t,s)<=r}a(xW,"geoNear");function kW(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),MW.default(e,t)}a(kW,"geoContains");function VW(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),PW.default(e,t)}a(VW,"geoEqual");function $W(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!vW.default(e,t)}a($W,"geoCrosses");function YW(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(Ky.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ky.GEO_CONVERSION_ENUM).join(",")}`);return BW[t](e,r)}a(YW,"geoConvert")});var wl=m((Poe,Jy)=>{var ni=Vy(),lr=Yy(),us=zy();Jy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=lr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=lr.current_time,e.fn.extract=e.fn.EXTRACT=lr.extract,e.fn.date=e.fn.DATE=lr.date,e.fn.date_format=e.fn.DATE_FORMAT=lr.date_format,e.fn.date_add=e.fn.DATE_ADD=lr.date_add,e.fn.date_sub=e.fn.DATE_SUB=lr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=lr.date_diff,e.fn.now=e.fn.NOW=lr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=lr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=lr.get_server_time,e.fn.getdate=e.fn.GETDATE=lr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=lr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var eI=m((voe,jy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var KW=wl(),Xy=require("clone"),Cl=require("recursive-iterator"),se=x(),ne=V(),eo=qr(),WW=A(),{hdb_errors:QW}=W(),{getDatabases:Zy}=(de(),re(Ne)),zW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";KW(pt);var Jh=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 Cl(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(Xy(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=Zy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Cl(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 Cl(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(WW.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(Xy(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(zW)>-1&&this.tables.forEach(n=>{let i={columnid:Zy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=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 Cl(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(QW.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)}};jy.exports=Jh});var Nr=m((Hoe,tI)=>{"use strict";var JW=cA();tI.exports={searchByConditions:ZW,searchByHash:jW,searchByValue:eQ,search:tQ};var Xh=qr(),{transformReq:Zh}=V(),XW=eI();async function ZW(e){return Zh(e),Xh.searchByConditions(e)}a(ZW,"searchByConditions");async function jW(e){Zh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Xh.searchByHash(e))r&&t.push(r);return t}a(jW,"searchByHash");async function eQ(e){Zh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Xh.searchByValue(e))t.push(r);return t}a(eQ,"searchByValue");function tQ(e,t){try{let r=new JW(e);r.validate(),new XW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(tQ,"search")});var Ul=m((Foe,rI)=>{"use strict";var rQ=qr();rI.exports={writeTransaction:sQ};function sQ(e,t,r){return rQ.writeTransaction(e,t,r)}a(sQ,"writeTransaction")});var oI=m((koe,iI)=>{"use strict";var nQ=Nr(),iQ=Gs(),sI=x(),oQ=br(),xoe=Ul(),aQ=require("clone"),em=require("alasql"),cQ=wl(),nI=require("util"),uQ=nI.promisify(iQ.getTableSchema),lQ=nI.promisify(nQ.search),_Q=A(),jh=V();cQ(em);iI.exports={update:EQ};var dQ="There was a problem performing this update. Please check the logs and try again.";async function EQ({statement:e,hdb_user:t}){let r=await uQ(e.table.databaseid,e.table.tableid),s=fQ(e.columns);jh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=aQ(n),c=jh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=em.parse(u).statements[0],_=await lQ(l),d=hQ(s,_);return mQ(o,d,t)}a(EQ,"update");function fQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=em.compile(`SELECT ${r.expression.toString()} AS [${_Q.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sI.error(t),new Error(dQ)}}a(fQ,"createUpdateRecord");function hQ(e,t){return jh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(hQ,"buildUpdateRecords");async function mQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await oQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(mQ,"updateRecords")});var cI=m((Koe,aI)=>{var SQ=require("alasql"),pQ=Nr(),TQ=x(),RQ=qr(),rm=require("util"),tm=V(),gQ=A(),AQ=Gs(),$oe=Ul(),Yoe=br(),OQ="record",NQ="successfully deleted",bQ=rm.callbackify(CQ),yQ=rm.promisify(pQ.search),IQ=rm.promisify(AQ.getTableSchema);aI.exports={convertDelete:bQ};function wQ(e){return`${e.deleted_hashes.length} ${OQ}${e.deleted_hashes.length===1?"":"s"} ${NQ}`}a(wQ,"generateReturnMessage");async function CQ({statement:e,hdb_user:t}){let r=await IQ(e.table.databaseid,e.table.tableid);tm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=tm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=SQ.parse(o).statements[0],u={operation:gQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await yQ(c);let l=await RQ.deleteRecords(u);return tm.isEmptyOrZeroLength(l.message)&&(l.message=wQ(l)),delete l.txn_time,l}catch(l){throw TQ.error(l),l.hdb_code?l.message:l}}a(CQ,"convertDelete")});var EI=m((Qoe,dI)=>{"use strict";var UQ=Qn(),{hdb_errors:uI}=W(),{getDatabases:lI}=(de(),re(Ne));dI.exports={checkSchemaExists:_I,checkSchemaTableExists:DQ,schema_describe:UQ};async function _I(e){if(!lI()[e])return uI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_I,"checkSchemaExists");async function DQ(e,t){let r=await _I(e);if(r)return r;if(!lI()[e][t])return uI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(DQ,"checkSchemaTableExists")});var Va=m((Joe,LQ)=>{LQ.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 vl={};et(vl,{addAnalyticsListener:()=>om,recordAction:()=>ls,recordActionBinary:()=>to,setAnalyticsEnabled:()=>MQ});function MQ(e){OI=e}function ls(e,t,r,s,n){if(!OI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Ml.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Ml.set(i,o)),Ll||PQ()}function to(e,t,r,s,n){ls(e?1:0,t,r,s,n)}function om(e){bI.push(e)}function PQ(){Ll=performance.now(),setTimeout(()=>{let e=performance.now()-Ll;Ll=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Ml)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of bI)n(t);Ml=new Map,ii.parentPort?ii.parentPort.postMessage({type:NI,report:r}):II({report:r})},im).unref()}async function vQ(e,t=6e4){let r=am(),s;for(let _ of r.primaryStore.getRange({start:Dl+"z",end:Dl,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 BQ()}for(let[_,d]of i)d.id=Dl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Dl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-fI,active:l-hI,time:c}),fI=u,hI=l}async function HQ(e,t){let r=am(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function am(){return mI||(mI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function FQ(){yI=!0,setInterval(async()=>{await vQ(im,nm),await HQ(qQ,im)},nm/2).unref()}function II(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(SI+=s.mean*s.count);r.totalBytesProcessed=SI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(pI.get(t))}),pI.set(t,t.performance.eventLoopUtilization())),r.id=(0,gI.getNextMonotonicTime)(),am().put(r),yI||FQ(),GQ&&(wI=kQ(r))}async function kQ(e){if(await wI,!Tn){let r=(0,$a.dirname)((0,RI.getLogFilePath)());try{Tn=await(0,sm.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,sm.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>xQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw st.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bF(s,r),UE(s);let n=s.toJSON();if(SF.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in ig)ft[i]&&st.error(`Config ${ig[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(TF)}}a(lg,"initConfig");function bF(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&&(st.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(bF,"checkForUpdatedConfig");function UE(e){let t=e.toJSON(),r=_F(t);if(r.error)throw gu.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(UE,"validateConfig");function yF(e,t){ft===void 0&&(ft={});let r=Ms[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(yF,"updateConfigObject");function _g(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&lg();let o=ug(Ms.hdb_root),c=Pr.join(o,Tr.HDB_CONFIG_FILE),u=ln(c),l;if(r===void 0&&e.toLowerCase()===un.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=CE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===un.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=CE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){st.error(p)}}}l&&cg(u,l),UE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,Tr.HDB_CONFIG_FILE);s===!0&&IF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_g,"updateConfigValue");function IF(e,t){try{let r=Pr.join(t,"backup",`${Tr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(RF),st.error(r)}}a(IF,"backupConfigFile");var wF=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!wF.includes(r)){let s=xn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(xn,"flattenConfig");function CE(e,t){if(e===un.CLUSTERING_NODENAME||e===un.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(EF(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(CE,"castConfigValue");function CF(){let e=lt.getPropsFilePath(),t=Gn(e);return ln(t).toJSON()}a(CF,"getConfiguration");async function UF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return _g(void 0,void 0,n,!0),AF}catch(i){throw typeof i=="string"||i instanceof String?hF(i,i,mF.BAD_REQUEST,void 0,void 0,!0):i}}a(UF,"setConfiguration");function DE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return ln(t).toJSON()}a(DE,"readConfigFile");function ln(e){return dF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ln,"parseYamlDoc");function DF(){let e=DE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=ng(t);if(r)throw gu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=ng(s);if(n)throw gu.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 gu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(DF,"getClusteringRoutes");function dg(e){let t=og(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===un.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(dg,"initOldConfig");function LF(e){let t=DE();return fF.get(t,e.replaceAll("_","."))}a(LF,"getConfigFromFile");async function MF(e,t){let r=ln(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(MF,"addConfig");function PF(e){let t=Gn(lt.getPropsFilePath()),r=ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,Tr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(PF,"deleteConfigFromFile")});var Q=m((Jte,mg)=>{"use strict";var LE=require("fs-extra"),vr=require("path"),fg=require("os"),vF=require("properties-reader"),ea=x(),kn=V(),te=A(),Ou=Rr(),BF="Error initializing environment manager",Nu="BOOT_PROPS_FILE_PATH",hg=!1,HF={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ps={};mg.exports={BOOT_PROPS_FILE_PATH:Nu,getHdbBasePath:qF,setHdbBasePath:FF,get:GF,initSync:kF,setProperty:Ee,initTestEnvironment:VF};function qF(){return Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qF,"getHdbBasePath");function FF(e){Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(FF,"setHdbBasePath");function GF(e){let t=Ou.getConfigValue(e);return t===void 0?Ps[e]:t}a(GF,"get");function Ee(e,t){HF[e]&&(Ps[e]=t),Ou.updateConfigObject(e,t)}a(Ee,"setProperty");function xF(){let e;try{e=kn.getPropsFilePath(),LE.accessSync(e,LE.constants.F_OK|LE.constants.R_OK),hg=!0;let t=vF(e);return Ps[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Nu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(xF,"doesPropFileExist");function kF(e=!1){try{(hg||xF()||kn.noBootFile())&&(Ou.initConfig(e),Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ou.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(BF),ea.error(t),console.error(t),process.exit(1)}}a(kF,"initSync");function VF(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=vr.join(__dirname,"../../","unitTests");Ps[Nu]=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,fg.userInfo()?fg.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Nu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(VF,"initTestEnvironment")});var we=m((Zte,Og)=>{"use strict";var ia=A(),$F=V(),Bt=Q(),oa=require("path"),YF=require("minimist"),Sg=require("fs-extra"),pg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:bu}=ia,ra,sa,na;function Tg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(_n.STORAGE_PATH)||oa.join(Bt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Tg,"getBaseSchemaPath");function Rg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Ag(bu),sa}a(Rg,"getSystemSchemaPath");function gg(){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(gg,"getTransactionAuditStoreBasePath");function KF(e,t){let r=Bt.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(gg(),e.toString())}a(KF,"getTransactionAuditStorePath");function Ag(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(Tg(),e)}a(Ag,"getSchemaPath");function WF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,YF(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!$F.isObject(s))throw o;i=s}for(let o of i){let c=o[bu];if(!c)continue;let u=Bt.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return pg.set(u,[bu,ta.TABLES,t,ta.PATH],l),Bt.setProperty(_n.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return pg.set(u,[bu,ta.PATH],_),Bt.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!Sg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return Sg.mkdirsSync(i),Bt.setProperty(_n.STORAGE_PATH,n),i}return Rg()}a(WF,"initSystemSchemaPaths");function QF(){ra=void 0,sa=void 0,na=void 0}a(QF,"resetPaths");Og.exports={getBaseSchemaPath:Tg,getSystemSchemaPath:Rg,getTransactionAuditStorePath:KF,getTransactionAuditStoreBasePath:gg,getSchemaPath:Ag,initSystemSchemaPaths:WF,resetPaths:QF}});var Ht=m((rre,wg)=>{"use strict";var zF=rr().LMDB_ERRORS_ENUM,ere=require("lmdb"),JF=xe(),tre=require("buffer").Buffer,{OVERFLOW_MARKER:Ng,MAX_SEARCH_KEY_LENGTH:yu}=JF,bg=["number","string","symbol","boolean","bigint"];function XF(e){if(e=e?.primaryStore||e,!e)throw new Error(zF.ENV_REQUIRED)}a(XF,"validateEnv");function ZF(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(ZF,"stringifyData");function jF(e){return e instanceof Date?e.valueOf():e}a(jF,"convertKeyValueToWrite");function eG(e){if(e==null)return;if(bg.includes(typeof e))return e.length>yu?[e.slice(0,yu)+Ng]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(bg.includes(typeof n))n.length>yu?t.push(n.slice(0,yu)+Ng):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(eG,"getIndexedValues");var Iu=0,yg=0;function Ig(){yg=Date.now()-performance.now()}a(Ig,"adjustStartTime");Ig();var tG=6e4;setInterval(Ig,tG).unref();function rG(){let e=performance.now()+yg;return e>Iu?(Iu=e,e):(Iu+=488e-6,Iu)}a(rG,"getNextMonotonicTime");wg.exports={validateEnv:XF,stringifyData:ZF,convertKeyValueToWrite:jF,getNextMonotonicTime:rG,getIndexedValues:eG}});var Cg,Xr,ME,aa=Se(()=>{Cg=require("events"),Xr=class extends Cg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new ME;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)}},ME=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 Lu(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=Ug(_,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,wu.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,wu.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 wu.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 Ug(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}},Lu(r,t)),new r(e)):new Cu(e);case Array:let s=new Du(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ug(o,t?.elements)),s[n]=o}return s}}function Mu(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=Mu(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 Uu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(Uu(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(Uu(n))return!0}else return!0}else return!0}}return!1}var wu,ht,Cu,Vn,Du,Pu=Se(()=>{Zr();wu=C(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Lu,"assignTrackedAccessors");a(Ug,"trackObject");Cu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Lu(Cu,{});a(Mu,"collapseData");a(ua,"deepFreeze");a(Uu,"hasChanges");Vn=Symbol.for("has-array-changes"),Du=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Du.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 PE;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 Dg,Lg,PE,$n=Se(()=>{Dg=C(Ht()),Lg=require("../../index");Zr();a(Ye,"transaction");(0,Lg._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()};PE=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,Dg.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 HE(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(nG[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=es.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new vE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=qE(e);if(!p)throw new vE.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:Pg.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 qE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function vu(e){if(!e)return;let t=new BE,r,s,n,i,o;for(;r=Mg.exec(e);){i=Mg.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=sG[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 vE,_t,es,Pg,Mg,sG,nG,BE,Bu=Se(()=>{vE=C(W()),_t=C(xe()),es=require("ordered-binary"),Pg=require("lmdb"),Mg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,sG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(HE,"idsForCondition");nG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(qE,"filterByType");a(jr,"attributeComparator");a(vu,"parseQuery");BE=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 xE={};et(xE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>Gg,snake_case:()=>oG});function oG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vg(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 GE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function gr(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[Gg]=!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 Hu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Hu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Ar(e,t){let r=new Fg.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 FE(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 Bg(e){if(typeof e=="string")return t=>FE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=FE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=FE(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 Hg,qg,Fg,Ae,ae,vs,Gg,ce,iG,mt,Hu,GE,Zr=Se(()=>{Hg=require("crypto");aa();qg=require("../../index"),Fg=C(W());Pu();$n();Bu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),Gg=Symbol("save-updates"),ce=Symbol("stored-record"),iG={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=gr(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=Bg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=gr(function(t,r,s,n){if(Array.isArray(n)&&t[vs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):Ar(t,"put")},{hasContent:!0,type:"update"});static delete=gr(function(t,r,s,n){return t.delete?t.delete(r):Ar(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Hg.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):Ar(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=gr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Ar(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=gr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=gr(function(t,r,s,n){return t.connect?t.connect(r):Ar(t,"connect")},{type:"read"});static subscribe=gr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Ar(t,"subscribe")},{type:"read"});static publish=gr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Ar(t,"publish")},{hasContent:!0,type:"create"});static search=gr(function(t,r,s,n){let i=t.search?t.search(s):Ar(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Bg(o);return i.map(c)}return i},{type:"read"});static query=gr(function(t,r,s,n){return t.search?t.search(n,r):Ar(t,"search")},{hasContent:!0,type:"read"});static copy=gr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Ar(t,"copy")},{type:"create"});static move=gr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Ar(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ae],t,this[Ae]);Ar(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return vu(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&&iG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:vg(t,this)}}return vg(t,this)}static getResource(t,r,s){let n,i=r[Ae],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[vs]=!0),n}connect(t){let r=new Xr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,qg._assignPackageExport)("Resource",mt);a(oG,"snake_case");Hu=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(vg,"pathToId");GE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(gr,"transactional");a(Ar,"missingMethod");a(FE,"selectFromObject");a(Bg,"transformForSelect")});var $E={};et($E,{loadGQLSchema:()=>cG,start:()=>VE,startOnMainThread:()=>aG});function VE({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,kE.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,kE.dirname)(s)+"/"+T.name,p.tableClass)}}}var kE,aG,cG,xg=Se(()=>{kE=require("path");de();a(VE,"start");aG=VE,cG=VE({ensureTable:nt}).handleFile});async function qu(e){return uG?(la||(la=lG(dG)),(await(await la).import(e)).namespace):import(e)}async function lG(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:_G,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Vg.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,kg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function _G(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 dG(){return{Resource:mt,tables:nr}}var kg,Vg,uG,la,YE=Se(()=>{Zr();de();kg=require("fs/promises"),Vg=require("path"),uG=!1;a(qu,"secureImport");a(lG,"getCompartment");a(_G,"secureOnlyFetch");a(dG,"getGlobalVars")});var WE={};et(WE,{handleFile:()=>EG});async function EG(e,t,r,s){let n=new Map,i=(0,$g.pathToFileURL)(r).toString(),o=await qu(i);u(o.default)&&s.set((0,KE.dirname)(t),o.default),c(o,(0,KE.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var $g,KE,Yg=Se(()=>{$g=require("url");YE();KE=require("path");a(EG,"handleFile")});var zE={};et(zE,{start:()=>fG});function fG({resources:e}){e.set("login",QE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var QE,Kg=Se(()=>{Zr();a(fG,"start");QE=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 XE=m((Ure,zg)=>{"use strict";var{Readable:hG}=require("stream"),mG=1e4;zg.exports={streamAsJSON(e){return new JE({value:e})}};var JE=class extends hG{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),Wg)}catch(n){yield Wg(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);Qg(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>mG?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 Qg(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 Wg(e){return console.error(e),JSON.stringify(e.toString())}a(Wg,"handleError");function Qg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Qg,"when")});var cA=m((Mre,aA)=>{"use strict";var ZE=require("recursive-iterator"),SG=require("alasql"),jE=require("clone"),Jg=V(),{handleHDBError:Xg,hdb_errors:pG}=W(),{HDB_ERROR_MSGS:Zg,HTTP_STATUS_CODES:jg}=pG,{getDatabases:TG}=(de(),re(Ne)),RG=["DISTINCT_ARRAY"],eA=Symbol("validateTables"),ef=Symbol("validateTable"),Lre=Symbol("getAllColumns"),tA=Symbol("validateAllColumns"),Fu=Symbol("findColumn"),rA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),tf=Symbol("validateColumn"),sA=Symbol("setColumnsForTable"),nA=Symbol("checkColumnsForAsterisk"),iA=Symbol("validateGroupBy"),oA=Symbol("hasColumns"),rf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eA](),this[nA](),this[tA]()}[eA](){if(this[oA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ef](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ef](t.table)})}}[oA](){let t=!1,r=new ZE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ef](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=TG();if(!r[t.databaseid])throw Xg(new Error,Zg.SCHEMA_NOT_FOUND(t.databaseid),jg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Xg(new Error,Zg.TABLE_NOT_FOUND(t.databaseid,t.tableid),jg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=jE(n);i.table=jE(t),this.attributes.push(i)})}[Fu](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)}[nA](){let t=new ZE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sA](r.tableid)}[sA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new SG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tA](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[iA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new ZE(t),n=[];for(let{node:i,path:o}of s)!Jg.isEmpty(i)&&!Jg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rA](i):n.push(this[tf](i)));return n}[iA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&RG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=jE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Fu](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[Fu](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`}[rA](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[tf](t)}[tf](t){let r=this[Fu](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]}};aA.exports=rf});var lA=m((vre,uA)=>{"use strict";var sf=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")}};uA.exports=sf});var dA=m((Hre,_A)=>{"use strict";var nf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_A.exports=nf});var Gu=m((Fre,EA)=>{"use strict";var af=Q(),cf=A();af.initSync();var gG=af.get(cf.CONFIG_PARAMS.STORAGE_COMPRESSION),AG=af.get(cf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,OG=cf.UPDATES_PROPERTY,of=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=gG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=AG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===OG)}};EA.exports=of});var ku=m((xre,hA)=>{"use strict";var qi=Q(),da=A();qi.initSync();var NG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",fA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),bG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),xu=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=NG,this.noFSAccess=!0,fA!==void 0&&(this.overlappingSync=fA),this.noReadAhead=bG}};hA.exports=xu;xu.MAX_DBS=1e4});var ye=m((Vre,bA)=>{"use strict";var lf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Vu=Ht(),pA=x(),qt=rr().LMDB_ERRORS_ENUM,$u=dA(),_f=Gu(),TA=ku(),dn=xe(),mA=A(),{table:yG,resetDatabases:IG}=(de(),re(Ne)),SA=Q(),Hr=dn.INTERNAL_DBIS_NAME,RA=dn.DBI_DEFINITION_NAME,wG="data.mdb",CG="lock.mdb",Ea=".mdb",UG="-lock",uf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Or(t,r),this.key_type=this.dbi[dn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new lf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Yu(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(Yu,"pathEnvNameValidation");async function df(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,wG),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(df,"validateEnvironmentPath");function Ku(e,t){if(Vu.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Ku,"validateEnvDBIName");async function DG(e,t,r=!1,s=!1){Yu(e,t);let n=ir.basename(e);t=t.toString();let i=SA.get(mA.CONFIG_PARAMS.SCHEMAS);i||SA.setProperty(mA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await df(e,t,s),gA(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 TA(s?c:c+Ea,!1),l=lf.open(u);l.dbis=Object.create(null);let _=new _f(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Ef(e,t,r);return l[dn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(DG,"createEnvironment");async function LG(e,t,r,s=!0){Yu(e,t),t=t.toString();let n=ir.join(e,t);return yG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(LG,"copyEnvironment");async function gA(e,t,r=!1){Yu(e,t),t=t.toString();let s=Ef(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 df(e,t),i=ir.join(e,t+Ea),o=n!=i,c=new TA(n,o),u=lf.open(c);u.dbis=Object.create(null);let l=OA(u);for(let _=0;_<l.length;_++)Or(u,l[_]);return u[dn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(gA,"openEnvironment");async function MG(e,t,r=!1){Yu(e,t),t=t.toString();let s=ir.join(e,t+Ea),n=await df(e,t);if(global.lmdb_map!==void 0){let i=Ef(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+UG:ir.join(ir.dirname(n),CG))}a(MG,"deleteEnvironment");async function AA(e){Vu.validateEnv(e);let t=e[dn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(AA,"closeEnvironment");function Ef(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ef,"getCachedEnvironmentName");function PG(e){Vu.validateEnv(e);let t=Object.create(null),r=Or(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new $u,n)}catch{pA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(PG,"listDBIDefinitions");function OA(e){Vu.validateEnv(e);let t=[],r=Or(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(OA,"listDBIs");function vG(e,t){let s=Or(e,Hr).getEntry(t),n=new $u;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{pA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(vG,"getDBIDefinition");function NA(e,t,r,s=!r){if(Ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Or(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new _f(r,s===!0),o=e.openDB(t,i),c=new $u(r===!0,s);return o[RA]=c,Or(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(NA,"createDBI");function Or(e,t){if(Ku(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=vG(e,t):r=new $u,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new _f(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[RA]=r,e.dbis[t]=s,s}a(Or,"openDBI");function BG(e,t){Ku(e,t),t=t.toString();let r=Or(e,t),s=r.getStats();return r[dn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(BG,"statDBI");async function HG(e,t){try{let r=ir.join(e,t+Ea);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(HG,"environmentDataSize");function qG(e,t){if(Ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Or(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Or(e,Hr).removeSync(t)}a(qG,"dropDBI");function FG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Or(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)NA(e,i,i!==t,i===t),s=!0;else throw o}}s&&IG()}a(FG,"initializeDBIs");bA.exports={openDBI:Or,openEnvironment:gA,createEnvironment:DG,listDBIs:OA,listDBIDefinitions:PG,createDBI:NA,dropDBI:qG,statDBI:BG,deleteEnvironment:MG,initializeDBIs:FG,TransactionCursor:uf,environmentDataSize:HG,copyEnvironment:LG,closeEnvironment:AA}});var IA=m((Yre,yA)=>{"use strict";var ff=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};yA.exports=ff});var CA=m((Wre,wA)=>{"use strict";var hf=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}};wA.exports=hf});var DA=m((zre,UA)=>{"use strict";var mf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};UA.exports=mf});var Fi=m((ese,PA)=>{"use strict";var GG=ye(),xG=IA(),kG=CA(),VG=DA(),ts=Ht(),fa=rr().LMDB_ERRORS_ENUM,$G=xe(),Bs=A(),YG=V(),KG=require("uuid"),Xre=require("lmdb"),{handleHDBError:WG,hdb_errors:QG}=W(),{OVERFLOW_MARKER:Zre,MAX_SEARCH_KEY_LENGTH:jre}=$G,LA=Q();LA.initSync();var Wu=LA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sf=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zG(e,t,r,s,n=ts.getNextMonotonicTime()){gf(e,t,r,s),pf(e,t,r);let i=new xG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];MA(l,!0,n);let _=JG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Tf(o,c,s,i,n)}a(zG,"insertRecords");function JG(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let _=c([[{}]]);Array.isArray(_)&&(c=_[0][Bs.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Wu&&l.prefetch(u.map(_=>({key:_,value:n})),Qu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Wu&&e.dbis[t].prefetch([n],Qu),e.dbis[t].put(n,s,s[Yn])})}a(JG,"insertRecord");function XG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(XG,"removeSkippedRecords");function MA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sf]))&&(e[Sf]=r||ts.getNextMonotonicTime()):delete e[Sf]}a(MA,"setTimestamps");function pf(e,t,r){r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),GG.initializeDBIs(e,t,r)}a(pf,"initializeTransaction");async function ZG(e,t,r,s,n=ts.getNextMonotonicTime()){gf(e,t,r,s),pf(e,t,r);let i=new kG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Rf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Tf(c,u,s,i,n,o)}a(ZG,"updateRecords");async function jG(e,t,r,s,n=ts.getNextMonotonicTime()){try{gf(e,t,r,s)}catch(u){throw WG(u,u.message,QG.HTTP_STATUS_CODES.BAD_REQUEST)}pf(e,t,r);let i=new VG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;YG.isEmpty(l[t])?(_=KG.v4(),l[t]=_):_=l[t];let d=Rf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Tf(o,c,s,i,n)}a(jG,"upsertRecords");async function Tf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ts.getNextMonotonicTime(),XG(r,i),s}a(Tf,"finalizeWrite");function Rf(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(MA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][Bs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ts.getIndexedValues(R);if(O){Wu&&p.prefetch(O.map(k=>({key:k,value:s})),Qu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Wu&&p.prefetch(O.map(k=>({key:k,value:s})),Qu);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Rf(e,t,r,s,n,i,o))}a(Rf,"updateUpsertRecord");function ex(e,t,r){if(ts.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(ex,"validateBasic");function gf(e,t,r,s){if(ex(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(gf,"validateWrite");function Qu(){}a(Qu,"noop");PA.exports={insertRecords:zG,updateRecords:ZG,upsertRecords:jG}});var Kn=m((rse,tx)=>{tx.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var rs=m((sse,HA)=>{"use strict";var BA=V(),vA=A(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),En={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required(),sx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()),nx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required();function ix(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>En.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(ix,"checkValidTable");function ox(e,t){return BA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ox,"validateSchemaExists");function ax(e,t){let r=t.state.ancestors[0].schema;return BA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ax,"validateTableExists");function cx(e,t){return e.toLowerCase()===vA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${vA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(cx,"validateSchemaName");HA.exports={common_validators:En,schema_regex:Gi,hdb_schema_table:rx,validateSchemaExists:ox,validateTableExists:ax,validateSchemaName:cx,checkValidTable:ix,hdb_database:sx,hdb_table:nx}});var zu=m((ise,qA)=>{var{common_validators:ss}=rs(),ma=Pe(),ha="is required",Ke={database:{presence:!1,format:ss.schema_format,length:ss.schema_length},schema:{presence:!1,format:ss.schema_format,length:ss.schema_length},table:{presence:!0,format:ss.schema_format,length:ss.schema_length},attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length},hash_attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length}};function 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 ux(e){return e=Sa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(ux,"schema_object");function lx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(lx,"table_object");function _x(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,ma.validateObject(e,Ke)}a(_x,"create_table_object");function dx(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(dx,"attribute_object");function Ex(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(Ex,"describe_table");function fx(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(fx,"validateTableResidence");qA.exports={schema_object:ux,create_table_object:_x,table_object:lx,attribute_object:dx,describe_table:Ex,validateTableResidence:fx}});var GA=m((ase,FA)=>{"use strict";var hx=require("uuid"),Af=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||hx.v4(),this.schema_table=`${this.schema}.${this.table}`}};FA.exports=Af});var Ju=m((use,xA)=>{"use strict";var mx=GA(),Of=class extends mx{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}};xA.exports=Of});var VA=m((_se,kA)=>{"use strict";kA.exports=px;var Sx="inserted";function px(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Sx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(px,"returnObject")});var Xu=m((Ese,QA)=>{"use strict";var Tx=A(),Nf=ye(),Rx=Fi(),{getSystemSchemaPath:gx,getSchemaPath:Ax}=we(),Ox=Kn(),Nx=zu(),bx=Ju(),yx=VA(),{handleHDBError:$A,hdb_errors:KA}=W(),YA=V(),{HTTP_STATUS_CODES:Ix}=KA,bf=Ox.hdb_attribute,WA=[];for(let e=0;e<bf.attributes.length;e++)WA.push(bf.attributes[e].attribute);var wx="inserted";QA.exports=Cx;async function Cx(e){let t=Nx.attribute_object(e);if(t)throw $A(new Error,t.message,KA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&YA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw $A(new Error,r,Ix.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=YA.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 bx(e.schema,e.table,e.attribute,e.id);try{let i=await Nf.openEnvironment(Ax(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}`);Nf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nf.openEnvironment(gx(),Tx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Rx.insertRecords(o,bf.hash_attribute,WA,[n]);return yx(wx,c,{records:[n]},u)}catch(i){throw i}}a(Cx,"lmdbCreateAttribute")});var If=m((hse,JA)=>{var{hdb_table:Ux,hdb_database:zA}=rs(),Dx=Pe(),yf=require("joi"),Lx={undefined:"undefined",null:"null"},Mx=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||Lx[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"),Px=yf.object({database:zA,schema:zA,table:Ux,records:yf.array().items(yf.object().custom(Mx)).required()});JA.exports=function(e){return Dx.validateBySchema(e,Px)}});var pa=m((pse,ZA)=>{"use strict";var qs=V(),XA=x(),Sse=If(),{getDatabases:vx}=(de(),re(Ne)),{ClientError:Wn}=W();ZA.exports=Bx;function Bx(e){if(qs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(qs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(qs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=vx()[e.schema]?.[e.table];if(qs.isEmpty(t))throw new Wn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&qs.isEmptyOrZeroLength(o[r]))throw XA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!qs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw XA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!qs.isEmpty(o[r])&&o[r]!==""&&s.has(qs.autoCast(o[r]))&&(o.skip=!0),s.add(qs.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(Bx,"insertUpdateValidate")});var Ta=m((Rse,jA)=>{"use strict";var Hx=A().OPERATIONS_ENUM,wf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Hx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};jA.exports=wf});var Oa=m((Ose,eO)=>{"use strict";var Ase=Ta(),Zu=A(),Uf=V(),Cf=x(),qx=require("uuid"),{handleHDBError:Ra,hdb_errors:Fx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Fx;eO.exports=Gx;function Gx(e,t,r){for(let n=0;n<t.length;n++)xx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];kx(i,r,e.operation)}}a(Gx,"processRows");function xx(e){if(Buffer.byteLength(String(e))>Zu.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(Uf.isEmptyOrZeroLength(e)||Uf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(xx,"validateAttribute");function kx(e,t,r){if(!e.hasOwnProperty(t)||Uf.isEmptyOrZeroLength(e[t])){if(r===Zu.OPERATIONS_ENUM.INSERT||r===Zu.OPERATIONS_ENUM.UPSERT){e[t]=qx.v4();return}throw Cf.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]))>Zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cf.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 Cf.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(kx,"validateHash")});var rO=m((bse,tO)=>{"use strict";var Df=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};tO.exports=Df});var iO=m((Ise,nO)=>{"use strict";var Lf=ye(),Vx=x(),sO=rr().LMDB_ERRORS_ENUM;nO.exports=$x;async function $x(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 Lf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==sO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Lf.closeEnvironment(global.lmdb_map[s]),await Lf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==sO.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){Vx.error(t)}}a($x,"cleanLMDBMap")});var Fs=m((Cse,uO)=>{"use strict";var Na=require("crypto"),Yx=Q(),{CONFIG_PARAMS:Kx}=A(),aO="aes-256-cbc",Wx=32,Qx=16,Mf=64,cO=32,zx=Mf+cO,oO=new Map;uO.exports={encrypt:Jx,decrypt:Xx,createNatsTableStreamName:Zx};function Jx(e){let t=Na.randomBytes(Wx),r=Na.randomBytes(Qx),s=Na.createCipheriv(aO,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(Jx,"encrypt");function Xx(e){let t=e.substr(0,Mf),r=e.substr(Mf,cO),s=e.substr(zx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(aO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Xx,"decrypt");function Zx(e,t){let r=Yx.get(Kx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=oO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),oO.set(r,s)),s}a(Zx,"createNatsTableStreamName")});var Qn=m((Lse,_O)=>{"use strict";var Dse=Nr(),ju=x(),lO=zu(),jx=Fs(),el=V(),{handleHDBError:tl,hdb_errors:ek}=W(),{HDB_ERROR_MSGS:rl,HTTP_STATUS_CODES:Pf}=ek,tk=Q();tk.initSync();var{getDatabases:vf}=(de(),re(Ne));_O.exports={describeAll:rk,describeTable:sl,describeSchema:sk};async function rk(e){try{let t=el.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vf(),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 sl({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 sl({schema:l,table:d},f)}E&&c.push(E)}catch(E){ju.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 ju.error("Got an error in describeAll"),ju.error(t),tl(new Error,rl.DESCRIBE_ALL_ERR)}}a(rk,"describeAll");async function sl(e,t){el.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=lO.describe_table(e);if(i)throw i;let c=vf()[r];if(!c)throw tl(new Error,rl.SCHEMA_NOT_FOUND(e.schema),Pf.NOT_FOUND);let u=c[s];if(!u)throw tl(new Error,rl.TABLE_NOT_FOUND(e.schema,e.table),Pf.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=jx.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){ju.warn(`unable to stat table dbi due to ${d}`)}return _}a(sl,"descTable");async function sk(e){el.transformReq(e);let t=lO.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=vf()[s];if(!i)throw tl(new Error,rl.SCHEMA_NOT_FOUND(e.schema),Pf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),el.isEmpty(u)||u.describe){let l=await sl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(sk,"describeSchema")});var Gs=m((Bse,mO)=>{var nk=Kn(),{callbackify:EO,promisify:ik}=require("util"),{getDatabases:fO}=(de(),re(Ne));mO.exports={setSchemaDataToGlobal:dO,getTableSchema:ok,getSystemSchema:ak,setSchemaDataToGlobalAsync:ik(dO)};var hO=Qn(),Pse=EO(hO.describeAll),vse=EO(hO.describeTable);function dO(e){global.hdb_schema=fO(),e&&e()}a(dO,"setSchemaDataToGlobal");function ok(e,t,r){let s=fO()[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(ok,"getTableSchema");function ak(){return nk}a(ak,"getSystemSchema")});var br=m((qse,RO)=>{"use strict";var il=If(),St=V(),ck=require("util"),ol=qr(),uk=Gs(),SO=x(),{handleHDBError:zn,hdb_errors:lk}=W(),{HTTP_STATUS_CODES:Jn}=lk,_k=ck.promisify(uk.getTableSchema),dk="updated",pO="inserted",TO="upserted";RO.exports={insert:fk,update:hk,upsert:mk,validation:Ek,flush:Sk};async function Ek(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 _k(e.schema,e.table),r=il(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 SO.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 SO.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(Ek,"validation");async function fk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=il(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await ol.createRecords(e);return nl(pO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(fk,"insertData");async function hk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=il(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await ol.updateRecords(e);return St.isEmpty(s.existing_rows)?nl(dk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):nl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(hk,"updateData");async function mk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=il(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await ol.upsertRecords(e);return nl(TO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(mk,"upsertData");function nl(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===pO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(nl,"returnObject");function Sk(e){return St.transformReq(e),ol.flush(e.schema,e.table)}a(Sk,"flush")});var Hf=m((Gse,OO)=>{var pk=Pe(),Bf=require("joi"),{hdb_table:Tk,hdb_database:gO}=rs(),AO={schema:gO,database:gO,table:Tk},Rk={date:Bf.date().iso().required()},gk={timestamp:Bf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OO.exports=function(e,t){let r=t==="timestamp"?{...AO,...gk}:{...AO,...Rk},s=Bf.object(r);return pk.validateBySchema(e,s)}});var yO=m((xse,bO)=>{var Ak=Pe(),qf=require("joi"),{hdb_table:Ok,hdb_database:NO}=rs(),Nk=qf.object({schema:NO,database:NO,table:Ok,hash_values:qf.array().required(),ids:qf.array()});bO.exports=function(e){return Ak.validateBySchema(e,Nk)}});var wO=m((kse,IO)=>{"use strict";var Ff=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}},Gf=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}},xf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};IO.exports={InsertObject:Ff,NoSQLSeachObject:Gf,DeleteResponseObject:xf}});var jn=m(($se,MO)=>{"use strict";var UO=Hf(),bk=yO(),Xn=V(),CO=require("moment"),DO=x(),{promisify:yk,callbackify:Ik}=require("util"),Zn=A(),wk=Gs(),kf=yk(wk.getTableSchema),Vf=qr(),{DeleteResponseObject:Ck}=wO(),{handleHDBError:fn,hdb_errors:Uk}=W(),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:hn}=Uk,Dk="records successfully deleted",Lk=Ik(LO);MO.exports={delete:Lk,deleteRecord:LO,deleteFilesBefore:Mk,deleteAuditLogsBefore:Pk};async function Mk(e){let t=UO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!CO(e.date,CO.ISO_8601).isValid())throw fn(new Error,al.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,al.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await Vf.deleteRecordsBefore(e);if(await kf(e.schema,e.table),DO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Mk,"deleteFilesBefore");async function Pk(e){let t=UO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,al.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,al.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await Vf.deleteAuditLogsBefore(e);return await kf(e.schema,e.table),DO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Pk,"deleteAuditLogsBefore");async function LO(e){e.ids&&(e.hash_values=e.ids);let t=bk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await kf(e.schema,e.table);let s=await Vf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Dk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ck;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LO,"deleteRecord")});var cl=m((Kse,BO)=>{var vk=require("crypto"),PO=9;function Bk(e){let t=qk(PO),r=vO(e+t);return t+r}a(Bk,"createHash");function Hk(e,t){let r=e.substr(0,PO),s=r+vO(t+r);return e===s}a(Hk,"validateHash");function qk(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(qk,"generateSalt");function vO(e){return vk.createHash("md5").update(e).digest("hex")}a(vO,"md5");BO.exports={hash:Bk,validate:Hk}});var qO=m((Qse,HO)=>{var $f=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 Fk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,$f.validateObject(e,It)}a(Fk,"addUserValidation");function Gk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,$f.validateObject(e,It)}a(Gk,"alterUserValidation");function xk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,$f.validateObject(e,It)}a(xk,"dropUserValidation");HO.exports={addUserValidation:Fk,alterUserValidation:Gk,dropUserValidation:xk}});var Be=m((Xse,GO)=>{"use strict";var{platform:Jse}=require("os"),kk="nats-server.zip",Yf="nats-server",Vk=process.platform==="win32"?`${Yf}.exe`:Yf,Kf="HDB",$k=/^[^\s.,*>]+$/,FO="__request__",Yk=a(e=>`${e}.${FO}`,"REQUEST_SUBJECT"),Kk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Wk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Qk={HUB:"hub.pid",LEAF:"leaf.pid"},zk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Jk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Kf,deliver_subject:"__HDB__.WORKQUEUE"},Xk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Kf,deliver_subject:"HDB.SCHEMAQUEUE"},Zk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Kf,deliver_subject:"HDB.USERQUEUE"},jk={SUCCESS:"success",ERROR:"error"},eV={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tV={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rV={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},sV={debug:"-D",trace:"-DVV"};GO.exports={NATS_SERVER_ZIP:kk,NATS_SERVER_NAME:Yf,NATS_BINARY_NAME:Vk,PID_FILES:Qk,NATS_CONFIG_FILES:Wk,SERVER_SUFFIX:zk,WORK_QUEUE_CONSUMER_NAMES:Jk,SCHEMA_QUEUE_CONSUMER_NAMES:Xk,USER_QUEUE_CONSUMER_NAMES:Zk,NATS_TERM_CONSTRAINTS_RX:$k,REQUEST_SUFFIX:FO,UPDATE_REMOTE_RESPONSE_STATUSES:jk,CLUSTER_STATUS_STATUSES:eV,REQUEST_SUBJECT:Yk,SUBJECT_PREFIXES:tV,MSG_HEADERS:Kk,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:sV,LOG_LEVEL_HIERARCHY:rV}});var kO=m((jse,xO)=>{"use strict";var ul=A(),ll=class{static{a(this,"BaseLicense")}constructor(t=0,r=ul.RAM_ALLOCATION_ENUM.DEFAULT,s=ul.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Wf=class extends ll{static{a(this,"ExtendedLicense")}constructor(t=0,r=ul.RAM_ALLOCATION_ENUM.DEFAULT,s=ul.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};xO.exports={BaseLicense:ll,ExtendedLicense:Wf}});var ba=m((tne,QO)=>{"use strict";var Vi=require("fs-extra"),VO=cl(),$O=require("crypto"),nV=require("moment"),iV=require("uuid").v4,wt=x(),zf=require("path"),oV=V(),mn=A(),aV=kO().ExtendedLicense,ki="invalid license key format",cV="061183",uV="mofi25",lV="aes-256-cbc",_V=16,dV=32,YO=Q();YO.initSync();var Qf;QO.exports={validateLicense:KO,generateFingerPrint:fV,licenseSearch:WO,getLicense:SV};function Jf(){return zf.join(YO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Jf,"getLicenseDirPath");function EV(){let e=Jf();return zf.join(e,mn.LICENSE_FILE_NAME)}a(EV,"getLicenseFilePath");function Xf(){let e=Jf();return zf.join(e,mn.REG_KEY_FILE_NAME)}a(Xf,"getFingerPrintFilePath");async function fV(){let e=Xf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await hV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(fV,"generateFingerPrint");async function hV(){let e=iV(),t=VO.hash(e),r=Xf();try{await Vi.mkdirp(Jf()),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(hV,"writeFingerprint");function KO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Xf(),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(uV),c=o[1];c=Buffer.concat([Buffer.from(c)],_V);let u=Buffer.concat([Buffer.from(i)],dV),l=$O.createDecipheriv(lV,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=mV(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<nV().valueOf()&&(r.valid_date=!1),VO.validate(o[1],`${cV}${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(KO,"validateLicense");function mV(e,t){try{let r=$O.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(mV,"checkOldLicense");function WO(){let e=new aV,t=[];try{t=Vi.readFileSync(EV(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(oV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=KO(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Qf=e,e}a(WO,"licenseSearch");async function SV(){return Qf||await WO(),Qf}a(SV,"getLicense")});var ar=m((one,lN)=>{"use strict";var jO="username is required",eN="nothing to update, must supply active, role or password to update",tN="password cannot be an empty string",rN="If role is specified, it cannot be empty.",sN="active must be true or false";lN.exports={addUser:yV,alterUser:IV,dropUser:CV,getSuperUser:MV,userInfo:UV,listUsers:dl,listUsersExternal:DV,setUsersToGlobal:Yi,findAndValidateUser:uN,getClusterUser:PV,USERNAME_REQUIRED:jO,ALTERUSER_NOTHING_TO_UPDATE:eN,EMPTY_PASSWORD:tN,EMPTY_ROLE:rN,ACTIVE_BOOLEAN:sN};var nN=br(),pV=jn(),jf=cl(),iN=qO(),oN=Nr(),eh=xs(),or=V(),aN=require("validate.js"),ue=x(),{promisify:TV}=require("util"),th=Fs(),zO=A(),JO=Be(),RV=Rr(),sne=Q(),nne=ba(),gV=Kn(),{table:ine}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:AV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Zf,HDB_ERROR_MSGS:$i}=AV,{UserEventMsg:rh}=Fr(),XO=require("lodash"),{_assignPackageExport:OV}=require("../../index");OV("getUser",uN);var cN={username:!0,active:!0,role:!0,password:!0},ZO=new Map,_l=oN.searchByValue,NV=oN.searchByHash,bV=TV(pV.delete);async function yV(e){let t=aN.cleanAttributes(e,cN),r=iN.addUserValidation(t);if(r)throw ns(new Error,r.message,is.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await _l(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,$i.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=th.encrypt(t.password)),t.password=jf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nN.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 ns(new Error,$i.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],eh.signalUserChange(new rh(process.pid)),`${c.username} successfully added`}a(yV,"addUser");async function IV(e){let t=aN.cleanAttributes(e,cN);if(or.isEmptyOrZeroLength(t.username))throw new Error(jO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(eN);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(tN);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(sN);let r=wV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=th.encrypt(t.password)),t.password=jf.hash(t.password)),t.role==="")throw new Error(rN);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 _l(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),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await nN.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 eh.signalUserChange(new rh(process.pid)),n}a(IV,"alterUser");function wV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(wV,"isClusterUser");async function CV(e){try{let t=iN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,$i.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await bV(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 eh.signalUserChange(new rh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(CV,"dropUser");async function UV(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 NV(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(UV,"userInfo");async function DV(){let e;try{e=await dl()}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(DV,"listUsersExternal");async function dl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await _l(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]=XO.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 _l(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=XO.cloneDeep(o),o.role=r[o.role],LV(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(dl,"listUsers");function LV(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(gV)){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(LV,"appendSystemTablesToRole");async function Yi(){try{let e=await dl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function uN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Zf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Zf.USER_INACTIVE,is.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(ZO.get(t)===s.password)return n;if(jf.validate(s.password,t))ZO.set(t,s.password);else throw ns(new Error,Zf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(uN,"findAndValidateUser");async function MV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(MV,"getSuperUser");async function PV(){let e=await dl(),t=RV.getConfigFromFile(zO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===zO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=th.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+JO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+JO.SERVER_SUFFIX.ADMIN,r}a(PV,"getClusterUser")});var Ia=m((lne,fN)=>{"use strict";var ei=x(),cr=A(),vV=iO(),cne=Gs(),une=Qn(),BV=ar(),{validateEvent:_N}=Fr(),ya=qr(),HV=require("process"),{resetDatabases:qV}=(de(),re(Ne)),FV={[cr.ITC_EVENT_TYPES.SCHEMA]:GV,[cr.ITC_EVENT_TYPES.USER]:EN};async function GV(e){let t=_N(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await vV(e.message),await xV(e.message)}a(GV,"schemaHandler");async function xV(e){try{ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=qV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(xV,"syncSchemaMetadata");var dN=[];async function EN(e){try{try{ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=_N(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${HV.pid} received user event:`,e),await BV.setUsersToGlobal();for(let r of dN)r()}catch(t){ei.error(t)}}a(EN,"userHandler");EN.addListener=function(e){dN.push(e)};fN.exports=FV});var Fr=m((mne,mN)=>{"use strict";var dne=x(),sh=V(),kV=A(),{ITC_ERRORS:wa}=rr(),{parentPort:Ene,threadId:VV,isMainThread:$V,workerData:fne}=require("worker_threads"),{onMessageFromWorkers:YV,broadcast:hne,broadcastWithAcknowledgement:KV}=dt();mN.exports={sendItcEvent:WV,validateEvent:hN,SchemaEventMsg:QV,UserEventMsg:zV};var El;YV(async(e,t)=>{El=El||Ia(),hN(e),El[e.type]&&await El[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function WV(e){return!$V&&e.message&&(e.message.originator=VV),KV(e)}a(WV,"sendItcEvent");function hN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||sh.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||sh.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||sh.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(kV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(hN,"validateEvent");function QV(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(QV,"SchemaEventMsg");function zV(e){this.originator=e}a(zV,"UserEventMsg")});var xs=m((Tne,RN)=>{"use strict";var SN=A(),pne=V(),fl=x(),pN=rO(),Ki,{sendItcEvent:TN}=Fr();function JV(e){try{fl.trace("signalSchemaChange called with message:",e),Ki=Ki||Ia();let t=new pN(SN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),TN(t)}catch(t){fl.error(t)}}a(JV,"signalSchemaChange");function XV(e){try{fl.trace("signalUserChange called with message:",e),Ki=Ki||Ia();let t=new pN(SN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),TN(t)}catch(t){fl.error(t)}}a(XV,"signalUserChange");RN.exports={signalSchemaChange:JV,signalUserChange:XV}});var hl=m((gne,AN)=>{"use strict";var gN=V(),ZV=A(),jV=x(),e$=Xu(),t$=Ju(),r$=xs(),{SchemaEventMsg:s$}=Fr(),n$="already exists in";AN.exports=i$;async function i$(e,t,r){if(gN.isEmptyOrZeroLength(r))return r;let s=[];gN.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 o$(e,t.schema,t.name,i)})),n}a(i$,"lmdbCheckForNewAttributes");async function o$(e,t,r,s){let n=new t$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await a$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(n$))jV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(o$,"createNewAttribute");async function a$(e){let t;return t=await e$(e),r$.signalSchemaChange(new s$(process.pid,ZV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(a$,"createAttribute")});var Wi=m((One,ON)=>{"use strict";var nh=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}};ON.exports=nh});var bN=m((bne,NN)=>{"use strict";var c$=Wi(),u$=A().OPERATIONS_ENUM,ih=class extends c${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(u$.INSERT,r,s,n,i),this.records=t}};NN.exports=ih});var IN=m((Ine,yN)=>{"use strict";var l$=Wi(),_$=A().OPERATIONS_ENUM,oh=class extends l${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=oh});var CN=m((Cne,wN)=>{"use strict";var d$=Wi(),E$=A().OPERATIONS_ENUM,ah=class extends d${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(E$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};wN.exports=ah});var DN=m((Dne,UN)=>{"use strict";var f$=Wi(),h$=A().OPERATIONS_ENUM,ch=class extends f${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(h$.DELETE,s,n,t,i),this.original_records=r}};UN.exports=ch});var Ca=m((Pne,vN)=>{"use strict";var Mne=require("path"),LN=ye(),m$=bN(),S$=IN(),p$=CN(),T$=DN(),Qi=xe(),MN=V(),{CONFIG_PARAMS:R$}=A(),PN=Q();PN.initSync();var ml=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:g$}=we();vN.exports=A$;async function A$(e,t){if(PN.get(R$.LOGGING_AUDITLOG)===!1)return;let r=g$(e.schema,e.table),s=await LN.openEnvironment(r,e.table,!0),n=O$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){LN.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),MN.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(A$,"writeTransaction");function O$(e,t){let r=MN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ml.INSERT)return new m$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.UPDATE)return new S$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.UPSERT)return new p$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.DELETE)return new T$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O$,"createTransactionObject")});var uh=m((Hne,BN)=>{"use strict";var N$=pa(),Bne=Ta(),Ua=A(),b$=Oa(),y$=Fi().insertRecords,I$=ye(),w$=x(),C$=hl(),{getSchemaPath:U$}=we(),D$=Ca();BN.exports=L$;async function L$(e){try{let{schema_table:t,attributes:r}=N$(e);b$(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 C$(e.hdb_auth_header,t,r),n=U$(e.schema,e.table),i=await I$.openEnvironment(n,e.table),o=await y$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await D$(e,o)}catch(c){w$.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(L$,"lmdbCreateRecords")});var FN=m((Fne,qN)=>{"use strict";var HN=A(),M$=uh(),P$=Ta(),v$=require("fs-extra"),{getSchemaPath:B$}=we();qN.exports=H$;async function H$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new P$(HN.SYSTEM_SCHEMA_NAME,HN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await M$(r),await v$.mkdirp(B$(e.schema))}a(H$,"lmdbCreateSchema")});var xN=m((xne,GN)=>{"use strict";var lh=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}};GN.exports=lh});var YN=m((Kne,$N)=>{"use strict";var kN=ye(),_h=Ht(),dh=rr().LMDB_ERRORS_ENUM,q$=xe(),VN=x(),Vne=V(),F$=require("lmdb"),G$=xN(),x$=A(),{OVERFLOW_MARKER:$ne,MAX_SEARCH_KEY_LENGTH:Yne}=q$,k$=x$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function V$(e,t,r,s){if(_h.validateEnv(e),t===void 0)throw new Error(dh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(dh.IDS_REQUIRED):new Error(dh.IDS_MUST_BE_ITERABLE);try{let n=kN.listDBIs(e);kN.initializeDBIs(e,t,n);let i=new G$,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[k$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,F$.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 $=_h.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{VN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){VN.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=_h.getNextMonotonicTime(),i}catch(n){throw n}}a(V$,"deleteRecords");$N.exports={deleteRecords:V$}});var Da=m((Qne,WN)=>{"use strict";var zi=V(),$$=YN(),Y$=ye(),{getSchemaPath:K$}=we(),W$=Ca(),Q$=x();WN.exports=z$;async function z$(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 KN([],[]);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=K$(e.schema,e.table),i=await Y$.openEnvironment(n,e.table),o=await $$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await W$(e,o)}catch(c){Q$.error(`unable to write transaction due to ${c.message}`)}return KN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(z$,"lmdbDeleteRecords");function KN(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(KN,"createDeleteResponse")});var fh=m((Xne,QN)=>{"use strict";var J$=A(),Jne=Ht();function Eh(e,t){let r=Object.create(null);if(t.length===1&&J$.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(Eh,"parseRow");function X$(e,t,r,s){let n=Eh(r,e);s.push(n)}a(X$,"searchAll");function Z$(e,t,r,s){let n=Eh(r,e);s[t]=n}a(Z$,"searchAllToMap");function j$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(j$,"iterateDBI");function ti(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ti,"pushResults");function eY(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(eY,"endsWith");function tY(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(tY,"contains");function rY(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(rY,"greaterThanCompare");function sY(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(sY,"greaterThanEqualCompare");function nY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(nY,"lessThanCompare");function iY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(iY,"lessThanEqualCompare");QN.exports={parseRow:Eh,searchAll:X$,searchAllToMap:Z$,iterateDBI:j$,endsWith:eY,contains:tY,greaterThanCompare:rY,greaterThanEqualCompare:sY,lessThanCompare:nY,lessThanEqualCompare:iY,pushResults:ti}});var Ji=m((rie,tb)=>{"use strict";var Sn=ye(),jne=x(),ur=Ht(),Sl=xe(),ke=rr().LMDB_ERRORS_ENUM,eie=V(),oY=A(),pl=fh(),{parseRow:aY}=pl,tie=require("lmdb"),{OVERFLOW_MARKER:zN,MAX_SEARCH_KEY_LENGTH:cY}=Sl;function JN(e,t,r,s=!1,n=void 0,i=void 0){return ri(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(JN,"iterateFullIndex");function La(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(La,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[Sl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ri,"setupTransaction");function XN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(zN)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[Sl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(XN,"getOverflowCheck");function uY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(Tl(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=>aY(l.value,r))))}a(uY,"searchAll");function lY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);Tl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of JN(e,t,t,s,n,i))o.set(c,pl.parseRow(u,r));return o}a(lY,"searchAllToMap");function _Y(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=JN(e,void 0,t,r,s,n),c=o.transaction,u=XN(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(_Y,"iterateDBI");function dY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(dY,"countAll");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,t,r,(c,u,l,_)=>(s=ur.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(EY,"equals");function fY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(fY,"count");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,null,r,(c,u)=>{s=ur.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(hY,"startsWith");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){return ZN(e,t,r,s,n,i,o,!0)}a(mY,"endsWith");function ZN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=XN(_,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(zN)?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[Sl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ZN,"contains");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!0,!1)}a(SY,"greaterThan");function pY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!1,!1)}a(pY,"greaterThanEqual");function TY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!0)}a(TY,"lessThan");function RY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!1)}a(RY,"lessThanEqual");function gY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.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=ur.convertKeyValueToWrite(s),n=ur.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(gY,"between");function AY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Tl(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=pl.parseRow(c,r)),o}a(AY,"searchByHash");function OY(e,t,r){ur.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(OY,"checkHashExists");function NY(e,t,r,s,n=[]){return eb(e,t,r,s,n),jN(e,t,r,s,n).map(i=>i[1])}a(NY,"batchSearchByHash");function bY(e,t,r,s,n=[]){eb(e,t,r,s,n);let i=new Map;for(let[o,c]of jN(e,t,r,s,n))i.set(o,c);return i}a(bY,"batchSearchByHashToMap");function jN(e,t,r,s,n=[]){return ri(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,pl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(jN,"batchHashSearch");function eb(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Tl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(eb,"initializeBatchSearchByHash");function Tl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Tl,"validateFetchAttributes");function pn(e,t,r){if(ur.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>cY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&oY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");tb.exports={searchAll:uY,searchAllToMap:lY,count:fY,countAll:dY,equals:EY,startsWith:hY,endsWith:mY,contains:ZN,searchByHash:AY,setGetWholeRowAttributes:Ma,batchSearchByHash:NY,batchSearchByHashToMap:bY,checkHashExists:OY,iterateDBI:_Y,greaterThan:SY,greaterThanEqual:pY,lessThan:TY,lessThanEqual:RY,between:gY}});var Xi=m((nie,ob)=>{var rb=require("lodash"),sb=Pe(),Ce=require("joi"),yY=V(),{hdb_schema_table:Rl,checkValidTable:nb,hdb_table:ib,hdb_database:gl}=rs(),{handleHDBError:IY,hdb_errors:wY}=W(),{getDatabases:CY}=(de(),re(Ne)),{HTTP_STATUS_CODES:UY}=wY,DY=Ce.object({database:gl,schema:gl,table:ib,search_attribute:Rl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(Rl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),LY=Ce.object({database:gl,schema:gl,table:ib,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(Rl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:Rl,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()});ob.exports=function(e,t){let r=null;switch(t){case"value":r=sb.validateBySchema(e,DY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(nb("database",e.schema)),i(nb("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=sb.validateBySchema(e,LY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=yY.checkGlobalSchemaTable(e.schema,e.table);if(n)return IY(new Error,n,UY.NOT_FOUND);let o=CY()[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=rb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!rb.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 hh=m((oie,ab)=>{"use strict";var MY=ye(),PY=Xi(),{getSchemaPath:vY}=we();ab.exports=BY;function BY(e){let t=PY(e,"hashes");if(t)throw t;let r=vY(e.schema,e.table);return MY.openEnvironment(r,e.table)}a(BY,"initialize")});var mh=m((cie,cb)=>{"use strict";var HY=Ji(),qY=hh();cb.exports=FY;async function FY(e){let t=await qY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return HY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(FY,"lmdbGetDataByHash")});var Zi=m((lie,ub)=>{"use strict";var Sh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ub.exports=Sh});var _b=m((Eie,lb)=>{"use strict";var die=Zi(),GY=Ji(),xY=hh();lb.exports=kY;async function kY(e){let t=await xY(e),r=global.hdb_schema[e.schema][e.table];return GY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(kY,"lmdbSearchByHash")});var os=m((hie,db)=>{"use strict";var ph=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=_}};db.exports=ph});var Al=m((Sie,pb)=>{"use strict";var Ct=Ji(),VY=ye(),$Y=V(),ie=xe(),si=A(),YY=Kn(),Eb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:KY}=we(),ks=si.SEARCH_WILDCARDS;async function WY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=YY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Sb(e,s.hash_attribute,r,t);return hb(e,n,s.hash_attribute,r)}a(WY,"prepSearch");async function hb(e,t,r,s){let n=KY(e.schema,e.table),i=await VY.openEnvironment(n,e.table),o=mb(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(QY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?fb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?fb(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(hb,"executeSearch");function mb(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(mb,"searchByType");function fb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(fb,"createMapFromIterable");function QY(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(QY,"checkToFetchMore");function Sb(e,t,r,s){if($Y.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),ks.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[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(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(Eb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Eb.UNKNOWN_SEARCH_TYPE)}}a(Sb,"createSearchTypeFromSearchObject");pb.exports={executeSearch:hb,createSearchTypeFromSearchObject:Sb,prepSearch:WY,searchByType:mb}});var Rb=m((Rie,Tb)=>{"use strict";var Tie=os(),zY=Xi(),JY=V(),XY=A(),ZY=Al();Tb.exports=jY;function jY(e,t){if(!JY.isEmpty(t)&&XY.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;let n=!0;return ZY.prepSearch(e,t,n)}a(jY,"lmdbGetDataByValue")});var Pa=m((Oie,gb)=>{"use strict";var Aie=os(),eK=Xi(),tK=V(),rK=A(),sK=Al();gb.exports=nK;async function nK(e,t){if(!tK.isEmpty(t)&&rK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=eK(e,"value");if(s)throw s;return sK.prepSearch(e,t,!1)}a(nK,"lmdbSearchByValue")});var Ob=m((yie,Ab)=>{"use strict";var bie=xe(),Th=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}},Rh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},gh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Ab.exports={SearchByConditionsObject:Th,SearchCondition:Rh,SortAttribute:gh}});var wb=m((Uie,Ib)=>{"use strict";var wie=Ob().SearchByConditionsObject,iK=os(),oK=Xi(),Ah=Ji(),Ol=xe(),{Resource:Cie}=(Zr(),re(xE)),yb=Al(),aK=fh(),cK=require("lodash"),{getSchemaPath:uK}=we(),Nb=ye(),{handleHDBError:lK,hdb_errors:_K}=W(),{HTTP_STATUS_CODES:dK}=_K,EK=1e8;Ib.exports=fK;async function fK(e){let t=oK(e,"conditions");if(t)throw lK(t,t.message,dK.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=uK(e.schema,e.table),s=await Nb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Nb.openDBI(s,l.search_attribute);let i=cK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Ol.SEARCH_TYPES.EQUALS?l.estimated_count=Ah.count(s,l.search_attribute,l.search_value):_===Ol.SEARCH_TYPES.CONTAINS||_===Ol.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=EK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await bb(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(yb.filterByType),d=_.length,E=Ah.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=>aK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await bb(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=Ah.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(fK,"lmdbSearchByConditions");async function bb(e,t,r,s){let n=new iK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ol.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,yb.searchByType(e,n,i,s).map(o=>o.value)}a(bb,"executeConditionSearch")});var va=m((Lie,Cb)=>{"use strict";var hK=A().OPERATIONS_ENUM,Oh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=hK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Cb.exports=Oh});var Nh=m((Pie,Hb)=>{"use strict";var Mb=os(),Pb=va(),vb=Pa(),Bb=Da(),Ft=A(),Ub=V(),Db=ye(),{getTransactionAuditStorePath:mK,getSchemaPath:SK}=we(),Lb=x();Hb.exports=pK;async function pK(e){try{if(Ub.isEmpty(global.hdb_schema[e.schema])||Ub.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await TK(e),await RK(e);let t=SK(e.schema,e.table);try{await Db.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Lb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=mK(e.schema,e.table);await Db.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Lb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pK,"lmdbDropTable");async function TK(e){let t=new Mb(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 vb(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 Pb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Bb(n)}a(TK,"deleteAttributesFromSystem");async function RK(e){let t=new Mb(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 vb(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 Pb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Bb(n)}catch(i){throw i}}a(RK,"dropTableFromSystem")});var Fb=m((Bie,qb)=>{"use strict";var gK=require("fs-extra"),AK=os(),OK=Zi(),NK=va(),bK=Nh(),yK=Da(),IK=mh(),wK=Pa(),Vs=A(),{getSchemaPath:CK}=we(),{handleHDBError:UK,hdb_errors:DK}=W(),{HDB_ERROR_MSGS:LK,HTTP_STATUS_CODES:MK}=DK;qb.exports=PK;async function PK(e){let t;try{t=await vK(e.schema);let r=new AK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await wK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await bK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new NK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yK(n);let i=CK(t);await gK.remove(i)}catch(r){throw r}}a(PK,"lmdbDropSchema");async function vK(e){let t=new OK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await IK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw UK(new Error,LK.SCHEMA_NOT_FOUND(e),MK.NOT_FOUND,void 0,void 0,!0);return s}a(vK,"validateDropSchema")});var yh=m((qie,Gb)=>{"use strict";var bh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Gb.exports=bh});var kb=m((xie,xb)=>{"use strict";var BK=require("fs-extra"),Nl=ye(),{getTransactionAuditStorePath:HK}=we(),Ih=xe(),Gie=yh();xb.exports=qK;async function qK(e){let t;try{let r=HK(e.schema,e.table);await BK.mkdirp(r),t=await Nl.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{Nl.createDBI(t,Ih.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Nl.createDBI(t,Ih.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Nl.createDBI(t,Ih.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(qK,"createTransactionsAuditEnvironment")});var Kb=m((Vie,Yb)=>{"use strict";var wh=A(),Vb=ye(),FK=Fi(),{getSystemSchemaPath:GK,getSchemaPath:xK}=we(),kK=Kn(),VK=Xu(),Ch=Ju(),$K=x(),YK=kb(),Dh=kK.hdb_table,$b=[];for(let e=0;e<Dh.attributes.length;e++)$b.push(Dh.attributes[e].attribute);Yb.exports=KK;async function KK(e,t){let r=xK(t.schema,t.table),s=new Ch(t.schema,t.table,wh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ch(t.schema,t.table,wh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ch(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Vb.createEnvironment(r,t.table),e!==void 0){let o=await Vb.openEnvironment(GK(),wh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await FK.insertRecords(o,Dh.hash_attribute,$b,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Uh(s),await Uh(n),await Uh(i)}await YK(t)}catch(o){throw o}}a(KK,"lmdbCreateTable");async function Uh(e){try{await VK(e)}catch(t){$K.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Uh,"createAttribute")});var Qb=m((Yie,Wb)=>{"use strict";var WK=pa(),QK=Oa(),zK=hl(),Ba=A(),JK=Fi().updateRecords,XK=ye(),{getSchemaPath:ZK}=we(),jK=Ca(),e1=x();Wb.exports=t1;async function t1(e){try{let{schema_table:t,attributes:r}=WK(e);QK(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 zK(e.hdb_auth_header,t,r),n=ZK(e.schema,e.table),i=await XK.openEnvironment(n,e.table),o=await JK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await jK(e,o)}catch(c){e1.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(t1,"lmdbUpdateRecords")});var Jb=m((Wie,zb)=>{"use strict";var r1=A().OPERATIONS_ENUM,Lh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=r1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};zb.exports=Lh});var Zb=m((Jie,Xb)=>{"use strict";var zie=Jb(),s1=pa(),n1=Oa(),i1=hl(),Ha=A(),o1=Fi().upsertRecords,a1=ye(),{getSchemaPath:c1}=we(),u1=Ca(),l1=x(),{handleHDBError:_1,hdb_errors:d1}=W();Xb.exports=E1;async function E1(e){let t;try{t=s1(e)}catch(u){throw _1(u,u.message,d1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;n1(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 i1(e.hdb_auth_header,r,s),i=c1(e.schema,e.table),o=await a1.openEnvironment(i,e.table),c=await o1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await u1(e,c)}catch(u){l1.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(E1,"lmdbUpsertRecords")});var ey=m((Zie,jb)=>{"use strict";var Mh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};jb.exports=Mh});var ry=m((eoe,ty)=>{"use strict";var Ph=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}};ty.exports=Ph});var iy=m((soe,ny)=>{"use strict";var vh=ye(),{getTransactionAuditStorePath:f1}=we(),roe=ey(),qa=xe(),h1=V(),sy=ry(),m1=require("util").promisify,S1=m1(setTimeout),p1=1e4,T1=100;ny.exports=R1;async function R1(e){let t=f1(e.schema,e.table),r=await vh.openEnvironment(t,e.table,!0),s=vh.listDBIs(r);vh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new sy;do n=await g1(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await S1(T1);while(n.transactions_deleted>0);return i}a(R1,"deleteAuditLogsBefore");async function g1(e,t){let r=new sy;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];h1.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>p1)break}return await n,r}catch(s){throw s}}a(g1,"deleteTransactions")});var ay=m((ioe,oy)=>{"use strict";var Bh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};oy.exports=Bh});var uy=m((coe,cy)=>{"use strict";var A1=os(),O1=va(),aoe=ay(),as=A(),N1=V(),Hh=ye(),b1=Kn(),y1=Pa(),I1=Da(),{getSchemaPath:w1}=we();cy.exports=C1;async function C1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=b1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await D1(e),n=w1(e.schema,e.table),i=await Hh.openEnvironment(n,e.table);return t===!0&&await U1(e,i,r.hash_attribute),Hh.dropDBI(i,e.attribute),s}a(C1,"lmdbDropAttribute");async function U1(e,t,r){let s=Hh.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(U1,"removeAttributeFromAllObjects");async function D1(e){let t=new A1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await y1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(N1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new O1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return I1(i)}a(D1,"dropAttributeFromSystem")});var hy=m((_oe,fy)=>{"use strict";var qh=ye(),ji=xe(),loe=Ht(),Fh=A(),ly=V(),{getTransactionAuditStorePath:L1}=we(),M1=Ji(),bl=Wi(),P1=x();fy.exports=v1;async function v1(e){let t=L1(e.schema,e.table),r=await qh.openEnvironment(t,e.table,!0),s=qh.listDBIs(r);qh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _y(r,e.search_values);case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,H1(r,e.search_values,n);case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return B1(r,e.search_values);default:return _y(r)}}a(v1,"readAuditLog");function _y(e,t=[0,Date.now()]){ly.isEmpty(t[0])&&(t[0]=0),ly.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 bl,n))}a(_y,"searchTransactionsByTimestamp");function B1(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,Ey(e,i))}return Object.fromEntries(r)}a(B1,"searchTransactionsByUsername");function H1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=M1.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=Ey(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);dy(u,"records",r,_,o),dy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(H1,"searchTransactionsByHashValues");function dy(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 bl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new bl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(dy,"loopRecords");function Ey(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 bl,i);r.push(o)}}catch(i){P1.warn(i)}return r}catch(s){throw s}}a(Ey,"batchSearchTransactions")});var Sy=m((hoe,my)=>{"use strict";var{getSchemaPath:Eoe}=we(),foe=ye(),{database:q1}=(de(),re(Ne));my.exports={writeTransaction:F1};async function F1(e,t,r){return q1({database:e,table:t}).transaction(r)}a(F1,"writeTransaction")});var gy=m((Soe,Ry)=>{"use strict";var{getSchemaPath:py}=we(),Ty=ye();Ry.exports={flush:G1,resetReadTxn:x1};async function G1(e,t){return(await Ty.openEnvironment(py(e,t),t.toString())).flushed}a(G1,"flush");async function x1(e,t){try{(await Ty.openEnvironment(py(e,t),t.toString())).resetReadTxn()}catch{}}a(x1,"resetReadTxn")});var by=m((Toe,Ny)=>{"use strict";var{Readable:k1}=require("stream"),{getDatabases:V1}=(de(),re(Ne)),{readSync:$1,openSync:Y1,createReadStream:Ay}=require("fs"),{open:K1}=require("lmdb"),Oy=Gu(),W1=ku(),{INTERNAL_DBIS_NAME:Q1}=xe();Ny.exports=J1;var Gh=32768,z1=100;async function J1(e){let t=e.database||e.schema||"data",r=V1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=K1({noSync:!0,maxDbs:W1.MAX_DBS}),E,f=d.openDB(Q1,new Oy(!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 Oy(!$,$);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++%z1===0&&await new Promise(je=>setTimeout(je,20))}await E;let p=Ay(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=Y1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Gh);$1(c,l,0,Gh);let _=o.useReadTransaction(),d=Ay(null,{fd:c,start:Gh}),E=new k1.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(J1,"getBackup")});var wy=m((goe,Iy)=>{"use strict";var X1=x(),{handleHDBError:Z1}=W(),j1=lA(),eW=Xu(),tW=uh(),rW=FN(),sW=Da(),nW=mh(),iW=_b(),oW=Rb(),aW=Pa(),cW=wb(),uW=Fb(),lW=Kb(),_W=Qb(),dW=Zb(),EW=iy(),fW=Nh(),hW=uy(),mW=hy(),SW=Sy(),yy=gy(),pW=by(),xh=class extends j1{static{a(this,"LMDBBridge")}async searchByConditions(t){return cW(t)}async getDataByHash(t){return await nW(t)}async searchByHash(t){return await iW(t)}async getDataByValue(t,r){return await oW(t,r)}async searchByValue(t){return await aW(t)}async createSchema(t){return await rW(t)}async dropSchema(t){return await uW(t)}async createTable(t,r){return await lW(t,r)}async dropTable(t){return await fW(t)}async createAttribute(t){return await eW(t)}async createRecords(t){return await tW(t)}async updateRecords(t){return await _W(t)}async upsertRecords(t){try{return await dW(t)}catch(r){throw Z1(r,null,null,X1.ERR,r)}}async deleteRecords(t){return await sW(t)}async dropAttribute(t){return await hW(t)}async deleteAuditLogsBefore(t){return await EW(t)}async readAuditLog(t){return await mW(t)}writeTransaction(t,r,s){return SW.writeTransaction(t,r,s)}flush(t,r){return yy.flush(t,r)}resetReadTxn(t,r){return yy.resetReadTxn(t,r)}getBackup(t){return pW(t)}};Iy.exports=xh});var Hy={};et(Hy,{ResourceBridge:()=>$h});function Yh({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 Uy(e,t){let r=cs(e),s=Yh(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&&Mu(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||RW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,TW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Dy(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*Ly(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 My,yl,Gr,Py,vy,kr,kh,Vh,By,TW,RW,gW,AW,Cy,$h,qy=Se(()=>{"use strict";My=C(wy()),yl=C(Xi()),Gr=C(W());de();Py=C(pa()),vy=C(Oa()),kr=C(A()),kh=C(xs()),Vh=C(Fr()),By=C(V());$n();Pu();({HDB_ERROR_MSGS:TW}=Gr.hdb_errors),RW="data",gW=1e4,AW=10,$h=class extends My.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Cy=this}async searchByConditions(t){let r=(0,yl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Yh(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}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){cs(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),kh.signalSchemaChange(new Vh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Kh(t.schema),kh.signalSchemaChange(new Vh.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,Cy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Py.default)(t);(0,vy.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=Mu(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 Dy(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,By.async_set_timeout)(AW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%gW===0&&await l();return u.length>0&&await l(),n?Dy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,yl.default)(t,"hashes");if(r)throw r;return Uy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Uy(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,yl.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Yh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Ly(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Ly(r,t.search_values?.[0],t.search_values?.[1])}}};a(Yh,"getSelect");a(Uy,"getRecords");a(cs,"getTable");a(Dy,"createDeleteResponse");a(Ly,"groupRecordsInHistory")});var qr=m((Ioe,Fy)=>{"use strict";var{ResourceBridge:OW}=(qy(),re(Hy)),NW=Q();NW.initSync();var Il;function bW(){return Il||(Il=new OW,Il)}a(bW,"getBridge");Fy.exports=bW()});var Vy=m((Coe,ky)=>{"use strict";var Gy=require("lodash"),Ga=require("mathjs"),yW=require("jsonata"),xy=V();ky.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Gy.uniqWith(e,Gy.isEqual):e,searchJSON:IW,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 IW(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(xy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xy.isEmpty(this.__ala__.res[r])){let s=yW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(IW,"searchJSON")});var Yy=m((Doe,$y)=>{"use strict";var We=require("moment"),Wh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;$y.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(Wh),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(Wh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Wh)}});var zy=m((Loe,Qy)=>{"use strict";var wW=require("@turf/area"),CW=require("@turf/length"),UW=require("@turf/circle"),DW=require("@turf/difference"),LW=require("@turf/distance"),MW=require("@turf/boolean-contains"),PW=require("@turf/boolean-equal"),vW=require("@turf/boolean-disjoint"),BW=require("@turf/helpers"),Ky=A(),le=V();Qy.exports={geoArea:HW,geoLength:qW,geoCircle:FW,geoDifference:GW,geoDistance:Wy,geoNear:xW,geoContains:kW,geoEqual:VW,geoCrosses:$W,geoConvert:YW};var Qh="geo1 is required",zh="geo2 is required";function HW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),wW.default(e)}a(HW,"geoArea");function qW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),CW.default(e,{units:t||"kilometers"})}a(qW,"geoLength");function FW(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)),UW.default(e,t,{units:r||"kilometers"})}a(FW,"geoCircle");function GW(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)),DW(e,t)}a(GW,"geoDifference");function Wy(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)),LW.default(e,t,{units:r||"kilometers"})}a(Wy,"geoDistance");function xW(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 Wy(e,t,s)<=r}a(xW,"geoNear");function kW(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),MW.default(e,t)}a(kW,"geoContains");function VW(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),PW.default(e,t)}a(VW,"geoEqual");function $W(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!vW.default(e,t)}a($W,"geoCrosses");function YW(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(Ky.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ky.GEO_CONVERSION_ENUM).join(",")}`);return BW[t](e,r)}a(YW,"geoConvert")});var wl=m((Poe,Jy)=>{var ni=Vy(),lr=Yy(),us=zy();Jy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=lr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=lr.current_time,e.fn.extract=e.fn.EXTRACT=lr.extract,e.fn.date=e.fn.DATE=lr.date,e.fn.date_format=e.fn.DATE_FORMAT=lr.date_format,e.fn.date_add=e.fn.DATE_ADD=lr.date_add,e.fn.date_sub=e.fn.DATE_SUB=lr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=lr.date_diff,e.fn.now=e.fn.NOW=lr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=lr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=lr.get_server_time,e.fn.getdate=e.fn.GETDATE=lr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=lr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var eI=m((voe,jy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var KW=wl(),Xy=require("clone"),Cl=require("recursive-iterator"),se=x(),ne=V(),eo=qr(),WW=A(),{hdb_errors:QW}=W(),{getDatabases:Zy}=(de(),re(Ne)),zW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";KW(pt);var Jh=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 Cl(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(Xy(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=Zy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Cl(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 Cl(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(WW.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(Xy(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(zW)>-1&&this.tables.forEach(n=>{let i={columnid:Zy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=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 Cl(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(QW.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)}};jy.exports=Jh});var Nr=m((Hoe,tI)=>{"use strict";var JW=cA();tI.exports={searchByConditions:ZW,searchByHash:jW,searchByValue:eQ,search:tQ};var Xh=qr(),{transformReq:Zh}=V(),XW=eI();async function ZW(e){return Zh(e),Xh.searchByConditions(e)}a(ZW,"searchByConditions");async function jW(e){Zh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Xh.searchByHash(e))r&&t.push(r);return t}a(jW,"searchByHash");async function eQ(e){Zh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Xh.searchByValue(e))t.push(r);return t}a(eQ,"searchByValue");function tQ(e,t){try{let r=new JW(e);r.validate(),new XW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(tQ,"search")});var Ul=m((Foe,rI)=>{"use strict";var rQ=qr();rI.exports={writeTransaction:sQ};function sQ(e,t,r){return rQ.writeTransaction(e,t,r)}a(sQ,"writeTransaction")});var oI=m((koe,iI)=>{"use strict";var nQ=Nr(),iQ=Gs(),sI=x(),oQ=br(),xoe=Ul(),aQ=require("clone"),em=require("alasql"),cQ=wl(),nI=require("util"),uQ=nI.promisify(iQ.getTableSchema),lQ=nI.promisify(nQ.search),_Q=A(),jh=V();cQ(em);iI.exports={update:EQ};var dQ="There was a problem performing this update. Please check the logs and try again.";async function EQ({statement:e,hdb_user:t}){let r=await uQ(e.table.databaseid,e.table.tableid),s=fQ(e.columns);jh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=aQ(n),c=jh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=em.parse(u).statements[0],_=await lQ(l),d=hQ(s,_);return mQ(o,d,t)}a(EQ,"update");function fQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=em.compile(`SELECT ${r.expression.toString()} AS [${_Q.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sI.error(t),new Error(dQ)}}a(fQ,"createUpdateRecord");function hQ(e,t){return jh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(hQ,"buildUpdateRecords");async function mQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await oQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(mQ,"updateRecords")});var cI=m((Koe,aI)=>{var SQ=require("alasql"),pQ=Nr(),TQ=x(),RQ=qr(),rm=require("util"),tm=V(),gQ=A(),AQ=Gs(),$oe=Ul(),Yoe=br(),OQ="record",NQ="successfully deleted",bQ=rm.callbackify(CQ),yQ=rm.promisify(pQ.search),IQ=rm.promisify(AQ.getTableSchema);aI.exports={convertDelete:bQ};function wQ(e){return`${e.deleted_hashes.length} ${OQ}${e.deleted_hashes.length===1?"":"s"} ${NQ}`}a(wQ,"generateReturnMessage");async function CQ({statement:e,hdb_user:t}){let r=await IQ(e.table.databaseid,e.table.tableid);tm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=tm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=SQ.parse(o).statements[0],u={operation:gQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await yQ(c);let l=await RQ.deleteRecords(u);return tm.isEmptyOrZeroLength(l.message)&&(l.message=wQ(l)),delete l.txn_time,l}catch(l){throw TQ.error(l),l.hdb_code?l.message:l}}a(CQ,"convertDelete")});var EI=m((Qoe,dI)=>{"use strict";var UQ=Qn(),{hdb_errors:uI}=W(),{getDatabases:lI}=(de(),re(Ne));dI.exports={checkSchemaExists:_I,checkSchemaTableExists:DQ,schema_describe:UQ};async function _I(e){if(!lI()[e])return uI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_I,"checkSchemaExists");async function DQ(e,t){let r=await _I(e);if(r)return r;if(!lI()[e][t])return uI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(DQ,"checkSchemaTableExists")});var Va=m((Joe,LQ)=>{LQ.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 vl={};et(vl,{addAnalyticsListener:()=>om,recordAction:()=>ls,recordActionBinary:()=>to,setAnalyticsEnabled:()=>MQ});function MQ(e){OI=e}function ls(e,t,r,s,n){if(!OI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Ml.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Ml.set(i,o)),Ll||PQ()}function to(e,t,r,s,n){ls(e?1:0,t,r,s,n)}function om(e){bI.push(e)}function PQ(){Ll=performance.now(),setTimeout(()=>{let e=performance.now()-Ll;Ll=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Ml)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of bI)n(t);Ml=new Map,ii.parentPort?ii.parentPort.postMessage({type:NI,report:r}):II({report:r})},im).unref()}async function vQ(e,t=6e4){let r=am(),s;for(let _ of r.primaryStore.getRange({start:Dl+"z",end:Dl,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 BQ()}for(let[_,d]of i)d.id=Dl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Dl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-fI,active:l-hI,time:c}),fI=u,hI=l}async function HQ(e,t){let r=am(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function am(){return mI||(mI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function FQ(){yI=!0,setInterval(async()=>{await vQ(im,nm),await HQ(qQ,im)},nm/2).unref()}function II(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(SI+=s.mean*s.count);r.totalBytesProcessed=SI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(pI.get(t))}),pI.set(t,t.performance.eventLoopUtilization())),r.id=(0,gI.getNextMonotonicTime)(),am().put(r),yI||FQ(),GQ&&(wI=kQ(r))}async function kQ(e){if(await wI,!Tn){let r=(0,$a.dirname)((0,RI.getLogFilePath)());try{Tn=await(0,sm.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,sm.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>xQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
6
6
  `,t)}var ii,TI,RI,$a,sm,gI,Pl,AI,Ml,nm,OI,Ll,im,NI,bI,Dl,fI,hI,BQ,qQ,mI,yI,SI,pI,GQ,wI,Tn,xQ,oi=Se(()=>{ii=require("worker_threads"),TI=C(dt());de();RI=C(x()),$a=require("path"),sm=require("fs/promises"),gI=C(Ht()),Pl=C(Q()),AI=C(A());Jr();(0,Pl.initSync)();Ml=new Map,nm=(0,Pl.get)(AI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,OI=nm>0;a(MQ,"setAnalyticsEnabled");a(ls,"recordAction");rt.recordAnalytics=ls;a(to,"recordActionBinary");Ll=0,im=1e3,NI="analytics-report",bI=[];a(om,"addAnalyticsListener");a(PQ,"sendAnalytics");Dl="sum-";a(vQ,"aggregation");fI=0,hI=0,BQ=a(()=>new Promise(setImmediate),"rest");a(HQ,"cleanup");qQ=36e5;a(am,"getAnalyticsTable");(0,TI.setChildListenerByType)(NI,II);a(FQ,"startScheduledTasks");SI=0,pI=new Map,GQ=!1;a(II,"recordAnalytics");xQ=1e6;a(kQ,"logAnalytics")});var Qe=m((lae,WI)=>{"use strict";var Tt=Q();Tt.initSync();var VQ=require("fs-extra"),$Q=require("semver"),Qa=require("path"),{monotonicFactory:YQ}=require("ulidx"),_m=YQ(),KQ=require("util"),UI=require("child_process"),WQ=KQ.promisify(UI.exec),QQ=UI.spawn,_e=Be(),Te=A(),Bl=V(),yr=x(),Hl=Fs(),zQ=Ul(),Ya=Rr(),{Encoder:JQ,decode:dm}=require("msgpackr"),DI=new JQ,{isEmpty:ai}=Bl,LI=ar(),MI=12e10,XQ=48*36e11,ZQ=5e9,{connect:jQ,StorageType:PI,RetentionPolicy:vI,AckPolicy:ql,DeliverPolicy:Fl,DiscardPolicy:ez,NatsConnection:oae,JetStreamManager:aae,JetStreamClient:cae,StringCodec:uae,JSONCodec:tz,createInbox:Em,headers:rz,ErrorCode:CI}=require("nats"),{PACKAGE_ROOT:sz}=A(),nz=Va(),{recordAction:iz}=(oi(),re(vl)),BI=tz(),oz="clustering",az=nz.engines[_e.NATS_SERVER_NAME],cz=Qa.join(sz,"dependencies"),lm=Qa.join(cz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),cm,um,Ka,ro,so;WI.exports={runCommand:HI,checkNATSServerInstalled:uz,createConnection:fm,getConnection:Gl,getJetStreamManager:za,getJetStream:qI,getNATSReferences:Gt,getServerList:_z,createLocalStream:hm,listStreams:FI,deleteLocalStream:dz,getServerConfig:Ja,listRemoteStreams:Ez,viewStream:fz,viewStreamIterator:hz,publishToStream:mz,createWorkQueueStream:Sz,addSourceToWorkStream:xI,request:Tz,removeSourceFromWorkStream:VI,reloadNATS:mm,reloadNATSHub:Rz,reloadNATSLeaf:gz,extractServerName:kI,requestErrorHandler:Az,updateWorkStream:Oz,createLocalTableStream:YI,createTableStreams:Nz,purgeTableStream:KI,purgeSchemaTableStreams:bz,getStreamInfo:yz,updateLocalStreams:wz,closeConnection:lz,getJsmServerName:Xa,addNatsMsgHeader:GI,updateIngestStreamConsumer:pz};async function HI(e,t=void 0){let{stdout:r,stderr:s}=await WQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
8
  `,"")}a(HI,"runCommand");async function uz(){try{await VQ.access(lm)}catch{return!1}let e=await HI(`${lm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return $Q.eq(t,az)}a(uz,"checkNATSServerInstalled");async function fm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await LI.getClusterUser();if(ai(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await jQ({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(fm,"createConnection");async function lz(){_s&&(await _s.drain(),_s=void 0,ro=void 0,so=void 0,Wa=void 0)}a(lz,"closeConnection");var _s,Wa;async function Gl(){return Wa||(Wa=fm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_s=await Wa),_s||Wa}a(Gl,"getConnection");async function za(){if(ro)return ro;ai(_s)&&await Gl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=await _s.jetstreamManager({domain:e}),ro}a(za,"getJetStreamManager");async function qI(){if(so)return so;ai(_s)&&await Gl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=_s.jetstream({domain:e}),so}a(qI,"getJetStream");async function Gt(){let e=_s||await Gl(),t=ro||await za(),r=so||await qI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function _z(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await LI.getClusterUser(),n=await fm(t,r,s),i=Em(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=BI.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 Bl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(_z,"getServerList");async function hm(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:PI.File,retention:vI.Limits,subjects:t,discard:ez.Old,duplicate_window:MI,max_msgs:n,max_bytes:i,max_age:s})}a(hm,"createLocalStream");async function FI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(FI,"listStreams");async function dz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(dz,"deleteLocalStream");async function Ez(e){let{connection:t}=await Gt(),r=[],s=Em(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(BI.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(Ez,"listRemoteStreams");async function fz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=_m(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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=dm(_.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(fz,"viewStream");async function*hz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=_m(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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 _=dm(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(hz,"viewStreamIterator");async function mz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=GI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:DI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),iz(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 $I(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 hm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(mz,"publishToStream");function GI(e,t){t===void 0&&(t=rz());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Bl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${_m()}`;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(GI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),oz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(um)&&(um={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}),um;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(cm)&&(cm={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}),cm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function Sz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:PI.File,retention:vI.Limits,duplicate_window:MI,max_age:XQ,max_bytes:ZQ,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:ql.Explicit,durable_name:e.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4});else throw s}}a(Sz,"createWorkQueueStream");async function pz(){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:ql.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4}))}a(pz,"updateIngestStreamConsumer");async function xI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=kI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Hl.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(xI,"addSourceToWorkStream");function kI(e){return e.split(".")[1]}a(kI,"extractServerName");async function VI(e,t,r){let{schema:s,table:n}=r,i=Hl.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(VI,"removeSourceFromWorkStream");async function Tz(e,t,r=2e4,s=Em()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=DI.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 dm(c.data)}a(Tz,"request");function mm(e){return new Promise(async(t,r)=>{let s=QQ(lm,["--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(mm,"reloadNATS");async function Rz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await mm(e)}a(Rz,"reloadNATSHub");async function gz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await mm(e)}a(gz,"reloadNATSLeaf");function Az(e,t,r){let s;switch(e.code){case CI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case CI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Az,"requestErrorHandler");async function Oz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await $I(async()=>{e.subscribe===!0?await xI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await VI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Oz,"updateWorkStream");function $I(e){return zQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a($I,"exclusiveLock");async function YI(e,t){let r=Hl.createNatsTableStreamName(e,t),s=await Xa(),n=Iz(e,t,s);await hm(r,[n])}a(YI,"createLocalTableStream");async function Nz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await YI(s,n)}}a(Nz,"createTableStreams");async function KI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Hl.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(KI,"purgeTableStream");async function bz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await KI(e,t[r])}a(bz,"purgeSchemaTableStreams");async function yz(e){return(await za()).streams.info(e)}a(yz,"getStreamInfo");function Iz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Iz,"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 wz(){let e=await za(),t=await Xa(),r=await FI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Cz(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(wz,"updateLocalStreams");function Cz(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(Cz,"updateStreamLimits")});var $l=m((Eae,XI)=>{"use strict";var no=zu(),io=EI(),Uz=x(),Dz=require("uuid").v4,dae=require("clone"),kl=xs(),oo=A(),Lz=require("util"),Rn=qr(),{handleHDBError:xt,hdb_errors:Mz}=W(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:kt}=Mz,{SchemaEventMsg:Vl}=Fr(),QI=Qe(),{getDatabases:Pz}=(de(),re(Ne)),{transformReq:ao}=V();XI.exports={createSchema:vz,createSchemaStructure:zI,createTable:Bz,createTableStructure:JI,createAttribute:xz,dropSchema:Hz,dropTable:qz,dropAttribute:Fz,getBackup:kz};async function vz(e){let t=await zI(e);return kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),t}a(vz,"createSchema");async function zI(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,xl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,xl.SCHEMA_EXISTS_ERR(e.schema),!0);return await Rn.createSchema(e),`database '${e.schema}' successfully created`}a(zI,"createSchemaStructure");async function Bz(e){return ao(e),await JI(e)}a(Bz,"createTable");async function JI(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,xl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,xl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Dz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Rn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await Rn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(JI,"createTableStructure");async function Hz(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 Rn.dropSchema(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),await QI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Hz,"dropSchema");async function qz(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 Rn.dropTable(e),await QI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(qz,"dropTable");async function Fz(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 Rn.dropAttribute(e),Gz(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Uz.error(`Got an error deleting attribute ${Lz.inspect(e)}.`),s}}a(Fz,"dropAttribute");function Gz(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(Gz,"dropAttributeFromGlobal");async function xz(e){ao(e);let t=Pz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await Rn.createAttribute(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(xz,"createAttribute");function kz(e){return Rn.getBackup(e)}a(kz,"getBackup")});var jI=m((hae,ZI)=>{"use strict";var{OPERATIONS_ENUM:Vz}=A(),Sm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Vz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};ZI.exports=Sm});var pm=m((pae,nw)=>{"use strict";var $z=qr(),Sae=jI(),Yl=V(),Kl=A(),Yz=Q(),{handleHDBError:ew,hdb_errors:Kz}=W(),{HDB_ERROR_MSGS:tw,HTTP_STATUS_CODES:rw}=Kz,Wz=Object.values(Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),sw="To use this operation audit log must be enabled in harperdb-config.yaml";nw.exports=Qz;async function Qz(e){if(Yl.isEmpty(e.schema))throw new Error(tw.SCHEMA_REQUIRED_ERR);if(Yl.isEmpty(e.table))throw new Error(tw.TABLE_REQUIRED_ERR);if(!Yz.get(Kl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ew(new Error,sw,rw.BAD_REQUEST,Kl.LOG_LEVELS.ERROR,sw,!0);let t=Yl.checkSchemaTableExist(e.schema,e.table);if(t)throw ew(new Error,t,rw.NOT_FOUND,Kl.LOG_LEVELS.ERROR,t,!0);if(!Yl.isEmpty(e.search_type)&&Wz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await $z.readAuditLog(e)}a(Qz,"readAuditLog")});var ow=m((Rae,iw)=>{"use strict";var{OPERATIONS_ENUM:zz}=A(),Tm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=zz.GET_BACKUP,this.schema=t,this.table=r}};iw.exports=Tm});var uw=m((Nae,cw)=>{"use strict";var Jz=qr(),Aae=ow(),Rm=V(),Xz=A(),Oae=Q(),{handleHDBError:Zz,hdb_errors:jz}=W(),{HDB_ERROR_MSGS:aw,HTTP_STATUS_CODES:eJ}=jz;cw.exports=tJ;async function tJ(e){if(Rm.isEmpty(e.schema))throw new Error(aw.SCHEMA_REQUIRED_ERR);if(Rm.isEmpty(e.table))throw new Error(aw.TABLE_REQUIRED_ERR);let t=Rm.checkSchemaTableExist(e.schema,e.table);if(t)throw Zz(new Error,t,eJ.NOT_FOUND,Xz.LOG_LEVELS.ERROR,t,!0);return await Jz.getBackup(read_audit_log_object)}a(tJ,"getBackup")});var hw=m((yae,fw)=>{var gn=require("validate.js"),_w=Pe(),co=A(),{handleHDBError:rJ,hdb_errors:sJ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:nJ}=sJ,gm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),iJ={STRUCTURE_USER:"structure_user"},lw=Object.values(co.ROLE_TYPES_ENUM),oJ="attribute_permissions",aJ="attribute_name",{PERMS_CRUD_ENUM:uo}=co,cJ=[oJ,...Object.values(uo)],dw=[uo.READ,uo.INSERT,uo.UPDATE],uJ=[aJ,...dw];function lJ(e){let t=gm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Ew(e,t)}a(lJ,"addRoleValidation");function _J(e){let t=gm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Ew(e,t)}a(_J,"alterRoleValidation");function dJ(e){let t=gm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,_w.validateObject(e,t)}a(dJ,"dropRoleValidation");var EJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Ew(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)EJ.includes(s[o])||n.push(s[o]);n.length>0&&ze(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=_w.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=fJ(e);o&&ze(o,r),lw.forEach(c=>{e.permission[c]&&!gn.isBoolean(e.permission[c])&&ze(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(lw.indexOf(o)<0){if(o===iJ.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]||ze(Ve.SCHEMA_NOT_FOUND(d),r)}continue}ze(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze(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]){ze(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{cJ.includes(_)||ze(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(uo).forEach(_=>{gn.isDefined(l[_])?gn.isBoolean(l[_])||ze(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze(Ve.TABLE_PERM_MISSING(_),r,o,u)}),gn.isDefined(l.attribute_permissions)){if(!gn.isArray(l.attribute_permissions)){ze(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze(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=>{!uJ.includes(T)&&T!==uo.DELETE&&ze(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!gn.isDefined(f.attribute_name)){ze(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}dw.forEach(T=>{gn.isDefined(f[T])?gn.isBoolean(f[T])||ze(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze(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}`;ze(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return hJ(r)}a(Ew,"customValidate");fw.exports={addRoleValidation:lJ,alterRoleValidation:_J,dropRoleValidation:dJ};function fJ(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(fJ,"validateNoSUPerms");function hJ(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 rJ(new Error,s,nJ.BAD_REQUEST)}else return null}a(hJ,"generateRolePermResponse");function ze(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(ze,"addPermError")});var Im=m((wae,Tw)=>{"use strict";var mw=br(),Sw=Nr(),mJ=jn(),Om=hw(),Nm=xs(),SJ=require("uuid").v4,pJ=require("util"),Wl=A(),TJ=V(),bm=Sw.searchByValue,RJ=Sw.searchByHash,gJ=pJ.promisify(mJ.delete),AJ=os(),OJ=Zi(),{hdb_errors:NJ,handleHDBError:lo}=W(),{HDB_ERROR_MSGS:pw,HTTP_STATUS_CODES:Ql}=NJ,{UserEventMsg:ym}=Fr();Tw.exports={addRole:bJ,alterRole:yJ,dropRole:IJ,listRoles:wJ};function Am(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(Am,"scrubRoleDetails");async function bJ(e){let t=Om.addRoleValidation(e);if(t)throw t;e=Am(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 bm(r)||[])}catch(i){throw lo(i)}if(s&&s.length>0)throw lo(new Error,pw.ROLE_ALREADY_EXISTS(e.role),Ql.CONFLICT,void 0,void 0,!0);e.id||(e.id=SJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await mw.insert(n),Nm.signalUserChange(new ym(process.pid)),e=Am(e),e}a(bJ,"addRole");async function yJ(e){let t=Om.alterRoleValidation(e);if(t)throw t;e=Am(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await mw.update(r)}catch(n){throw lo(n)}if(s&&s?.message==="updated 0 of 1 records")throw lo(new Error,"Invalid role id",Ql.BAD_REQUEST,void 0,void 0,!0);return await Nm.signalUserChange(new ym(process.pid)),e}a(yJ,"alterRole");async function IJ(e){let t=Om.dropRoleValidation(e);if(t)throw lo(new Error,t,Ql.BAD_REQUEST,void 0,void 0,!0);let r=new OJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await RJ(r));if(s.length===0)throw lo(new Error,pw.ROLE_NOT_FOUND,Ql.NOT_FOUND,void 0,void 0,!0);let n=new AJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await bm(n)),o=!1;if(TJ.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 gJ(c),Nm.signalUserChange(new ym(process.pid)),`${s[0].role} successfully deleted`}a(IJ,"dropRole");async function wJ(){return bm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(wJ,"listRoles")});var Ow=m((Uae,Aw)=>{"use strict";var CJ=Q(),An=require("joi"),UJ=Pe(),Rw=require("moment"),DJ=require("fs-extra"),wm=require("path"),LJ=require("lodash"),Za=A(),{LOG_LEVELS:ci}=A(),MJ="YYYY-MM-DD hh:mm:ss",PJ=wm.resolve(__dirname,"../logs");Aw.exports=function(e){return UJ.validateBySchema(e,vJ)};var vJ=An.object({from:An.custom(gw),until:An.custom(gw),level:An.valid(ci.NOTIFY,ci.FATAL,ci.ERROR,ci.WARN,ci.INFO,ci.DEBUG,ci.TRACE),order:An.valid("asc","desc"),limit:An.number().min(1),start:An.number().min(0),log_name:An.custom(BJ)});function gw(e,t){if(Rw(e,Rw.ISO_8601).format(MJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(gw,"validateDatetime");function BJ(e,t){if(LJ.invert(Za.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=CJ.get(Za.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Za.LOG_NAMES.HDB:e,i=n===Za.LOG_NAMES.INSTALL?wm.join(PJ,Za.LOG_NAMES.INSTALL):wm.join(s,n);return DJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(BJ,"validateReadLogPath")});var Um=m((Lae,bw)=>{"use strict";var zl=A(),HJ=x(),qJ=Q(),FJ=Ow(),Cm=require("path"),Nw=require("fs-extra"),{once:GJ}=require("events"),{handleHDBError:xJ,hdb_errors:kJ}=W(),{PACKAGE_ROOT:VJ}=A(),$J=Cm.join(VJ,"logs"),YJ=1e3,KJ=200;bw.exports=WJ;async function WJ(e){let t=FJ(e);if(t)throw xJ(t,t.message,kJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=qJ.get(zl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?zl.LOG_NAMES.HDB:e.log_name,n=s===zl.LOG_NAMES.INSTALL?Cm.join($J,zl.LOG_NAMES.INSTALL):Cm.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?YJ: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(Nw.statSync(n).size-(h+5)*KJ,0));let p=Nw.createReadStream(n,{start:T});p.on("error",b=>{HJ.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,je,au]=q,Mi=au.split("] ["),$o=Mi[0],qn=Mi[1];Mi.splice(0,2),$={timestamp:je,thread:$o,level:qn,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&&(On(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(On(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(On(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&&(On(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(On(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(On(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(On(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(On(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await GJ(p,"close"),O}a(WJ,"readLog");function On(e,t,r){t==="desc"?QJ(e,r):t==="asc"?zJ(e,r):r.push(e)}a(On,"pushLineToResult");function QJ(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(QJ,"insertDescending");function zJ(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(zJ,"insertAscending")});var Xl=m((Hae,Cw)=>{"use strict";var Dm=require("joi"),{string:Jl,boolean:yw,date:JJ}=Dm.types(),XJ=Pe(),{validateSchemaExists:Pae,validateTableExists:vae,validateSchemaName:Bae}=rs(),ZJ=A(),jJ=Be(),Iw=Q();Iw.initSync();var e2=Jl.invalid(Iw.get(ZJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(jJ.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(),ww={operation:Jl.valid("add_node","update_node"),node_name:e2,subscriptions:Dm.array().items({table:Jl.optional(),schema:Jl.required(),subscribe:yw.required(),publish:yw.required().custom(r2),start_time:JJ.iso()}).min(1).required()};function t2(e){return XJ.validateBySchema(e,Dm.object(ww))}a(t2,"addUpdateNodeValidator");function r2(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(r2,"checkForFalsy");Cw.exports={addUpdateNodeValidator:t2,validation_schema:ww}});var Dw=m((Fae,Uw)=>{var s2=Pe(),n2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Uw.exports=function(e){return s2.validateObject(e,n2)}});var Mm=m((Gae,Lw)=>{"use strict";var i2=A().OPERATIONS_ENUM,Lm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=i2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Lw.exports=Lm});var Pw=m((kae,Mw)=>{"use strict";var o2={OPERATION:"operation",REFRESH:"refresh"},Pm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},vm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Mw.exports={JWTTokens:Pm,TOKEN_TYPE_ENUM:o2,JWTRSAKeys:vm}});var tc=m(($ae,qw)=>{"use strict";var ec=require("jsonwebtoken"),Bm=require("fs-extra"),Hm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:a2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=a2,ja=x(),vw=cl(),Gm=ar(),c2=br().update,u2=Mm(),l2=xs(),{UserEventMsg:_2}=Fr(),Nn=Q();Nn.initSync();var qm=require("path"),{JWTTokens:d2,JWTRSAKeys:E2,TOKEN_TYPE_ENUM:Zl}=Pw(),f2=Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",h2=Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",jl="RS256",Fm;qw.exports={createTokens:m2,validateOperationToken:p2,refreshOperationToken:S2,validateRefreshToken:Hw};async function m2(e){if(Hm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Hm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Hm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Gm.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 e_(),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 Bw(i,r.private_key,r.passphrase),c=await ec.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:h2,algorithm:jl,subject:Zl.REFRESH}),u=vw.hash(c),l=new u2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await c2(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 l2.signalUserChange(new _2(process.pid)),new d2(o,c)}a(m2,"createTokens");async function Bw(e,t,r){return await ec.sign(e,{key:t,passphrase:r},{expiresIn:f2,algorithm:jl,subject:Zl.OPERATION})}a(Bw,"signOperationToken");async function e_(){if(Fm===void 0)try{let e=qm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=qm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=qm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Bm.readFile(e)).toString(),n=(await Bm.readFile(t)).toString(),i=(await Bm.readFile(r)).toString();Fm=new E2(i,n,s)}catch(e){throw ja.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Fm}a(e_,"getJWTRSAKeys");async function S2(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 Hw(e.refresh_token);let t=await e_(),r=await ec.decode(e.refresh_token);return{operation_token:await Bw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(S2,"refreshOperationToken");async function p2(e){try{let t=await e_(),r=await ec.verify(e,t.public_key,{algorithms:jl,subject:Zl.OPERATION});return await Gm.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(p2,"validateOperationToken");async function Hw(e){let t;try{let r=await e_(),s=await ec.verify(e,r.public_key,{algorithms:jl,subject:Zl.REFRESH});t=await Gm.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(!vw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Hw,"validateRefreshToken")});var xm=m((Wae,xw)=>{"use strict";var T2=Dw(),_o=require("passport"),R2=require("passport-local").Strategy,g2=require("passport-http").BasicStrategy,A2=require("util"),O2=ar(),Gw=A2.callbackify(O2.findAndValidateUser),Kae=rr(),N2=A(),Fw=tc();_o.use(new R2(function(e,t,r){Gw(e,t,r)}));_o.use(new g2(function(e,t,r){Gw(e,t,r)}));_o.serializeUser(function(e,t){t(null,e)});_o.deserializeUser(function(e,t){t(null,e)});function b2(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===N2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Fw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Fw.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(b2,"authorize");function y2(e,t){let r=T2(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(y2,"checkPermissions");xw.exports={authorize:b2,checkPermissions:y2}});var Eo=m((zae,kw)=>{"use strict";var km=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Vm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};kw.exports={Node:km,NodeSubscription:Vm}});var $w=m((Xae,Vw)=>{"use strict";var I2=A().OPERATIONS_ENUM,$m=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=I2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Vw.exports=$m});var rc=m((jae,Yw)=>{"use strict";var Ym=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Km=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};Yw.exports={RemotePayloadObject:Ym,RemotePayloadSubscription:Km}});var Ww=m((tce,Kw)=>{"use strict";var Wm=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};Kw.exports=Wm});var Jw=m((oce,zw)=>{"use strict";var w2=Ww(),sce=xe(),Qw=ye(),C2=x(),{getSchemaPath:nce,getTransactionAuditStorePath:ice}=we(),{getDatabases:U2}=(de(),re(Ne));zw.exports=D2;async function D2(e){let t=new w2;try{let r=U2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Qw.environmentDataSize(schema_path,e.name),o=await Qw.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){C2.warn(`unable to stat table dbi due to ${r}`)}return t}a(D2,"lmdbGetTableSize")});var Zw=m((cce,Xw)=>{"use strict";var Qm=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}};Xw.exports=Qm});var fo=m((dce,rC)=>{"use strict";var L2=require("fs-extra"),M2=require("path"),Ut=require("systeminformation"),bn=x(),P2=Qe(),zm=Be(),r_=A(),v2=Jw(),tC=Qn(),{getThreadInfo:jw}=dt(),iS=Q();iS.initSync();var B2=Zw(),{openEnvironment:lce}=ye(),{getSchemaPath:_ce}=we(),{database:H2}=(de(),re(Ne)),t_;rC.exports={getHDBProcessInfo:jm,getNetworkInfo:tS,getDiskInfo:eS,getMemoryInfo:Zm,getCPUInfo:Xm,getTimeInfo:Jm,getSystemInformation:rS,systemInformation:q2,getTableSize:sS,getMetrics:nS};function Jm(){return Ut.time()}a(Jm,"getTimeInfo");async function Xm(){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 bn.error(`error in getCPUInfo: ${e}`),{}}}a(Xm,"getCPUInfo");async function Zm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return bn.error(`error in getMemoryInfo: ${e}`),{}}}a(Zm,"getMemoryInfo");async function jm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await L2.readFile(M2.join(iS.get(r_.CONFIG_PARAMS.ROOTPATH),r_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===r_.NODE_ERROR_CODES.ENOENT)bn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return bn.error(`error in getHDBProcessInfo: ${t}`),e}}a(jm,"getHDBProcessInfo");async function eS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return bn.error(`error in getDiskInfo: ${t}`),e}}a(eS,"getDiskInfo");async function tS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return bn.error(`error in getNetworkInfo: ${t}`),e}}a(tS,"getNetworkInfo");async function rS(){if(t_!==void 0)return t_;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,t_=e,t_}catch(t){return bn.error(`error in getSystemInformation: ${t}`),e}}a(rS,"getSystemInformation");async function sS(){let e=[],t=await tC.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await v2(s));return e}a(sS,"getTableSize");async function nS(){let e=await tC.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=H2({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){bn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(nS,"getMetrics");async function eC(){if(iS.get(r_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await P2.getNATSReferences(),r=await t.streams.info(zm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(zm.WORK_QUEUE_CONSUMER_NAMES.stream_name,zm.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(eC,"getNatsStreamInfo");async function q2(e){let t=new B2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rS(),t.time=Jm(),t.cpu=await Xm(),t.memory=await Zm(),t.disk=await eS(),t.network=await tS(),t.harperdb_processes=await jm(),t.table_size=await sS(),t.metrics=await nS(),t.threads=await jw(),t.replication=await eC(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await rS();break;case"time":t.time=Jm();break;case"cpu":t.cpu=await Xm();break;case"memory":t.memory=await Zm();break;case"disk":t.disk=await eS();break;case"network":t.network=await tS();break;case"harperdb_processes":t.harperdb_processes=await jm();break;case"table_size":t.table_size=await sS();break;case"database_metrics":case"metrics":t.metrics=await nS();break;case"threads":t.threads=await jw();break;case"replication":t.replication=await eC();break;default:break}return t}a(q2,"systemInformation")});var oS=m((mce,sC)=>{"use strict";var fce=require("fs-extra"),hce=x();sC.exports={version:F2,printVersion:x2,nodeVersion:G2};var yn=Va();function F2(){if(yn)return yn.version}a(F2,"version");function G2(){if(yn&&yn.engines&&yn.engines["preferred-node"])return yn.engines["preferred-node"]}a(G2,"nodeVersion");function x2(){yn&&console.log(`HarperDB Version ${yn.version}`)}a(x2,"printVersion")});var $s=m((Rce,aC)=>{"use strict";var k2=br(),aS=V(),V2=require("util"),ui=A(),nC=Q();nC.initSync();var $2=xm(),iC=Nr(),{Node:pce,NodeSubscription:Tce}=Eo(),Y2=Zi(),K2=$w(),{RemotePayloadObject:W2,RemotePayloadSubscription:Q2}=rc(),{handleHDBError:z2,hdb_errors:J2}=W(),{HTTP_STATUS_CODES:X2,HDB_ERROR_MSGS:Z2}=J2,j2=os(),e3=fo(),t3=oS(),{getDatabases:r3}=(de(),re(Ne)),s3=V2.promisify($2.authorize),n3=iC.searchByHash,i3=iC.searchByValue;aC.exports={authHeaderToUser:o3,isEmpty:a3,getNodeRecord:c3,upsertNodeRecord:u3,buildNodePayloads:l3,checkClusteringEnabled:_3,getAllNodeRecords:d3,getSystemInfo:E3,reverseSubscription:oC};async function o3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await s3(t,null),e}a(o3,"authHeaderToUser");function a3(e){return e==null}a(a3,"isEmpty");async function c3(e){let t=new Y2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return n3(t)}a(c3,"getNodeRecord");async function u3(e){let t=new K2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return k2.upsert(t)}a(u3,"upsertNodeRecord");function oC(e){if(aS.isEmpty(e.subscribe)||aS.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(oC,"reverseSubscription");function l3(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,_=aS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=oC(c),f=r3()[u]?.[l],h=new Q2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new W2(r,t,n,s)}a(l3,"buildNodePayloads");function _3(){if(!nC.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw z2(new Error,Z2.CLUSTERING_NOT_ENABLED,X2.BAD_REQUEST,void 0,void 0,!0)}a(_3,"checkClusteringEnabled");async function d3(){let e=new j2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await i3(e))}a(d3,"getAllNodeRecords");async function E3(){let e=await e3.getSystemInformation();return{hdb_version:t3.version(),node_version:e.node_version,platform:e.platform}}a(E3,"getSystemInfo")});var cS=m((Ace,hC)=>{"use strict";var s_=Qe(),cC=V(),uC=Be(),lC=A(),n_=x(),_C=$l(),f3=yh(),{RemotePayloadObject:h3}=rc(),{handleHDBError:dC,hdb_errors:m3}=W(),{HTTP_STATUS_CODES:EC}=m3,{NodeSubscription:fC}=Eo();hC.exports=S3;async function S3(e,t){let r;try{r=await s_.request(`${t}.${uC.REQUEST_SUFFIX}`,new h3(lC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=s_.requestErrorHandler(o,"add_node",t);throw dC(new Error,c,EC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===uC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw dC(new Error,o,EC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===lC.SYSTEM_SCHEMA_NAME){await s_.createLocalTableStream(c,u);let h=new fC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=cC.doesSchemaExist(c),_=s[c]!==void 0,d=u?cC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(n_.trace(`addNode creating schema: ${c}`),await _C.createSchema({operation:"create_schema",schema:c})),!d&&E){n_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new f3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await _C.createTable(h)}await s_.createLocalTableStream(c,u);let f=new fC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(S3,"reviewSubscriptions")});var a_=m((Nce,pC)=>{"use strict";var{handleHDBError:i_,hdb_errors:p3}=W(),{HTTP_STATUS_CODES:o_}=p3,{addUpdateNodeValidator:T3}=Xl(),sc=x(),SC=A(),mC=Be(),R3=V(),uS=Qe(),nc=$s(),g3=Q(),A3=cS(),{Node:O3,NodeSubscription:N3}=Eo(),{broadcast:b3}=dt(),y3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",I3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w3=g3.get(SC.CONFIG_PARAMS.CLUSTERING_NODENAME);pC.exports=C3;async function C3(e,t=!1){sc.trace("addNode called with:",e),nc.checkClusteringEnabled();let r=T3(e);if(r)throw i_(r,r.message,o_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await nc.getNodeRecord(s);if(!R3.isEmptyOrZeroLength(d))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await A3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=y3,o;let c=nc.buildNodePayloads(n,w3,SC.OPERATIONS_ENUM.ADD_NODE,await nc.getSystemInfo());sc.trace("addNode sending remote payload:",c);let u;try{u=await uS.request(`${s}.${mC.REQUEST_SUFFIX}`,c)}catch(d){sc.error(`addNode received error from request: ${d}`);let E=uS.requestErrorHandler(d,"add_node",s);throw i_(new Error,E,o_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===mC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw i_(new Error,d,o_.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 uS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new N3(f.schema,f.table,f.publish,f.subscribe))}let _=new O3(s,l,u.system_info);return await nc.upsertNodeRecord(_),b3({type:"nats_update"}),i.length>0?o.message=I3:o.message=`Successfully added '${s}' to manifest`,o}a(C3,"addNode")});var _S=m((yce,gC)=>{"use strict";var{handleHDBError:c_,hdb_errors:U3}=W(),{HTTP_STATUS_CODES:u_}=U3,{addUpdateNodeValidator:D3}=Xl(),ic=x(),RC=A(),TC=Be(),L3=V(),lS=Qe(),oc=$s(),M3=Q(),{cloneDeep:P3}=require("lodash"),v3=cS(),{NodeSubscription:B3}=Eo(),{broadcast:H3}=dt(),q3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",F3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",G3=M3.get(RC.CONFIG_PARAMS.CLUSTERING_NODENAME);gC.exports=x3;async function x3(e){ic.trace("updateNode called with:",e),oc.checkClusteringEnabled();let t=D3(e);if(t)throw c_(t,t.message,u_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=P3(await oc.getNodeRecord(r));if(L3.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 v3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=q3,o;let c=oc.buildNodePayloads(n,G3,RC.OPERATIONS_ENUM.UPDATE_NODE,await oc.getSystemInfo());ic.trace("updateNode sending remote payload:",c);let u;try{u=await lS.request(`${r}.${TC.REQUEST_SUFFIX}`,c)}catch(l){ic.error(`updateNode received error from request: ${l}`);let _=lS.requestErrorHandler(l,"update_node",r);throw c_(new Error,_,u_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===TC.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)}ic.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];ic.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await lS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await k3(s[0],n,u.system_info),i.length>0?o.message=F3:o.message=`Successfully updated '${r}'`,o}a(x3,"updateNode");async function k3(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 B3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await oc.upsertNodeRecord(s),H3({type:"nats_update"})}a(k3,"updateNodeTable")});var yC=m((wce,bC)=>{"use strict";var NC=require("joi"),{string:AC}=NC.types(),V3=Pe(),OC=A(),$3=Q(),Y3=Be();bC.exports=K3;function K3(e){let t=AC.invalid($3.get(OC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Y3.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=NC.object({operation:AC.valid(OC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return V3.validateBySchema(e,r)}a(K3,"removeNodeValidator")});var __=m((Uce,LC)=>{"use strict";var{handleHDBError:IC,hdb_errors:W3}=W(),{HTTP_STATUS_CODES:wC}=W3,Q3=yC(),ac=x(),CC=$s(),z3=V(),l_=A(),UC=Be(),DC=Qe(),J3=Q(),{RemotePayloadObject:X3}=rc(),{NodeSubscription:Z3}=Eo(),j3=va(),eX=jn(),{broadcast:tX}=dt(),rX=J3.get(l_.CONFIG_PARAMS.CLUSTERING_NODENAME);LC.exports=sX;async function sX(e){ac.trace("removeNode called with:",e),CC.checkClusteringEnabled();let t=Q3(e);if(t)throw IC(t,t.message,wC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await CC.getNodeRecord(r);if(z3.isEmptyOrZeroLength(s))throw IC(new Error,`Node '${r}' was not found.`,wC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new X3(l_.OPERATIONS_ENUM.REMOVE_NODE,rX,[]),i,o=!1;try{i=await DC.request(`${r}.${UC.REQUEST_SUFFIX}`,n),ac.trace("Remove node reply from remote node:",r,i)}catch(u){ac.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];ac.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new Z3(_.schema,_.table,!1,!1);await DC.updateWorkStream(d,r)}let c=new j3(l_.SYSTEM_SCHEMA_NAME,l_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await eX.deleteRecord(c),tX({type:"nats_update"}),i?.status===UC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ac.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(sX,"removeNode")});var vC=m((Lce,PC)=>{"use strict";var MC=require("joi"),{string:nX,array:iX}=MC.types(),oX=Pe(),aX=Xl();PC.exports=cX;function cX(e){let t=MC.object({operation:nX.valid("configure_cluster").required(),connections:iX.items(aX.validation_schema).required()});return oX.validateBySchema(e,t)}a(cX,"configureClusterValidator")});var dS=m((Pce,GC)=>{"use strict";var uX=A(),d_=x(),lX=V(),_X=__(),dX=a_(),BC=$s(),EX=vC(),{handleHDBError:HC,hdb_errors:fX}=W(),{HTTP_STATUS_CODES:qC}=fX,hX="Configure cluster complete.",mX="Failed to configure the cluster. Check the logs for more details.",SX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";GC.exports=pX;async function pX(e){d_.trace("configure cluster called with:",e),BC.checkClusteringEnabled();let t=EX(e);if(t)throw HC(t,t.message,qC.BAD_REQUEST,void 0,void 0,!0);let r=await BC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(FC(_X,{operation:uX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);d_.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(FC(dX,f,f.node_name))}let c=await Promise.allSettled(i);d_.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"&&(d_.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(lX.isEmptyOrZeroLength(u))return{message:hX,connections:l};if(_)return{message:SX,failed_nodes:u,connections:l};throw HC(new Error,mX,qC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(pX,"configureCluster");async function FC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(FC,"functionWrapper")});var kC=m((Bce,xC)=>{"use strict";var E_=require("joi"),TX=Pe(),{validateSchemaExists:RX,validateTableExists:gX,validateSchemaName:AX}=rs(),OX=E_.object({operation:E_.string().valid("purge_stream"),schema:E_.string().custom(RX).custom(AX).required(),table:E_.string().custom(gX).required()});function NX(e){return TX.validateBySchema(e,OX)}a(NX,"purgeStreamValidator");xC.exports=NX});var ES=m((qce,VC)=>{"use strict";var{handleHDBError:bX,hdb_errors:yX}=W(),{HTTP_STATUS_CODES:IX}=yX,wX=kC(),CX=Qe(),UX=$s();VC.exports=DX;async function DX(e){let t=wX(e);if(t)throw bX(t,t.message,IX.BAD_REQUEST,void 0,void 0,!0);UX.checkClusteringEnabled();let{schema:r,table:s}=e;return await CX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(DX,"purgeStream")});var mS=m((Gce,zC)=>{"use strict";var hS=$s(),LX=Qe(),KC=Q(),f_=A(),li=Be(),MX=V(),fS=x(),{RemotePayloadObject:PX}=rc(),{ErrorCode:$C}=require("nats"),YC=KC.get(f_.CONFIG_PARAMS.CLUSTERING_ENABLED),WC=KC.get(f_.CONFIG_PARAMS.CLUSTERING_NODENAME);zC.exports={clusterStatus:vX,buildNodeStatus:QC};async function vX(){let e={node_name:WC,is_enabled:YC,connections:[]};if(!YC)return e;let t=await hS.getAllNodeRecords();if(MX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(QC(t[s],e.connections));return await Promise.allSettled(r),e}a(vX,"clusterStatus");async function QC(e,t){let r=e.name,s=new PX(f_.OPERATIONS_ENUM.CLUSTER_STATUS,WC,void 0,await hS.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await LX.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,fS.error(`Error getting node status from ${r} `,n))}catch(u){fS.warn(`Error getting node status from ${r}`,u),u.code===$C.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===$C.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new BX(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!==f_.PRE_4_0_0_VERSION&&await hS.upsertNodeRecord(u)}catch(u){fS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(QC,"buildNodeStatus");function BX(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(BX,"NodeStatusObject")});var pS=m((kce,JC)=>{"use strict";var{handleHDBError:HX,hdb_errors:qX}=W(),{HTTP_STATUS_CODES:FX}=qX,GX=Qe(),xX=$s(),SS=V(),h_=require("joi"),kX=Pe(),VX=2e3,$X=h_.object({timeout:h_.number().min(1),connected_nodes:h_.boolean(),routes:h_.boolean()});JC.exports=YX;async function YX(e){xX.checkClusteringEnabled();let t=kX.validateBySchema(e,$X);if(t)throw HX(t,t.message,FX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||SS.autoCastBoolean(s),o=n===void 0||SS.autoCastBoolean(n),c={nodes:[]},u=await GX.getServerList(r??VX),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:SS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(YX,"clusterNetwork")});var eU=m(($ce,jC)=>{"use strict";var TS=require("joi"),XC=Pe(),{route_constraints:ZC}=wE();jC.exports={setRoutesValidator:KX,deleteRoutesValidator:WX};function KX(e){let t=TS.object({server:TS.valid("hub","leaf").required(),routes:ZC.required()});return XC.validateBySchema(e,t)}a(KX,"setRoutesValidator");function WX(e){let t=TS.object({routes:ZC.required()});return XC.validateBySchema(e,t)}a(WX,"deleteRoutesValidator")});var gS=m((Kce,nU)=>{"use strict";var _i=Rr(),RS=V(),m_=A(),tU=eU(),{handleHDBError:rU,hdb_errors:QX}=W(),{HTTP_STATUS_CODES:sU}=QX,zX="cluster routes successfully set",JX="cluster routes successfully deleted";nU.exports={setRoutes:XX,getRoutes:ZX,deleteRoutes:jX};function XX(e){let t=tU.setRoutesValidator(e);if(t)throw rU(t,t.message,sU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=RS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:zX,set:o,skipped:i}}a(XX,"setRoutes");function ZX(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(ZX,"getRoutes");function jX(e){let t=tU.deleteRoutesValidator(e);if(t)throw rU(t,t.message,sU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=RS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=RS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:JX,deleted:i,skipped:o}}a(jX,"deleteRoutes")});var oU=m((Qce,iU)=>{"use strict";var cc=require("alasql"),di=require("recursive-iterator"),$r=x(),e4=V(),uc=A(),AS=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,r4(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=>uc.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=>!uc.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][uc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=t4(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=>!uc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new cc.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 t4(e){return e.filter(t=>t[uc.PERMS_CRUD_ENUM.READ])}a(t4,"filterReadRestrictedAttrs");function r4(e,t,r,s,n){s4(e,t,r,s,n)}a(r4,"interpretAST");function lc(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(lc,"addSchemaTableToMap");function s4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof cc.yy.Insert?a4(e,t,r):e instanceof cc.yy.Select?n4(e,t,r,s,n):e instanceof cc.yy.Update?i4(e,t,r):e instanceof cc.yy.Delete?o4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(s4,"getRecordAttributesAST");function n4(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(e4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{lc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),lc(c.table,t,r,s,n)});let o=new di(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new di(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new di(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new di(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(n4,"getSelectAttributes");function i4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;lc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(i4,"getUpdateAttributes");function o4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;lc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(o4,"getDeleteAttributes");function a4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;lc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.into.tableid,n,i.columnid,t,r)}a(a4,"getInsertAttributes");function OS(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(OS,"pushAttribute");iU.exports=AS});var yS=m((Jce,lU)=>{var S_=ba(),aU=require("chalk"),_r=x(),cU=require("prompt"),{promisify:c4}=require("util"),NS=A(),u4=require("fs-extra"),l4=require("path"),_4=V(),d4=oS(),uU=Q();uU.initSync();var E4=require("moment"),f4=c4(cU.get),h4=l4.join(uU.getHdbBasePath(),NS.LICENSE_KEY_DIR_NAME,NS.LICENSE_FILE_NAME,NS.LICENSE_FILE_NAME);lU.exports={getFingerprint:S4,setLicense:m4,parseLicense:bS,register:p4,getRegistrationInfo:R4};async function m4(e){if(e&&e.key&&e.company){try{_r.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await bS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _r.error(r),_r.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(m4,"setLicense");async function S4(){let e={};try{e=await S_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _r.error(r),_r.error(t),new Error(r)}return e}a(S4,"getFingerprint");async function bS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_r.info("Validating license input...");let r=S_.validateLicense(e,t);if(_r.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_r.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_r.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_r.info("writing license to disk"),await u4.writeFile(h4,JSON.stringify({license_key:e,company:t}))}catch(s){throw _r.error("Failed to write License"),s}return"Registration successful."}a(bS,"parseLicense");async function p4(){let e=await T4();return bS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(p4,"register");async function T4(){let e=await S_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:aU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:aU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{cU.start()}catch(s){_r.error(s)}let r;try{r=await f4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(T4,"promptForRegistration");async function R4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await S_.getLicense()}catch(r){throw _r.error(`There was an error when searching licenses due to: ${r.message}`),r}if(_4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=d4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=E4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(R4,"getRegistrationInfo")});var dU=m((Zce,_U)=>{"use strict";var g4=Be(),IS=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+g4.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"}};_U.exports=IS});var hU=m((eue,fU)=>{"use strict";var EU=Be(),wS=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+EU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+EU.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"}};fU.exports=wS});var SU=m((rue,mU)=>{"use strict";var CS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};mU.exports=CS});var TU=m((nue,pU)=>{"use strict";var A4=Be(),US=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+A4.SERVER_SUFFIX.ADMIN,this.password=r}};pU.exports=US});var MS=m((oue,AU)=>{"use strict";var _c=require("path"),g_=require("fs-extra"),O4=dU(),N4=hU(),b4=SU(),y4=TU(),DS=ar(),ho=V(),Kt=Rr(),R_=A(),p_=Be(),{CONFIG_PARAMS:Je}=R_,Ec=x(),A_=Q(),RU=Fs(),LS=Qe(),dc="clustering",I4=1e4,gU=5;AU.exports={generateNatsConfig:w4,removeNatsConfig:C4};async function w4(e=!1,t=void 0){A_.initSync();let r=A_.get(Je.ROOTPATH),s=_c.join(r,dc,p_.PID_FILES.HUB),n=_c.join(r,dc,p_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_c.join(r,dc,p_.NATS_CONFIG_FILES.HUB_SERVER),c=_c.join(r,dc,p_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await LS.checkNATSServerInstalled()||O_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await DS.listUsers(),p=Kt.getConfigFromFile(Je.CLUSTERING_USER),R=await DS.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_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await T_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await T_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await T_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,je]of T.entries())je.role.role===R_.ROLE_TYPES_ENUM.CLUSTER_USER&&je.active&&(O.push(new y4(je.username,RU.decrypt(je.hash))),k.push(new b4(je.username,RU.decrypt(je.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 O4(Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(Je.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),Ec.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 N4(Kt.getConfigFromFile(Je.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),Ec.trace(`Leaf server config written to ${c}`))}a(w4,"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}`;Ec.error(t),console.error(t),process.exit(1)}a(O_,"generateNatsConfigError");async function C4(e){let{port:t,config_file:r}=LS.getServerConfig(e),{username:s,decrypt_hash:n}=await DS.getClusterUser(),i=0,o=500;for(;i<gU;){try{let l=await LS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Ec.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=gU)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(I4),u=_c.join(A_.get(Je.ROOTPATH),dc,r);await g_.writeFile(u,c),await g_.remove(u),Ec.notify(e,"started.")}a(C4,"removeNatsConfig")});var wU=m((cue,IU)=>{"use strict";var dr=Q(),U4=ba(),oe=A(),fc=Be(),Ys=require("path"),{PACKAGE_ROOT:b_}=A(),OU=Q(),N_=V(),mo="/dev/null",D4=Ys.join(b_,"launchServiceScripts"),NU=Ys.join(b_,"utility/scripts"),L4=Ys.join(NU,oe.HDB_RESTART_SCRIPT),bU=Ys.resolve(b_,"dependencies",`${process.platform}-${process.arch}`,fc.NATS_BINARY_NAME);function yU(){let t=U4.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(yU,"generateMainServerConfig");var M4=9930;function P4(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",fc.NATS_CONFIG_FILES.HUB_SERVER),r=Ys.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=OU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=fc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==M4?"-"+s:""),script:bU,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 dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(P4,"generateNatsHubServerConfig");var v4=9940;function B4(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",fc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ys.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=OU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=fc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==v4?"-"+s:""),script:bU,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 dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(B4,"generateNatsLeafServerConfig");function H4(){dr.initSync();let e=Ys.join(dr.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:D4,autorestart:!1};return dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mo,t.error_file=mo),t}a(H4,"generateClusteringUpgradeV4ServiceConfig");function q4(){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:NU},script:L4}}a(q4,"generateRestart");function F4(){return{apps:[yU()]}}a(F4,"generateAllServiceConfigs");IU.exports={generateAllServiceConfigs:F4,generateMainServerConfig:yU,generateRestart:q4,generateNatsHubServerConfig:P4,generateNatsLeafServerConfig:B4,generateClusteringUpgradeV4ServiceConfig:H4}});var VU=m((hue,kU)=>{"use strict";var Re=A(),G4=V(),hc=MS(),mc=Qe(),ds=Be(),In=wU(),y_=Q(),Ks=x(),x4=$s(),{startWorker:CU,onMessageFromWorkers:k4}=dt(),V4=fo(),$4=require("util"),DU=require("child_process"),{execFile:Y4}=DU,lue=$4.promisify(DU.exec),_ue=require("systeminformation"),fe;kU.exports={enterPM2Mode:K4,start:Ei,stop:PS,reload:LU,restart:MU,list:vS,describe:vU,connect:Ws,kill:X4,startAllServices:Z4,startService:BS,getUniqueServicesList:BU,restartAllServices:j4,isServiceRegistered:HU,reloadStopStart:qU,restartHdb:PU,deleteProcess:z4,startClusteringProcesses:GU,startClusteringThreads:xU,isHdbRestartRunning:J4,isClusteringRunning:tZ,stopClustering:eZ,reloadClustering:rZ};var{PACKAGE_ROOT:due}=A(),Eue=A(),{loggerWithTag:fue}=Ks,Sc=!1;k4(e=>{e.type==="restart"&&y_.initSync(!0)});function K4(){Sc=!0}a(K4,"enterPM2Mode");function Ws(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ks.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ws,"connect");var Wt,W4=10,UU;function Ei(e){if(Sc)return Q4(e);let t=Y4(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),!UU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<W4&&Ei(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&&ds.LOG_LEVEL_HIERARCHY[i]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ds.LOG_LEVELS[d]}if(ds.LOG_LEVEL_HIERARCHY[i]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.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(()=>{UU=!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(Ei,"start");function Q4(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Q4,"startWithPM2");function PS(e){if(!Sc){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 Ws()}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(PS,"stop");function LU(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(LU,"reload");function MU(e){if(!Sc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(MU,"restart");function z4(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(z4,"deleteProcess");async function PU(){await Ei(In.generateRestart())}a(PU,"restartHdb");async function J4(){let e=await vS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(J4,"isHdbRestartRunning");function vS(){return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(vS,"list");function vU(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(vU,"describe");function X4(){if(!Sc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(X4,"kill");async function Z4(){try{await GU(),await xU(),await Ei(In.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(Z4,"startAllServices");async function BS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=In.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=In.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=In.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=In.generateNatsHubServerConfig(),await Ei(t),await hc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=In.generateNatsLeafServerConfig(),await Ei(t),await hc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=In.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ei(t)}catch(t){throw fe.disconnect(),t}}a(BS,"startService");async function BU(){try{let e=await vS(),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(BU,"getUniqueServicesList");async function j4(e=[]){try{let t=!1,r=await BU();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 MU(o))}t&&await qU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(j4,"restartAllServices");async function HU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await V4.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(HU,"isServiceRegistered");async function qU(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 vU(e),s=G4.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await PS(e),await BS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await PU():await LU(e)}a(qU,"reloadStopStart");var FU;async function GU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await BS(t)}}a(GU,"startClusteringProcesses");async function xU(){FU=CU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await mc.createWorkQueueStream(ds.WORK_QUEUE_CONSUMER_NAMES),await mc.updateIngestStreamConsumer(),await mc.updateLocalStreams();let e=await x4.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ks.info("Starting clustering upgrade 4.0.0 process"),CU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(xU,"startClusteringThreads");async function eZ(){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 FU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await PS(t)}}a(eZ,"stopClustering");async function tZ(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await HU(t)===!1)return!1}return!0}a(tZ,"isClusteringRunning");async function rZ(){await hc.generateNatsConfig(!0),await mc.reloadNATSHub(),await mc.reloadNATSLeaf(),await hc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(rZ,"reloadClustering")});var VS=m((Sue,zU)=>{"use strict";var sZ=require("minimist"),{isMainThread:FS,parentPort:KU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:pc}=He,Es=x(),GS=V(),I_=MS(),So=Qe(),HS=Be(),WU=Rr(),hs=VU(),$U=fo(),nZ=SE(),{restartWorkers:w_,onMessageByType:iZ}=dt(),{handleHDBError:oZ,hdb_errors:aZ}=W(),{HTTP_STATUS_CODES:cZ}=aZ,C_=Q();C_.initSync();var Tc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,uZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",YU="Clustering is not enabled so cannot be restarted",lZ="Invalid service",fi,Yr;zU.exports={restart:QU,restartService:xS};FS&&iZ(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?xS({service:e.workerType}):QU({operation:"restart"})});async function QU(e){Yr=Object.keys(e).length===0,fi=await hs.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=sZ(process.argv);if(t.service){await xS(t);return}if(Yr&&!fi){console.error(uZ);return}if(Yr&&console.log(Tc),fi){hs.enterPM2Mode(),Es.notify(Tc);let r=nZ(Object.keys(He.CONFIG_PARAM_MAP),!0);return GS.isEmptyOrZeroLength(Object.keys(r))||WU.updateConfigValue(void 0,void 0,r,!0,!0),dZ(),Tc}return FS?(Es.notify(Tc),await kS(),setTimeout(()=>{w_()},50)):KU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),Tc}a(QU,"restart");async function xS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw oZ(new Error,lZ,cZ.BAD_REQUEST,void 0,void 0,!0);if(fi=await hs.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!FS)return KU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case pc.clustering:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=YU;break}Yr&&console.log("Restarting clustering"),Es.notify("Restarting clustering"),await kS();break;case pc.clustering_config:case pc["clustering config"]:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=YU;break}Yr&&console.log("Restarting clustering_config"),Es.notify("Restarting clustering_config"),await hs.reloadClustering();break;case"custom_functions":case"custom functions":case pc.harperdb:case pc.http_workers:if(Yr&&!fi){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"),Es.notify("Restarting http_workers"),fi?await hs.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{w_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Es.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(xS,"restartService");async function _Z(){await So.publishToStream(`${HS.SUBJECT_PREFIXES.TXN}.${HS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,HS.WORK_QUEUE_CONSUMER_NAMES.stream_name,So.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_Z,"postDummyNatsMsg");async function dZ(){await kS(),await hs.restart(He.HDB_PROC_DESCRIPTOR),await GS.async_set_timeout(2e3),C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await qS(),Yr&&(await So.closeConnection(),process.exit(0))}a(dZ,"restartPM2Mode");async function kS(){if(!WU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await $U.getHDBProcessInfo()).clustering.length===0)Es.trace("Clustering not running, restart will start clustering services"),await I_.generateNatsConfig(!0),await hs.startClusteringProcesses(),await hs.startClusteringThreads(),await qS(),Yr&&await So.closeConnection();else{await _Z(),await I_.generateNatsConfig(!0),fi?(Es.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await hs.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hs.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await $U.getHDBProcessInfo()).clustering.forEach(n=>{Es.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await GS.async_set_timeout(3e3),await qS(),await So.updateLocalStreams(),Yr&&await So.closeConnection(),Es.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(kS,"restartClustering");async function qS(){await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(qS,"removeNatsConfig")});var oD=m((Rue,iD)=>{"use strict";var Tue=require("lodash"),Qt=A(),{handleHDBError:JU,hdb_errors:EZ}=W(),{HDB_ERROR_MSGS:fZ,HTTP_STATUS_CODES:hZ}=EZ,$S=x();iD.exports={getRolePermissions:SZ};var hi=Object.create(null),mZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),eD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tD=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"),YS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...tD(t,r,s,n)}),"table_perms_template"),XU=a((e,t=tD())=>({attribute_name:e,describe:nD(t),[Rc]:t[Rc],[KS]:t[KS],[WS]:t[WS]}),"attr_perms_template"),ZU=a((e,t=!1)=>({attribute_name:e,describe:t,[Rc]:t}),"timestamp_attr_perms_template"),{READ:Rc,INSERT:KS,UPDATE:WS}=Qt.PERMS_CRUD_ENUM,rD=Object.values(Qt.PERMS_CRUD_ENUM),sD=[Rc,KS,WS];function SZ(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(hi[t]&&hi[t].key===s)return hi[t].perms;let n=pZ(e,r);return hi[t]?hi[t].key=s:hi[t]=mZ(s),hi[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 $S.error(s),$S.debug(r),JU(new Error,fZ.OUTDATED_PERMS_TRANSLATION_ERROR,hZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
@@ -23,4 +23,4 @@
23
23
 
24
24
  `+Xp.readFileSync(o):"")},s.http2=!0}return s}a(Y6,"getServerOptions");QM.exports=Y6});var ZM=m((Yle,XM)=>{"use strict";var Zp=Q();Zp.initSync();var{CONFIG_PARAMS:JM}=A();function K6(){let e=Zp.get(JM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Zp.get(JM.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(K6,"getCORSOptions");XM.exports=K6});var tP=m((Wle,eP)=>{"use strict";var jM=Q();jM.initSync();var W6=A();function Q6(){return jM.get(W6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(Q6,"getHeaderTimeoutConfig");eP.exports=Q6});var tT={};et(tT,{customFunctionsServer:()=>X6,handleFile:()=>J6,ready:()=>e9});async function J6(e,t,r,s){if(!tn){let c=jp.get(eT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);tn=fP(c),rt.http((await tn).server)}let n=await tn,i=(0,sP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),rP.has(i)||(rP.add(i),n.register(j6(i,o)))}async function X6(){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 Z6();let e=jp.get(eT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=tn=await fP(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 Z6(){try{Ue.info("Custom Functions starting configuration."),await uP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function j6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,nP.existsSync)(e)&&r.register(cP.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 fP(e){Ue.info("Custom Functions starting buildServer.");let t=(0,lP.default)(e),r=(0,iP.default)(t);r.server.headersTimeout=(0,dP.default)(),r.setErrorHandler(EP.serverErrorHandler);let s=(0,_P.default)();return s&&r.register(oP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(aP.default),await r.register(z6),await r.after(),pp(r),Ue.info("Custom Functions completed buildServer."),r}function e9(){if(tn)return tn.then?tn.then(e=>e.ready()):tn.ready()}var sP,nP,iP,oP,aP,cP,jp,eT,Ue,z6,uP,lP,_P,dP,EP,tn,rP,hP=Se(()=>{sP=require("path"),nP=require("fs"),iP=C(require("fastify")),oP=C(require("@fastify/cors")),aP=C(Op()),cP=C(require("@fastify/autoload")),jp=C(Q()),eT=C(A()),Ue=C(x()),z6=C(WM()),uP=C(ar()),lP=C(zM()),_P=C(ZM()),dP=C(tP()),EP=C(Od());go();Jr();rP=new Set;a(J6,"handleFile");a(X6,"customFunctionsServer");a(Z6,"setUp");a(j6,"buildRouteFolder");a(fP,"buildServer");a(e9,"ready")});var rT={};et(rT,{start:()=>t9});function t9(e){let t=e.root;return{handleFile(r,s,n){SP||(SP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=mP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,pP.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))),mP.set(s,n)}}}var pP,mP,SP,TP=Se(()=>{pP=C(require("send")),mP=new Map;a(t9,"start")});function n9(e,t=1,r){if(sT++,(0,Ai.startWorker)("server/threads/threadServer.js",{name:yd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===yd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});s9.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=bd.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)OP[c.localPort](c)}}}),r){let s=setInterval(()=>{nT?nT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ai.shutdownWorkers)(),sT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function NP(e=0,t){if(typeof e=="string")try{(0,wd.existsSync)(e)&&(0,wd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=i9:r=o9(t):r=iT;let s=(0,AP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},OP[e]=i=>{nT=!0,r(i,(o,c)=>{if(!o){RP?(RP.deliverSocket(i,e,c),i.resume()):sT>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"),n9(0));return}o.requests++;let u=i._handle.fd;Id.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):l9(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 Id.info(`HarperDB ${n.version} Server running on port ${e}`),s}function iT(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>=Nd)return Nd=i,t(r);s=i}Nd=0,t(r)}function i9(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);iT(e,i=>{vo.set(r,{worker:i,lastUsed:n}),t(i)})}function o9(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);iT(s,_=>{vo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function c9(){Nd=0;for(let e of Mo)e.expectedIdle=e.recentELU.idle+a9,e.requests=1;Mo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function l9(e,t,r){let s=u9++;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(),bd.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")),bd.delete(s)),n.event=="destroy"&&(e.destroy(),bd.delete(s))})}var Ai,AP,yd,Id,wd,r9,Mo,Po,OP,RP,sT,s9,nT,Nd,gP,vo,a9,bd,u9,bP=Se(()=>{Ai=C(dt()),AP=require("net"),yd=C(A()),Id=C(x()),wd=require("fs"),{isMainThread:r9}=require("worker_threads"),Mo=[],Po=[],OP=[],sT=0,s9=[];r9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(n9,"startHTTPWorker");a(NP,"startSocketServer");Nd=0;a(iT,"findMostIdleWorker");gP=36e5,vo=new Map;a(i9,"findByRemoteAddressAffinity");a(o9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vo)r.lastUsed+gP<e&&vo.delete(t)},gP).unref();a9=1e3;a(c9,"updateWorkerIdleness");(0,Ai.setMonitorListener)(c9);bd=new Map,u9=1;a(l9,"proxySocket")});var UP=m((n_e,CP)=>{"use strict";var _9=require("cluster"),Qr=Q();Qr.initSync();var IP=A(),t_e=require("util"),rn=x(),oT=require("fs"),d9=require("fastify"),r_e=Va(),E9=require("@fastify/cors"),f9=require("@fastify/compress"),h9=require("@fastify/static"),m9=Op(),S9=require("path"),{PACKAGE_ROOT:p9}=A(),T9=Gs(),R9=V(),g9=ar(),A9=ba(),{server:O9}=(Jr(),re(Ru)),{authHandler:N9,handlePostRequest:b9,serverErrorHandler:y9,reqBodyValidationHandler:I9}=Od(),s_e=require("net"),{registerContentHandlers:w9}=(go(),re(wL)),C9=1024*1024*1024,wP="TRUE",{HDB_SETTINGS_NAMES:Ni,CONFIG_PARAMS:U9}=IP,D9=Ni.CORS_ENABLED_KEY,L9="CORS_ACCESSLIST",M9=Ni.SERVER_TIMEOUT_KEY,P9=Ni.SERVER_KEEP_ALIVE_TIMEOUT_KEY,v9=Ni.SERVER_HEADERS_TIMEOUT_KEY,B9=Ni.PRIVATE_KEY_KEY,H9=Ni.CERT_KEY,q9=Ni.HTTP_SECURE_ENABLED_KEY,Oi;CP.exports={hdbServer:yP,start:yP};async function yP(e){try{rn.info("In Fastify server"+process.cwd()),rn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),rn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=_9.isMaster,await F9();let t=Qr.get(q9),r=t&&(t===!0||t.toUpperCase()===wP);Oi=G9(r),await Oi.ready(),e||(e={}),e.isOperationsServer=!0,Oi.server.cantCleanupProperly=!0;try{O9.http(Oi.server,e),Oi.server.closeIdleConnections||await Oi.listen({port:0,host:"::"})}catch(s){throw Oi.close(),rn.error(s),rn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),rn.fatal(t),process.exit(1)}}a(yP,"operationsServer");async function F9(){rn.trace("Configuring HarperDB process."),T9.setSchemaDataToGlobal(),await g9.setUsersToGlobal(),await A9.getLicense()}a(F9,"setUp");function G9(e){rn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=x9(e),r=d9(t);r.server.headersTimeout=V9(),r.setErrorHandler(y9);let s=k9();s&&r.register(E9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(m9),r.register(f9),r.register(h9,{root:S9.join(p9,"docs")}),w9(r);let n=Qr.get(IP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!R9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[I9,N9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),b9(i,o)}),r.get("/health",()=>"HarperDB is running."),rn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(G9,"buildServer");function x9(e){let t=Qr.get(M9),r=Qr.get(P9),s={bodyLimit:C9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(B9),i=Qr.get(H9),o=Qr.get(U9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:oT.readFileSync(n),cert:oT.readFileSync(i)+(o?`
25
25
 
26
- `+oT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(x9,"getServerOptions");function k9(){let e=Qr.get(D9),t=Qr.get(L9),r;return e&&(e===!0||e.toUpperCase()===wP)&&(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(k9,"getCORSOpts");function V9(){return Qr.get(v9)}a(V9,"getHeaderTimeoutConfig")});var kP=m((c_e,xP)=>{"use strict";var{decode:$9}=require("msgpackr"),{isMainThread:Y9,parentPort:K9,threadId:o_e}=require("worker_threads"),aT=Qe(),Bo=Be(),W9=A(),Yc=x(),DP=Q(),PP=A();dt();var Q9=Fs(),{recordAction:z9,recordActionBinary:J9}=(oi(),re(vl)),{publishToStream:X9}=aT,a_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Z9,j9,e7,vP,BP;xP.exports={initialize:HP,workQueueListener:GP,setSubscription:t7,setIgnoreOrigin:s7,getDatabaseSubscriptions:r7};async function HP(){BP=!0,Yc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await aT.getNATSReferences();Z9=e,j9=e.info.server_name,e7=t,vP=r}a(HP,"initialize");var Ud=new Map;function t7(e,t,r){let s=Ud.get(e);s||Ud.set(e,s=new Map),s.set(t,r),BP||HP().then(GP)}a(t7,"setSubscription");function r7(){return Ud}a(r7,"getDatabaseSubscriptions");var qP;function s7(e){qP=e}a(s7,"setIgnoreOrigin");var FP=100,LP=new Array(FP),Cd=0;async function GP(){let t=await(await vP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await LP[Cd],LP[Cd]=n7(r).catch(s=>{Yc.error(s)}),++Cd>=FP&&(Cd=0)}a(GP,"workQueueListener");Y9||K9.on("message",async e=>{let{type:t}=e;t===PP.ITC_EVENT_TYPES.SHUTDOWN&&aT.closeConnection()});async function n7(e){let t=$9(e.data);z9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===DP.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!qP;if(J9(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;Yc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Yc.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=Ud.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:MP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:MP(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})}DP.get(PP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&X9(e.subject.split(".").slice(0,-1).join("."),Q9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Yc.error(i)}e.ack()}a(n7,"messageProcessor");function MP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(MP,"convertOperation")});var Pd={};et(Pd,{disableNATS:()=>o7,setNATSReplicator:()=>cT,start:()=>i7});function i7(){Ld.default.get(Md.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&c7()}function o7(e=!0){WP=e}function c7(){if(WP)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];cT(n,r,i)}}fT((r,s)=>{cT(r.tableName,r.databaseName,r),s&&zP(r)}),!VP&&(VP=!0)}function cT(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){zP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Xr;return(0,$P.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<a7}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 Dd(i.transaction,i)),o.user=i.user):o=QP),o}a(n,"getNATSTransaction")}function zP(e){let t=Ld.default.get(Md.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,lT.publishToStream)(`${_T.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dT.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 lT,_T,dT,$P,YP,Ld,Md,KP,WP,a7,QP,VP,Dd,uT,ET=Se(()=>{de();Zr();lT=C(Qe()),_T=C(Be()),dT=C(Fs());aa();$P=C(kP()),YP=C(Ht()),Ld=C(Q()),Md=C(A()),KP=C(x());a(i7,"start");a(o7,"disableNATS");a7=2;a(c7,"assignReplicationSource");a(cT,"setNATSReplicator");a(zP,"publishSchema");Dd=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=Ld.default.get(Md.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||(KP.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,lT.publishToStream)(`${_T.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,dT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},uT=class extends Dd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,YP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};QP=new uT});async function XP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await hT.getResource(e,{});n=new ST(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await hT.get(e);i&&i.delete()}n=new Bd(e,t)}return n}function mT(){return vd++,vd>65500&&(vd=1),vd}var JP,Kc,hT,vd,Bd,ST,ZP=Se(()=>{de();gc();JP=C(Ht()),Kc=C(x());$n();hT=nt({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(XP,"getSession");vd=1;a(mT,"getNextMessageId");Bd=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=wn.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)):$=mT();let U=k.id;Array.isArray(U)&&(U=po(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Kc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return mT()}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=wn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ye(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},ST=class extends Bd{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=mT();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,Kc.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,JP.getNextMonotonicTime)()),(0,Kc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hT.put(this.sessionRecord)),t.qos}}});var RT={};et(RT,{start:()=>l7});async function l7({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:_}=tv(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,sn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;u7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,rv.getSuperUser)());let{onMessage:u,onClose:l}=tv(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,sn.info)("Socket error",_)})},{port:t,securePort:s})}function tv(e,t,r,s,n){ev||(ev=!0,om(_=>{_.push({metric:"mqtt-connections",connections:pT})})),pT++;let i,o={protocolVersion:4},c=(0,Hd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){pT--,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 rt.auth(_.username,_.password.toString()),(0,TT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&jP.notify({username:s.username,status:nn.AUTH_AUDIT_STATUS.SUCCESS,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,TT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&jP.error({username:s.username,status:nn.AUTH_AUDIT_STATUS.FAILURE,type:nn.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=XP({user:s,..._}),i=await i}catch(O){return(0,sn.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,sn.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,sn.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,Hd.generate)(f,o);t(T),ls(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Qs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Hd,rv,TT,nn,sn,jP,u7,ev,pT,sv=Se(()=>{Hd=require("mqtt-packet");ZP();rv=C(ar());go();oi();Jr();TT=C(Q()),nn=C(A()),sn=C(x()),jP=(0,sn.loggerWithTag)("auth-event"),u7=!0;a(l7,"start");pT=0;a(tv,"onSocket")});var Ev={};et(Ev,{loadComponent:()=>qd,loadComponentDirectories:()=>dv});function dv(e,t){t&&(AT=t),e&&(OT=e);let r=[];if((0,Rs.existsSync)(gT)){let n=(0,Rs.readdirSync)(gT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(gT,o);r.push(qd(c,AT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(qd(s,AT,s)),Promise.all(r).then(()=>{_v=!0})}async function qd(e,t,r,s,n){if(!iv.has(e)){iv.set(e,!0),n&&(OT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Rs.existsSync)(o)?i=(0,ov.parseDocument)((0,Rs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=f7;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,Rs.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,lv.getHdbBasePath)().length){f=null;break}if(f)_=await qd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=E7[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,nt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Wc.isMainThread&&(_=await _.startOnMainThread?.({server:rt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!nv.includes(p)){nv.push(p);let R=NT.get(bT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);NP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:rt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),OT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,uv.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,av.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 d7(O);Wc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Wc.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 Qc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Qc(E),null,!0)}}if(Wc.isMainThread&&!_v&&(0,cv.watchDir)(e,async()=>dv()),i.extensionModule)return await qu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Qc(i))}}}var Rs,Mr,Wc,ov,NT,bT,av,cv,uv,lv,_7,d7,gT,OT,_v,AT,E7,f7,nv,iv,Qc,fv=Se(()=>{Rs=require("fs"),Mr=require("path"),Wc=require("worker_threads"),ov=require("yaml"),NT=C(Q()),bT=C(A());xg();Yg();Kg();DL();hP();TP();av=C(require("fast-glob")),cv=C(dt());YE();Jr();uv=C(W());Zr();de();bP();lv=C(Q()),_7=C(UP());v_();ET();sv();({readFile:d7}=Rs.promises),gT=NT.get(bT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),OT=new Map;a(dv,"loadComponentDirectories");E7={REST:Ap,graphqlSchema:$E,jsResource:WE,fastifyRoutes:tT,login:zE,static:rT,operationsApi:_7,customFunctions:{},clustering:Pd,authentication:Ac,mqtt:RT},f7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},nv=[],iv=new Map;a(qd,"loadComponent");Qc=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 Rv=m((B_e,Tv)=>{"use strict";var xd=require("fs-extra"),yT=require("path"),Fd=x(),hv=V(),Gd=A(),pv=Q(),h7=Rr();Tv.exports=m7;async function m7(){let e=S7(),t=pv.get(Gd.CONFIG_PARAMS.ROOTPATH),r=yT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Gd.PACKAGE_ROOT}},n=yT.join(t,"node_modules");await xd.ensureDir(n);let i,o=!0,c=!1;try{i=await xd.readJson(r)}catch(u){if(hv.isEmptyOrZeroLength(e))return;if(u.code!==Gd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!hv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await mv(l);s.dependencies[u]=_+l}if(!o){Fd.notify("Installing components"),await Sv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await mv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Fd.notify("Removing component",u),c=!0);c&&(Fd.notify("Updating components."),await Sv(r,s))}a(m7,"installComponents");function S7(){let e=h7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S7,"getComponentsConfig");async function mv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":yT.extname(e)||await xd.pathExists(e)?"file:":"github:"}a(mv,"getPkgPrefix");async function Sv(e,t){Fd.trace("npm installing components package.json",t),await xd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(pv.get(Gd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Sv,"installPackages")});var Ov=m((q_e,Av)=>{var{isMainThread:gv}=require("worker_threads"),{getTables:p7}=(de(),re(Ne)),{loadComponentDirectories:T7,loadComponent:R7}=(fv(),re(Ev)),{resetResources:g7}=(gc(),re(aD)),A7=Rv(),O7=Rr(),{dirname:N7}=require("path"),{getConnection:b7}=Qe(),y7=Q(),I7=A(),IT=new Map;async function w7(e=!1){!gv&&y7.get(I7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&b7(),gv&&await A7();let t=g7();p7(),t.isWorker=e,await R7(N7(O7.getConfigFilePath()),t,"hdb",!0,IT),await T7(IT,t);let r=[];for(let[s]of IT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(w7,"loadRootComponents");Av.exports.loadRootComponents=w7});var dt=m((x_e,Pn)=>{"use strict";var{Worker:C7,MessageChannel:U7,parentPort:gs,isMainThread:LT,threadId:D7,workerData:zc}=require("worker_threads"),{PACKAGE_ROOT:L7}=A(),{join:yv,isAbsolute:M7,extname:Vd}=require("path"),{server:P7}=(Jr(),re(Ru)),{watch:v7,readdir:B7}=require("fs/promises"),{totalmem:Nv}=require("os"),MT=A(),bi=x(),G_e=A(),{randomBytes:H7}=require("crypto"),q7=1024*1024,Mn=[],Ln=[],F7=50,Iv=1e4,G7="restart",wv="request_thread_info",Cv="resource_report",Uv="thread_info",Dv="added-port",x7="ack",wT;Pn.exports={startWorker:CT,restartWorkers:PT,shutdownWorkers:Y7,workers:Mn,setMonitorListener:j7,onMessageFromWorkers:K7,onMessageByType:W7,broadcast:Q7,broadcastWithAcknowledgement:J7,setChildListenerByType:$7,getWorkerIndex:Mv,getTicketKeys:Pv,setMainIsWorker:k7,restartNumber:zc?.restartNumber||1};var Lv;function Mv(){return zc?zc.workerIndex:Lv?0:void 0}a(Mv,"getWorkerIndex");function k7(e){Lv=e}a(k7,"setMainIsWorker");var kd;function Pv(){return kd||(kd=LT?H7(48):zc.ticketKeys,kd)}a(Pv,"getTicketKeys");Object.defineProperty(P7,"workerIndex",{get(){return Mv()}});var vv={[wv](e,t){X7(t)},[Cv](e,t){Z7(t,e)}};function CT(e,t={}){let r=process.constrainedMemory?.()||Nv();r=Math.min(r,Nv());let s=Math.max(Math.floor(r/q7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new U7;c.postMessage({type:Dv,port:u},[u]),i.push(l)}Vd(e)||(e+=".js");let o=new C7(M7(e)?e:yv(L7,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Pn.exports.restartNumber,ticketKeys:Pv()},transferList:i},t));return Yd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{CT(e,t)},o.on("error",c=>{console.error("Worker error:",c),bi.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<F7?(t.unexpectedRestarts=o.unexpectedRestarts+1,CT(e,t)):bi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{vv[c.type]?.(c,o)}),Mn.push(o),tee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(CT,"startWorker");var V7=[MT.THREAD_TYPES.HTTP];async function PT(e=null,t=2,r=!0){if(LT){if(r){let{loadRootComponents:n}=Ov();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:MT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=V7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Iv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else gs.postMessage({type:G7,workerType:e})}a(PT,"restartWorkers");function $7(e,t){vv[e]=t}a($7,"setChildListenerByType");function Y7(e){return PT(e,1/0,!1)}a(Y7,"shutdownWorkers");var Bv=[];function K7(e){Bv.push(e)}a(K7,"onMessageFromWorkers");var UT=new Map;function W7(e,t){let r=UT.get(e);r||UT.set(e,r=[]),r.push(t)}a(W7,"onMessageByType");function Q7(e){for(let t of Ln)try{t.postMessage(e)}catch(r){bi.error("Unable to send message to worker",r)}}a(Q7,"broadcast");var $d=new Map,z7=1;function J7(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=z7++,i=a(()=>{$d.delete(n),--r===0&&t(),s!==gs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,$d.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of $d)o.port===s&&o()})),s.postMessage(e),r++}catch(n){bi.error("Unable to send message to worker",n)}r===0&&t()})}a(J7,"broadcastWithAcknowledgement");function X7(e){e.postMessage({type:Uv,workers:Hv()})}a(X7,"sendThreadInfo");function Hv(){let e=Date.now();return Mn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Hv,"getChildWorkerInfo");function Z7(e,t){e.resources=t,e.resources.updated=Date.now()}a(Z7,"recordResourceReport");var DT;function j7(e){DT=e}a(j7,"setMonitorListener");var eee=1e3,bv=!1;function tee(){bv||(bv=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DT&&DT()},eee).unref())}a(tee,"startMonitoring");var ree=1e3;if(gs){Yd(gs);for(let e of zc.addPorts)Yd(e);setInterval(()=>{let e=process.memoryUsage();gs.postMessage({type:Cv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ree).unref(),wT=a(()=>new Promise((e,t)=>{gs.on("message",r),gs.postMessage({type:wv});function r(s){s.type===Uv&&(gs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wT=Hv;Pn.exports.getThreadInfo=wT;function Yd(e,t){Ln.push(e),e.on("message",r=>{if(r.type===Dv)Yd(r.port);else if(r.type===x7){let s=$d.get(r.id);s&&s()}else{for(let n of Bv)n(r,e);let s=UT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){bi.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Yd,"addPort");if(LT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await B7(s,{withFileTypes:!0}))i.isDirectory()&&r(yv(s,i.name));for await(let{filename:i}of v7(s,{persistent:!1}))(Vd(i)===".ts"||Vd(i)===".js"||Vd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PT(),bi.info("Reloaded HarperDB components")},100))},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else gs.on("message",async e=>{let{type:t}=e;t===MT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,gs.unref(),setTimeout(()=>{bi.warn("Thread did not voluntarily terminate",D7),process.exit(0)},Iv).unref())})});function FT(e){let t=e.auditStore=e.openDB(kv.AUDIT_STORE_NAME,nee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,$v.getWorkerIndex)()===0&&e.on("aftercommit",()=>{BT||(BT=setTimeout(()=>{if(BT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-qv,0]})){if((n[0]&15)===qT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},qv/10).unref())}),t}function Qd(e,t,r){let s=Wv[r.type],n=3;if(t?t.length>80?(s|=Kd,n=(0,on.writeKey)(t,As,e?14:6),vT.setUint16(2,n)):(n=(0,on.writeKey)(t,As,e?11:3),As[1]=n):As[1]=0,e){s|=Kv;let i=s&Kd?6:3;vT.setFloat64(i,e),t||(n=i+8)}return As[0]=s,s&Kd?vT.setUint16(4,0):As[2]=0,r.value?Buffer.concat([As.slice(0,n),r.value]):As.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Kd,i=n?6:3,o;r&Kv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&HT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Wv[r&7],value:u,lastVersion:o,get user(){return c?(0,on.readKey)(e,i,c):void 0}}}var on,Wd,kv,Vv,$v,Yv,As,vT,see,nee,qv,BT,HT,Fv,qT,Gv,xv,Kd,Kv,Wv,Jc=Se(()=>{on=require("ordered-binary"),Wd=C(Q()),kv=C(xe()),Vv=C(A()),$v=C(dt()),Yv=C(V());(0,Wd.initSync)();As=Buffer.alloc(1024),vT=new DataView(As.buffer,As.byteOffset,1024),see={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,on.writeKey)(e[2],t,r+12)}else return(0,on.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,on.readKey)(e,t+12,r)]}else return(0,on.readKey)(e,t,r)}},nee={encoding:"binary",keyEncoder:see},qv=(0,Yv.convertToMS)((0,Wd.get)(Vv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,BT=null;a(FT,"openAuditStore");HT=16,Fv=1,qT=2,Gv=3,xv=4,Kd=128,Kv=64,Wv={put:Fv|HT,[Fv]:"put",delete:qT,[qT]:"delete",message:Gv|HT,[Gv]:"message",invalidate:xv,[xv]:"invalidate"};a(Qd,"createAuditEntry");a(vn,"readAuditEntry")});var GT,yi,iee,Xc,zd,Qv=Se(()=>{GT=C(Ht());Jc();yi=Symbol("completion"),iee=100,Xc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,GT.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[yi]&&(i||(i=[]),i.push(d[yi])),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,Qd(_.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<iee>>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=[]}},zd=class extends Xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,GT.getNextMonotonicTime)())}getReadTxn(){}}});function Zv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;qo||((0,Ii.onMessageByType)(Jv,d=>{let E=d.auditIds;kT(d.path,E,d.txnId)}),(0,Ii.onMessageByType)(Xv,d=>{(0,Os.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 xT(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 kT(e,t,r,s){if(!qo)return;let n=qo[e];if(n){if(Ho&&Ho+1!==r){(0,Os.trace)("Waiting to ensure latest txn id",Ho,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Jd)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c);if(Ho+1!==r){await(0,Ii.broadcastWithAcknowledgement)({type:Xv,txnId:r});for(let[o,c]of Jd)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c)}Jd.delete(r),(0,Os.trace)("Proceeding with txn id",r),Ho=r-1,kT(e,t,r,s)})();return Jd.set(r,i),i}(0,Os.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,zv.writeKey)(i,aee,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,Os.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=vn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,Os.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 jv(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&oee)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,Ii.broadcast)({type:Jv,path:n,auditIds:l,txnId:c,start:u}),kT(n,l,c,!0))})}}var Os,Ii,zv,Jv,Xv,oee,qo,aee,xT,Ho,Jd,eB=Se(()=>{Os=C(x()),Ii=C(dt()),zv=require("ordered-binary");aa();gc();Jc();Jv="transaction",Xv="transaction-await",oee=67108864,aee=Buffer.alloc(4096);a(Zv,"addSubscription");xT=class extends Xr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Jd=new Map;a(kT,"notifyFromTransactionData");a(jv,"listenToCommits")});var qp={};et(qp,{coerceType:()=>Xd,makeTable:()=>jd,setServerUtilities:()=>dee});function jd(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=[]),jv(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&&eR();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,Zc);switch(w.type){case"put":return L._writeUpdate(v,Zc);case"delete":return L._writeDelete(Zc);case"publish":return L._writePublish(v,Zc);case"invalidate":return L.invalidate(Zc);default:Ui.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,Ci.getWorkerIndex)()):(0,Ci.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&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&tu.signalUserChange(new ru.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 au(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,Ci.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,eR(),q.audit=!0}static coerceId(S){return S===""?null:Xd(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));tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[vs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=VT(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=VT(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=VT(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",[yi]: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,uB.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[sB]&&(w=!Uu(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(Ui.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),je(this[ae],y,S),y===null&&!G&&qn(-1),{type:E&&"put",value:J,[yi]: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 je(this[ae],L),Ui.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||jT(),F||qn(1)):i.remove(this[ae]),{type:E&&"delete",[yi]: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(an=>an.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,wi.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Xd(De,j)):Xd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,aB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===jc.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===jc.SEARCH_TYPES.CONTAINS||j===jc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===jc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=uee:Y.estimated_count=cee}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=HE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(qE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],cE=HE(an,v,D,q,S.allowFullScan);Y=Y.concat(cE)}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,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(cE=>new Promise(uE=>au(cE,X,an,null,!1,MB=>{let lE=MB?.value;if(!lE)return uE(Fo.SKIP);for(let _E=0;_E<De;_E++)if(!j[_E](lE))return uE(Fo.SKIP);uE(lE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Zv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[vs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[vs]){if(w){if(y)throw new wi.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=vn(F,i);(D==null||oB(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||oB(D,J)){let Y=vn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ui.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,cB.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=vn(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||jT(),qn(1));let X={type:"message",value:i.encoder.encode(S),[yi]: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 Xc(i,S.user,u)),D}else return new zd(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 wi.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[nB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new wi.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new wi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({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(){Lu(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=vn(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=vn(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[sB]=!0,d&&q.setTTLExpiration(d/1e3),b&&LB(),q;function je(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,eu.getIndexedValues)(L);if(G){tB&&w.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,eu.getIndexedValues)(F),G){tB&&w.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function au(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[nB]=!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(au,"loadRecord");function Mi(){P=new Set,(0,Ci.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;ls(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,eu.getNextMonotonicTime)());let j=je(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],Qd(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 qn(Z){T||(T=i.get([rB,$T.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([rB,$T.threadId],T)},50))}a(qn,"recordDeletion");function jT(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),qn(-1)}}},q.getRecordCount()*100+_ee).unref())}a(jT,"enqueueDeletionCleanup");function eR(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),qn(-1)})}a(eR,"addDeleteRemoval");function LB(){(0,Ci.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){Ui.error("Error in evicting old records",Z)}},lee).unref()}a(LB,"runRecordExpirationEviction")}function VT(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 iB(){}function dee(e){uB=e}function Xd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Eee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Zd.autoCast)(e)}function oB(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,eu,aB,$T,jc,su,wi,tu,ru,Ui,cB,Ci,Zd,uB,cee,uee,lee,tB,rB,Zt,sB,lde,nB,Zc,_ee,Eee,Ed=Se(()=>{zr=C(A()),Fo=require("lmdb"),eu=C(Ht()),aB=require("lodash"),$T=require("worker_threads");Zr();Qv();jc=C(xe()),su=C(Q());eB();wi=C(W()),tu=C(xs()),ru=C(Fr());de();Bu();Ui=C(x());Pu();$n();cB=require("ordered-binary"),Ci=C(dt());Jc();Zd=C(V());oi();cee=1e8,uee=1e7,lee=6e4;su.initSync();tB=su.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rB=Symbol.for("deletions"),Zt=Symbol.for("version"),sB=Symbol.for("incremental-update"),lde=Symbol("source-resource"),nB=Symbol("load-from-source"),Zc={isNotification:!0,allowInvalidated:!0},_ee=(0,Zd.convertToMS)(su.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(jd,"makeTable");a(VT,"attributesAsObject");a(iB,"noop");a(dee,"setServerUtilities");Eee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Xd,"coerceType");a(oB,"isDescendantId")});var Ne={};et(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>Kh,dropTableMeta:()=>Tee,getDatabases:()=>xr,getTables:()=>fee,onUpdatedTable:()=>fT,readMetaDb:()=>nu,resetDatabases:()=>hee,table:()=>nt,tables:()=>nr});function fee(){return sE||xr(),nr||{}}function xr(){if(sE)return ve;sE=!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,hr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,hr.existsSync)(e))for(let r of(0,hr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&nu((0,Me.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,ko.getBaseSchemaPath)())){for(let r of(0,hr.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,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);nu((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,hr.existsSync)(n))for(let o of(0,hr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&nu((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,hr.existsSync)(u)&&nu(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[nE]}}return Vo=null,ve}}function hee(){sE=!1;for(let[,e]of Bn)e.needsDeletion=!0;xr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return ve}function nu(e,t,r=WT,s,n){let i=new YT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,eE.open)(i),Bn.set(e,o));let c=new Di.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Go.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,eE.open)(i),l.isLegacy=!0):l=FT(o));let _=EB(r),d=_[nE],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 Di.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 je=new Di.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.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=fB(_,f,jd({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 QT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function EB(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[nE]=r,Vo.set(e,r)}return t}function fB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=WT),xr();let r=EB(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,hr.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=Bn.get(i);if(!o){let c=new YT.default(i,!1);o=(0,eE.open)(c),Bn.set(i,o)}return o}async function Kh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;Bn.delete(n.path),n.status==="open"&&(await n.close(),await lB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[nE]}delete ve[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=WT);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 Di.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=FT(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 Di.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,_=fB(l,e,jd({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 Di.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<iu.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<iu.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=pee(_,k,O):p&&tE.signalSchemaChange(new rE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of QT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function pee(e,t,r){try{let s=e.schemaVersion;await tE.signalSchemaChange(new rE.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,_B.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)}),iu.workerData&&iu.workerData.restartNumber!==dB.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>mee?await n:u>See&&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 tE.signalSchemaChange(new rE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function Tee({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 fT(e){QT.push(e)}var yt,Go,eE,Me,hr,ko,Di,YT,jt,lB,KT,_B,tE,rE,iu,Le,dB,WT,nE,nr,ve,xo,QT,sE,Bn,Vo,mee,See,de=Se(()=>{yt=C(Q()),Go=C(xe()),eE=require("lmdb"),Me=require("path"),hr=require("fs"),ko=C(we());Ed();Di=C(Gu()),YT=C(ku()),jt=C(A()),lB=C(require("fs-extra")),KT=require("../../index"),_B=C(Ht()),tE=C(xs()),rE=C(Fr()),iu=require("worker_threads"),Le=C(x()),dB=C(dt());Jc();WT="data",nE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,KT._assignPackageExport)("databases",ve);(0,KT._assignPackageExport)("tables",nr);xo=Symbol.for("next-table-id"),QT=[],Bn=new Map;a(fee,"getTables");a(xr,"getDatabases");a(hee,"resetDatabases");a(nu,"readMetaDb");a(EB,"ensureDB");a(fB,"setTable");a(Fa,"database");a(Kh,"dropDatabase");a(nt,"table");mee=1e3,See=10;a(pee,"runIndexing");a(Tee,"dropTableMeta");a(fT,"onUpdatedTable")});var V=m((Tde,wB)=>{"use strict";var Hn=require("path"),TB=require("fs-extra"),er=x(),hB=require("fs-extra"),iE=require("os"),Ree=require("net"),gee=require("recursive-iterator"),Ge=A(),Aee=MR(),mB=require("papaparse"),oE=require("moment"),{inspect:Oee}=require("util"),SB=require("is-number"),pde=require("lodash"),Nee=require("minimist"),bee=require("https"),yee=require("http"),{hdb_errors:aE}=W(),Iee=/^((\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)))$/,RB=require("util").promisify(setTimeout),wee=100,Cee=5,Uee="",Dee=4,pB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wB.exports={isEmpty:mr,isEmptyOrZeroLength:Ns,arrayHasEmptyValues:Pee,arrayHasEmptyOrZeroLengthValues:vee,buildFolderPath:Bee,isBoolean:gB,errorizeMessage:Lee,stripFileExtension:qee,autoCast:Fee,autoCastJSON:AB,autoCastJSONDeep:JT,removeDir:Gee,compareVersions:xee,isCompatibleDataVersion:kee,escapeRawValue:Vee,unescapeValue:$ee,stringifyProps:Yee,timeoutPromise:Wee,isClusterOperation:zee,getClusterUser:Xee,checkGlobalSchemaTable:Jee,getHomeDir:NB,getPropsFilePath:Kee,promisifyPapaParse:Zee,removeBOM:bB,createEventPromise:jee,checkProcessRunning:ete,checkSchemaTableExist:tte,checkSchemaExists:yB,checkTableExists:IB,getStartOfTomorrowInSeconds:rte,getLimitKey:ste,isObject:Hee,isNotEmptyAndHasValue:Mee,autoCasterIsNumberCheck:OB,backtickASTSchemaItems:nte,isPortTaken:Qee,createForkArgs:ite,autoCastBoolean:ote,async_set_timeout:RB,getTableHashAttribute:ate,doesSchemaExist:cte,doesTableExist:ute,stringifyObj:lte,ms_to_time:_te,changeExtension:dte,getEnvCliRootPath:XT,noBootFile:Ete,httpRequest:fte,transformReq:hte,convertToMS:mte,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Lee(e){return e instanceof Error?e:new Error(e)}a(Lee,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function Mee(e){return!mr(e)&&(e||e===0||e===""||gB(e))}a(Mee,"isNotEmptyAndHasValue");function Ns(e){return mr(e)||e.length===0||e.size===0}a(Ns,"isEmptyOrZeroLength");function Pee(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(Pee,"arrayHasEmptyValues");function vee(e){if(Ns(e))return!0;for(let t=0;t<e.length;t++)if(Ns(e[t]))return!0;return!1}a(vee,"arrayHasEmptyOrZeroLengthValues");function Bee(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(Bee,"buildFolderPath");function gB(e){return mr(e)?!1:e===!0||e===!1}a(gB,"isBoolean");function Hee(e){return mr(e)?!1:typeof e=="object"}a(Hee,"isObject");function qee(e){return Ns(e)?Uee:e.slice(0,-Dee)}a(qee,"stripFileExtension");function Fee(e){return mr(e)||e===""||typeof e!="string"?e:pB[e]!==void 0?pB[e]:OB(e)===!0?Number(e):Iee.test(e)?new Date(e):e}a(Fee,"autoCast");function AB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AB,"autoCastJSON");function JT(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=JT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=JT(r);s!==r&&(e[t]=s)}return e}else return AB(e)}a(JT,"autoCastJSONDeep");function OB(e){if(e.startsWith("0.")&&SB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&SB(e))}a(OB,"autoCasterIsNumberCheck");async function Gee(e){if(Ns(e))throw new Error(`Directory path: ${e} does not exist`);try{await hB.emptyDir(e),await hB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(Gee,"removeDir");function xee(e,t){if(Ns(e)){er.info("Invalid current version sent as parameter.");return}if(Ns(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(xee,"compareVersions");function kee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(kee,"isCompatibleDataVersion");function Vee(e){if(mr(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(Vee,"escapeRawValue");function $ee(e){if(mr(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($ee,"unescapeValue");function Yee(e,t){if(mr(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+iE.EOL}!Ns(s)&&s[0]===";"?r+=" "+s+n+iE.EOL:Ns(s)||(r+=s+"="+n+iE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Yee,"stringifyProps");function NB(){let e;try{e=iE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(NB,"getHomeDir");function Kee(){let e=Hn.join(NB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return TB.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(Kee,"getPropsFilePath");function Wee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Wee,"timeoutPromise");async function Qee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Ree.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Qee,"isPortTaken");function zee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(zee,"isClusterOperation");function Jee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return aE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return aE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Jee,"checkGlobalSchemaTable");function Xee(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||Ns(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(Xee,"getClusterUser");function Zee(){mB.parsePromise=function(e,t,r){return new Promise(function(s,n){mB.parse(e,{header:!0,transformHeader:bB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Zee,"promisifyPapaParse");function bB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bB,"removeBOM");function jee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Oee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(jee,"createEventPromise");async function ete(e){let t=!0,r=0;do await RB(wee*r++),(await Aee.findPs(e)).length>0&&(t=!1);while(t&&r<Cee);if(t)throw new Error(`process ${e} was not started`)}a(ete,"checkProcessRunning");function tte(e,t){let r=yB(e);if(r)return r;let s=IB(e,t);if(s)return s}a(tte,"checkSchemaTableExist");function yB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return aE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yB,"checkSchemaExists");function IB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return aE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IB,"checkTableExists");function rte(){let e=oE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=oE().utc().unix();return e-t}a(rte,"getStartOfTomorrowInSeconds");function ste(){return oE().utc().format("DD-MM-YYYY")}a(ste,"getLimitKey");function nte(e){try{let t=new gee(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(nte,"backtickASTSchemaItems");function ite(e){return[e]}a(ite,"createForkArgs");function ote(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ote,"autoCastBoolean");function ate(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ate,"getTableHashAttribute");function cte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(cte,"doesSchemaExist");function ute(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ute,"doesTableExist");function lte(e){try{return JSON.stringify(e)}catch{return e}}a(lte,"stringifyObj");function _te(e){let t=oE.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(_te,"ms_to_time");function dte(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(dte,"changeExtension");function XT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Nee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(XT,"getEnvCliRootPath");var zT;function Ete(){if(zT)return zT;let e=XT();XT()&&TB.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&(zT=!0)}a(Ete,"noBootFile");function fte(e,t){let r;return e.protocol==="http:"?r=yee:r=bee,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(fte,"httpRequest");function hte(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(hte,"transformReq");function mte(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(mte,"convertToMS")});var ZT=A(),CB=V(),ou=x(),Ste=Gs(),pte=ar(),Tte=Qp(),{start:Rte}=(ET(),re(Pd)),{closeConnection:gte}=Qe(),UB=require("moment"),DB=hd(),{cloneDeep:Ate}=require("lodash"),Ote=process.env[ZT.PROCESS_NAME_ENV_PROP],Li=Ote.substring(4);a(async function(){let t={id:Li,request:void 0},r=0;try{ou.notify("Starting job:",Li),Rte(),Ste.setSchemaDataToGlobal(),await pte.setUsersToGlobal();let s=await DB.getJobById(Li);if(CB.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Li}`);let{request:n}=s[0];if(CB.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=Ate(n);let i=Tte.getOperationFunction(n);ou.trace("Running operation:",n.operation,"for job",Li);let o=await i.job_operation_function(n);ou.trace("Result from job:",Li,o),t.status=ZT.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=UB().valueOf(),ou.notify("Successfully completed job:",Li)}catch(s){r=1,ou.error(s),t.status=ZT.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=UB().valueOf()}finally{await DB.updateJob(t),await gte(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
26
+ `+oT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(x9,"getServerOptions");function k9(){let e=Qr.get(D9),t=Qr.get(L9),r;return e&&(e===!0||e.toUpperCase()===wP)&&(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(k9,"getCORSOpts");function V9(){return Qr.get(v9)}a(V9,"getHeaderTimeoutConfig")});var kP=m((c_e,xP)=>{"use strict";var{decode:$9}=require("msgpackr"),{isMainThread:Y9,parentPort:K9,threadId:o_e}=require("worker_threads"),aT=Qe(),Bo=Be(),W9=A(),Yc=x(),DP=Q(),PP=A();dt();var Q9=Fs(),{recordAction:z9,recordActionBinary:J9}=(oi(),re(vl)),{publishToStream:X9}=aT,a_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Z9,j9,e7,vP,BP;xP.exports={initialize:HP,workQueueListener:GP,setSubscription:t7,setIgnoreOrigin:s7,getDatabaseSubscriptions:r7};async function HP(){BP=!0,Yc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await aT.getNATSReferences();Z9=e,j9=e.info.server_name,e7=t,vP=r}a(HP,"initialize");var Ud=new Map;function t7(e,t,r){let s=Ud.get(e);s||Ud.set(e,s=new Map),s.set(t,r),BP||HP().then(GP)}a(t7,"setSubscription");function r7(){return Ud}a(r7,"getDatabaseSubscriptions");var qP;function s7(e){qP=e}a(s7,"setIgnoreOrigin");var FP=100,LP=new Array(FP),Cd=0;async function GP(){let t=await(await vP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await LP[Cd],LP[Cd]=n7(r).catch(s=>{Yc.error(s)}),++Cd>=FP&&(Cd=0)}a(GP,"workQueueListener");Y9||K9.on("message",async e=>{let{type:t}=e;t===PP.ITC_EVENT_TYPES.SHUTDOWN&&aT.closeConnection()});async function n7(e){let t=$9(e.data);z9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===DP.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!qP;if(J9(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;Yc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Yc.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=Ud.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:MP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:MP(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})}DP.get(PP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&X9(e.subject.split(".").slice(0,-1).join("."),Q9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Yc.error(i)}e.ack()}a(n7,"messageProcessor");function MP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(MP,"convertOperation")});var Pd={};et(Pd,{disableNATS:()=>o7,setNATSReplicator:()=>cT,start:()=>i7});function i7(){Ld.default.get(Md.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&c7()}function o7(e=!0){WP=e}function c7(){if(WP)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];cT(n,r,i)}}fT((r,s)=>{cT(r.tableName,r.databaseName,r),s&&zP(r)}),!VP&&(VP=!0)}function cT(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){zP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Xr;return(0,$P.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<a7}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 Dd(i.transaction,i)),o.user=i.user):o=QP),o}a(n,"getNATSTransaction")}function zP(e){let t=Ld.default.get(Md.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,lT.publishToStream)(`${_T.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dT.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 lT,_T,dT,$P,YP,Ld,Md,KP,WP,a7,QP,VP,Dd,uT,ET=Se(()=>{de();Zr();lT=C(Qe()),_T=C(Be()),dT=C(Fs());aa();$P=C(kP()),YP=C(Ht()),Ld=C(Q()),Md=C(A()),KP=C(x());a(i7,"start");a(o7,"disableNATS");a7=2;a(c7,"assignReplicationSource");a(cT,"setNATSReplicator");a(zP,"publishSchema");Dd=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=Ld.default.get(Md.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||(KP.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,lT.publishToStream)(`${_T.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,dT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},uT=class extends Dd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,YP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};QP=new uT});async function XP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await hT.getResource(e,{});n=new ST(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await hT.get(e);i&&i.delete()}n=new Bd(e,t)}return n}function mT(){return vd++,vd>65500&&(vd=1),vd}var JP,Kc,hT,vd,Bd,ST,ZP=Se(()=>{de();gc();JP=C(Ht()),Kc=C(x());$n();hT=nt({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(XP,"getSession");vd=1;a(mT,"getNextMessageId");Bd=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=wn.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)):$=mT();let U=k.id;Array.isArray(U)&&(U=po(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Kc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return mT()}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=wn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ye(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},ST=class extends Bd{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=mT();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,Kc.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,JP.getNextMonotonicTime)()),(0,Kc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hT.put(this.sessionRecord)),t.qos}}});var RT={};et(RT,{start:()=>l7});async function l7({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:_}=tv(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,sn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;u7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,rv.getSuperUser)());let{onMessage:u,onClose:l}=tv(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,sn.info)("Socket error",_)})},{port:t,securePort:s})}function tv(e,t,r,s,n){ev||(ev=!0,om(_=>{_.push({metric:"mqtt-connections",connections:pT})})),pT++;let i,o={protocolVersion:4},c=(0,Hd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){pT--,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 rt.auth(_.username,_.password.toString()),(0,TT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&jP.notify({username:s.username,status:nn.AUTH_AUDIT_STATUS.SUCCESS,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,TT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&jP.error({username:s.username,status:nn.AUTH_AUDIT_STATUS.FAILURE,type:nn.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=XP({user:s,..._}),i=await i}catch(O){return(0,sn.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,sn.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,sn.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,Hd.generate)(f,o);t(T),ls(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Qs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Hd,rv,TT,nn,sn,jP,u7,ev,pT,sv=Se(()=>{Hd=require("mqtt-packet");ZP();rv=C(ar());go();oi();Jr();TT=C(Q()),nn=C(A()),sn=C(x()),jP=(0,sn.loggerWithTag)("auth-event"),u7=!0;a(l7,"start");pT=0;a(tv,"onSocket")});var Ev={};et(Ev,{loadComponent:()=>qd,loadComponentDirectories:()=>dv});function dv(e,t){t&&(AT=t),e&&(OT=e);let r=[];if((0,Rs.existsSync)(gT)){let n=(0,Rs.readdirSync)(gT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(gT,o);r.push(qd(c,AT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(qd(s,AT,s)),Promise.all(r).then(()=>{_v=!0})}async function qd(e,t,r,s,n){if(!iv.has(e)){iv.set(e,!0),n&&(OT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Rs.existsSync)(o)?i=(0,ov.parseDocument)((0,Rs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=f7;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,Rs.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,lv.getHdbBasePath)().length){f=null;break}if(f)_=await qd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=E7[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,nt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Wc.isMainThread&&(_=await _.startOnMainThread?.({server:rt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!nv.includes(p)){nv.push(p);let R=NT.get(bT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);NP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:rt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),OT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,uv.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,av.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 d7(O);Wc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Wc.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 Qc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Qc(E),null,!0)}}if(Wc.isMainThread&&!_v&&(0,cv.watchDir)(e,async()=>dv()),i.extensionModule)return await qu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Qc(i))}}}var Rs,Mr,Wc,ov,NT,bT,av,cv,uv,lv,_7,d7,gT,OT,_v,AT,E7,f7,nv,iv,Qc,fv=Se(()=>{Rs=require("fs"),Mr=require("path"),Wc=require("worker_threads"),ov=require("yaml"),NT=C(Q()),bT=C(A());xg();Yg();Kg();DL();hP();TP();av=C(require("fast-glob")),cv=C(dt());YE();Jr();uv=C(W());Zr();de();bP();lv=C(Q()),_7=C(UP());v_();ET();sv();({readFile:d7}=Rs.promises),gT=NT.get(bT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),OT=new Map;a(dv,"loadComponentDirectories");E7={REST:Ap,graphqlSchema:$E,jsResource:WE,fastifyRoutes:tT,login:zE,static:rT,operationsApi:_7,customFunctions:{},clustering:Pd,authentication:Ac,mqtt:RT},f7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},nv=[],iv=new Map;a(qd,"loadComponent");Qc=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 Rv=m((B_e,Tv)=>{"use strict";var xd=require("fs-extra"),yT=require("path"),Fd=x(),hv=V(),Gd=A(),pv=Q(),h7=Rr();Tv.exports=m7;async function m7(){let e=S7(),t=pv.get(Gd.CONFIG_PARAMS.ROOTPATH),r=yT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Gd.PACKAGE_ROOT}},n=yT.join(t,"node_modules");await xd.ensureDir(n);let i,o=!0,c=!1;try{i=await xd.readJson(r)}catch(u){if(hv.isEmptyOrZeroLength(e))return;if(u.code!==Gd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!hv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await mv(l);s.dependencies[u]=_+l}if(!o){Fd.notify("Installing components"),await Sv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await mv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Fd.notify("Removing component",u),c=!0);c&&(Fd.notify("Updating components."),await Sv(r,s))}a(m7,"installComponents");function S7(){let e=h7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S7,"getComponentsConfig");async function mv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":yT.extname(e)||await xd.pathExists(e)?"file:":"github:"}a(mv,"getPkgPrefix");async function Sv(e,t){Fd.trace("npm installing components package.json",t),await xd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(pv.get(Gd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Sv,"installPackages")});var Ov=m((q_e,Av)=>{var{isMainThread:gv}=require("worker_threads"),{getTables:p7}=(de(),re(Ne)),{loadComponentDirectories:T7,loadComponent:R7}=(fv(),re(Ev)),{resetResources:g7}=(gc(),re(aD)),A7=Rv(),O7=Rr(),{dirname:N7}=require("path"),{getConnection:b7}=Qe(),y7=Q(),I7=A(),IT=new Map;async function w7(e=!1){!gv&&y7.get(I7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&b7(),gv&&await A7();let t=g7();p7(),t.isWorker=e,await R7(N7(O7.getConfigFilePath()),t,"hdb",!0,IT),await T7(IT,t);let r=[];for(let[s]of IT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(w7,"loadRootComponents");Av.exports.loadRootComponents=w7});var dt=m((x_e,Pn)=>{"use strict";var{Worker:C7,MessageChannel:U7,parentPort:gs,isMainThread:LT,threadId:D7,workerData:zc}=require("worker_threads"),{PACKAGE_ROOT:L7}=A(),{join:yv,isAbsolute:M7,extname:Vd}=require("path"),{server:P7}=(Jr(),re(Ru)),{watch:v7,readdir:B7}=require("fs/promises"),{totalmem:Nv}=require("os"),MT=A(),bi=x(),G_e=A(),{randomBytes:H7}=require("crypto"),q7=1024*1024,Mn=[],Ln=[],F7=50,Iv=1e4,G7="restart",wv="request_thread_info",Cv="resource_report",Uv="thread_info",Dv="added-port",x7="ack",wT;Pn.exports={startWorker:CT,restartWorkers:PT,shutdownWorkers:Y7,workers:Mn,setMonitorListener:j7,onMessageFromWorkers:K7,onMessageByType:W7,broadcast:Q7,broadcastWithAcknowledgement:J7,setChildListenerByType:$7,getWorkerIndex:Mv,getTicketKeys:Pv,setMainIsWorker:k7,restartNumber:zc?.restartNumber||1};var Lv;function Mv(){return zc?zc.workerIndex:Lv?0:void 0}a(Mv,"getWorkerIndex");function k7(e){Lv=e}a(k7,"setMainIsWorker");var kd;function Pv(){return kd||(kd=LT?H7(48):zc.ticketKeys,kd)}a(Pv,"getTicketKeys");Object.defineProperty(P7,"workerIndex",{get(){return Mv()}});var vv={[wv](e,t){X7(t)},[Cv](e,t){Z7(t,e)}};function CT(e,t={}){let r=process.constrainedMemory?.()||Nv();r=Math.min(r,Nv());let s=Math.max(Math.floor(r/q7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new U7;c.postMessage({type:Dv,port:u},[u]),i.push(l)}Vd(e)||(e+=".js");let o=new C7(M7(e)?e:yv(L7,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Pn.exports.restartNumber,ticketKeys:Pv()},transferList:i},t));return Yd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{CT(e,t)},o.on("error",c=>{console.error("Worker error:",c),bi.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<F7?(t.unexpectedRestarts=o.unexpectedRestarts+1,CT(e,t)):bi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{vv[c.type]?.(c,o)}),Mn.push(o),tee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(CT,"startWorker");var V7=[MT.THREAD_TYPES.HTTP];async function PT(e=null,t=2,r=!0){if(LT){if(r){let{loadRootComponents:n}=Ov();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:MT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=V7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Iv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else gs.postMessage({type:G7,workerType:e})}a(PT,"restartWorkers");function $7(e,t){vv[e]=t}a($7,"setChildListenerByType");function Y7(e){return PT(e,1/0,!1)}a(Y7,"shutdownWorkers");var Bv=[];function K7(e){Bv.push(e)}a(K7,"onMessageFromWorkers");var UT=new Map;function W7(e,t){let r=UT.get(e);r||UT.set(e,r=[]),r.push(t)}a(W7,"onMessageByType");function Q7(e){for(let t of Ln)try{t.postMessage(e)}catch(r){bi.error("Unable to send message to worker",r)}}a(Q7,"broadcast");var $d=new Map,z7=1;function J7(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=z7++,i=a(()=>{$d.delete(n),--r===0&&t(),s!==gs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,$d.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of $d)o.port===s&&o()})),s.postMessage(e),r++}catch(n){bi.error("Unable to send message to worker",n)}r===0&&t()})}a(J7,"broadcastWithAcknowledgement");function X7(e){e.postMessage({type:Uv,workers:Hv()})}a(X7,"sendThreadInfo");function Hv(){let e=Date.now();return Mn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Hv,"getChildWorkerInfo");function Z7(e,t){e.resources=t,e.resources.updated=Date.now()}a(Z7,"recordResourceReport");var DT;function j7(e){DT=e}a(j7,"setMonitorListener");var eee=1e3,bv=!1;function tee(){bv||(bv=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DT&&DT()},eee).unref())}a(tee,"startMonitoring");var ree=1e3;if(gs){Yd(gs);for(let e of zc.addPorts)Yd(e);setInterval(()=>{let e=process.memoryUsage();gs.postMessage({type:Cv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ree).unref(),wT=a(()=>new Promise((e,t)=>{gs.on("message",r),gs.postMessage({type:wv});function r(s){s.type===Uv&&(gs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wT=Hv;Pn.exports.getThreadInfo=wT;function Yd(e,t){Ln.push(e),e.on("message",r=>{if(r.type===Dv)Yd(r.port);else if(r.type===x7){let s=$d.get(r.id);s&&s()}else{for(let n of Bv)n(r,e);let s=UT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){bi.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Yd,"addPort");if(LT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await B7(s,{withFileTypes:!0}))i.isDirectory()&&r(yv(s,i.name));for await(let{filename:i}of v7(s,{persistent:!1}))(Vd(i)===".ts"||Vd(i)===".js"||Vd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PT(),bi.info("Reloaded HarperDB components")},100))},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else gs.on("message",async e=>{let{type:t}=e;t===MT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,gs.unref(),setTimeout(()=>{bi.warn("Thread did not voluntarily terminate",D7),process.exit(0)},Iv).unref())})});function FT(e){let t=e.auditStore=e.openDB(kv.AUDIT_STORE_NAME,nee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,$v.getWorkerIndex)()===0&&e.on("aftercommit",()=>{BT||(BT=setTimeout(()=>{if(BT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-qv,0]})){if((n[0]&15)===qT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},qv/10).unref())}),t}function Qd(e,t,r){let s=Wv[r.type],n=3;if(t?t.length>80?(s|=Kd,n=(0,on.writeKey)(t,As,e?14:6),vT.setUint16(2,n)):(n=(0,on.writeKey)(t,As,e?11:3),As[1]=n):As[1]=0,e){s|=Kv;let i=s&Kd?6:3;vT.setFloat64(i,e),t||(n=i+8)}return As[0]=s,s&Kd?vT.setUint16(4,0):As[2]=0,r.value?Buffer.concat([As.slice(0,n),r.value]):As.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Kd,i=n?6:3,o;r&Kv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&HT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Wv[r&7],value:u,lastVersion:o,get user(){return c?(0,on.readKey)(e,i,c):void 0}}}var on,Wd,kv,Vv,$v,Yv,As,vT,see,nee,qv,BT,HT,Fv,qT,Gv,xv,Kd,Kv,Wv,Jc=Se(()=>{on=require("ordered-binary"),Wd=C(Q()),kv=C(xe()),Vv=C(A()),$v=C(dt()),Yv=C(V());(0,Wd.initSync)();As=Buffer.alloc(1024),vT=new DataView(As.buffer,As.byteOffset,1024),see={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,on.writeKey)(e[2],t,r+12)}else return(0,on.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,on.readKey)(e,t+12,r)]}else return(0,on.readKey)(e,t,r)}},nee={encoding:"binary",keyEncoder:see},qv=(0,Yv.convertToMS)((0,Wd.get)(Vv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,BT=null;a(FT,"openAuditStore");HT=16,Fv=1,qT=2,Gv=3,xv=4,Kd=128,Kv=64,Wv={put:Fv|HT,[Fv]:"put",delete:qT,[qT]:"delete",message:Gv|HT,[Gv]:"message",invalidate:xv,[xv]:"invalidate"};a(Qd,"createAuditEntry");a(vn,"readAuditEntry")});var GT,yi,iee,Xc,zd,Qv=Se(()=>{GT=C(Ht());Jc();yi=Symbol("completion"),iee=100,Xc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,GT.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[yi]&&(i||(i=[]),i.push(d[yi])),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,Qd(_.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<iee>>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=[]}},zd=class extends Xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,GT.getNextMonotonicTime)())}getReadTxn(){}}});function Zv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;qo||((0,Ii.onMessageByType)(Jv,d=>{let E=d.auditIds;kT(d.path,E,d.txnId)}),(0,Ii.onMessageByType)(Xv,d=>{(0,Os.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 xT(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 kT(e,t,r,s){if(!qo)return;let n=qo[e];if(n){if(Ho&&Ho+1!==r){(0,Os.trace)("Waiting to ensure latest txn id",Ho,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Jd)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c);if(Ho+1!==r){await(0,Ii.broadcastWithAcknowledgement)({type:Xv,txnId:r});for(let[o,c]of Jd)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c)}Jd.delete(r),(0,Os.trace)("Proceeding with txn id",r),Ho=r-1,kT(e,t,r,s)})();return Jd.set(r,i),i}(0,Os.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,zv.writeKey)(i,aee,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,Os.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=vn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,Os.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 jv(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&oee)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,Ii.broadcast)({type:Jv,path:n,auditIds:l,txnId:c,start:u}),kT(n,l,c,!0))})}}var Os,Ii,zv,Jv,Xv,oee,qo,aee,xT,Ho,Jd,eB=Se(()=>{Os=C(x()),Ii=C(dt()),zv=require("ordered-binary");aa();gc();Jc();Jv="transaction",Xv="transaction-await",oee=67108864,aee=Buffer.alloc(4096);a(Zv,"addSubscription");xT=class extends Xr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Jd=new Map;a(kT,"notifyFromTransactionData");a(jv,"listenToCommits")});var qp={};et(qp,{coerceType:()=>Xd,makeTable:()=>jd,setServerUtilities:()=>dee});function jd(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=[]),jv(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&&eR();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,Zc);switch(w.type){case"put":return L._writeUpdate(v,Zc);case"delete":return L._writeDelete(Zc);case"publish":return L._writePublish(v,Zc);case"invalidate":return L.invalidate(Zc);default:Ui.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,Ci.getWorkerIndex)()):(0,Ci.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&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&tu.signalUserChange(new ru.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 au(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,Ci.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,eR(),q.audit=!0}static coerceId(S){return S===""?null:Xd(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));tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[vs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=VT(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=VT(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=VT(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",[yi]: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,uB.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[sB]&&(w=!Uu(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(Ui.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),je(this[ae],y,S),y===null&&!G&&qn(-1),{type:E&&"put",value:J,[yi]: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 je(this[ae],L),Ui.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||jT(),F||qn(1)):i.remove(this[ae]),{type:E&&"delete",[yi]: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(an=>an.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,wi.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Xd(De,j)):Xd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,aB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===jc.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===jc.SEARCH_TYPES.CONTAINS||j===jc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===jc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=uee:Y.estimated_count=cee}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=HE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(qE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],cE=HE(an,v,D,q,S.allowFullScan);Y=Y.concat(cE)}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,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(cE=>new Promise(uE=>au(cE,X,an,null,!1,MB=>{let lE=MB?.value;if(!lE)return uE(Fo.SKIP);for(let _E=0;_E<De;_E++)if(!j[_E](lE))return uE(Fo.SKIP);uE(lE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Zv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[vs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[vs]){if(w){if(y)throw new wi.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=vn(F,i);(D==null||oB(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||oB(D,J)){let Y=vn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ui.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,cB.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=vn(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||jT(),qn(1));let X={type:"message",value:i.encoder.encode(S),[yi]: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 Xc(i,S.user,u)),D}else return new zd(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 wi.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[nB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new wi.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new wi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({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(){Lu(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=vn(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=vn(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[sB]=!0,d&&q.setTTLExpiration(d/1e3),b&&LB(),q;function je(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,eu.getIndexedValues)(L);if(G){tB&&w.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,eu.getIndexedValues)(F),G){tB&&w.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function au(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[nB]=!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(au,"loadRecord");function Mi(){P=new Set,(0,Ci.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;ls(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,eu.getNextMonotonicTime)());let j=je(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],Qd(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 qn(Z){T||(T=i.get([rB,$T.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([rB,$T.threadId],T)},50))}a(qn,"recordDeletion");function jT(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),qn(-1)}}},q.getRecordCount()*100+_ee).unref())}a(jT,"enqueueDeletionCleanup");function eR(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),qn(-1)})}a(eR,"addDeleteRemoval");function LB(){(0,Ci.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){Ui.error("Error in evicting old records",Z)}},lee).unref()}a(LB,"runRecordExpirationEviction")}function VT(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 iB(){}function dee(e){uB=e}function Xd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Eee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Zd.autoCast)(e)}function oB(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,eu,aB,$T,jc,su,wi,tu,ru,Ui,cB,Ci,Zd,uB,cee,uee,lee,tB,rB,Zt,sB,lde,nB,Zc,_ee,Eee,Ed=Se(()=>{zr=C(A()),Fo=require("lmdb"),eu=C(Ht()),aB=require("lodash"),$T=require("worker_threads");Zr();Qv();jc=C(xe()),su=C(Q());eB();wi=C(W()),tu=C(xs()),ru=C(Fr());de();Bu();Ui=C(x());Pu();$n();cB=require("ordered-binary"),Ci=C(dt());Jc();Zd=C(V());oi();cee=1e8,uee=1e7,lee=6e4;su.initSync();tB=su.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rB=Symbol.for("deletions"),Zt=Symbol.for("version"),sB=Symbol.for("incremental-update"),lde=Symbol("source-resource"),nB=Symbol("load-from-source"),Zc={isNotification:!0,allowInvalidated:!0},_ee=(0,Zd.convertToMS)(su.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(jd,"makeTable");a(VT,"attributesAsObject");a(iB,"noop");a(dee,"setServerUtilities");Eee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Xd,"coerceType");a(oB,"isDescendantId")});var Ne={};et(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>Kh,dropTableMeta:()=>Tee,getDatabases:()=>xr,getTables:()=>fee,onUpdatedTable:()=>fT,readMetaDb:()=>nu,resetDatabases:()=>hee,table:()=>nt,tables:()=>nr});function fee(){return sE||xr(),nr||{}}function xr(){if(sE)return ve;sE=!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,hr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,hr.existsSync)(e))for(let r of(0,hr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&nu((0,Me.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,ko.getBaseSchemaPath)())){for(let r of(0,hr.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,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);nu((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,hr.existsSync)(n))for(let o of(0,hr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&nu((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,hr.existsSync)(u)&&nu(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[nE]}}return Vo=null,ve}}function hee(){sE=!1;for(let[,e]of Bn)e.needsDeletion=!0;xr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return ve}function nu(e,t,r=WT,s,n){let i=new YT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,eE.open)(i),Bn.set(e,o));let c=new Di.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Go.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,eE.open)(i),l.isLegacy=!0):l=FT(o));let _=EB(r),d=_[nE],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 Di.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 je=new Di.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.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=fB(_,f,jd({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 QT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function EB(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[nE]=r,Vo.set(e,r)}return t}function fB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=WT),xr();let r=EB(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,hr.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=Bn.get(i);if(!o){let c=new YT.default(i,!1);o=(0,eE.open)(c),Bn.set(i,o)}return o}async function Kh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;Bn.delete(n.path),n.status==="open"&&(await n.close(),await lB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[nE]}delete ve[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=WT);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 Di.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=FT(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 Di.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,_=fB(l,e,jd({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 Di.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<iu.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<iu.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=pee(_,k,O):p&&tE.signalSchemaChange(new rE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of QT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function pee(e,t,r){try{let s=e.schemaVersion;await tE.signalSchemaChange(new rE.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,_B.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)}),iu.workerData&&iu.workerData.restartNumber!==dB.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>mee?await n:u>See&&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 tE.signalSchemaChange(new rE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function Tee({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 fT(e){QT.push(e)}var yt,Go,eE,Me,hr,ko,Di,YT,jt,lB,KT,_B,tE,rE,iu,Le,dB,WT,nE,nr,ve,xo,QT,sE,Bn,Vo,mee,See,de=Se(()=>{yt=C(Q()),Go=C(xe()),eE=require("lmdb"),Me=require("path"),hr=require("fs"),ko=C(we());Ed();Di=C(Gu()),YT=C(ku()),jt=C(A()),lB=C(require("fs-extra")),KT=require("../../index"),_B=C(Ht()),tE=C(xs()),rE=C(Fr()),iu=require("worker_threads"),Le=C(x()),dB=C(dt());Jc();WT="data",nE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,KT._assignPackageExport)("databases",ve);(0,KT._assignPackageExport)("tables",nr);xo=Symbol.for("next-table-id"),QT=[],Bn=new Map;a(fee,"getTables");a(xr,"getDatabases");a(hee,"resetDatabases");a(nu,"readMetaDb");a(EB,"ensureDB");a(fB,"setTable");a(Fa,"database");a(Kh,"dropDatabase");a(nt,"table");mee=1e3,See=10;a(pee,"runIndexing");a(Tee,"dropTableMeta");a(fT,"onUpdatedTable")});var V=m((Tde,wB)=>{"use strict";var Hn=require("path"),TB=require("fs-extra"),er=x(),hB=require("fs-extra"),iE=require("os"),Ree=require("net"),gee=require("recursive-iterator"),Ge=A(),Aee=MR(),mB=require("papaparse"),oE=require("moment"),{inspect:Oee}=require("util"),SB=require("is-number"),pde=require("lodash"),Nee=require("minimist"),bee=require("https"),yee=require("http"),{hdb_errors:aE}=W(),Iee=/^((\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)))$/,RB=require("util").promisify(setTimeout),wee=100,Cee=5,Uee="",Dee=4,pB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wB.exports={isEmpty:mr,isEmptyOrZeroLength:Ns,arrayHasEmptyValues:Pee,arrayHasEmptyOrZeroLengthValues:vee,buildFolderPath:Bee,isBoolean:gB,errorizeMessage:Lee,stripFileExtension:qee,autoCast:Fee,autoCastJSON:AB,autoCastJSONDeep:JT,removeDir:Gee,compareVersions:xee,isCompatibleDataVersion:kee,escapeRawValue:Vee,unescapeValue:$ee,stringifyProps:Yee,timeoutPromise:Wee,isClusterOperation:zee,getClusterUser:Xee,checkGlobalSchemaTable:Jee,getHomeDir:NB,getPropsFilePath:Kee,promisifyPapaParse:Zee,removeBOM:bB,createEventPromise:jee,checkProcessRunning:ete,checkSchemaTableExist:tte,checkSchemaExists:yB,checkTableExists:IB,getStartOfTomorrowInSeconds:rte,getLimitKey:ste,isObject:Hee,isNotEmptyAndHasValue:Mee,autoCasterIsNumberCheck:OB,backtickASTSchemaItems:nte,isPortTaken:Qee,createForkArgs:ite,autoCastBoolean:ote,async_set_timeout:RB,getTableHashAttribute:ate,doesSchemaExist:cte,doesTableExist:ute,stringifyObj:lte,ms_to_time:_te,changeExtension:dte,getEnvCliRootPath:XT,noBootFile:Ete,httpRequest:fte,transformReq:hte,convertToMS:mte,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Lee(e){return e instanceof Error?e:new Error(e)}a(Lee,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function Mee(e){return!mr(e)&&(e||e===0||e===""||gB(e))}a(Mee,"isNotEmptyAndHasValue");function Ns(e){return mr(e)||e.length===0||e.size===0}a(Ns,"isEmptyOrZeroLength");function Pee(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(Pee,"arrayHasEmptyValues");function vee(e){if(Ns(e))return!0;for(let t=0;t<e.length;t++)if(Ns(e[t]))return!0;return!1}a(vee,"arrayHasEmptyOrZeroLengthValues");function Bee(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(Bee,"buildFolderPath");function gB(e){return mr(e)?!1:e===!0||e===!1}a(gB,"isBoolean");function Hee(e){return mr(e)?!1:typeof e=="object"}a(Hee,"isObject");function qee(e){return Ns(e)?Uee:e.slice(0,-Dee)}a(qee,"stripFileExtension");function Fee(e){return mr(e)||e===""||typeof e!="string"?e:pB[e]!==void 0?pB[e]:OB(e)===!0?Number(e):Iee.test(e)?new Date(e):e}a(Fee,"autoCast");function AB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AB,"autoCastJSON");function JT(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=JT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=JT(r);s!==r&&(e[t]=s)}return e}else return AB(e)}a(JT,"autoCastJSONDeep");function OB(e){if(e.startsWith("0.")&&SB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&SB(e))}a(OB,"autoCasterIsNumberCheck");async function Gee(e){if(Ns(e))throw new Error(`Directory path: ${e} does not exist`);try{await hB.emptyDir(e),await hB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(Gee,"removeDir");function xee(e,t){if(Ns(e)){er.info("Invalid current version sent as parameter.");return}if(Ns(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(xee,"compareVersions");function kee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(kee,"isCompatibleDataVersion");function Vee(e){if(mr(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(Vee,"escapeRawValue");function $ee(e){if(mr(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($ee,"unescapeValue");function Yee(e,t){if(mr(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+iE.EOL}!Ns(s)&&s[0]===";"?r+=" "+s+n+iE.EOL:Ns(s)||(r+=s+"="+n+iE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Yee,"stringifyProps");function NB(){let e;try{e=iE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(NB,"getHomeDir");function Kee(){let e=Hn.join(NB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return TB.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(Kee,"getPropsFilePath");function Wee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Wee,"timeoutPromise");async function Qee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Ree.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Qee,"isPortTaken");function zee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(zee,"isClusterOperation");function Jee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return aE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return aE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Jee,"checkGlobalSchemaTable");function Xee(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||Ns(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(Xee,"getClusterUser");function Zee(){mB.parsePromise=function(e,t,r){return new Promise(function(s,n){mB.parse(e,{header:!0,transformHeader:bB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Zee,"promisifyPapaParse");function bB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bB,"removeBOM");function jee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Oee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(jee,"createEventPromise");async function ete(e){let t=!0,r=0;do await RB(wee*r++),(await Aee.findPs(e)).length>0&&(t=!1);while(t&&r<Cee);if(t)throw new Error(`process ${e} was not started`)}a(ete,"checkProcessRunning");function tte(e,t){let r=yB(e);if(r)return r;let s=IB(e,t);if(s)return s}a(tte,"checkSchemaTableExist");function yB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return aE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yB,"checkSchemaExists");function IB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return aE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IB,"checkTableExists");function rte(){let e=oE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=oE().utc().unix();return e-t}a(rte,"getStartOfTomorrowInSeconds");function ste(){return oE().utc().format("DD-MM-YYYY")}a(ste,"getLimitKey");function nte(e){try{let t=new gee(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(nte,"backtickASTSchemaItems");function ite(e){return[e]}a(ite,"createForkArgs");function ote(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ote,"autoCastBoolean");function ate(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ate,"getTableHashAttribute");function cte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(cte,"doesSchemaExist");function ute(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ute,"doesTableExist");function lte(e){try{return JSON.stringify(e)}catch{return e}}a(lte,"stringifyObj");function _te(e){let t=oE.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(_te,"ms_to_time");function dte(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(dte,"changeExtension");function XT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Nee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(XT,"getEnvCliRootPath");var zT;function Ete(){if(zT)return zT;let e=XT();XT()&&TB.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&(zT=!0)}a(Ete,"noBootFile");function fte(e,t){let r;return e.protocol==="http:"?r=yee:r=bee,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(fte,"httpRequest");function hte(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(hte,"transformReq");function mte(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(mte,"convertToMS")});var ZT=A(),CB=V(),ou=x(),Ste=Gs(),pte=ar(),Tte=Qp(),{start:Rte}=(ET(),re(Pd)),{closeConnection:gte}=Qe(),UB=require("moment"),DB=hd(),{cloneDeep:Ate}=require("lodash"),Ote=process.env[ZT.PROCESS_NAME_ENV_PROP],Li=Ote.substring(4);a(async function(){let t={id:Li,request:void 0},r=0;try{ou.notify("Starting job:",Li),Rte(),Ste.setSchemaDataToGlobal(),await pte.setUsersToGlobal();let s=await DB.getJobById(Li);if(CB.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Li}`);let{request:n}=s[0];if(CB.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=Ate(n);let i=Tte.getOperationFunction(n);ou.trace("Running operation:",n.operation,"for job",Li);let o=await i.job_operation_function(n);ou.trace("Result from job:",Li,o),t.status=ZT.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=UB().valueOf(),ou.notify("Successfully completed job:",Li)}catch(s){r=1,ou.error(s),t.status=ZT.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=UB().valueOf()}finally{await DB.updateJob(t),await gte(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();