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.
- package/README.md +1 -1
- package/bin/harperdb.js +5 -5
- package/bin/lite.js +2 -2
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +2 -2
- package/server/threads/threadServer.js +3 -3
- package/utility/scripts/restartHdb.js +2 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
`,pq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Tq=["*","%"],Rq="unauthorized_access",gq="func_val",Aq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Oq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Nq={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"},bq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},yq={HTTP:"http"},Iq={STOPPED:"stopped",ONLINE:"online"},wq="3.x.x",Cq={SUCCESS:"success",FAILURE:"failure"},Uq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};DR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:gR,HDB_SUPPORT_URL:OR,HDB_PRICING_URL:e0,SUPPORT_HELP_MSG:t0,LICENSE_HELP_MSG:NR,HDB_PROC_NAME:TR,HDB_PROC_DESCRIPTOR:NE,CLUSTERING_LEAF_PROC_DESCRIPTOR:hu,CLUSTERING_HUB_PROC_DESCRIPTOR:fu,SYSTEM_SCHEMA_NAME:R0,HASH_FOLDER_NAME:g0,HDB_HOME_DIR_NAME:A0,UPDATE_FILE_NAME:y0,LICENSE_KEY_DIR_NAME:N0,BOOT_PROPS_FILE_NAME:b0,JOB_TYPE_ENUM:rq,JOB_STATUS_ENUM:Q0,SYSTEM_TABLE_NAMES:k0,SYSTEM_TABLE_HASH_ATTRIBUTES:V0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:z0,S3_BUCKET_AUTH_KEYS:J0,VALID_SQL_OPS_ENUM:X0,GEO_CONVERSION_ENUM:j0,HDB_SETTINGS_NAMES:IR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:eq,SERVICE_ACTIONS_ENUM:Z0,CLUSTER_MESSAGE_TYPE_ENUM:sq,CLUSTER_CONNECTION_DIRECTION_ENUM:nq,CLUSTER_EVENTS_DEFS_ENUM:aq,PERIOD_REGEX:c0,DOUBLE_PERIOD_REGEX:u0,UNICODE_PERIOD:l0,FORWARD_SLASH_REGEX:_0,UNICODE_FORWARD_SLASH:d0,ESCAPED_FORWARD_SLASH_REGEX:E0,ESCAPED_PERIOD_REGEX:f0,ESCAPED_DOUBLE_PERIOD_REGEX:h0,REG_KEY_FILE_NAME:K0,RESTART_TIMEOUT_MS:C0,HDB_FILE_PERMISSIONS:U0,DATABASES_DIR_NAME:M0,LEGACY_DATABASES_DIR_NAME:P0,TRANSACTIONS_DIR_NAME:v0,LIMIT_COUNT_NAME:B0,ID_ATTRIBUTE_STRING:H0,INSERT_MODULE_ENUM:G0,UPGRADE_JSON_FIELD_NAMES_ENUM:x0,RESTART_CODE:I0,RESTART_CODE_NUM:w0,CLUSTER_OPERATIONS:zo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Y0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:$0,CLUSTERING_MESSAGE_TYPES:hq,HDB_FILE_SUFFIX:O0,BLOB_FOLDER_NAME:D0,HDB_TRASH_DIR:L0,ORIGINATOR_SET_VALUE:mq,LICENSE_VALUES:iq,RAM_ALLOCATION_ENUM:oq,TIME_STAMP_NAMES_ENUM:CR,TIME_STAMP_NAMES:dq,PERMS_UPDATE_RELEASE_TIMESTAMP:Eq,SEARCH_NOT_FOUND_MESSAGE:r0,SEARCH_ATTRIBUTE_NOT_FOUND:s0,LICENSE_ROLE_DENIED_RESPONSE:n0,LICENSE_MAX_CONNS_REACHED:i0,BASIC_LICENSE_MAX_NON_CU_ROLES:AR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jH,VALUE_SEARCH_COMPARATORS:UR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:fq,LICENSE_FILE_NAME:W0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:cq,NEW_LINE:Sq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:a0,MOMENT_DAYS_TAG:m0,API_TURNOVER_SEC:S0,LOOPBACK:o0,CODE_EXTENSION:Eu,WILDCARD_SEARCH_VALUE:p0,NODE_ERROR_CODES:uq,JAVASCRIPT_EXTENSION:pR,PERMS_CRUD_ENUM:pq,UNAUTHORIZED_PERMISSION_NAME:Rq,SEARCH_WILDCARDS:Tq,FUNC_VAL:gq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Aq,JWT_ENUM:Oq,CLUSTERING_FLAG:_q,ITC_EVENT_TYPES:Nq,CUSTOM_FUNCTION_PROC_NAME:RR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:du,SERVICES:bq,THREAD_TYPES:yq,MEM_SETTING_KEY:T0,HDB_RESTART_SCRIPT:qH,PROCESS_DESCRIPTORS:$H,SERVICE_SERVERS:zH,SERVICE_SERVERS_CWD:OE,PROCESS_DESCRIPTORS_VALIDATE:WH,LAUNCH_SERVICE_SCRIPTS:JH,LOG_LEVELS:KH,PROCESS_NAME_ENV_PROP:q0,LOG_NAMES:YH,PM2_PROCESS_STATUSES:Iq,CONFIG_PARAM_MAP:wR,CONFIG_PARAMS:A,HDB_CONFIG_FILE:vH,HDB_DEFAULT_CONFIG_FILE:BH,ROLE_TYPES_ENUM:XH,BOOT_PROP_PARAMS:bR,INSTALL_PROMPTS:F0,HDB_ROOT_DIR_NAME:HH,CLUSTERING_PROCESSES:QH,FOREGROUND_PID_FILE:xH,PACKAGE_ROOT:un,PRE_4_0_0_VERSION:wq,SCHEMAS_PARAM_CONFIG:tq,METADATA_PROPERTY:lq,AUTH_AUDIT_STATUS:Cq,AUTH_AUDIT_TYPES:Uq,HDB_PID_FILE:kH,DEFAULT_DATABASE_NAME:VH};SR()});var bE=m((tse,PR)=>{"use strict";var LR=require("minimist");PR.exports=Dq;function Dq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=MR(process.env),s=MR(LR(process.argv))):(r=process.env,s=LR(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(Dq,"assignCMDENVVariables");function MR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(MR,"objKeysToLowerCase")});var F=m((sse,LE)=>{"use strict";var Vn=require("fs-extra"),{workerData:Lq,threadId:Mq}=require("worker_threads"),Cs=require("path"),HR=require("yaml"),qR=require("properties-reader"),rt=g(),vR=bE(),Pq=require("os"),{PACKAGE_ROOT:IE}=g(),{_assignPackageExport:vq}=require("../index"),Xo={};for(let e in console)Xo[e]||(Xo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},FR={STDOUT:"stdOut",STDERR:"stdErr"},Bq=Cs.join(IE,"logs"),Hq=Cs.join(IE,"config/yaml/",rt.HDB_DEFAULT_CONFIG_FILE),qq=1e4,Is,ws,Lt,mu,Su,Zo,Bi,Jo;Jo===void 0&&GR();LE.exports={notify:VR,fatal:$R,error:jo,warn:DE,info:pu,debug:UE,trace:CE,setLogLevel:Yq,log_level:Lt,loggerWithTag:Fq,suppressLogging:Gq,initLogSettings:GR,setupConsoleLogging:xR,logCustomLevel:Vq,closeLogFile:wE,getLogFilePath:()=>Zo,OUTPUTS:FR,AuthAuditLog:Qq};vq("logger",LE.exports);function GR(e=!1){try{if(Jo===void 0||e){wE();let t=$q(),r=vR(["ROOTPATH"]);try{Jo=qR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Vn.pathExistsSync(Cs.join(r.ROOTPATH,rt.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:Su,to_file:Is,to_stream:ws}=Kq(r.ROOTPATH?Cs.join(r.ROOTPATH,rt.HDB_CONFIG_FILE):Jo.get("settings_path"))),mu=rt.LOG_NAMES.HDB,Zo=Cs.join(Su,mu)}}catch(t){if(Jo=void 0,t.code===rt.NODE_ERROR_CODES.ENOENT){let r=vR(Object.keys(rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===rt.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){ws=u;continue}c===rt.CONFIG_PARAMS.LOGGING_FILE&&(Is=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Wq();Is=Is===void 0?n:Is,Is=BR(Is),ws=ws===void 0?i:ws,ws=BR(ws),Lt=Lt===void 0?s:Lt,Su=Bq,mu=rt.LOG_NAMES.INSTALL,Zo=Cs.join(Su,mu);return}throw jo("Error initializing log settings"),jo(t),t}xR()}a(GR,"initLogSettings");var yE=!0;function xR(){vi("error",jo),vi("warn",DE),vi("log",pu),vi("info",pu),vi("debug",UE),vi("trace",CE)}a(xR,"setupConsoleLogging");function vi(e,t){console[e]=function(...r){if(yE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Xo[e](...r)}}a(vi,"logConsole");function Fq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(VR),fatal:r($R),error:r(jo),warn:r(DE),info:r(pu),debug:r(UE),trace:r(CE)};function r(s){return function(...n){return s(t,...n)}}}a(Fq,"loggerWithTag");function Gq(e){try{yE=!1,e()}finally{yE=!0}}a(Gq,"suppressLogging");var xq=Lq?.name?.replace(/ /g,"-")||"main";function Us(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||xq+"/"+Mq);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(Us,"createLogRecord");function ea(e){Is&&kR(e),ws&&process.stdout.write(e)}a(ea,"logStdOut");function Tu(e){Is&&kR(e),ws&&process.stderr.write(e)}a(Tu,"logStdErr");function kR(e){kq(),Bi?Vn.appendFileSync(Bi,e):Xo.log(e)}a(kR,"logToFile");function wE(){try{Vn.closeSync(Bi)}catch{}Bi=null}a(wE,"closeLogFile");function kq(){if(!Bi){try{if(!Zo)debugger;Bi=Vn.openSync(Zo,"a")}catch(e){Xo.error(e)}setTimeout(()=>{wE()},qq).unref()}}a(kq,"openLogFile");function pu(...e){Mt[Lt]<=Mt.info&&ea(Us("info",e))}a(pu,"info");function CE(...e){Mt[Lt]<=Mt.trace&&ea(Us("trace",e))}a(CE,"trace");function jo(...e){Mt[Lt]<=Mt.error&&Tu(Us("error",e))}a(jo,"error");function UE(...e){Mt[Lt]<=Mt.debug&&ea(Us("debug",e))}a(UE,"debug");function VR(...e){Mt[Lt]<=Mt.notify&&ea(Us("notify",e))}a(VR,"notify");function $R(...e){Mt[Lt]<=Mt.fatal&&Tu(Us("fatal",e))}a($R,"fatal");function DE(...e){Mt[Lt]<=Mt.warn&&Tu(Us("warn",e))}a(DE,"warn");function Vq(e,t,...r){t===FR.STDERR?Tu(Us(e,r)):ea(Us(e,r))}a(Vq,"logCustomLevel");function $q(){let e;try{e=Pq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Cs.join(e,rt.HDB_HOME_DIR_NAME,rt.BOOT_PROPS_FILE_NAME);return Vn.existsSync(t)||(t=Cs.join(IE,"utility/hdb_boot_properties.file")),t}a($q,"getPropsFilePath");function Yq(e){Lt=e}a(Yq,"setLogLevel");function BR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(BR,"autoCastBoolean");function Kq(e){try{if(e.includes("config/settings.js")){let o=qR(e);return{level:o.get(rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Cs.dirname(o.get(rt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(rt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(rt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=HR.parseDocument(Vn.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===rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Kq,"getLogConfig");function Wq(){try{let e=HR.parseDocument(Vn.readFileSync(Hq,"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(Wq,"getDefaultConfig");function Qq(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(Qq,"AuthAuditLog")});var KR=m((ise,YR)=>{"use strict";var zq=require("util"),Jq=require("path"),Xq=require("child_process"),Zq=zq.promisify(Xq.execFile),jq=1e3*1e3*10;YR.exports={findPs:eF};async function eF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Zq("ps",["wwxo",`pid,${r}`],{maxBuffer:jq});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:Jq.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(eF,"findPs")});var ke=m((ase,QR)=>{"use strict";var tF="__dbis__",rF="__txns__",sF="__environment_name__",nF="__dbi_defintion__",iF={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"},oF=["__createdtime__","__updatedtime__"],aF="\uFFFF",WR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},cF=Object.values(WR);QR.exports={AUDIT_STORE_NAME:rF,INTERNAL_DBIS_NAME:tF,DBI_DEFINITION_NAME:nF,SEARCH_TYPES:iF,TIMESTAMP_NAMES:oF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:sF,TRANSACTIONS_DBI_NAMES_ENUM:WR,TRANSACTIONS_DBIS:cF,OVERFLOW_MARKER:aF}});var rr=m((cse,sg)=>{"use strict";var zR=g(),JR=ke(),XR={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},ZR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),jR={500:ZR("There was an error processing your request."),400:"Invalid request"},uF=jR[XR.INTERNAL_SERVER_ERROR],lF={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.`},_F={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},dF={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"},EF={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 ${JR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JR.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"},fF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zR.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 ${zR.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"},eg={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"},hF={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."},mF={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`},SF={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"},pF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},TF={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`},tg={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.`},rg={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}`},RF={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."},gF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},AF={...eg,...dF,...lF,...hF,...mF,...SF,...pF,...TF,...fF,...tg,...rg,...RF,...gF,..._F};sg.exports={CHECK_LOGS_WRAPPER:ZR,HDB_ERROR_MSGS:AF,DEFAULT_ERROR_MSGS:jR,DEFAULT_ERROR_RESP:uF,HTTP_STATUS_CODES:XR,LMDB_ERRORS_ENUM:EF,AUTHENTICATION_ERROR_MSGS:eg,VALIDATION_ERROR_MSGS:tg,ITC_ERRORS:rg}});var Q=m((lse,og)=>{"use strict";var Hi=rr(),OF=F(),NF=g(),Ru=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,ng),this.statusCode=s||Hi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Hi.DEFAULT_ERROR_MSGS[s]?Hi.DEFAULT_ERROR_MSGS[s]:Hi.DEFAULT_ERROR_MSGS[Hi.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&&OF[n](i)}},ME=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}},PE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function ng(e,t,r,s=NF.LOG_LEVELS.ERROR,n=null,i=!1){if(ig(e))return e;let o=new Ru(e,t,r,s,n);return i&&delete o.stack,o}a(ng,"handleHDBError");function ig(e){return e.__proto__.constructor.name===Ru.name}a(ig,"isHDBError");og.exports={isHDBError:ig,handleHDBError:ng,ClientError:ME,ServerError:PE,hdb_errors:Hi}});var Ce=m((dse,Eg)=>{"use strict";var ia=g(),bF=k(),Pt=W(),oa=require("path"),yF=require("minimist"),ag=require("fs-extra"),cg=require("lodash");Pt.initSync();var{CONFIG_PARAMS:ln,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:gu}=ia,ra,sa,na;function ug(){if(ra!==void 0)return ra;if(Pt.getHdbBasePath()!==void 0)return ra=Pt.get(ln.STORAGE_PATH)||oa.join(Pt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(ug,"getBaseSchemaPath");function lg(){if(sa!==void 0)return sa;if(Pt.getHdbBasePath()!==void 0)return sa=dg(gu),sa}a(lg,"getSystemSchemaPath");function _g(){if(na!==void 0)return na;if(Pt.getHdbBasePath()!==void 0)return na=Pt.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Pt.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(_g,"getTransactionAuditStoreBasePath");function IF(e,t){let r=Pt.get(ln.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(_g(),e.toString())}a(IF,"getTransactionAuditStorePath");function dg(e,t){e=e.toString(),t=t&&t.toString();let r=Pt.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(ug(),e)}a(dg,"getSchemaPath");function wF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,yF(process.argv));let s=r[ln.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!bF.isObject(s))throw o;i=s}for(let o of i){let c=o[gu];if(!c)continue;let u=Pt.get(ln.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return cg.set(u,[gu,ta.TABLES,t,ta.PATH],l),Pt.setProperty(ln.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return cg.set(u,[gu,ta.PATH],_),Pt.setProperty(ln.SCHEMAS,u),_}}let n=r[ln.STORAGE_PATH.toUpperCase()];if(n){if(!ag.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return ag.mkdirsSync(i),Pt.setProperty(ln.STORAGE_PATH,n),i}return lg()}a(wF,"initSystemSchemaPaths");function CF(){ra=void 0,sa=void 0,na=void 0}a(CF,"resetPaths");Eg.exports={getBaseSchemaPath:ug,getSystemSchemaPath:lg,getTransactionAuditStorePath:IF,getTransactionAuditStoreBasePath:_g,getSchemaPath:dg,initSystemSchemaPaths:wF,resetPaths:CF}});var vt=m((mse,pg)=>{"use strict";var UF=rr().LMDB_ERRORS_ENUM,fse=require("lmdb"),DF=ke(),hse=require("buffer").Buffer,{OVERFLOW_MARKER:fg,MAX_SEARCH_KEY_LENGTH:Au}=DF,hg=["number","string","symbol","boolean","bigint"];function LF(e){if(e=e?.primaryStore||e,!e)throw new Error(UF.ENV_REQUIRED)}a(LF,"validateEnv");function MF(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(MF,"stringifyData");function PF(e){return e instanceof Date?e.valueOf():e}a(PF,"convertKeyValueToWrite");function vF(e){if(e==null)return;if(hg.includes(typeof e))return e.length>Au?[e.slice(0,Au)+fg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(hg.includes(typeof n))n.length>Au?t.push(n.slice(0,Au)+fg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(vF,"getIndexedValues");var Ou=0,mg=0;function Sg(){mg=Date.now()-performance.now()}a(Sg,"adjustStartTime");Sg();var BF=6e4;setInterval(Sg,BF).unref();function HF(){let e=performance.now()+mg;return e>Ou?(Ou=e,e):(Ou+=488e-6,Ou)}a(HF,"getNextMonotonicTime");pg.exports={validateEnv:LF,stringifyData:MF,convertKeyValueToWrite:PF,getNextMonotonicTime:HF,getIndexedValues:vF}});var Tg,Xr,vE,aa=Se(()=>{Tg=require("events"),Xr=class extends Tg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new vE;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)}},vE=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[ft]||(e[ft]=Object.create(null))}function wu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ft];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Rg(_,o);if(d)return l||(l=this[ft]=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,Nu.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,Nu.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[ft];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Nu.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[ft],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function Rg(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}},wu(r,t)),new r(e)):new bu(e);case Array:let s=new Iu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Rg(o,t?.elements)),s[n]=o}return s}}function Cu(e){let t=e[ft],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Cu(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[ft];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 yu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[$n]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(yu(i))return!0}else return!0}}else{let r=e[ft];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(yu(n))return!0}else return!0}else return!0}}return!1}var Nu,ft,bu,$n,Iu,Uu=Se(()=>{Zr();Nu=C(Q()),ft=Symbol("own-data");a(ca,"getChanges");a(wu,"assignTrackedAccessors");a(Rg,"trackObject");bu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};wu(bu,{});a(Cu,"collapseData");a(ua,"deepFreeze");a(yu,"hasChanges");$n=Symbol.for("has-array-changes"),Iu=class extends Array{static{a(this,"TrackedArray")}[$n];constructor(t){super(t)}splice(...t){return this[$n]=!0,super.splice(...t)}push(...t){return this[$n]=!0,super.push(...t)}pop(){return this[$n]=!0,super.pop()}unshift(...t){return this[$n]=!0,super.unshift(...t)}shift(){return this[$n]=!0,super.shift()}};Iu.prototype.constructor=Array});function We(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 BE;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 gg,Ag,BE,Yn=Se(()=>{gg=C(vt()),Ag=require("../index");Zr();a(We,"transaction");(0,Ag._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};BE=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,gg.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 FE(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(FF[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 T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new HE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=GE(e);if(!T)throw new HE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(V=>setImmediate(()=>V(T(O)?R:Ng.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:T})=>T)}function GE(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 Du(e){if(!e)return;let t=new qE,r,s,n,i,o;for(;r=Og.exec(e);){i=Og.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=qF[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 HE,_t,es,Ng,Og,qF,FF,qE,Lu=Se(()=>{HE=C(Q()),_t=C(ke()),es=require("ordered-binary"),Ng=require("lmdb"),Og=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,qF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(FE,"idsForCondition");FF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(GE,"filterByType");a(jr,"attributeComparator");a(Du,"parseQuery");qE=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 VE={};tt(VE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Ds,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Ug,snake_case:()=>xF});function xF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function bg(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 kE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Tr(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 We(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[Ug]=!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 Mu(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!f)throw new Mu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Rr(e,t){let r=new Cg.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 xE(e){let t=e[ce];if(t){let r=e[ft];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function yg(e){if(typeof e=="string")return t=>xE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=xE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=xE(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 Ig,wg,Cg,Ae,ae,Ds,Ug,ce,GF,ht,Mu,kE,Zr=Se(()=>{Ig=require("crypto");aa();wg=require("../index"),Cg=C(Q());Uu();Yn();Lu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Ds=Symbol("is-collection"),Ug=Symbol("save-updates"),ce=Symbol("stored-record"),GF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Tr(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=yg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Tr(function(t,r,s,n){if(Array.isArray(n)&&t[Ds]){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):Rr(t,"put")},{hasContent:!0,type:"update"});static delete=Tr(function(t,r,s,n){return t.delete?t.delete(r):Rr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Ig.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),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Rr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Tr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Rr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Tr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Tr(function(t,r,s,n){return t.connect?t.connect(r):Rr(t,"connect")},{type:"read"});static subscribe=Tr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Rr(t,"subscribe")},{type:"read"});static publish=Tr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Rr(t,"publish")},{hasContent:!0,type:"create"});static search=Tr(function(t,r,s,n){let i=t.search?t.search(s):Rr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=yg(o);return i.map(c)}return i},{type:"read"});static query=Tr(function(t,r,s,n){return t.search?t.search(n,r):Rr(t,"search")},{hasContent:!0,type:"read"});static copy=Tr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Rr(t,"copy")},{type:"create"});static move=Tr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Rr(t,"move")},{type:"delete"});post(t){if(this[Ds])return this.constructor.create(this[ae],t,this[Ae]);Rr(this,"post")}static isCollection(t){return t?.[Ds]}static coerceId(t){return t}static parseQuery(t){return Du(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&&GF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:bg(t,this)}}return bg(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[Ds]=!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]}};ht.prototype[Ae]=null;(0,wg._assignPackageExport)("Resource",ht);a(xF,"snake_case");Mu=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(bg,"pathToId");kE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Tr,"transactional");a(Rr,"missingMethod");a(xE,"selectFromObject");a(yg,"transformForSelect")});var Pu={};tt(Pu,{server:()=>st});var Dg,st,ts=Se(()=>{Dg=require("../index"),st={};(0,Dg._assignPackageExport)("server",st)});var KE={};tt(KE,{loadGQLSchema:()=>VF,start:()=>YE,startOnMainThread:()=>kF});function YE({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 p of d.definitions)switch(p.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 T=p.name.value,R=[],O={table:null,database:null,properties:R};E.set(T,O);for(let U of p.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=T),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 V=!1;for(let U of p.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,V=!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=T,T==="Query"&&(h=O)}for(let[p,T]of E)for(let R of T.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,$E.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let T=E.get(p.type);if(!T)throw new Error(`${p.type} was not found as a Query export`);i.set((0,$E.dirname)(s)+"/"+p.name,T.tableClass)}}}var $E,kF,VF,Lg=Se(()=>{$E=require("path");de();a(YE,"start");kF=YE,VF=YE({ensureTable:nt}).handleFile});async function vu(e){return $F?(la||(la=YF(WF)),(await(await la).import(e)).namespace):import(e)}async function YF(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:KF,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Pg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:ht,tables:sr,databases:Be})}};let s=await(0,Mg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function KF(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 WF(){return{Resource:ht,tables:sr}}var Mg,Pg,$F,la,WE=Se(()=>{Zr();de();Mg=require("fs/promises"),Pg=require("path"),$F=!1;a(vu,"secureImport");a(YF,"getCompartment");a(KF,"secureOnlyFetch");a(WF,"getGlobalVars")});var zE={};tt(zE,{handleFile:()=>QF});async function QF(e,t,r,s){let n=new Map,i=(0,vg.pathToFileURL)(r).toString(),o=await vu(i);u(o.default)&&s.set((0,QE.dirname)(t),o.default),c(o,(0,QE.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 vg,QE,Bg=Se(()=>{vg=require("url");WE();QE=require("path");a(QF,"handleFile")});var XE={};tt(XE,{start:()=>zF});function zF({resources:e}){e.set("login",JE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var JE,Hg=Se(()=>{Zr();a(zF,"start");JE=class extends ht{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var jE=m(($se,Gg)=>{"use strict";var{Readable:JF}=require("stream"),XF=1e4;Gg.exports={streamAsJSON(e){return new ZE({value:e})}};var ZE=class extends JF{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),qg)}catch(n){yield qg(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);Fg(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>XF?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 Fg(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 qg(e){return console.error(e),JSON.stringify(e.toString())}a(qg,"handleError");function Fg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Fg,"when")});var jg=m((Wse,Zg)=>{"use strict";var ef=require("recursive-iterator"),ZF=require("alasql"),tf=require("clone"),xg=k(),{handleHDBError:kg,hdb_errors:jF}=Q(),{HDB_ERROR_MSGS:Vg,HTTP_STATUS_CODES:$g}=jF,{getDatabases:eG}=(de(),re(Ne)),tG=["DISTINCT_ARRAY"],Yg=Symbol("validateTables"),rf=Symbol("validateTable"),Kse=Symbol("getAllColumns"),Kg=Symbol("validateAllColumns"),Bu=Symbol("findColumn"),Wg=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),sf=Symbol("validateColumn"),Qg=Symbol("setColumnsForTable"),zg=Symbol("checkColumnsForAsterisk"),Jg=Symbol("validateGroupBy"),Xg=Symbol("hasColumns"),nf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Yg](),this[zg](),this[Kg]()}[Yg](){if(this[Xg]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[rf](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[rf](t.table)})}}[Xg](){let t=!1,r=new ef(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[rf](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=eG();if(!r[t.databaseid])throw kg(new Error,Vg.SCHEMA_NOT_FOUND(t.databaseid),$g.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw kg(new Error,Vg.TABLE_NOT_FOUND(t.databaseid,t.tableid),$g.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=tf(n);i.table=tf(t),this.attributes.push(i)})}[Bu](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)}[zg](){let t=new ef(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Qg](r.tableid)}[Qg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new ZF.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Kg](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[Jg](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new ef(t),n=[];for(let{node:i,path:o}of s)!xg.isEmpty(i)&&!xg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Wg](i):n.push(this[sf](i)));return n}[Jg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=tf(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Bu](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[Bu](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`}[Wg](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[sf](t)}[sf](t){let r=this[Bu](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]}};Zg.exports=nf});var tA=m((zse,eA)=>{"use strict";var of=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")}};eA.exports=of});var sA=m((Xse,rA)=>{"use strict";var af=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};rA.exports=af});var Hu=m((jse,nA)=>{"use strict";var uf=W(),lf=g();uf.initSync();var rG=uf.get(lf.CONFIG_PARAMS.STORAGE_COMPRESSION),sG=uf.get(lf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,nG=lf.UPDATES_PROPERTY,cf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=rG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=sG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===nG)}};nA.exports=cf});var Fu=m((tne,oA)=>{"use strict";var qi=W(),da=g();qi.initSync();var iG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",iA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),oG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),qu=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=iG,this.noFSAccess=!0,iA!==void 0&&(this.overlappingSync=iA),this.noReadAhead=oG}};oA.exports=qu;qu.MAX_DBS=1e4});var Ie=m((sne,mA)=>{"use strict";var df=require("lmdb"),vr=require("fs-extra"),nr=require("path"),Gu=vt(),uA=F(),Bt=rr().LMDB_ERRORS_ENUM,xu=sA(),Ef=Hu(),lA=Fu(),_n=ke(),aA=g(),{table:aG,resetDatabases:cG}=(de(),re(Ne)),cA=W(),Br=_n.INTERNAL_DBIS_NAME,_A=_n.DBI_DEFINITION_NAME,uG="data.mdb",lG="lock.mdb",Ea=".mdb",_G="-lock",_f=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=gr(t,r),this.key_type=this.dbi[_n.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[_n.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new df.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ku(e,t){if(e===void 0)throw new Error(Bt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Bt.ENV_NAME_REQUIRED)}a(ku,"pathEnvNameValidation");async function ff(e,t,r=!0){try{await vr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Bt.INVALID_BASE_PATH):s}try{let s=nr.join(e,t+Ea);return await vr.access(s,vr.constants.R_OK|vr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await vr.access(nr.join(e,t,uG),vr.constants.R_OK|vr.constants.F_OK),nr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Bt.INVALID_ENVIRONMENT)}else throw new Error(Bt.INVALID_ENVIRONMENT);throw s}}a(ff,"validateEnvironmentPath");function Vu(e,t){if(Gu.validateEnv(e),t===void 0)throw new Error(Bt.DBI_NAME_REQUIRED)}a(Vu,"validateEnvDBIName");async function dG(e,t,r=!1,s=!1){ku(e,t);let n=nr.basename(e);t=t.toString();let i=cA.get(aA.CONFIG_PARAMS.SCHEMAS);i||cA.setProperty(aA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ff(e,t,s),dA(e,t,r)}catch(o){if(o.message===Bt.INVALID_ENVIRONMENT){let c=nr.join(e,t);await vr.mkdirp(s?c:e);let u=new lA(s?c:c+Ea,!1),l=df.open(u);l.dbis=Object.create(null);let _=new Ef(!1);l.openDB(Br,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=hf(e,t,r);return l[_n.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(dG,"createEnvironment");async function EG(e,t,r,s=!0){ku(e,t),t=t.toString();let n=nr.join(e,t);return aG({table:t,database:nr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(EG,"copyEnvironment");async function dA(e,t,r=!1){ku(e,t),t=t.toString();let s=hf(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 ff(e,t),i=nr.join(e,t+Ea),o=n!=i,c=new lA(n,o),u=df.open(c);u.dbis=Object.create(null);let l=fA(u);for(let _=0;_<l.length;_++)gr(u,l[_]);return u[_n.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(dA,"openEnvironment");async function fG(e,t,r=!1){ku(e,t),t=t.toString();let s=nr.join(e,t+Ea),n=await ff(e,t);if(global.lmdb_map!==void 0){let i=hf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await EA(o),delete global.lmdb_map[i]}}await vr.remove(n),await vr.remove(n===s?n+_G:nr.join(nr.dirname(n),lG))}a(fG,"deleteEnvironment");async function EA(e){Gu.validateEnv(e);let t=e[_n.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(EA,"closeEnvironment");function hf(e,t,r=!1){let n=`${nr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(hf,"getCachedEnvironmentName");function hG(e){Gu.validateEnv(e);let t=Object.create(null),r=gr(e,Br);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Br)try{t[s]=Object.assign(new xu,n)}catch{uA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(hG,"listDBIDefinitions");function fA(e){Gu.validateEnv(e);let t=[],r=gr(e,Br);for(let{key:s}of r.getRange({start:!1}))s!==Br&&t.push(s);return t}a(fA,"listDBIs");function mG(e,t){let s=gr(e,Br).getEntry(t),n=new xu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{uA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(mG,"getDBIDefinition");function hA(e,t,r,s=!r){if(Vu(e,t),t=t.toString(),t===Br)throw new Error(Bt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gr(e,t)}catch(n){if(n.message===Bt.DBI_DOES_NOT_EXIST){let i=new Ef(r,s===!0),o=e.openDB(t,i),c=new xu(r===!0,s);return o[_A]=c,gr(e,Br).putSync(t,c),e.dbis[t]=o,o}throw n}}a(hA,"createDBI");function gr(e,t){if(Vu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Br?r=mG(e,t):r=new xu,r===void 0)throw new Error(Bt.DBI_DOES_NOT_EXIST);let s;try{let n=new Ef(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Bt.DBI_DOES_NOT_EXIST):n}return s[_A]=r,e.dbis[t]=s,s}a(gr,"openDBI");function SG(e,t){Vu(e,t),t=t.toString();let r=gr(e,t),s=r.getStats();return r[_n.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(SG,"statDBI");async function pG(e,t){try{let r=nr.join(e,t+Ea);return(await vr.stat(r)).size}catch{throw new Error(Bt.INVALID_ENVIRONMENT)}}a(pG,"environmentDataSize");function TG(e,t){if(Vu(e,t),t=t.toString(),t===Br)throw new Error(Bt.CANNOT_DROP_INTERNAL_DBIS_NAME);gr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gr(e,Br).removeSync(t)}a(TG,"dropDBI");function RG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{gr(e,i)}catch(o){if(o.message===Bt.DBI_DOES_NOT_EXIST)hA(e,i,i!==t,i===t),s=!0;else throw o}}s&&cG()}a(RG,"initializeDBIs");mA.exports={openDBI:gr,openEnvironment:dA,createEnvironment:dG,listDBIs:fA,listDBIDefinitions:hG,createDBI:hA,dropDBI:TG,statDBI:SG,deleteEnvironment:fG,initializeDBIs:RG,TransactionCursor:_f,environmentDataSize:pG,copyEnvironment:EG,closeEnvironment:EA}});var pA=m((ine,SA)=>{"use strict";var mf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};SA.exports=mf});var RA=m((ane,TA)=>{"use strict";var Sf=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}};TA.exports=Sf});var AA=m((une,gA)=>{"use strict";var pf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};gA.exports=pf});var Fi=m((fne,bA)=>{"use strict";var gG=Ie(),AG=pA(),OG=RA(),NG=AA(),rs=vt(),fa=rr().LMDB_ERRORS_ENUM,bG=ke(),Ls=g(),yG=k(),IG=require("uuid"),_ne=require("lmdb"),{handleHDBError:wG,hdb_errors:CG}=Q(),{OVERFLOW_MARKER:dne,MAX_SEARCH_KEY_LENGTH:Ene}=bG,OA=W();OA.initSync();var $u=OA.get(Ls.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Tf=Ls.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kn=Ls.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function UG(e,t,r,s,n=rs.getNextMonotonicTime()){Of(e,t,r,s),Rf(e,t,r);let i=new AG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];NA(l,!0,n);let _=DG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return gf(o,c,s,i,n)}a(UG,"insertRecords");function DG(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][Ls.FUNC_VAL],s[o]=c)}let u=rs.getIndexedValues(c),l=e.dbis[o];if(u){$u&&l.prefetch(u.map(_=>({key:_,value:n})),Yu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}$u&&e.dbis[t].prefetch([n],Yu),e.dbis[t].put(n,s,s[Kn])})}a(DG,"insertRecord");function LG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(LG,"removeSkippedRecords");function NA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Kn]))&&(e[Kn]=r||(r=rs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Tf]))&&(e[Tf]=r||rs.getNextMonotonicTime()):delete e[Tf]}a(NA,"setTimestamps");function Rf(e,t,r){r.indexOf(Ls.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ls.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ls.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ls.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gG.initializeDBIs(e,t,r)}a(Rf,"initializeTransaction");async function MG(e,t,r,s,n=rs.getNextMonotonicTime()){Of(e,t,r,s),Rf(e,t,r);let i=new OG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Af(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return gf(c,u,s,i,n,o)}a(MG,"updateRecords");async function PG(e,t,r,s,n=rs.getNextMonotonicTime()){try{Of(e,t,r,s)}catch(u){throw wG(u,u.message,CG.HTTP_STATUS_CODES.BAD_REQUEST)}Rf(e,t,r);let i=new NG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;yG.isEmpty(l[t])?(_=IG.v4(),l[t]=_):_=l[t];let d=Af(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return gf(o,c,s,i,n)}a(PG,"upsertRecords");async function gf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||rs.getNextMonotonicTime(),LG(r,i),s}a(gf,"finalizeWrite");function Af(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(NA(r,!_,o),Number.isInteger(r[Kn])&&l[Kn]>r[Kn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],T=e.dbis[h];if(T===void 0)continue;let R=l[h];if(typeof p=="function"){let V=p([[l]]);Array.isArray(V)&&(p=V[0][Ls.FUNC_VAL],r[h]=p)}if(p===R)continue;let O=rs.getIndexedValues(R);if(O){$u&&T.prefetch(O.map(V=>({key:V,value:s})),Yu);for(let V=0,$=O.length;V<$;V++)T.remove(O[V],s)}if(O=rs.getIndexedValues(p),O){$u&&T.prefetch(O.map(V=>({key:V,value:s})),Yu);for(let V=0,$=O.length;V<$;V++)T.put(O[V],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Kn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Af(e,t,r,s,n,i,o))}a(Af,"updateUpsertRecord");function vG(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(vG,"validateBasic");function Of(e,t,r,s){if(vG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(Of,"validateWrite");function Yu(){}a(Yu,"noop");bA.exports={insertRecords:UG,updateRecords:MG,upsertRecords:PG}});var Wn=m((mne,BG)=>{BG.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var ss=m((Sne,wA)=>{"use strict";var IA=k(),yA=g(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ms=require("joi"),dn={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},HG=Ms.alternatives(Ms.string().min(1).max(dn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Ms.number()).required(),qG=Ms.alternatives(Ms.string().min(1).max(dn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Ms.number()),FG=Ms.alternatives(Ms.string().min(1).max(dn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Ms.number()).required();function GG(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>dn.schema_length.maximum?`'${e}' maximum of 250 characters`:Gi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(GG,"checkValidTable");function xG(e,t){return IA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(xG,"validateSchemaExists");function kG(e,t){let r=t.state.ancestors[0].schema;return IA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(kG,"validateTableExists");function VG(e,t){return e.toLowerCase()===yA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${yA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(VG,"validateSchemaName");wA.exports={common_validators:dn,schema_regex:Gi,hdb_schema_table:HG,validateSchemaExists:xG,validateTableExists:kG,validateSchemaName:VG,checkValidTable:GG,hdb_database:qG,hdb_table:FG}});var Ue=m((Tne,CA)=>{"use strict";var Ht=require("validate.js");Ht.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ht.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ht.validators.type.checks={Object:function(e){return Ht.isObject(e)&&!Ht.isArray(e)},Array:Ht.isArray,Integer:Ht.isInteger,Number:Ht.isNumber,String:Ht.isString,Date:Ht.isDate,Boolean:function(e){return typeof e=="boolean"}};Ht.validators.hasValidFileExt=function(e,t){return Ht.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};CA.exports={validateObject:$G,validateObjectAsync:YG,validateBySchema:KG};function $G(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ht(e,t,{format:"flat"});return r?new Error(r):null}a($G,"validateObject");async function YG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ht.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(YG,"validateObjectAsync");function KG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(KG,"validateBySchema")});var Ku=m((gne,UA)=>{var{common_validators:ns}=ss(),ma=Ue(),ha="is required",Qe={database:{presence:!1,format:ns.schema_format,length:ns.schema_length},schema:{presence:!1,format:ns.schema_format,length:ns.schema_length},table:{presence:!0,format:ns.schema_format,length:ns.schema_length},attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length},hash_attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length}};function Sa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Sa,"makeAttributesStrings");function WG(e){return e=Sa(e),Qe.table.presence=!1,Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(WG,"schema_object");function QG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(QG,"table_object");function zG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence=!1,ma.validateObject(e,Qe)}a(zG,"create_table_object");function JG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence={message:ha},Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(JG,"attribute_object");function XG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(XG,"describe_table");function ZG(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(ZG,"validateTableResidence");UA.exports={schema_object:WG,create_table_object:zG,table_object:QG,attribute_object:JG,describe_table:XG,validateTableResidence:ZG}});var LA=m((One,DA)=>{"use strict";var jG=require("uuid"),Nf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||jG.v4(),this.schema_table=`${this.schema}.${this.table}`}};DA.exports=Nf});var Wu=m((bne,MA)=>{"use strict";var ex=LA(),bf=class extends ex{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};MA.exports=bf});var vA=m((Ine,PA)=>{"use strict";PA.exports=rx;var tx="inserted";function rx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===tx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(rx,"returnObject")});var Qu=m((Cne,GA)=>{"use strict";var sx=g(),yf=Ie(),nx=Fi(),{getSystemSchemaPath:ix,getSchemaPath:ox}=Ce(),ax=Wn(),cx=Ku(),ux=Wu(),lx=vA(),{handleHDBError:BA,hdb_errors:qA}=Q(),HA=k(),{HTTP_STATUS_CODES:_x}=qA,If=ax.hdb_attribute,FA=[];for(let e=0;e<If.attributes.length;e++)FA.push(If.attributes[e].attribute);var dx="inserted";GA.exports=Ex;async function Ex(e){let t=cx.attribute_object(e);if(t)throw BA(new Error,t.message,qA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&HA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw BA(new Error,r,_x.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=HA.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 ux(e.schema,e.table,e.attribute,e.id);try{let i=await yf.openEnvironment(ox(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}`);yf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await yf.openEnvironment(ix(),sx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await nx.insertRecords(o,If.hash_attribute,FA,[n]);return lx(dx,c,{records:[n]},u)}catch(i){throw i}}a(Ex,"lmdbCreateAttribute")});var Cf=m((Dne,kA)=>{var{hdb_table:fx,hdb_database:xA}=ss(),hx=Ue(),wf=require("joi"),mx={undefined:"undefined",null:"null"},Sx=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||mx[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=wf.object({database:xA,schema:xA,table:fx,records:wf.array().items(wf.object().custom(Sx)).required()});kA.exports=function(e){return hx.validateBySchema(e,px)}});var pa=m((Pne,$A)=>{"use strict";var Ps=k(),VA=F(),Mne=Cf(),{getDatabases:Tx}=(de(),re(Ne)),{ClientError:Qn}=Q();$A.exports=Rx;function Rx(e){if(Ps.isEmpty(e))throw new Qn("invalid update parameters defined.");if(Ps.isEmptyOrZeroLength(e.schema))throw new Qn("invalid schema specified.");if(Ps.isEmptyOrZeroLength(e.table))throw new Qn("invalid table specified.");if(!Array.isArray(e.records))throw new Qn("records must be an array");let t=Tx()[e.schema]?.[e.table];if(Ps.isEmpty(t))throw new Qn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Ps.isEmptyOrZeroLength(o[r]))throw VA.error("a valid hash attribute must be provided with update record:",o),new Qn("a valid hash attribute must be provided with update record, check log for more info");if(!Ps.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw VA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ps.isEmpty(o[r])&&o[r]!==""&&s.has(Ps.autoCast(o[r]))&&(o.skip=!0),s.add(Ps.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(Rx,"insertUpdateValidate")});var Ta=m((Bne,YA)=>{"use strict";var gx=g().OPERATIONS_ENUM,Uf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=gx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};YA.exports=Uf});var Oa=m((Fne,KA)=>{"use strict";var qne=Ta(),zu=g(),Lf=k(),Df=F(),Ax=require("uuid"),{handleHDBError:Ra,hdb_errors:Ox}=Q(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Ox;KA.exports=Nx;function Nx(e,t,r){for(let n=0;n<t.length;n++)bx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];yx(i,r,e.operation)}}a(Nx,"processRows");function bx(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(Lf.isEmptyOrZeroLength(e)||Lf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(bx,"validateAttribute");function yx(e,t,r){if(!e.hasOwnProperty(t)||Lf.isEmptyOrZeroLength(e[t])){if(r===zu.OPERATIONS_ENUM.INSERT||r===zu.OPERATIONS_ENUM.UPSERT){e[t]=Ax.v4();return}throw Df.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 Df.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 Df.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(yx,"validateHash")});var QA=m((xne,WA)=>{"use strict";var Mf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};WA.exports=Mf});var XA=m((Vne,JA)=>{"use strict";var Pf=Ie(),Ix=F(),zA=rr().LMDB_ERRORS_ENUM;JA.exports=wx;async function wx(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 Pf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==zA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Pf.closeEnvironment(global.lmdb_map[s]),await Pf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==zA.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){Ix.error(t)}}a(wx,"cleanLMDBMap")});var vs=m((Yne,tO)=>{"use strict";var Na=require("crypto"),Cx=W(),{CONFIG_PARAMS:Ux}=g(),jA="aes-256-cbc",Dx=32,Lx=16,vf=64,eO=32,Mx=vf+eO,ZA=new Map;tO.exports={encrypt:Px,decrypt:vx,createNatsTableStreamName:Bx};function Px(e){let t=Na.randomBytes(Dx),r=Na.randomBytes(Lx),s=Na.createCipheriv(jA,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(Px,"encrypt");function vx(e){let t=e.substr(0,vf),r=e.substr(vf,eO),s=e.substr(Mx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(jA,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(vx,"decrypt");function Bx(e,t){let r=Cx.get(Ux.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ZA.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),ZA.set(r,s)),s}a(Bx,"createNatsTableStreamName")});var En=m((Qne,sO)=>{"use strict";var Wne=Ar(),Ju=F(),rO=Ku(),Hx=vs(),Xu=k(),{handleHDBError:Zu,hdb_errors:qx}=Q(),{HDB_ERROR_MSGS:ju,HTTP_STATUS_CODES:Bf}=qx,Fx=W();Fx.initSync();var{getDatabases:Hf}=(de(),re(Ne));sO.exports={describeAll:Gx,describeTable:el,describeSchema:xx};async function Gx(e){try{let t=Xu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Hf(),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 el({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 el({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),Zu(new Error,ju.DESCRIBE_ALL_ERR)}}a(Gx,"describeAll");async function el(e,t){Xu.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=rO.describe_table(e);if(i)throw i;let c=Hf()[r];if(!c)throw Zu(new Error,ju.SCHEMA_NOT_FOUND(e.schema),Bf.NOT_FOUND);let u=c[s];if(!u)throw Zu(new Error,ju.TABLE_NOT_FOUND(e.schema,e.table),Bf.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=Hx.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(el,"descTable");async function xx(e){Xu.transformReq(e);let t=rO.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=Hf()[s];if(!i)throw Zu(new Error,ju.SCHEMA_NOT_FOUND(e.schema),Bf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Xu.isEmpty(u)||u.describe){let l=await el({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(xx,"describeSchema")});var Bs=m((Zne,cO)=>{var kx=Wn(),{callbackify:iO,promisify:Vx}=require("util"),{getDatabases:oO}=(de(),re(Ne));cO.exports={setSchemaDataToGlobal:nO,getTableSchema:$x,getSystemSchema:Yx,setSchemaDataToGlobalAsync:Vx(nO)};var aO=En(),Jne=iO(aO.describeAll),Xne=iO(aO.describeTable);function nO(e){global.hdb_schema=oO(),e&&e()}a(nO,"setSchemaDataToGlobal");function $x(e,t,r){let s=oO()[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($x,"getTableSchema");function Yx(){return kx}a(Yx,"getSystemSchema")});var ir=m((eie,dO)=>{"use strict";var rl=Cf(),mt=k(),Kx=require("util"),sl=Hr(),Wx=Bs(),uO=F(),{handleHDBError:zn,hdb_errors:Qx}=Q(),{HTTP_STATUS_CODES:Jn}=Qx,zx=Kx.promisify(Wx.getTableSchema),Jx="updated",lO="inserted",_O="upserted";dO.exports={insert:Zx,update:jx,upsert:ek,validation:Xx,flush:tk};async function Xx(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(mt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await zx(e.schema,e.table),r=rl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&mt.isEmptyOrZeroLength(c[s]))throw uO.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!mt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw uO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!mt.isEmpty(c[s])&&c[s]!==""&&n.has(mt.autoCast(c[s]))&&(c.skip=!0),n.add(mt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Xx,"validation");async function Zx(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.createRecords(e);return tl(lO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Zx,"insertData");async function jx(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.updateRecords(e);return mt.isEmpty(s.existing_rows)?tl(Jx,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):tl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(jx,"updateData");async function ek(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.upsertRecords(e);return tl(_O,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(ek,"upsertData");function tl(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===lO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===_O?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(tl,"returnObject");function tk(e){return mt.transformReq(e),sl.flush(e.schema,e.table)}a(tk,"flush")});var Ff=m((rie,hO)=>{var rk=Ue(),qf=require("joi"),{hdb_table:sk,hdb_database:EO}=ss(),fO={schema:EO,database:EO,table:sk},nk={date:qf.date().iso().required()},ik={timestamp:qf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};hO.exports=function(e,t){let r=t==="timestamp"?{...fO,...ik}:{...fO,...nk},s=qf.object(r);return rk.validateBySchema(e,s)}});var pO=m((sie,SO)=>{var ok=Ue(),Gf=require("joi"),{hdb_table:ak,hdb_database:mO}=ss(),ck=Gf.object({schema:mO,database:mO,table:ak,hash_values:Gf.array().required(),ids:Gf.array()});SO.exports=function(e){return ok.validateBySchema(e,ck)}});var RO=m((nie,TO)=>{"use strict";var xf=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}},kf=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}},Vf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};TO.exports={InsertObject:xf,NoSQLSeachObject:kf,DeleteResponseObject:Vf}});var mn=m((oie,bO)=>{"use strict";var AO=Ff(),uk=pO(),Xn=k(),gO=require("moment"),OO=F(),{promisify:lk,callbackify:_k}=require("util"),Zn=g(),dk=Bs(),$f=lk(dk.getTableSchema),Yf=Hr(),{DeleteResponseObject:Ek}=RO(),{handleHDBError:fn,hdb_errors:fk}=Q(),{HDB_ERROR_MSGS:nl,HTTP_STATUS_CODES:hn}=fk,hk="records successfully deleted",mk=_k(NO);bO.exports={delete:mk,deleteRecord:NO,deleteFilesBefore:Sk,deleteAuditLogsBefore:pk};async function Sk(e){let t=AO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!gO(e.date,gO.ISO_8601).isValid())throw fn(new Error,nl.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,nl.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 Yf.deleteRecordsBefore(e);if(await $f(e.schema,e.table),OO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Sk,"deleteFilesBefore");async function pk(e){let t=AO(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,nl.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,nl.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 Yf.deleteAuditLogsBefore(e);return await $f(e.schema,e.table),OO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(pk,"deleteAuditLogsBefore");async function NO(e){e.ids&&(e.hash_values=e.ids);let t=uk(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 $f(e.schema,e.table);let s=await Yf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ek;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(NO,"deleteRecord")});var il=m((cie,wO)=>{var Tk=require("crypto"),yO=9;function Rk(e){let t=Ak(yO),r=IO(e+t);return t+r}a(Rk,"createHash");function gk(e,t){let r=e.substr(0,yO),s=r+IO(t+r);return e===s}a(gk,"validateHash");function Ak(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(Ak,"generateSalt");function IO(e){return Tk.createHash("md5").update(e).digest("hex")}a(IO,"md5");wO.exports={hash:Rk,validate:gk}});var UO=m((lie,CO)=>{var Kf=Ue(),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 Ok(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Kf.validateObject(e,It)}a(Ok,"addUserValidation");function Nk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Kf.validateObject(e,It)}a(Nk,"alterUserValidation");function bk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Kf.validateObject(e,It)}a(bk,"dropUserValidation");CO.exports={addUserValidation:Ok,alterUserValidation:Nk,dropUserValidation:bk}});var be=m((Eie,LO)=>{"use strict";var{platform:die}=require("os"),yk="nats-server.zip",Wf="nats-server",Ik=process.platform==="win32"?`${Wf}.exe`:Wf,Qf="HDB",wk=/^[^\s.,*>]+$/,DO="__request__",Ck=a(e=>`${e}.${DO}`,"REQUEST_SUBJECT"),Uk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Dk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Lk={HUB:"hub.pid",LEAF:"leaf.pid"},Mk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Pk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Qf,deliver_subject:"__HDB__.WORKQUEUE"},vk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Qf,deliver_subject:"HDB.SCHEMAQUEUE"},Bk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Qf,deliver_subject:"HDB.USERQUEUE"},Hk={SUCCESS:"success",ERROR:"error"},qk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Fk={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Gk={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},xk={debug:"-D",trace:"-DVV"};LO.exports={NATS_SERVER_ZIP:yk,NATS_SERVER_NAME:Wf,NATS_BINARY_NAME:Ik,PID_FILES:Lk,NATS_CONFIG_FILES:Dk,SERVER_SUFFIX:Mk,WORK_QUEUE_CONSUMER_NAMES:Pk,SCHEMA_QUEUE_CONSUMER_NAMES:vk,USER_QUEUE_CONSUMER_NAMES:Bk,NATS_TERM_CONSTRAINTS_RX:wk,REQUEST_SUFFIX:DO,UPDATE_REMOTE_RESPONSE_STATUSES:Hk,CLUSTER_STATUS_STATUSES:qk,REQUEST_SUBJECT:Ck,SUBJECT_PREFIXES:Fk,MSG_HEADERS:Uk,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:xk,LOG_LEVEL_HIERARCHY:Gk}});var PO=m((hie,MO)=>{"use strict";var kk={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))},Vk="certificate.pem",$k="privateKey.pem",Yk="ca.pem";MO.exports={CERTIFICATE_VALUES:kk,CERTIFICATE_PEM_NAME:Vk,PRIVATEKEY_PEM_NAME:$k,CA_PEM_NAME:Yk}});var Jf=m((Sie,GO)=>{"use strict";var qO=require("fs-extra"),ee=require("joi"),Kk=require("os"),{boolean:pe,string:qs,number:or,array:zf}=ee.types(),{totalmem:vO}=require("os"),ki=require("path"),Wk=F(),al=k(),mie=PO(),BO=g(),Qk=Ue(),HO="log",zk="components",Jk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Xk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Zk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",eV="rootPath config parameter is undefined",tV="clustering.enabled config parameter is undefined",Hs=or.min(0).required(),cl=zf.items({host:qs.required(),port:Hs}).empty(null),Fs;GO.exports={configValidator:rV,routesValidator:cV,route_constraints:cl};function rV(e){if(Fs=e.rootPath,al.isEmpty(Fs))throw eV;let t=pe.required(),r=ee.valid("production","development").required(),s=or.min(0).max(1e3).empty(null).default(aV),n=qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ol),i=ee.custom(sV).messages({"any.custom":"{:#label} {:#error}"}),o=qs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(ol),u=ee.custom(nV).empty(null).default(ol),l=e.clustering?.enabled;if(al.isEmpty(l))throw tV;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Hs,routes:cl}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Hs}).required()}).required(),network:ee.object({port:Hs}).required()}).required(),leafServer:ee.object({network:ee.object({port:Hs,routes:cl}).required(),streams:ee.object({maxAge:or.min(120).allow(null).optional(),maxBytes:or.min(1).allow(null).optional(),maxMsgs:or.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:qs.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:or.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:or}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:zf.required(),headersTimeout:or.min(1).required(),https:pe.required(),keepAliveTimeout:or.min(1).required(),port:Hs,timeout:or.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:qs.custom(oV).optional().empty(null),maxSize:qs.custom(iV).optional().empty(null),path:qs.optional().empty(null).default(ol)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:zf.required(),headersTimeout:or.min(1).required(),https:pe.required(),keepAliveTimeout:or.min(1).required(),port:Hs,timeout:or.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Hs,securePort:Hs}).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(rV,"configValidator");function FO(e){return qO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(FO,"doesPathExist");function sV(e,t){if(e===null)return;let r=FO(e);return r?t.message(r):e}a(sV,"validatePemFile");function nV(e,t){ee.assert(e,qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=FO(e);if(r)return t.message(r)}a(nV,"validatePath");function iV(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Zk):e}a(iV,"validateRotationMaxSize");function oV(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Xk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(jk):e}a(oV,"validateRotationInterval");function aV(e,t){let r=t.state.path.join("."),s=Kk.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||vO();return i=Math.round(Math.min(i,vO())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Wk.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(aV,"setDefaultThreads");function ol(e,t){if(!al.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(al.isEmpty(Fs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return ki.join(Fs,zk);case"logging.root":return ki.join(Fs,HO);case"clustering.leafServer.streams.path":return ki.join(Fs,"clustering","leaf");case"storage.path":let s=ki.join(Fs,BO.LEGACY_DATABASES_DIR_NAME);return qO.existsSync(s)?s:ki.join(Fs,BO.DATABASES_DIR_NAME);case"logging.rotation.path":return ki.join(Fs,HO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ol,"setDefaultRoot");function cV(e){let t=ee.object({routes:cl});return Qk.validateBySchema({routes:e},t)}a(cV,"routesValidator")});var Nr=m((Rie,JO)=>{"use strict";var Or=g(),dt=k(),it=F(),{configValidator:uV,routesValidator:xO}=Jf(),qt=require("fs-extra"),lV=require("yaml"),qr=require("path"),_V=require("is-number"),VO=require("properties-reader"),dV=require("lodash"),{handleHDBError:EV}=Q(),{HTTP_STATUS_CODES:fV,HDB_ERROR_MSGS:ul}=rr(),Tie=require("minimist"),{server:hV}=(ts(),re(Pu)),{SCHEMAS_PARAM_CONFIG:ba,CONFIG_PARAMS:Sn,CONFIG_PARAM_MAP:Gs}=Or,mV="Unable to get config value because config is uninitialized",SV="Config successfully initialized",pV="Error backing up config file",TV="Empty parameter sent to getConfigValue",$O=qr.join(Or.PACKAGE_ROOT,"config","yaml",Or.HDB_DEFAULT_CONFIG_FILE),RV="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",kO={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"},ll,St;JO.exports={createConfigFile:gV,getDefaultConfig:AV,getConfigValue:KO,initConfig:WO,flattenConfig:ei,updateConfigValue:QO,updateConfigObject:NV,getConfiguration:IV,setConfiguration:wV,readConfigFile:jf,getClusteringRoutes:CV,initOldConfig:zO,getConfigFromFile:UV,getConfigFilePath:jn,addConfig:DV,deleteConfigFromFile:LV};function gV(e){let t=pn($O);ll=ei(t.toJSON());let r;for(let o in e){let c=Gs[o.toLowerCase()];if(c===Sn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=Xf(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){it.error(_)}}}r&&YO(t,r),Zf(t);let s=t.toJSON();St=ei(s);let n=t.getIn(["rootPath"]),i=qr.join(n,Or.HDB_CONFIG_FILE);qt.createFileSync(i),qt.writeFileSync(i,String(t)),it.trace(`Config file written to ${i}`)}a(gV,"createConfigFile");function YO(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!dt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ba.TABLES))for(let i in s[n][ba.TABLES])for(let o in s[n][ba.TABLES][i]){let c=s[n][ba.TABLES][i][o],u=[Sn.SCHEMAS,n,ba.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=[Sn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){it.error("Error parsing schemas CLI/env config arguments",s)}}a(YO,"setSchemasConfig");function AV(e){if(ll===void 0){let r=pn($O);ll=ei(r.toJSON())}let t=Gs[e.toLowerCase()];if(t!==void 0)return ll[t.toLowerCase()]}a(AV,"getDefaultConfig");function KO(e){if(e==null){it.error(TV);return}if(St===void 0){it.trace(mV);return}let t=Gs[e.toLowerCase()];if(t!==void 0)return St[t.toLowerCase()]}a(KO,"getConfigValue");function jn(e=dt.getPropsFilePath()){let t=dt.getEnvCliRootPath();return t?qr.join(t,Or.HDB_CONFIG_FILE):VO(e).get(Or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(jn,"getConfigFilePath");function WO(e=!1){if(St===void 0||e){let t;if(!dt.noBootFile()){t=dt.getPropsFilePath();try{qt.accessSync(t,qt.constants.F_OK|qt.constants.R_OK)}catch(i){throw it.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=jn(t),s;if(r.includes("config/settings.js"))try{zO(r);return}catch(i){if(i.code!==Or.NODE_ERROR_CODES.ENOENT)throw i}try{s=pn(r)}catch(i){if(i.code===Or.NODE_ERROR_CODES.ENOENT){it.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 it.error(i),new Error(`Error reading HarperDB config file at ${r}`)}OV(s,r),Zf(s);let n=s.toJSON();if(hV.config=n,St=ei(n),St.logging_rotation_rotate)for(let i in kO)St[i]&&it.error(`Config ${kO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);it.trace(SV)}}a(WO,"initConfig");function OV(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],qr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(it.trace("Updating config file with missing config params"),qt.writeFileSync(t,String(e)))}a(OV,"checkForUpdatedConfig");function Zf(e){let t=e.toJSON(),r=uV(t);if(r.error)throw ul.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(Zf,"validateConfig");function NV(e,t){St===void 0&&(St={});let r=Gs[e.toLowerCase()];if(r===void 0){it.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(NV,"updateConfigObject");function QO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&WO();let o=KO(Gs.hdb_root),c=qr.join(o,Or.HDB_CONFIG_FILE),u=pn(c),l;if(r===void 0&&e.toLowerCase()===Sn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Xf(E,t);u.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===Sn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=Xf(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){it.error(T)}}}l&&YO(u,l),Zf(u);let _=u.getIn(["rootPath"]),d=qr.join(_,Or.HDB_CONFIG_FILE);s===!0&&bV(c,_),qt.writeFileSync(d,String(u)),n&&(St=ei(u.toJSON())),it.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QO,"updateConfigValue");function bV(e,t){try{let r=qr.join(t,"backup",`${Or.HDB_CONFIG_FILE}.bak`);qt.copySync(e,r),it.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){it.error(pV),it.error(r)}}a(bV,"backupConfigFile");var yV=["schemas"];function ei(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!yV.includes(r)){let s=ei(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(ei,"flattenConfig");function Xf(e,t){if(e===Sn.CLUSTERING_NODENAME||e===Sn.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(_V(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||dt.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 dt.autoCast(t)}a(Xf,"castConfigValue");function IV(){let e=dt.getPropsFilePath(),t=jn(e);return pn(t).toJSON()}a(IV,"getConfiguration");async function wV(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return QO(void 0,void 0,n,!0),RV}catch(i){throw typeof i=="string"||i instanceof String?EV(i,i,fV.BAD_REQUEST,void 0,void 0,!0):i}}a(wV,"setConfiguration");function jf(){let e=dt.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(s){if(!dt.noBootFile())throw it.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=jn(e);return pn(t).toJSON()}a(jf,"readConfigFile");function pn(e){return lV.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(pn,"parseYamlDoc");function CV(){let e=jf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=dt.isEmptyOrZeroLength(t)?[]:t;let r=xO(t);if(r)throw ul.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=dt.isEmptyOrZeroLength(s)?[]:s;let n=xO(s);if(n)throw ul.CONFIG_VALIDATION(n.message);if(!dt.isEmptyOrZeroLength(s)&&!dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ul.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(CV,"getClusteringRoutes");function zO(e){let t=VO(e);St={};for(let r in Gs){let s=t.get(r.toUpperCase());if(dt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Gs[r].toLowerCase();n===Sn.LOGGING_ROOT?St[n]=qr.dirname(s):St[n]=s}return St}a(zO,"initOldConfig");function UV(e){let t=jf();return dV.get(t,e.replaceAll("_","."))}a(UV,"getConfigFromFile");async function DV(e,t){let r=pn(jn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await qt.writeFile(jn(),String(r))}a(DV,"addConfig");function LV(e){let t=jn(dt.getPropsFilePath()),r=pn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=qr.join(s,Or.HDB_CONFIG_FILE);qt.writeFileSync(n,String(r))}a(LV,"deleteConfigFromFile")});var ZO=m((Aie,XO)=>{"use strict";var _l=g(),dl=class{static{a(this,"BaseLicense")}constructor(t=0,r=_l.RAM_ALLOCATION_ENUM.DEFAULT,s=_l.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},eh=class extends dl{static{a(this,"ExtendedLicense")}constructor(t=0,r=_l.RAM_ALLOCATION_ENUM.DEFAULT,s=_l.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};XO.exports={BaseLicense:dl,ExtendedLicense:eh}});var ya=m((Nie,nN)=>{"use strict";var $i=require("fs-extra"),jO=il(),eN=require("crypto"),MV=require("moment"),PV=require("uuid").v4,wt=F(),rh=require("path"),vV=k(),Tn=g(),BV=ZO().ExtendedLicense,Vi="invalid license key format",HV="061183",qV="mofi25",FV="aes-256-cbc",GV=16,xV=32,tN=W();tN.initSync();var th;nN.exports={validateLicense:rN,generateFingerPrint:VV,licenseSearch:sN,getLicense:KV};function sh(){return rh.join(tN.getHdbBasePath(),Tn.LICENSE_KEY_DIR_NAME,Tn.LICENSE_FILE_NAME)}a(sh,"getLicenseDirPath");function kV(){let e=sh();return rh.join(e,Tn.LICENSE_FILE_NAME)}a(kV,"getLicenseFilePath");function nh(){let e=sh();return rh.join(e,Tn.REG_KEY_FILE_NAME)}a(nh,"getFingerPrintFilePath");async function VV(){let e=nh();try{return await $i.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await $V();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(VV,"generateFingerPrint");async function $V(){let e=PV(),t=jO.hash(e),r=nh();try{await $i.mkdirp(sh()),await $i.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a($V,"writeFingerprint");function rN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Tn.RAM_ALLOCATION_ENUM.DEFAULT,version:Tn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=nh(),n=!1;try{n=$i.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=$i.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(qV),c=o[1];c=Buffer.concat([Buffer.from(c)],GV);let u=Buffer.concat([Buffer.from(i)],xV),l=eN.createDecipheriv(FV,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=YV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vi),wt.error(Vi),new Error(Vi)}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(Vi),wt.error(Vi),new Error(Vi)}else r.exp_date=_;r.exp_date<MV().valueOf()&&(r.valid_date=!1),jO.validate(o[1],`${HV}${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(rN,"validateLicense");function YV(e,t){try{let r=eN.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(YV,"checkOldLicense");function sN(){let e=new BV,t=[];try{t=$i.readFileSync(kV(),"utf-8").split(Tn.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(vV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=rN(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=Tn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return th=e,e}a(sN,"licenseSearch");async function KV(){return th||await sN(),th}a(KV,"getLicense")});var br=m((Cie,RN)=>{"use strict";var uN="username is required",lN="nothing to update, must supply active, role or password to update",_N="password cannot be an empty string",dN="If role is specified, it cannot be empty.",EN="active must be true or false";RN.exports={addUser:t$,alterUser:r$,dropUser:n$,getSuperUser:c$,userInfo:i$,listUsers:fl,listUsersExternal:o$,setUsersToGlobal:Ki,findAndValidateUser:TN,getClusterUser:u$,USERNAME_REQUIRED:uN,ALTERUSER_NOTHING_TO_UPDATE:lN,EMPTY_PASSWORD:_N,EMPTY_ROLE:dN,ACTIVE_BOOLEAN:EN};var fN=ir(),WV=mn(),oh=il(),hN=UO(),mN=Ar(),ah=xs(),ar=k(),SN=require("validate.js"),ue=F(),{promisify:QV}=require("util"),ch=vs(),iN=g(),oN=be(),zV=Nr(),yie=W(),Iie=ya(),JV=Wn(),{table:wie}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:XV}=Q(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:ih,HDB_ERROR_MSGS:Yi}=XV,{UserEventMsg:uh}=Fr(),aN=require("lodash"),{_assignPackageExport:ZV}=require("../index");ZV("getUser",TN);var pN={username:!0,active:!0,role:!0,password:!0},cN=new Map,El=mN.searchByValue,jV=mN.searchByHash,e$=QV(WV.delete);async function t$(e){let t=SN.cleanAttributes(e,pN),r=hN.addUserValidation(t);if(r)throw is(new Error,r.message,os.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await El(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw is(new Error,Yi.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,Yi.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=ch.encrypt(t.password)),t.password=oh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Ki()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,Yi.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ah.signalUserChange(new uh(process.pid)),`${c.username} successfully added`}a(t$,"addUser");async function r$(e){let t=SN.cleanAttributes(e,pN);if(ar.isEmptyOrZeroLength(t.username))throw new Error(uN);if(ar.isEmptyOrZeroLength(t.password)&&ar.isEmptyOrZeroLength(t.role)&&ar.isEmptyOrZeroLength(t.active))throw new Error(lN);if(!ar.isEmpty(t.password)&&ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(_N);if(!ar.isEmpty(t.active)&&!ar.isBoolean(t.active))throw new Error(EN);let r=s$(t.username);if(!ar.isEmpty(t.password)&&!ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=ch.encrypt(t.password)),t.password=oh.hash(t.password)),t.role==="")throw new Error(dN);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 El(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Yi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await fN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Ki()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return ah.signalUserChange(new uh(process.pid)),n}a(r$,"alterUser");function s$(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(s$,"isClusterUser");async function n$(e){try{let t=hN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ar.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,Yi.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await e$(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Ki()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return ah.signalUserChange(new uh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(n$,"dropUser");async function i$(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 jV(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(i$,"userInfo");async function o$(){let e;try{e=await fl()}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(o$,"listUsersExternal");async function fl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await El(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]=aN.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 El(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=aN.cloneDeep(o),o.role=r[o.role],a$(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),ar.errorizeMessage(e)}return null}a(fl,"listUsers");function a$(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(JV)){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(a$,"appendSystemTablesToRole");async function Ki(){try{let e=await fl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Ki,"setUsersToGlobal");async function TN(e,t,r=!0){global.hdb_users||await Ki();let s=global.hdb_users.get(e);if(!s)throw is(new Error,ih.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,ih.USER_INACTIVE,os.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(cN.get(t)===s.password)return n;if(oh.validate(s.password,t))cN.set(t,s.password);else throw is(new Error,ih.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(TN,"findAndValidateUser");async function c$(){global.hdb_users||await Ki();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(c$,"getSuperUser");async function u$(){let e=await fl(),t=zV.getConfigFromFile(iN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ar.isEmpty(r)&&r?.role?.role===iN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=ch.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oN.SERVER_SUFFIX.ADMIN,r}a(u$,"getClusterUser")});var wa=m((Mie,NN)=>{"use strict";var ti=F(),cr=g(),l$=XA(),Die=Bs(),Lie=En(),_$=br(),{validateEvent:gN}=Fr(),Ia=Hr(),d$=require("process"),{resetDatabases:E$}=(de(),re(Ne)),f$={[cr.ITC_EVENT_TYPES.SCHEMA]:h$,[cr.ITC_EVENT_TYPES.USER]:ON};async function h$(e){let t=gN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await l$(e.message),await m$(e.message)}a(h$,"schemaHandler");async function m$(e){try{Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=E$();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(m$,"syncSchemaMetadata");var AN=[];async function ON(e){try{try{Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=gN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${d$.pid} received user event:`,e),await _$.setUsersToGlobal();for(let r of AN)r()}catch(t){ti.error(t)}}a(ON,"userHandler");ON.addListener=function(e){AN.push(e)};NN.exports=f$});var Fr=m((Fie,yN)=>{"use strict";var vie=F(),lh=k(),S$=g(),{ITC_ERRORS:Ca}=rr(),{parentPort:Bie,threadId:p$,isMainThread:T$,workerData:Hie}=require("worker_threads"),{onMessageFromWorkers:R$,broadcast:qie,broadcastWithAcknowledgement:g$}=Ve();yN.exports={sendItcEvent:A$,validateEvent:bN,SchemaEventMsg:O$,UserEventMsg:N$};var hl;R$(async(e,t)=>{hl=hl||wa(),bN(e),hl[e.type]&&await hl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function A$(e){return!T$&&e.message&&(e.message.originator=p$),g$(e)}a(A$,"sendItcEvent");function bN(e){if(typeof e!="object")return Ca.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||lh.isEmpty(e.type))return Ca.MISSING_TYPE;if(!e.hasOwnProperty("message")||lh.isEmpty(e.message))return Ca.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||lh.isEmpty(e.message.originator))return Ca.MISSING_ORIGIN;if(S$.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ca.INVALID_EVENT(e.type)}a(bN,"validateEvent");function O$(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(O$,"SchemaEventMsg");function N$(e){this.originator=e}a(N$,"UserEventMsg")});var xs=m((kie,UN)=>{"use strict";var IN=g(),xie=k(),ml=F(),wN=QA(),Wi,{sendItcEvent:CN}=Fr();function b$(e){try{ml.trace("signalSchemaChange called with message:",e),Wi=Wi||wa();let t=new wN(IN.ITC_EVENT_TYPES.SCHEMA,e);return Wi.schema(t),CN(t)}catch(t){ml.error(t)}}a(b$,"signalSchemaChange");function y$(e){try{ml.trace("signalUserChange called with message:",e),Wi=Wi||wa();let t=new wN(IN.ITC_EVENT_TYPES.USER,e);return Wi.user(t),CN(t)}catch(t){ml.error(t)}}a(y$,"signalUserChange");UN.exports={signalSchemaChange:b$,signalUserChange:y$}});var Sl=m(($ie,LN)=>{"use strict";var DN=k(),I$=g(),w$=F(),C$=Qu(),U$=Wu(),D$=xs(),{SchemaEventMsg:L$}=Fr(),M$="already exists in";LN.exports=P$;async function P$(e,t,r){if(DN.isEmptyOrZeroLength(r))return r;let s=[];DN.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 v$(e,t.schema,t.name,i)})),n}a(P$,"lmdbCheckForNewAttributes");async function v$(e,t,r,s){let n=new U$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await B$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(M$))w$.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(v$,"createNewAttribute");async function B$(e){let t;return t=await C$(e),D$.signalSchemaChange(new L$(process.pid,I$.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(B$,"createAttribute")});var Qi=m((Kie,MN)=>{"use strict";var _h=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};MN.exports=_h});var vN=m((Qie,PN)=>{"use strict";var H$=Qi(),q$=g().OPERATIONS_ENUM,dh=class extends H${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(q$.INSERT,r,s,n,i),this.records=t}};PN.exports=dh});var HN=m((Jie,BN)=>{"use strict";var F$=Qi(),G$=g().OPERATIONS_ENUM,Eh=class extends F${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(G$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};BN.exports=Eh});var FN=m((Zie,qN)=>{"use strict";var x$=Qi(),k$=g().OPERATIONS_ENUM,fh=class extends x${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(k$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};qN.exports=fh});var xN=m((eoe,GN)=>{"use strict";var V$=Qi(),$$=g().OPERATIONS_ENUM,hh=class extends V${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super($$.DELETE,s,n,t,i),this.original_records=r}};GN.exports=hh});var Ua=m((soe,YN)=>{"use strict";var roe=require("path"),kN=Ie(),Y$=vN(),K$=HN(),W$=FN(),Q$=xN(),zi=ke(),VN=k(),{CONFIG_PARAMS:z$}=g(),$N=W();$N.initSync();var pl=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:J$}=Ce();YN.exports=X$;async function X$(e,t){if($N.get(z$.LOGGING_AUDITLOG)===!1)return;let r=J$(e.schema,e.table),s=await kN.openEnvironment(r,e.table,!0),n=Z$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){kN.initializeDBIs(s,zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),VN.isEmpty(n.user_name)||s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(X$,"writeTransaction");function Z$(e,t){let r=VN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===pl.INSERT)return new Y$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.UPDATE)return new K$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.UPSERT)return new W$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.DELETE)return new Q$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Z$,"createTransactionObject")});var mh=m((ooe,KN)=>{"use strict";var j$=pa(),ioe=Ta(),Da=g(),eY=Oa(),tY=Fi().insertRecords,rY=Ie(),sY=F(),nY=Sl(),{getSchemaPath:iY}=Ce(),oY=Ua();KN.exports=aY;async function aY(e){try{let{schema_table:t,attributes:r}=j$(e);eY(e,r,t.hash_attribute),e.schema!==Da.SYSTEM_SCHEMA_NAME&&(r.includes(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await nY(e.hdb_auth_header,t,r),n=iY(e.schema,e.table),i=await rY.openEnvironment(n,e.table),o=await tY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await oY(e,o)}catch(c){sY.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(aY,"lmdbCreateRecords")});var zN=m((coe,QN)=>{"use strict";var WN=g(),cY=mh(),uY=Ta(),lY=require("fs-extra"),{getSchemaPath:_Y}=Ce();QN.exports=dY;async function dY(e){let t=[{name:e.schema,createddate:Date.now()}],r=new uY(WN.SYSTEM_SCHEMA_NAME,WN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await cY(r),await lY.mkdirp(_Y(e.schema))}a(dY,"lmdbCreateSchema")});var XN=m((loe,JN)=>{"use strict";var Sh=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}};JN.exports=Sh});var tb=m((hoe,eb)=>{"use strict";var ZN=Ie(),ph=vt(),Th=rr().LMDB_ERRORS_ENUM,EY=ke(),jN=F(),doe=k(),fY=require("lmdb"),hY=XN(),mY=g(),{OVERFLOW_MARKER:Eoe,MAX_SEARCH_KEY_LENGTH:foe}=EY,SY=mY.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function pY(e,t,r,s){if(ph.validateEnv(e),t===void 0)throw new Error(Th.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Th.IDS_REQUIRED):new Error(Th.IDS_MUST_BE_ITERABLE);try{let n=ZN.listDBIs(e);ZN.initializeDBIs(e,t,n);let i=new hY,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[SY]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,fY.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let R=n[T];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],V=h[R];if(V!=null)try{let $=ph.getIndexedValues(V);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{jN.warn(`cannot delete from attribute: ${R}, ${V}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jN.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=ph.getNextMonotonicTime(),i}catch(n){throw n}}a(pY,"deleteRecords");eb.exports={deleteRecords:pY}});var La=m((Soe,sb)=>{"use strict";var Ji=k(),TY=tb(),RY=Ie(),{getSchemaPath:gY}=Ce(),AY=Ua(),OY=F();sb.exports=NY;async function NY(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ji.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ji.isEmptyOrZeroLength(e.hash_values)&&!Ji.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ji.isEmpty(u)||e.hash_values.push(u)}}if(Ji.isEmptyOrZeroLength(e.hash_values))return rb([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ji.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=gY(e.schema,e.table),i=await RY.openEnvironment(n,e.table),o=await TY.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await AY(e,o)}catch(c){OY.error(`unable to write transaction due to ${c.message}`)}return rb(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(NY,"lmdbDeleteRecords");function rb(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(rb,"createDeleteResponse")});var gh=m((Roe,nb)=>{"use strict";var bY=g(),Toe=vt();function Rh(e,t){let r=Object.create(null);if(t.length===1&&bY.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(Rh,"parseRow");function yY(e,t,r,s){let n=Rh(r,e);s.push(n)}a(yY,"searchAll");function IY(e,t,r,s){let n=Rh(r,e);s[t]=n}a(IY,"searchAllToMap");function wY(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(wY,"iterateDBI");function ri(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ri,"pushResults");function CY(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(CY,"endsWith");function UY(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(UY,"contains");function DY(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(DY,"greaterThanCompare");function LY(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a(LY,"greaterThanEqualCompare");function MY(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(MY,"lessThanCompare");function PY(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(PY,"lessThanEqualCompare");nb.exports={parseRow:Rh,searchAll:yY,searchAllToMap:IY,iterateDBI:wY,endsWith:CY,contains:UY,greaterThanCompare:DY,greaterThanEqualCompare:LY,lessThanCompare:MY,lessThanEqualCompare:PY,pushResults:ri}});var Xi=m((boe,_b)=>{"use strict";var Rn=Ie(),Aoe=F(),ur=vt(),Tl=ke(),$e=rr().LMDB_ERRORS_ENUM,Ooe=k(),vY=g(),Rl=gh(),{parseRow:BY}=Rl,Noe=require("lmdb"),{OVERFLOW_MARKER:ib,MAX_SEARCH_KEY_LENGTH:HY}=Tl;function ob(e,t,r,s=!1,n=void 0,i=void 0){return si(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ob,"iterateFullIndex");function Ma(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(V=>({value:V}))):d.getRange(O)})}a(Ma,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=Rn.openDBI(n,r);i[Tl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(si,"setupTransaction");function ab(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ib)){if(!n)if(r)n=Rn.openDBI(e,r);else{let u=Rn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Rn.openDBI(e,u[l]),!n[Tl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(ab,"getOverflowCheck");function qY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return si(e,t,t,(o,c,u)=>(gl(r),r=Pa(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>BY(l.value,r))))}a(qY,"searchAll");function FY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);gl(r),r=Pa(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ob(e,t,t,s,n,i))o.set(c,Rl.parseRow(u,r));return o}a(FY,"searchAllToMap");function GY(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ob(e,void 0,t,r,s,n),c=o.transaction,u=ab(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(GY,"iterateDBI");function xY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return Rn.statDBI(e,t).entryCount}a(xY,"countAll");function kY(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(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(kY,"equals");function VY(e,t,r){return gn(e,t,r),Rn.openDBI(e,t).getValuesCount(r)}a(VY,"count");function $Y(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(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($Y,"startsWith");function YY(e,t,r,s,n=!1,i=void 0,o=void 0){return cb(e,t,r,s,n,i,o,!0)}a(YY,"endsWith");function cb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return gn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=ab(_,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(ib)?l.getValues(f,{transaction:u}).map(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[Tl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cb,"contains");function KY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!0,!1)}a(KY,"greaterThan");function WY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!1,!1)}a(WY,"greaterThanEqual");function QY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!0)}a(QY,"lessThan");function zY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!1)}a(zY,"lessThanEqual");function JY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.validateEnv(e),r===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error($e.START_VALUE_REQUIRED);if(n===void 0)throw new Error($e.END_VALUE_REQUIRED);if(s=ur.convertKeyValueToWrite(s),n=ur.convertKeyValueToWrite(n),s>n)throw new Error($e.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ma(e,t,r,s,n,i,o,c)}a(JY,"between");function XY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(gl(r),r=Pa(n,r),s===void 0)throw new Error($e.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Rl.parseRow(c,r)),o}a(XY,"searchByHash");function ZY(e,t,r){ur.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(ZY,"checkHashExists");function jY(e,t,r,s,n=[]){return lb(e,t,r,s,n),ub(e,t,r,s,n).map(i=>i[1])}a(jY,"batchSearchByHash");function eK(e,t,r,s,n=[]){lb(e,t,r,s,n);let i=new Map;for(let[o,c]of ub(e,t,r,s,n))i.set(o,c);return i}a(eK,"batchSearchByHashToMap");function ub(e,t,r,s,n=[]){return si(e,t,t,(i,o,c)=>{r=Pa(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Rl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(ub,"batchHashSearch");function lb(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(gl(r),s==null)throw new Error($e.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error($e.IDS_MUST_BE_ITERABLE)}a(lb,"initializeBatchSearchByHash");function gl(e){if(!Array.isArray(e))throw e===void 0?new Error($e.FETCH_ATTRIBUTES_REQUIRED):new Error($e.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(gl,"validateFetchAttributes");function gn(e,t,r){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.SEARCH_VALUE_REQUIRED);if(r?.length>HY)throw new Error($e.SEARCH_VALUE_TOO_LARGE)}a(gn,"validateComparisonFunctions");function Pa(e,t){return t.length===1&&vY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rn.listDBIs(e)),t}a(Pa,"setGetWholeRowAttributes");_b.exports={searchAll:qY,searchAllToMap:FY,count:VY,countAll:xY,equals:kY,startsWith:$Y,endsWith:YY,contains:cb,searchByHash:XY,setGetWholeRowAttributes:Pa,batchSearchByHash:jY,batchSearchByHashToMap:eK,checkHashExists:ZY,iterateDBI:GY,greaterThan:KY,greaterThanEqual:WY,lessThan:QY,lessThanEqual:zY,between:JY}});var Zi=m((Ioe,mb)=>{var db=require("lodash"),Eb=Ue(),De=require("joi"),tK=k(),{hdb_schema_table:Al,checkValidTable:fb,hdb_table:hb,hdb_database:Ol}=ss(),{handleHDBError:rK,hdb_errors:sK}=Q(),{getDatabases:nK}=(de(),re(Ne)),{HTTP_STATUS_CODES:iK}=sK,oK=De.object({database:Ol,schema:Ol,table:hb,search_attribute:Al,search_value:De.any().required(),get_attributes:De.array().min(1).items(Al).optional(),desc:De.bool(),limit:De.number().integer().min(1),offset:De.number().integer().min(0)}),aK=De.object({database:Ol,schema:Ol,table:hb,operator:De.string().valid("and","or").default("and").lowercase(),offset:De.number().integer().min(0),limit:De.number().integer().min(1),get_attributes:De.array().min(1).items(Al).optional(),conditions:De.array().min(1).items(De.object({search_attribute:Al,search_type:De.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:De.when("search_type",{switch:[{is:"equals",then:De.any()},{is:"between",then:De.array().items(De.alternatives([De.string(),De.number()])).length(2)}],otherwise:De.alternatives(De.string(),De.number())}).required()})).required()});mb.exports=function(e,t){let r=null;switch(t){case"value":r=Eb.validateBySchema(e,oK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(fb("database",e.schema)),i(fb("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Eb.validateBySchema(e,aK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=tK.checkGlobalSchemaTable(e.schema,e.table);if(n)return rK(new Error,n,iK.NOT_FOUND);let o=nK()[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=db.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!db.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 Ah=m((Coe,Sb)=>{"use strict";var cK=Ie(),uK=Zi(),{getSchemaPath:lK}=Ce();Sb.exports=_K;function _K(e){let t=uK(e,"hashes");if(t)throw t;let r=lK(e.schema,e.table);return cK.openEnvironment(r,e.table)}a(_K,"initialize")});var Oh=m((Doe,pb)=>{"use strict";var dK=Xi(),EK=Ah();pb.exports=fK;async function fK(e){let t=await EK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return dK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(fK,"lmdbGetDataByHash")});var ji=m((Moe,Tb)=>{"use strict";var Nh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Tb.exports=Nh});var gb=m((Boe,Rb)=>{"use strict";var voe=ji(),hK=Xi(),mK=Ah();Rb.exports=SK;async function SK(e){let t=await mK(e),r=global.hdb_schema[e.schema][e.table];return hK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(SK,"lmdbSearchByHash")});var as=m((qoe,Ab)=>{"use strict";var bh=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=_}};Ab.exports=bh});var Nl=m((Goe,wb)=>{"use strict";var Ct=Xi(),pK=Ie(),TK=k(),ie=ke(),ni=g(),RK=Wn(),Ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:gK}=Ce(),ks=ni.SEARCH_WILDCARDS;async function AK(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=RK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Ib(e,s.hash_attribute,r,t);return bb(e,n,s.hash_attribute,r)}a(AK,"prepSearch");async function bb(e,t,r,s){let n=gK(e.schema,e.table),i=await pK.openEnvironment(n,e.table),o=yb(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(OK(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Nb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?Nb(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(bb,"executeSearch");function yb(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(yb,"searchByType");function Nb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Nb,"createMapFromIterable");function OK(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(OK,"checkToFetchMore");function Ib(e,t,r,s){if(TK.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(Ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ob.UNKNOWN_SEARCH_TYPE)}}a(Ib,"createSearchTypeFromSearchObject");wb.exports={executeSearch:bb,createSearchTypeFromSearchObject:Ib,prepSearch:AK,searchByType:yb}});var Ub=m((Voe,Cb)=>{"use strict";var koe=as(),NK=Zi(),bK=k(),yK=g(),IK=Nl();Cb.exports=wK;function wK(e,t){if(!bK.isEmpty(t)&&yK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=NK(e,"value");if(s)throw s;let n=!0;return IK.prepSearch(e,t,n)}a(wK,"lmdbGetDataByValue")});var va=m((Koe,Db)=>{"use strict";var Yoe=as(),CK=Zi(),UK=k(),DK=g(),LK=Nl();Db.exports=MK;async function MK(e,t){if(!UK.isEmpty(t)&&DK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=CK(e,"value");if(s)throw s;return LK.prepSearch(e,t,!1)}a(MK,"lmdbSearchByValue")});var Mb=m((zoe,Lb)=>{"use strict";var Qoe=ke(),yh=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}},Ih=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},wh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Lb.exports={SearchByConditionsObject:yh,SearchCondition:Ih,SortAttribute:wh}});var qb=m((joe,Hb)=>{"use strict";var Xoe=Mb().SearchByConditionsObject,PK=as(),vK=Zi(),Ch=Xi(),bl=ke(),{Resource:Zoe}=(Zr(),re(VE)),Bb=Nl(),BK=gh(),HK=require("lodash"),{getSchemaPath:qK}=Ce(),Pb=Ie(),{handleHDBError:FK,hdb_errors:GK}=Q(),{HTTP_STATUS_CODES:xK}=GK,kK=1e8;Hb.exports=VK;async function VK(e){let t=vK(e,"conditions");if(t)throw FK(t,t.message,xK.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=qK(e.schema,e.table),s=await Pb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Pb.openDBI(s,l.search_attribute);let i=HK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===bl.SEARCH_TYPES.EQUALS?l.estimated_count=Ch.count(s,l.search_attribute,l.search_value):_===bl.SEARCH_TYPES.CONTAINS||_===bl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=kK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await vb(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(Bb.filterByType),d=_.length,E=Ch.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=>BK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vb(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=Ch.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(VK,"lmdbSearchByConditions");async function vb(e,t,r,s){let n=new PK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===bl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Bb.searchByType(e,n,i,s).map(o=>o.value)}a(vb,"executeConditionSearch")});var eo=m((tae,Fb)=>{"use strict";var $K=g().OPERATIONS_ENUM,Uh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=$K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Fb.exports=Uh});var Dh=m((sae,Wb)=>{"use strict";var Vb=as(),$b=eo(),Yb=va(),Kb=La(),Ft=g(),Gb=k(),xb=Ie(),{getTransactionAuditStorePath:YK,getSchemaPath:KK}=Ce(),kb=F();Wb.exports=WK;async function WK(e){try{if(Gb.isEmpty(global.hdb_schema[e.schema])||Gb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await QK(e),await zK(e);let t=KK(e.schema,e.table);try{await xb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=YK(e.schema,e.table);await xb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(WK,"lmdbDropTable");async function QK(e){let t=new Vb(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 Yb(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 $b(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Kb(n)}a(QK,"deleteAttributesFromSystem");async function zK(e){let t=new Vb(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 Yb(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 $b(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Kb(n)}catch(i){throw i}}a(zK,"dropTableFromSystem")});var zb=m((iae,Qb)=>{"use strict";var JK=require("fs-extra"),XK=as(),ZK=ji(),jK=eo(),e1=Dh(),t1=La(),r1=Oh(),s1=va(),Vs=g(),{getSchemaPath:n1}=Ce(),{handleHDBError:i1,hdb_errors:o1}=Q(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:c1}=o1;Qb.exports=u1;async function u1(e){let t;try{t=await l1(e.schema);let r=new XK(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 s1(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await e1(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new jK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await t1(n);let i=n1(t);await JK.remove(i)}catch(r){throw r}}a(u1,"lmdbDropSchema");async function l1(e){let t=new ZK(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 r1(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw i1(new Error,a1.SCHEMA_NOT_FOUND(e),c1.NOT_FOUND,void 0,void 0,!0);return s}a(l1,"validateDropSchema")});var yl=m((aae,Jb)=>{"use strict";var Lh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Jb.exports=Lh});var Zb=m((lae,Xb)=>{"use strict";var _1=require("fs-extra"),Il=Ie(),{getTransactionAuditStorePath:d1}=Ce(),Mh=ke(),uae=yl();Xb.exports=E1;async function E1(e){let t;try{let r=d1(e.schema,e.table);await _1.mkdirp(r),t=await Il.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{Il.createDBI(t,Mh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Il.createDBI(t,Mh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Il.createDBI(t,Mh.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(E1,"createTransactionsAuditEnvironment")});var ry=m((dae,ty)=>{"use strict";var Ph=g(),jb=Ie(),f1=Fi(),{getSystemSchemaPath:h1,getSchemaPath:m1}=Ce(),S1=Wn(),p1=Qu(),vh=Wu(),T1=F(),R1=Zb(),Hh=S1.hdb_table,ey=[];for(let e=0;e<Hh.attributes.length;e++)ey.push(Hh.attributes[e].attribute);ty.exports=g1;async function g1(e,t){let r=m1(t.schema,t.table),s=new vh(t.schema,t.table,Ph.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new vh(t.schema,t.table,Ph.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jb.createEnvironment(r,t.table),e!==void 0){let o=await jb.openEnvironment(h1(),Ph.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await f1.insertRecords(o,Hh.hash_attribute,ey,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Bh(s),await Bh(n),await Bh(i)}await R1(t)}catch(o){throw o}}a(g1,"lmdbCreateTable");async function Bh(e){try{await p1(e)}catch(t){T1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Bh,"createAttribute")});var ny=m((fae,sy)=>{"use strict";var A1=pa(),O1=Oa(),N1=Sl(),Ba=g(),b1=Fi().updateRecords,y1=Ie(),{getSchemaPath:I1}=Ce(),w1=Ua(),C1=F();sy.exports=U1;async function U1(e){try{let{schema_table:t,attributes:r}=A1(e);O1(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 N1(e.hdb_auth_header,t,r),n=I1(e.schema,e.table),i=await y1.openEnvironment(n,e.table),o=await b1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await w1(e,o)}catch(c){C1.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(U1,"lmdbUpdateRecords")});var oy=m((mae,iy)=>{"use strict";var D1=g().OPERATIONS_ENUM,qh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=D1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};iy.exports=qh});var cy=m((Tae,ay)=>{"use strict";var pae=oy(),L1=pa(),M1=Oa(),P1=Sl(),Ha=g(),v1=Fi().upsertRecords,B1=Ie(),{getSchemaPath:H1}=Ce(),q1=Ua(),F1=F(),{handleHDBError:G1,hdb_errors:x1}=Q();ay.exports=k1;async function k1(e){let t;try{t=L1(e)}catch(u){throw G1(u,u.message,x1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;M1(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 P1(e.hdb_auth_header,r,s),i=H1(e.schema,e.table),o=await B1.openEnvironment(i,e.table),c=await v1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await q1(e,c)}catch(u){F1.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(k1,"lmdbUpsertRecords")});var ly=m((gae,uy)=>{"use strict";var Fh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};uy.exports=Fh});var dy=m((Oae,_y)=>{"use strict";var Gh=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}};_y.exports=Gh});var hy=m((yae,fy)=>{"use strict";var xh=Ie(),{getTransactionAuditStorePath:V1}=Ce(),bae=ly(),qa=ke(),$1=k(),Ey=dy(),Y1=require("util").promisify,K1=Y1(setTimeout),W1=1e4,Q1=100;fy.exports=z1;async function z1(e){let t=V1(e.schema,e.table),r=await xh.openEnvironment(t,e.table,!0),s=xh.listDBIs(r);xh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Ey;do n=await J1(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 K1(Q1);while(n.transactions_deleted>0);return i}a(z1,"deleteAuditLogsBefore");async function J1(e,t){let r=new Ey;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];$1.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>W1)break}return await n,r}catch(s){throw s}}a(J1,"deleteTransactions")});var Sy=m((wae,my)=>{"use strict";var kh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};my.exports=kh});var Ty=m((Dae,py)=>{"use strict";var X1=as(),Z1=eo(),Uae=Sy(),cs=g(),j1=k(),Vh=Ie(),eW=Wn(),tW=va(),rW=La(),{getSchemaPath:sW}=Ce();py.exports=nW;async function nW(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=eW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oW(e),n=sW(e.schema,e.table),i=await Vh.openEnvironment(n,e.table);return t===!0&&await iW(e,i,r.hash_attribute),Vh.dropDBI(i,e.attribute),s}a(nW,"lmdbDropAttribute");async function iW(e,t,r){let s=Vh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(iW,"removeAttributeFromAllObjects");async function oW(e){let t=new X1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await tW(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(j1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Z1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rW(i)}a(oW,"dropAttributeFromSystem")});var by=m((Pae,Ny)=>{"use strict";var $h=Ie(),to=ke(),Mae=vt(),Yh=g(),Ry=k(),{getTransactionAuditStorePath:aW}=Ce(),cW=Xi(),wl=Qi(),uW=F();Ny.exports=lW;async function lW(e){let t=aW(e.schema,e.table),r=await $h.openEnvironment(t,e.table,!0),s=$h.listDBIs(r);$h.initializeDBIs(r,to.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gy(r,e.search_values);case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,dW(r,e.search_values,n);case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _W(r,e.search_values);default:return gy(r)}}a(lW,"readAuditLog");function gy(e,t=[0,Date.now()]){Ry.isEmpty(t[0])&&(t[0]=0),Ry.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[to.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 wl,n))}a(gy,"searchTransactionsByTimestamp");function _W(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[to.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Oy(e,i))}return Object.fromEntries(r)}a(_W,"searchTransactionsByUsername");function dW(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=cW.equals(e,to.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,to.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=Oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Ay(u,"records",r,_,o),Ay(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(dW,"searchTransactionsByHashValues");function Ay(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 wl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new wl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Ay,"loopRecords");function Oy(e,t){let r=[];try{let s=e.dbis[to.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 wl,i);r.push(o)}}catch(i){uW.warn(i)}return r}catch(s){throw s}}a(Oy,"batchSearchTransactions")});var Iy=m((qae,yy)=>{"use strict";var{getSchemaPath:Bae}=Ce(),Hae=Ie(),{database:EW}=(de(),re(Ne));yy.exports={writeTransaction:fW};async function fW(e,t,r){return EW({database:e,table:t}).transaction(r)}a(fW,"writeTransaction")});var Dy=m((Gae,Uy)=>{"use strict";var{getSchemaPath:wy}=Ce(),Cy=Ie();Uy.exports={flush:hW,resetReadTxn:mW};async function hW(e,t){return(await Cy.openEnvironment(wy(e,t),t.toString())).flushed}a(hW,"flush");async function mW(e,t){try{(await Cy.openEnvironment(wy(e,t),t.toString())).resetReadTxn()}catch{}}a(mW,"resetReadTxn")});var vy=m((kae,Py)=>{"use strict";var{Readable:SW}=require("stream"),{getDatabases:pW}=(de(),re(Ne)),{readSync:TW,openSync:RW,createReadStream:Ly}=require("fs"),{open:gW}=require("lmdb"),My=Hu(),AW=Fu(),{INTERNAL_DBIS_NAME:OW}=ke();Py.exports=bW;var Kh=32768,NW=100;async function bW(e){let t=e.database||e.schema||"data",r=pW()[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=gW({noSync:!0,maxDbs:AW.MAX_DBS}),E,f=d.openDB(OW,new My(!1)),h=_.useReadTransaction(),p=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(V=>R.startsWith?.(V+"/"))){f.put(R,O);let[,V]=R.split("/"),$=!V,U=new My(!$,$);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),p++%NW===0&&await new Promise(et=>setTimeout(et,20))}await E;let T=Ly(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=RW(o.path);return o.transaction(()=>{let l=Buffer.alloc(Kh);TW(c,l,0,Kh);let _=o.useReadTransaction(),d=Ly(null,{fd:c,start:Kh}),E=new SW.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(bW,"getBackup")});var qy=m(($ae,Hy)=>{"use strict";var yW=F(),{handleHDBError:IW}=Q(),wW=tA(),CW=Qu(),UW=mh(),DW=zN(),LW=La(),MW=Oh(),PW=gb(),vW=Ub(),BW=va(),HW=qb(),qW=zb(),FW=ry(),GW=ny(),xW=cy(),kW=hy(),VW=Dh(),$W=Ty(),YW=by(),KW=Iy(),By=Dy(),WW=vy(),Wh=class extends wW{static{a(this,"LMDBBridge")}async searchByConditions(t){return HW(t)}async getDataByHash(t){return await MW(t)}async searchByHash(t){return await PW(t)}async getDataByValue(t,r){return await vW(t,r)}async searchByValue(t){return await BW(t)}async createSchema(t){return await DW(t)}async dropSchema(t){return await qW(t)}async createTable(t,r){return await FW(t,r)}async dropTable(t){return await VW(t)}async createAttribute(t){return await CW(t)}async createRecords(t){return await UW(t)}async updateRecords(t){return await GW(t)}async upsertRecords(t){try{return await xW(t)}catch(r){throw IW(r,null,null,yW.ERR,r)}}async deleteRecords(t){return await LW(t)}async dropAttribute(t){return await $W(t)}async deleteAuditLogsBefore(t){return await kW(t)}async readAuditLog(t){return await YW(t)}writeTransaction(t,r,s){return KW.writeTransaction(t,r,s)}flush(t,r){return By.flush(t,r)}resetReadTxn(t,r){return By.resetReadTxn(t,r)}getBackup(t){return WW(t)}};Hy.exports=Wh});var Wy={};tt(Wy,{ResourceBridge:()=>Jh});function Xh({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Gy(e,t){let r=us(e),s=Xh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return We(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&&Cu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||zW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,QW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xy(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*ky(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 Vy,Cl,Gr,$y,Yy,kr,Qh,zh,Ky,QW,zW,JW,XW,Fy,Jh,Qy=Se(()=>{"use strict";Vy=C(qy()),Cl=C(Zi()),Gr=C(Q());de();$y=C(pa()),Yy=C(Oa()),kr=C(g()),Qh=C(xs()),zh=C(Fr()),Ky=C(k());Yn();Uu();({HDB_ERROR_MSGS:QW}=Gr.hdb_errors),zW="data",JW=1e4,XW=10,Jh=class extends Vy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Fy=this}async searchByConditions(t){let r=(0,Cl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){us(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Qh.signalSchemaChange(new zh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Zh(t.schema),Qh.signalSchemaChange(new zh.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,Fy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,$y.default)(t);(0,Yy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return We(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=Cu(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 We(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 xy(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,Ky.async_set_timeout)(XW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%JW===0&&await l();return u.length>0&&await l(),n?xy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Cl.default)(t,"hashes");if(r)throw r;return Gy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Gy(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,Cl.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of ky(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return ky(r,t.search_values?.[0],t.search_values?.[1])}}};a(Xh,"getSelect");a(Gy,"getRecords");a(us,"getTable");a(xy,"createDeleteResponse");a(ky,"groupRecordsInHistory")});var Hr=m((Jae,zy)=>{"use strict";var{ResourceBridge:ZW}=(Qy(),re(Wy)),jW=W();jW.initSync();var Ul;function eQ(){return Ul||(Ul=new ZW,Ul)}a(eQ,"getBridge");zy.exports=eQ()});var jy=m((Zae,Zy)=>{"use strict";var Jy=require("lodash"),Ga=require("mathjs"),tQ=require("jsonata"),Xy=k();Zy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jy.uniqWith(e,Jy.isEqual):e,searchJSON:rQ,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 rQ(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=tQ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(rQ,"searchJSON")});var tI=m((ece,eI)=>{"use strict";var ze=require("moment"),jh="YYYY-MM-DDTHH:mm:ss.SSSZZ";ze.suppressDeprecationWarnings=!0;eI.exports={current_date:()=>ze().utc().format("YYYY-MM-DD"),current_time:()=>ze().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ze(e).utc().format("YYYY");case"month":return ze(e).utc().format("MM");case"day":return ze(e).utc().format("DD");case"hour":return ze(e).utc().format("HH");case"minute":return ze(e).utc().format("mm");case"second":return ze(e).utc().format("ss");case"millisecond":return ze(e).utc().format("SSS");default:break}},date:e=>ze(e).utc().format(jh),date_format:(e,t)=>ze(e).utc().format(t),date_add:(e,t,r)=>ze(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ze(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ze(e).utc(),n=ze(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ze().utc().valueOf(),get_server_time:()=>ze().format(jh),offset_utc:(e,t)=>ze(e).utc().utcOffset(t).format(jh)}});var iI=m((tce,nI)=>{"use strict";var sQ=require("@turf/area"),nQ=require("@turf/length"),iQ=require("@turf/circle"),oQ=require("@turf/difference"),aQ=require("@turf/distance"),cQ=require("@turf/boolean-contains"),uQ=require("@turf/boolean-equal"),lQ=require("@turf/boolean-disjoint"),_Q=require("@turf/helpers"),rI=g(),le=k();nI.exports={geoArea:dQ,geoLength:EQ,geoCircle:fQ,geoDifference:hQ,geoDistance:sI,geoNear:mQ,geoContains:SQ,geoEqual:pQ,geoCrosses:TQ,geoConvert:RQ};var em="geo1 is required",tm="geo2 is required";function dQ(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),sQ.default(e)}a(dQ,"geoArea");function EQ(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),nQ.default(e,{units:t||"kilometers"})}a(EQ,"geoLength");function fQ(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)),iQ.default(e,t,{units:r||"kilometers"})}a(fQ,"geoCircle");function hQ(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)),oQ(e,t)}a(hQ,"geoDifference");function sI(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)),aQ.default(e,t,{units:r||"kilometers"})}a(sI,"geoDistance");function mQ(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 sI(e,t,s)<=r}a(mQ,"geoNear");function SQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),cQ.default(e,t)}a(SQ,"geoContains");function pQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),uQ.default(e,t)}a(pQ,"geoEqual");function TQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!lQ.default(e,t)}a(TQ,"geoCrosses");function RQ(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(rI.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rI.GEO_CONVERSION_ENUM).join(",")}`);return _Q[t](e,r)}a(RQ,"geoConvert")});var Dl=m((sce,oI)=>{var ii=jy(),lr=tI(),ls=iI();oI.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=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=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var lI=m((nce,uI)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var gQ=Dl(),aI=require("clone"),Ll=require("recursive-iterator"),se=F(),ne=k(),ro=Hr(),AQ=g(),{hdb_errors:OQ}=Q(),{getDatabases:cI}=(de(),re(Ne)),NQ="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";gQ(pt);var rm=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 Ll(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(aI(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=cI()[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 Ll(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 Ll(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(AQ.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(aI(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(NQ)>-1&&this.tables.forEach(n=>{let i={columnid:cI()[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 ro.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 ro.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 ro.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(p)));else for(let[p,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(p)))}}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 ro.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,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=ka.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,R=p.length;T<R;T++){let O=p[T];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 Ll(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 ro.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 p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}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(OQ.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 ro.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)}};uI.exports=rm});var Ar=m((oce,_I)=>{"use strict";var bQ=jg();_I.exports={searchByConditions:IQ,searchByHash:wQ,searchByValue:CQ,search:UQ};var sm=Hr(),{transformReq:nm}=k(),yQ=lI();async function IQ(e){return nm(e),sm.searchByConditions(e)}a(IQ,"searchByConditions");async function wQ(e){nm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of sm.searchByHash(e))r&&t.push(r);return t}a(wQ,"searchByHash");async function CQ(e){nm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of sm.searchByValue(e))t.push(r);return t}a(CQ,"searchByValue");function UQ(e,t){try{let r=new bQ(e);r.validate(),new yQ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(UQ,"search")});var Ml=m((cce,dI)=>{"use strict";var DQ=Hr();dI.exports={writeTransaction:LQ};function LQ(e,t,r){return DQ.writeTransaction(e,t,r)}a(LQ,"writeTransaction")});var mI=m((_ce,hI)=>{"use strict";var MQ=Ar(),PQ=Bs(),EI=F(),vQ=ir(),lce=Ml(),BQ=require("clone"),om=require("alasql"),HQ=Dl(),fI=require("util"),qQ=fI.promisify(PQ.getTableSchema),FQ=fI.promisify(MQ.search),GQ=g(),im=k();HQ(om);hI.exports={update:kQ};var xQ="There was a problem performing this update. Please check the logs and try again.";async function kQ({statement:e,hdb_user:t}){let r=await qQ(e.table.databaseid,e.table.tableid),s=VQ(e.columns);im.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=BQ(n),c=im.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=om.parse(u).statements[0],_=await FQ(l),d=$Q(s,_);return YQ(o,d,t)}a(kQ,"update");function VQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=om.compile(`SELECT ${r.expression.toString()} AS [${GQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw EI.error(t),new Error(xQ)}}a(VQ,"createUpdateRecord");function $Q(e,t){return im.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($Q,"buildUpdateRecords");async function YQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){EI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(YQ,"updateRecords")});var pI=m((hce,SI)=>{var KQ=require("alasql"),WQ=Ar(),QQ=F(),zQ=Hr(),cm=require("util"),am=k(),JQ=g(),XQ=Bs(),Ece=Ml(),fce=ir(),ZQ="record",jQ="successfully deleted",ez=cm.callbackify(nz),tz=cm.promisify(WQ.search),rz=cm.promisify(XQ.getTableSchema);SI.exports={convertDelete:ez};function sz(e){return`${e.deleted_hashes.length} ${ZQ}${e.deleted_hashes.length===1?"":"s"} ${jQ}`}a(sz,"generateReturnMessage");async function nz({statement:e,hdb_user:t}){let r=await rz(e.table.databaseid,e.table.tableid);am.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=am.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=KQ.parse(o).statements[0],u={operation:JQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await tz(c);let l=await zQ.deleteRecords(u);return am.isEmptyOrZeroLength(l.message)&&(l.message=sz(l)),delete l.txn_time,l}catch(l){throw QQ.error(l),l.hdb_code?l.message:l}}a(nz,"convertDelete")});var OI=m((Sce,AI)=>{"use strict";var iz=En(),{hdb_errors:TI}=Q(),{getDatabases:RI}=(de(),re(Ne));AI.exports={checkSchemaExists:gI,checkSchemaTableExists:oz,schema_describe:iz};async function gI(e){if(!RI()[e])return TI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gI,"checkSchemaExists");async function oz(e,t){let r=await gI(e);if(r)return r;if(!RI()[e][t])return TI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oz,"checkSchemaTableExists")});var Va=m((Tce,az)=>{az.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 ql={};tt(ql,{addAnalyticsListener:()=>dm,recordAction:()=>_s,recordActionBinary:()=>so,setAnalyticsEnabled:()=>cz});function cz(e){MI=e}function _s(e,t,r,s,n){if(!MI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Bl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Bl.set(i,o)),vl||uz()}function so(e,t,r,s,n){_s(e?1:0,t,r,s,n)}function dm(e){vI.push(e)}function uz(){vl=performance.now(),setTimeout(()=>{let e=performance.now()-vl;vl=0;let t=[],r={time:Date.now(),period:e,threadId:oi.threadId,metrics:t};for(let[n,i]of Bl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:oi.threadId,...s});for(let n of vI)n(t);Bl=new Map,oi.parentPort?oi.parentPort.postMessage({type:PI,report:r}):HI({report:r})},_m).unref()}async function lz(e,t=6e4){let r=Em(),s;for(let _ of r.primaryStore.getRange({start:Pl+"z",end:Pl,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:p,type:T,metric:R,count:O,threadId:V,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");p&&(U+="-"+p);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 _z()}for(let[_,d]of i)d.id=Pl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Pl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-NI,active:l-bI,time:c}),NI=u,bI=l}async function dz(e,t){let r=Em(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function Em(){return yI||(yI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function fz(){BI=!0,setInterval(async()=>{await lz(_m,lm),await dz(Ez,_m)},lm/2).unref()}function HI(e,t){let r=e.report;r.threadId=t?.threadId||oi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(II+=s.mean*s.count);r.totalBytesProcessed=II,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(wI.get(t))}),wI.set(t,t.performance.eventLoopUtilization())),r.id=(0,DI.getNextMonotonicTime)(),Em().put(r),BI||fz(),hz&&(qI=Sz(r))}async function Sz(e){if(await qI,!An){let r=(0,$a.dirname)((0,UI.getLogFilePath)());try{An=await(0,um.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{An=await(0,um.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await An.stat()).size;if(t>mz){let r=Buffer.alloc(t);await An.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await An.write(r,{position:0}),await An.truncate(r.length),t=r.length}await An.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 it.error(i),new Error(`Error reading HarperDB config file at ${r}`)}OV(s,r),Zf(s);let n=s.toJSON();if(hV.config=n,St=ei(n),St.logging_rotation_rotate)for(let i in kO)St[i]&&it.error(`Config ${kO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);it.trace(SV)}}a(WO,"initConfig");function OV(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],qr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(it.trace("Updating config file with missing config params"),qt.writeFileSync(t,String(e)))}a(OV,"checkForUpdatedConfig");function Zf(e){let t=e.toJSON(),r=uV(t);if(r.error)throw ul.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(Zf,"validateConfig");function NV(e,t){St===void 0&&(St={});let r=Gs[e.toLowerCase()];if(r===void 0){it.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(NV,"updateConfigObject");function QO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&WO();let o=KO(Gs.hdb_root),c=qr.join(o,Or.HDB_CONFIG_FILE),u=pn(c),l;if(r===void 0&&e.toLowerCase()===Sn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Xf(E,t);u.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===Sn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=Xf(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){it.error(T)}}}l&&YO(u,l),Zf(u);let _=u.getIn(["rootPath"]),d=qr.join(_,Or.HDB_CONFIG_FILE);s===!0&&bV(c,_),qt.writeFileSync(d,String(u)),n&&(St=ei(u.toJSON())),it.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QO,"updateConfigValue");function bV(e,t){try{let r=qr.join(t,"backup",`${Or.HDB_CONFIG_FILE}.bak`);qt.copySync(e,r),it.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){it.error(pV),it.error(r)}}a(bV,"backupConfigFile");var yV=["schemas"];function ei(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!yV.includes(r)){let s=ei(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(ei,"flattenConfig");function Xf(e,t){if(e===Sn.CLUSTERING_NODENAME||e===Sn.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(_V(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||dt.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 dt.autoCast(t)}a(Xf,"castConfigValue");function IV(){let e=dt.getPropsFilePath(),t=jn(e);return pn(t).toJSON()}a(IV,"getConfiguration");async function wV(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return QO(void 0,void 0,n,!0),RV}catch(i){throw typeof i=="string"||i instanceof String?EV(i,i,fV.BAD_REQUEST,void 0,void 0,!0):i}}a(wV,"setConfiguration");function jf(){let e=dt.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(s){if(!dt.noBootFile())throw it.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=jn(e);return pn(t).toJSON()}a(jf,"readConfigFile");function pn(e){return lV.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(pn,"parseYamlDoc");function CV(){let e=jf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=dt.isEmptyOrZeroLength(t)?[]:t;let r=xO(t);if(r)throw ul.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=dt.isEmptyOrZeroLength(s)?[]:s;let n=xO(s);if(n)throw ul.CONFIG_VALIDATION(n.message);if(!dt.isEmptyOrZeroLength(s)&&!dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ul.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(CV,"getClusteringRoutes");function zO(e){let t=VO(e);St={};for(let r in Gs){let s=t.get(r.toUpperCase());if(dt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Gs[r].toLowerCase();n===Sn.LOGGING_ROOT?St[n]=qr.dirname(s):St[n]=s}return St}a(zO,"initOldConfig");function UV(e){let t=jf();return dV.get(t,e.replaceAll("_","."))}a(UV,"getConfigFromFile");async function DV(e,t){let r=pn(jn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await qt.writeFile(jn(),String(r))}a(DV,"addConfig");function LV(e){let t=jn(dt.getPropsFilePath()),r=pn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=qr.join(s,Or.HDB_CONFIG_FILE);qt.writeFileSync(n,String(r))}a(LV,"deleteConfigFromFile")});var ZO=m((Aie,XO)=>{"use strict";var _l=g(),dl=class{static{a(this,"BaseLicense")}constructor(t=0,r=_l.RAM_ALLOCATION_ENUM.DEFAULT,s=_l.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},eh=class extends dl{static{a(this,"ExtendedLicense")}constructor(t=0,r=_l.RAM_ALLOCATION_ENUM.DEFAULT,s=_l.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};XO.exports={BaseLicense:dl,ExtendedLicense:eh}});var ya=m((Nie,nN)=>{"use strict";var $i=require("fs-extra"),jO=il(),eN=require("crypto"),MV=require("moment"),PV=require("uuid").v4,wt=F(),rh=require("path"),vV=k(),Tn=g(),BV=ZO().ExtendedLicense,Vi="invalid license key format",HV="061183",qV="mofi25",FV="aes-256-cbc",GV=16,xV=32,tN=W();tN.initSync();var th;nN.exports={validateLicense:rN,generateFingerPrint:VV,licenseSearch:sN,getLicense:KV};function sh(){return rh.join(tN.getHdbBasePath(),Tn.LICENSE_KEY_DIR_NAME,Tn.LICENSE_FILE_NAME)}a(sh,"getLicenseDirPath");function kV(){let e=sh();return rh.join(e,Tn.LICENSE_FILE_NAME)}a(kV,"getLicenseFilePath");function nh(){let e=sh();return rh.join(e,Tn.REG_KEY_FILE_NAME)}a(nh,"getFingerPrintFilePath");async function VV(){let e=nh();try{return await $i.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await $V();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(VV,"generateFingerPrint");async function $V(){let e=PV(),t=jO.hash(e),r=nh();try{await $i.mkdirp(sh()),await $i.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a($V,"writeFingerprint");function rN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Tn.RAM_ALLOCATION_ENUM.DEFAULT,version:Tn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=nh(),n=!1;try{n=$i.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=$i.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(qV),c=o[1];c=Buffer.concat([Buffer.from(c)],GV);let u=Buffer.concat([Buffer.from(i)],xV),l=eN.createDecipheriv(FV,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=YV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vi),wt.error(Vi),new Error(Vi)}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(Vi),wt.error(Vi),new Error(Vi)}else r.exp_date=_;r.exp_date<MV().valueOf()&&(r.valid_date=!1),jO.validate(o[1],`${HV}${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(rN,"validateLicense");function YV(e,t){try{let r=eN.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(YV,"checkOldLicense");function sN(){let e=new BV,t=[];try{t=$i.readFileSync(kV(),"utf-8").split(Tn.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(vV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=rN(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=Tn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return th=e,e}a(sN,"licenseSearch");async function KV(){return th||await sN(),th}a(KV,"getLicense")});var br=m((Cie,RN)=>{"use strict";var uN="username is required",lN="nothing to update, must supply active, role or password to update",_N="password cannot be an empty string",dN="If role is specified, it cannot be empty.",EN="active must be true or false";RN.exports={addUser:t$,alterUser:r$,dropUser:n$,getSuperUser:c$,userInfo:i$,listUsers:fl,listUsersExternal:o$,setUsersToGlobal:Ki,findAndValidateUser:TN,getClusterUser:u$,USERNAME_REQUIRED:uN,ALTERUSER_NOTHING_TO_UPDATE:lN,EMPTY_PASSWORD:_N,EMPTY_ROLE:dN,ACTIVE_BOOLEAN:EN};var fN=ir(),WV=mn(),oh=il(),hN=UO(),mN=Ar(),ah=xs(),ar=k(),SN=require("validate.js"),ue=F(),{promisify:QV}=require("util"),ch=vs(),iN=g(),oN=be(),zV=Nr(),yie=W(),Iie=ya(),JV=Wn(),{table:wie}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:XV}=Q(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:ih,HDB_ERROR_MSGS:Yi}=XV,{UserEventMsg:uh}=Fr(),aN=require("lodash"),{_assignPackageExport:ZV}=require("../index");ZV("getUser",TN);var pN={username:!0,active:!0,role:!0,password:!0},cN=new Map,El=mN.searchByValue,jV=mN.searchByHash,e$=QV(WV.delete);async function t$(e){let t=SN.cleanAttributes(e,pN),r=hN.addUserValidation(t);if(r)throw is(new Error,r.message,os.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await El(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw is(new Error,Yi.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,Yi.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=ch.encrypt(t.password)),t.password=oh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Ki()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,Yi.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ah.signalUserChange(new uh(process.pid)),`${c.username} successfully added`}a(t$,"addUser");async function r$(e){let t=SN.cleanAttributes(e,pN);if(ar.isEmptyOrZeroLength(t.username))throw new Error(uN);if(ar.isEmptyOrZeroLength(t.password)&&ar.isEmptyOrZeroLength(t.role)&&ar.isEmptyOrZeroLength(t.active))throw new Error(lN);if(!ar.isEmpty(t.password)&&ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(_N);if(!ar.isEmpty(t.active)&&!ar.isBoolean(t.active))throw new Error(EN);let r=s$(t.username);if(!ar.isEmpty(t.password)&&!ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=ch.encrypt(t.password)),t.password=oh.hash(t.password)),t.role==="")throw new Error(dN);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 El(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Yi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await fN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Ki()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return ah.signalUserChange(new uh(process.pid)),n}a(r$,"alterUser");function s$(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(s$,"isClusterUser");async function n$(e){try{let t=hN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ar.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,Yi.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await e$(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Ki()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return ah.signalUserChange(new uh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(n$,"dropUser");async function i$(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 jV(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(i$,"userInfo");async function o$(){let e;try{e=await fl()}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(o$,"listUsersExternal");async function fl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await El(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]=aN.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 El(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=aN.cloneDeep(o),o.role=r[o.role],a$(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),ar.errorizeMessage(e)}return null}a(fl,"listUsers");function a$(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(JV)){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(a$,"appendSystemTablesToRole");async function Ki(){try{let e=await fl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Ki,"setUsersToGlobal");async function TN(e,t,r=!0){global.hdb_users||await Ki();let s=global.hdb_users.get(e);if(!s)throw is(new Error,ih.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,ih.USER_INACTIVE,os.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(cN.get(t)===s.password)return n;if(oh.validate(s.password,t))cN.set(t,s.password);else throw is(new Error,ih.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(TN,"findAndValidateUser");async function c$(){global.hdb_users||await Ki();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(c$,"getSuperUser");async function u$(){let e=await fl(),t=zV.getConfigFromFile(iN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ar.isEmpty(r)&&r?.role?.role===iN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=ch.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oN.SERVER_SUFFIX.ADMIN,r}a(u$,"getClusterUser")});var wa=m((Mie,NN)=>{"use strict";var ti=F(),cr=g(),l$=XA(),Die=Bs(),Lie=En(),_$=br(),{validateEvent:gN}=Fr(),Ia=Hr(),d$=require("process"),{resetDatabases:E$}=(de(),re(Ne)),f$={[cr.ITC_EVENT_TYPES.SCHEMA]:h$,[cr.ITC_EVENT_TYPES.USER]:ON};async function h$(e){let t=gN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await l$(e.message),await m$(e.message)}a(h$,"schemaHandler");async function m$(e){try{Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=E$();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(m$,"syncSchemaMetadata");var AN=[];async function ON(e){try{try{Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=gN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${d$.pid} received user event:`,e),await _$.setUsersToGlobal();for(let r of AN)r()}catch(t){ti.error(t)}}a(ON,"userHandler");ON.addListener=function(e){AN.push(e)};NN.exports=f$});var Fr=m((Fie,yN)=>{"use strict";var vie=F(),lh=k(),S$=g(),{ITC_ERRORS:Ca}=rr(),{parentPort:Bie,threadId:p$,isMainThread:T$,workerData:Hie}=require("worker_threads"),{onMessageFromWorkers:R$,broadcast:qie,broadcastWithAcknowledgement:g$}=Ve();yN.exports={sendItcEvent:A$,validateEvent:bN,SchemaEventMsg:O$,UserEventMsg:N$};var hl;R$(async(e,t)=>{hl=hl||wa(),bN(e),hl[e.type]&&await hl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function A$(e){return!T$&&e.message&&(e.message.originator=p$),g$(e)}a(A$,"sendItcEvent");function bN(e){if(typeof e!="object")return Ca.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||lh.isEmpty(e.type))return Ca.MISSING_TYPE;if(!e.hasOwnProperty("message")||lh.isEmpty(e.message))return Ca.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||lh.isEmpty(e.message.originator))return Ca.MISSING_ORIGIN;if(S$.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ca.INVALID_EVENT(e.type)}a(bN,"validateEvent");function O$(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(O$,"SchemaEventMsg");function N$(e){this.originator=e}a(N$,"UserEventMsg")});var xs=m((kie,UN)=>{"use strict";var IN=g(),xie=k(),ml=F(),wN=QA(),Wi,{sendItcEvent:CN}=Fr();function b$(e){try{ml.trace("signalSchemaChange called with message:",e),Wi=Wi||wa();let t=new wN(IN.ITC_EVENT_TYPES.SCHEMA,e);return Wi.schema(t),CN(t)}catch(t){ml.error(t)}}a(b$,"signalSchemaChange");function y$(e){try{ml.trace("signalUserChange called with message:",e),Wi=Wi||wa();let t=new wN(IN.ITC_EVENT_TYPES.USER,e);return Wi.user(t),CN(t)}catch(t){ml.error(t)}}a(y$,"signalUserChange");UN.exports={signalSchemaChange:b$,signalUserChange:y$}});var Sl=m(($ie,LN)=>{"use strict";var DN=k(),I$=g(),w$=F(),C$=Qu(),U$=Wu(),D$=xs(),{SchemaEventMsg:L$}=Fr(),M$="already exists in";LN.exports=P$;async function P$(e,t,r){if(DN.isEmptyOrZeroLength(r))return r;let s=[];DN.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 v$(e,t.schema,t.name,i)})),n}a(P$,"lmdbCheckForNewAttributes");async function v$(e,t,r,s){let n=new U$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await B$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(M$))w$.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(v$,"createNewAttribute");async function B$(e){let t;return t=await C$(e),D$.signalSchemaChange(new L$(process.pid,I$.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(B$,"createAttribute")});var Qi=m((Kie,MN)=>{"use strict";var _h=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};MN.exports=_h});var vN=m((Qie,PN)=>{"use strict";var H$=Qi(),q$=g().OPERATIONS_ENUM,dh=class extends H${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(q$.INSERT,r,s,n,i),this.records=t}};PN.exports=dh});var HN=m((Jie,BN)=>{"use strict";var F$=Qi(),G$=g().OPERATIONS_ENUM,Eh=class extends F${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(G$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};BN.exports=Eh});var FN=m((Zie,qN)=>{"use strict";var x$=Qi(),k$=g().OPERATIONS_ENUM,fh=class extends x${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(k$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};qN.exports=fh});var xN=m((eoe,GN)=>{"use strict";var V$=Qi(),$$=g().OPERATIONS_ENUM,hh=class extends V${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super($$.DELETE,s,n,t,i),this.original_records=r}};GN.exports=hh});var Ua=m((soe,YN)=>{"use strict";var roe=require("path"),kN=Ie(),Y$=vN(),K$=HN(),W$=FN(),Q$=xN(),zi=ke(),VN=k(),{CONFIG_PARAMS:z$}=g(),$N=W();$N.initSync();var pl=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:J$}=Ce();YN.exports=X$;async function X$(e,t){if($N.get(z$.LOGGING_AUDITLOG)===!1)return;let r=J$(e.schema,e.table),s=await kN.openEnvironment(r,e.table,!0),n=Z$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){kN.initializeDBIs(s,zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),VN.isEmpty(n.user_name)||s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(X$,"writeTransaction");function Z$(e,t){let r=VN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===pl.INSERT)return new Y$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.UPDATE)return new K$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.UPSERT)return new W$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.DELETE)return new Q$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Z$,"createTransactionObject")});var mh=m((ooe,KN)=>{"use strict";var j$=pa(),ioe=Ta(),Da=g(),eY=Oa(),tY=Fi().insertRecords,rY=Ie(),sY=F(),nY=Sl(),{getSchemaPath:iY}=Ce(),oY=Ua();KN.exports=aY;async function aY(e){try{let{schema_table:t,attributes:r}=j$(e);eY(e,r,t.hash_attribute),e.schema!==Da.SYSTEM_SCHEMA_NAME&&(r.includes(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await nY(e.hdb_auth_header,t,r),n=iY(e.schema,e.table),i=await rY.openEnvironment(n,e.table),o=await tY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await oY(e,o)}catch(c){sY.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(aY,"lmdbCreateRecords")});var zN=m((coe,QN)=>{"use strict";var WN=g(),cY=mh(),uY=Ta(),lY=require("fs-extra"),{getSchemaPath:_Y}=Ce();QN.exports=dY;async function dY(e){let t=[{name:e.schema,createddate:Date.now()}],r=new uY(WN.SYSTEM_SCHEMA_NAME,WN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await cY(r),await lY.mkdirp(_Y(e.schema))}a(dY,"lmdbCreateSchema")});var XN=m((loe,JN)=>{"use strict";var Sh=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}};JN.exports=Sh});var tb=m((hoe,eb)=>{"use strict";var ZN=Ie(),ph=vt(),Th=rr().LMDB_ERRORS_ENUM,EY=ke(),jN=F(),doe=k(),fY=require("lmdb"),hY=XN(),mY=g(),{OVERFLOW_MARKER:Eoe,MAX_SEARCH_KEY_LENGTH:foe}=EY,SY=mY.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function pY(e,t,r,s){if(ph.validateEnv(e),t===void 0)throw new Error(Th.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Th.IDS_REQUIRED):new Error(Th.IDS_MUST_BE_ITERABLE);try{let n=ZN.listDBIs(e);ZN.initializeDBIs(e,t,n);let i=new hY,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[SY]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,fY.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let R=n[T];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],V=h[R];if(V!=null)try{let $=ph.getIndexedValues(V);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{jN.warn(`cannot delete from attribute: ${R}, ${V}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jN.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=ph.getNextMonotonicTime(),i}catch(n){throw n}}a(pY,"deleteRecords");eb.exports={deleteRecords:pY}});var La=m((Soe,sb)=>{"use strict";var Ji=k(),TY=tb(),RY=Ie(),{getSchemaPath:gY}=Ce(),AY=Ua(),OY=F();sb.exports=NY;async function NY(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ji.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ji.isEmptyOrZeroLength(e.hash_values)&&!Ji.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ji.isEmpty(u)||e.hash_values.push(u)}}if(Ji.isEmptyOrZeroLength(e.hash_values))return rb([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ji.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=gY(e.schema,e.table),i=await RY.openEnvironment(n,e.table),o=await TY.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await AY(e,o)}catch(c){OY.error(`unable to write transaction due to ${c.message}`)}return rb(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(NY,"lmdbDeleteRecords");function rb(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(rb,"createDeleteResponse")});var gh=m((Roe,nb)=>{"use strict";var bY=g(),Toe=vt();function Rh(e,t){let r=Object.create(null);if(t.length===1&&bY.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(Rh,"parseRow");function yY(e,t,r,s){let n=Rh(r,e);s.push(n)}a(yY,"searchAll");function IY(e,t,r,s){let n=Rh(r,e);s[t]=n}a(IY,"searchAllToMap");function wY(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(wY,"iterateDBI");function ri(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ri,"pushResults");function CY(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(CY,"endsWith");function UY(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(UY,"contains");function DY(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(DY,"greaterThanCompare");function LY(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a(LY,"greaterThanEqualCompare");function MY(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(MY,"lessThanCompare");function PY(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(PY,"lessThanEqualCompare");nb.exports={parseRow:Rh,searchAll:yY,searchAllToMap:IY,iterateDBI:wY,endsWith:CY,contains:UY,greaterThanCompare:DY,greaterThanEqualCompare:LY,lessThanCompare:MY,lessThanEqualCompare:PY,pushResults:ri}});var Xi=m((boe,_b)=>{"use strict";var Rn=Ie(),Aoe=F(),ur=vt(),Tl=ke(),$e=rr().LMDB_ERRORS_ENUM,Ooe=k(),vY=g(),Rl=gh(),{parseRow:BY}=Rl,Noe=require("lmdb"),{OVERFLOW_MARKER:ib,MAX_SEARCH_KEY_LENGTH:HY}=Tl;function ob(e,t,r,s=!1,n=void 0,i=void 0){return si(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ob,"iterateFullIndex");function Ma(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(V=>({value:V}))):d.getRange(O)})}a(Ma,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=Rn.openDBI(n,r);i[Tl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(si,"setupTransaction");function ab(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ib)){if(!n)if(r)n=Rn.openDBI(e,r);else{let u=Rn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Rn.openDBI(e,u[l]),!n[Tl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(ab,"getOverflowCheck");function qY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return si(e,t,t,(o,c,u)=>(gl(r),r=Pa(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>BY(l.value,r))))}a(qY,"searchAll");function FY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);gl(r),r=Pa(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ob(e,t,t,s,n,i))o.set(c,Rl.parseRow(u,r));return o}a(FY,"searchAllToMap");function GY(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ob(e,void 0,t,r,s,n),c=o.transaction,u=ab(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(GY,"iterateDBI");function xY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return Rn.statDBI(e,t).entryCount}a(xY,"countAll");function kY(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(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(kY,"equals");function VY(e,t,r){return gn(e,t,r),Rn.openDBI(e,t).getValuesCount(r)}a(VY,"count");function $Y(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(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($Y,"startsWith");function YY(e,t,r,s,n=!1,i=void 0,o=void 0){return cb(e,t,r,s,n,i,o,!0)}a(YY,"endsWith");function cb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return gn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=ab(_,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(ib)?l.getValues(f,{transaction:u}).map(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[Tl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cb,"contains");function KY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!0,!1)}a(KY,"greaterThan");function WY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!1,!1)}a(WY,"greaterThanEqual");function QY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!0)}a(QY,"lessThan");function zY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!1)}a(zY,"lessThanEqual");function JY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.validateEnv(e),r===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error($e.START_VALUE_REQUIRED);if(n===void 0)throw new Error($e.END_VALUE_REQUIRED);if(s=ur.convertKeyValueToWrite(s),n=ur.convertKeyValueToWrite(n),s>n)throw new Error($e.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ma(e,t,r,s,n,i,o,c)}a(JY,"between");function XY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(gl(r),r=Pa(n,r),s===void 0)throw new Error($e.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Rl.parseRow(c,r)),o}a(XY,"searchByHash");function ZY(e,t,r){ur.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(ZY,"checkHashExists");function jY(e,t,r,s,n=[]){return lb(e,t,r,s,n),ub(e,t,r,s,n).map(i=>i[1])}a(jY,"batchSearchByHash");function eK(e,t,r,s,n=[]){lb(e,t,r,s,n);let i=new Map;for(let[o,c]of ub(e,t,r,s,n))i.set(o,c);return i}a(eK,"batchSearchByHashToMap");function ub(e,t,r,s,n=[]){return si(e,t,t,(i,o,c)=>{r=Pa(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Rl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(ub,"batchHashSearch");function lb(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(gl(r),s==null)throw new Error($e.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error($e.IDS_MUST_BE_ITERABLE)}a(lb,"initializeBatchSearchByHash");function gl(e){if(!Array.isArray(e))throw e===void 0?new Error($e.FETCH_ATTRIBUTES_REQUIRED):new Error($e.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(gl,"validateFetchAttributes");function gn(e,t,r){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.SEARCH_VALUE_REQUIRED);if(r?.length>HY)throw new Error($e.SEARCH_VALUE_TOO_LARGE)}a(gn,"validateComparisonFunctions");function Pa(e,t){return t.length===1&&vY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rn.listDBIs(e)),t}a(Pa,"setGetWholeRowAttributes");_b.exports={searchAll:qY,searchAllToMap:FY,count:VY,countAll:xY,equals:kY,startsWith:$Y,endsWith:YY,contains:cb,searchByHash:XY,setGetWholeRowAttributes:Pa,batchSearchByHash:jY,batchSearchByHashToMap:eK,checkHashExists:ZY,iterateDBI:GY,greaterThan:KY,greaterThanEqual:WY,lessThan:QY,lessThanEqual:zY,between:JY}});var Zi=m((Ioe,mb)=>{var db=require("lodash"),Eb=Ue(),De=require("joi"),tK=k(),{hdb_schema_table:Al,checkValidTable:fb,hdb_table:hb,hdb_database:Ol}=ss(),{handleHDBError:rK,hdb_errors:sK}=Q(),{getDatabases:nK}=(de(),re(Ne)),{HTTP_STATUS_CODES:iK}=sK,oK=De.object({database:Ol,schema:Ol,table:hb,search_attribute:Al,search_value:De.any().required(),get_attributes:De.array().min(1).items(Al).optional(),desc:De.bool(),limit:De.number().integer().min(1),offset:De.number().integer().min(0)}),aK=De.object({database:Ol,schema:Ol,table:hb,operator:De.string().valid("and","or").default("and").lowercase(),offset:De.number().integer().min(0),limit:De.number().integer().min(1),get_attributes:De.array().min(1).items(Al).optional(),conditions:De.array().min(1).items(De.object({search_attribute:Al,search_type:De.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:De.when("search_type",{switch:[{is:"equals",then:De.any()},{is:"between",then:De.array().items(De.alternatives([De.string(),De.number()])).length(2)}],otherwise:De.alternatives(De.string(),De.number())}).required()})).required()});mb.exports=function(e,t){let r=null;switch(t){case"value":r=Eb.validateBySchema(e,oK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(fb("database",e.schema)),i(fb("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Eb.validateBySchema(e,aK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=tK.checkGlobalSchemaTable(e.schema,e.table);if(n)return rK(new Error,n,iK.NOT_FOUND);let o=nK()[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=db.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!db.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 Ah=m((Coe,Sb)=>{"use strict";var cK=Ie(),uK=Zi(),{getSchemaPath:lK}=Ce();Sb.exports=_K;function _K(e){let t=uK(e,"hashes");if(t)throw t;let r=lK(e.schema,e.table);return cK.openEnvironment(r,e.table)}a(_K,"initialize")});var Oh=m((Doe,pb)=>{"use strict";var dK=Xi(),EK=Ah();pb.exports=fK;async function fK(e){let t=await EK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return dK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(fK,"lmdbGetDataByHash")});var ji=m((Moe,Tb)=>{"use strict";var Nh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Tb.exports=Nh});var gb=m((Boe,Rb)=>{"use strict";var voe=ji(),hK=Xi(),mK=Ah();Rb.exports=SK;async function SK(e){let t=await mK(e),r=global.hdb_schema[e.schema][e.table];return hK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(SK,"lmdbSearchByHash")});var as=m((qoe,Ab)=>{"use strict";var bh=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=_}};Ab.exports=bh});var Nl=m((Goe,wb)=>{"use strict";var Ct=Xi(),pK=Ie(),TK=k(),ie=ke(),ni=g(),RK=Wn(),Ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:gK}=Ce(),ks=ni.SEARCH_WILDCARDS;async function AK(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=RK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Ib(e,s.hash_attribute,r,t);return bb(e,n,s.hash_attribute,r)}a(AK,"prepSearch");async function bb(e,t,r,s){let n=gK(e.schema,e.table),i=await pK.openEnvironment(n,e.table),o=yb(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(OK(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Nb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?Nb(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(bb,"executeSearch");function yb(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(yb,"searchByType");function Nb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Nb,"createMapFromIterable");function OK(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(OK,"checkToFetchMore");function Ib(e,t,r,s){if(TK.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(Ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ob.UNKNOWN_SEARCH_TYPE)}}a(Ib,"createSearchTypeFromSearchObject");wb.exports={executeSearch:bb,createSearchTypeFromSearchObject:Ib,prepSearch:AK,searchByType:yb}});var Ub=m((Voe,Cb)=>{"use strict";var koe=as(),NK=Zi(),bK=k(),yK=g(),IK=Nl();Cb.exports=wK;function wK(e,t){if(!bK.isEmpty(t)&&yK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=NK(e,"value");if(s)throw s;let n=!0;return IK.prepSearch(e,t,n)}a(wK,"lmdbGetDataByValue")});var va=m((Koe,Db)=>{"use strict";var Yoe=as(),CK=Zi(),UK=k(),DK=g(),LK=Nl();Db.exports=MK;async function MK(e,t){if(!UK.isEmpty(t)&&DK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=CK(e,"value");if(s)throw s;return LK.prepSearch(e,t,!1)}a(MK,"lmdbSearchByValue")});var Mb=m((zoe,Lb)=>{"use strict";var Qoe=ke(),yh=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}},Ih=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},wh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Lb.exports={SearchByConditionsObject:yh,SearchCondition:Ih,SortAttribute:wh}});var qb=m((joe,Hb)=>{"use strict";var Xoe=Mb().SearchByConditionsObject,PK=as(),vK=Zi(),Ch=Xi(),bl=ke(),{Resource:Zoe}=(Zr(),re(VE)),Bb=Nl(),BK=gh(),HK=require("lodash"),{getSchemaPath:qK}=Ce(),Pb=Ie(),{handleHDBError:FK,hdb_errors:GK}=Q(),{HTTP_STATUS_CODES:xK}=GK,kK=1e8;Hb.exports=VK;async function VK(e){let t=vK(e,"conditions");if(t)throw FK(t,t.message,xK.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=qK(e.schema,e.table),s=await Pb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Pb.openDBI(s,l.search_attribute);let i=HK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===bl.SEARCH_TYPES.EQUALS?l.estimated_count=Ch.count(s,l.search_attribute,l.search_value):_===bl.SEARCH_TYPES.CONTAINS||_===bl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=kK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await vb(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(Bb.filterByType),d=_.length,E=Ch.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=>BK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vb(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=Ch.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(VK,"lmdbSearchByConditions");async function vb(e,t,r,s){let n=new PK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===bl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Bb.searchByType(e,n,i,s).map(o=>o.value)}a(vb,"executeConditionSearch")});var eo=m((tae,Fb)=>{"use strict";var $K=g().OPERATIONS_ENUM,Uh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=$K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Fb.exports=Uh});var Dh=m((sae,Wb)=>{"use strict";var Vb=as(),$b=eo(),Yb=va(),Kb=La(),Ft=g(),Gb=k(),xb=Ie(),{getTransactionAuditStorePath:YK,getSchemaPath:KK}=Ce(),kb=F();Wb.exports=WK;async function WK(e){try{if(Gb.isEmpty(global.hdb_schema[e.schema])||Gb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await QK(e),await zK(e);let t=KK(e.schema,e.table);try{await xb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=YK(e.schema,e.table);await xb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(WK,"lmdbDropTable");async function QK(e){let t=new Vb(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 Yb(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 $b(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Kb(n)}a(QK,"deleteAttributesFromSystem");async function zK(e){let t=new Vb(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 Yb(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 $b(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Kb(n)}catch(i){throw i}}a(zK,"dropTableFromSystem")});var zb=m((iae,Qb)=>{"use strict";var JK=require("fs-extra"),XK=as(),ZK=ji(),jK=eo(),e1=Dh(),t1=La(),r1=Oh(),s1=va(),Vs=g(),{getSchemaPath:n1}=Ce(),{handleHDBError:i1,hdb_errors:o1}=Q(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:c1}=o1;Qb.exports=u1;async function u1(e){let t;try{t=await l1(e.schema);let r=new XK(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 s1(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await e1(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new jK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await t1(n);let i=n1(t);await JK.remove(i)}catch(r){throw r}}a(u1,"lmdbDropSchema");async function l1(e){let t=new ZK(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 r1(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw i1(new Error,a1.SCHEMA_NOT_FOUND(e),c1.NOT_FOUND,void 0,void 0,!0);return s}a(l1,"validateDropSchema")});var yl=m((aae,Jb)=>{"use strict";var Lh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Jb.exports=Lh});var Zb=m((lae,Xb)=>{"use strict";var _1=require("fs-extra"),Il=Ie(),{getTransactionAuditStorePath:d1}=Ce(),Mh=ke(),uae=yl();Xb.exports=E1;async function E1(e){let t;try{let r=d1(e.schema,e.table);await _1.mkdirp(r),t=await Il.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{Il.createDBI(t,Mh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Il.createDBI(t,Mh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Il.createDBI(t,Mh.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(E1,"createTransactionsAuditEnvironment")});var ry=m((dae,ty)=>{"use strict";var Ph=g(),jb=Ie(),f1=Fi(),{getSystemSchemaPath:h1,getSchemaPath:m1}=Ce(),S1=Wn(),p1=Qu(),vh=Wu(),T1=F(),R1=Zb(),Hh=S1.hdb_table,ey=[];for(let e=0;e<Hh.attributes.length;e++)ey.push(Hh.attributes[e].attribute);ty.exports=g1;async function g1(e,t){let r=m1(t.schema,t.table),s=new vh(t.schema,t.table,Ph.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new vh(t.schema,t.table,Ph.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jb.createEnvironment(r,t.table),e!==void 0){let o=await jb.openEnvironment(h1(),Ph.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await f1.insertRecords(o,Hh.hash_attribute,ey,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Bh(s),await Bh(n),await Bh(i)}await R1(t)}catch(o){throw o}}a(g1,"lmdbCreateTable");async function Bh(e){try{await p1(e)}catch(t){T1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Bh,"createAttribute")});var ny=m((fae,sy)=>{"use strict";var A1=pa(),O1=Oa(),N1=Sl(),Ba=g(),b1=Fi().updateRecords,y1=Ie(),{getSchemaPath:I1}=Ce(),w1=Ua(),C1=F();sy.exports=U1;async function U1(e){try{let{schema_table:t,attributes:r}=A1(e);O1(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 N1(e.hdb_auth_header,t,r),n=I1(e.schema,e.table),i=await y1.openEnvironment(n,e.table),o=await b1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await w1(e,o)}catch(c){C1.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(U1,"lmdbUpdateRecords")});var oy=m((mae,iy)=>{"use strict";var D1=g().OPERATIONS_ENUM,qh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=D1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};iy.exports=qh});var cy=m((Tae,ay)=>{"use strict";var pae=oy(),L1=pa(),M1=Oa(),P1=Sl(),Ha=g(),v1=Fi().upsertRecords,B1=Ie(),{getSchemaPath:H1}=Ce(),q1=Ua(),F1=F(),{handleHDBError:G1,hdb_errors:x1}=Q();ay.exports=k1;async function k1(e){let t;try{t=L1(e)}catch(u){throw G1(u,u.message,x1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;M1(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 P1(e.hdb_auth_header,r,s),i=H1(e.schema,e.table),o=await B1.openEnvironment(i,e.table),c=await v1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await q1(e,c)}catch(u){F1.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(k1,"lmdbUpsertRecords")});var ly=m((gae,uy)=>{"use strict";var Fh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};uy.exports=Fh});var dy=m((Oae,_y)=>{"use strict";var Gh=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}};_y.exports=Gh});var hy=m((yae,fy)=>{"use strict";var xh=Ie(),{getTransactionAuditStorePath:V1}=Ce(),bae=ly(),qa=ke(),$1=k(),Ey=dy(),Y1=require("util").promisify,K1=Y1(setTimeout),W1=1e4,Q1=100;fy.exports=z1;async function z1(e){let t=V1(e.schema,e.table),r=await xh.openEnvironment(t,e.table,!0),s=xh.listDBIs(r);xh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Ey;do n=await J1(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 K1(Q1);while(n.transactions_deleted>0);return i}a(z1,"deleteAuditLogsBefore");async function J1(e,t){let r=new Ey;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];$1.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>W1)break}return await n,r}catch(s){throw s}}a(J1,"deleteTransactions")});var Sy=m((wae,my)=>{"use strict";var kh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};my.exports=kh});var Ty=m((Dae,py)=>{"use strict";var X1=as(),Z1=eo(),Uae=Sy(),cs=g(),j1=k(),Vh=Ie(),eW=Wn(),tW=va(),rW=La(),{getSchemaPath:sW}=Ce();py.exports=nW;async function nW(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=eW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oW(e),n=sW(e.schema,e.table),i=await Vh.openEnvironment(n,e.table);return t===!0&&await iW(e,i,r.hash_attribute),Vh.dropDBI(i,e.attribute),s}a(nW,"lmdbDropAttribute");async function iW(e,t,r){let s=Vh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(iW,"removeAttributeFromAllObjects");async function oW(e){let t=new X1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await tW(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(j1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Z1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rW(i)}a(oW,"dropAttributeFromSystem")});var by=m((Pae,Ny)=>{"use strict";var $h=Ie(),to=ke(),Mae=vt(),Yh=g(),Ry=k(),{getTransactionAuditStorePath:aW}=Ce(),cW=Xi(),wl=Qi(),uW=F();Ny.exports=lW;async function lW(e){let t=aW(e.schema,e.table),r=await $h.openEnvironment(t,e.table,!0),s=$h.listDBIs(r);$h.initializeDBIs(r,to.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gy(r,e.search_values);case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,dW(r,e.search_values,n);case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _W(r,e.search_values);default:return gy(r)}}a(lW,"readAuditLog");function gy(e,t=[0,Date.now()]){Ry.isEmpty(t[0])&&(t[0]=0),Ry.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[to.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 wl,n))}a(gy,"searchTransactionsByTimestamp");function _W(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[to.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Oy(e,i))}return Object.fromEntries(r)}a(_W,"searchTransactionsByUsername");function dW(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=cW.equals(e,to.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,to.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=Oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Ay(u,"records",r,_,o),Ay(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(dW,"searchTransactionsByHashValues");function Ay(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 wl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new wl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Ay,"loopRecords");function Oy(e,t){let r=[];try{let s=e.dbis[to.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 wl,i);r.push(o)}}catch(i){uW.warn(i)}return r}catch(s){throw s}}a(Oy,"batchSearchTransactions")});var Iy=m((qae,yy)=>{"use strict";var{getSchemaPath:Bae}=Ce(),Hae=Ie(),{database:EW}=(de(),re(Ne));yy.exports={writeTransaction:fW};async function fW(e,t,r){return EW({database:e,table:t}).transaction(r)}a(fW,"writeTransaction")});var Dy=m((Gae,Uy)=>{"use strict";var{getSchemaPath:wy}=Ce(),Cy=Ie();Uy.exports={flush:hW,resetReadTxn:mW};async function hW(e,t){return(await Cy.openEnvironment(wy(e,t),t.toString())).flushed}a(hW,"flush");async function mW(e,t){try{(await Cy.openEnvironment(wy(e,t),t.toString())).resetReadTxn()}catch{}}a(mW,"resetReadTxn")});var vy=m((kae,Py)=>{"use strict";var{Readable:SW}=require("stream"),{getDatabases:pW}=(de(),re(Ne)),{readSync:TW,openSync:RW,createReadStream:Ly}=require("fs"),{open:gW}=require("lmdb"),My=Hu(),AW=Fu(),{INTERNAL_DBIS_NAME:OW}=ke();Py.exports=bW;var Kh=32768,NW=100;async function bW(e){let t=e.database||e.schema||"data",r=pW()[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=gW({noSync:!0,maxDbs:AW.MAX_DBS}),E,f=d.openDB(OW,new My(!1)),h=_.useReadTransaction(),p=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(V=>R.startsWith?.(V+"/"))){f.put(R,O);let[,V]=R.split("/"),$=!V,U=new My(!$,$);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),p++%NW===0&&await new Promise(et=>setTimeout(et,20))}await E;let T=Ly(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=RW(o.path);return o.transaction(()=>{let l=Buffer.alloc(Kh);TW(c,l,0,Kh);let _=o.useReadTransaction(),d=Ly(null,{fd:c,start:Kh}),E=new SW.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(bW,"getBackup")});var qy=m(($ae,Hy)=>{"use strict";var yW=F(),{handleHDBError:IW}=Q(),wW=tA(),CW=Qu(),UW=mh(),DW=zN(),LW=La(),MW=Oh(),PW=gb(),vW=Ub(),BW=va(),HW=qb(),qW=zb(),FW=ry(),GW=ny(),xW=cy(),kW=hy(),VW=Dh(),$W=Ty(),YW=by(),KW=Iy(),By=Dy(),WW=vy(),Wh=class extends wW{static{a(this,"LMDBBridge")}async searchByConditions(t){return HW(t)}async getDataByHash(t){return await MW(t)}async searchByHash(t){return await PW(t)}async getDataByValue(t,r){return await vW(t,r)}async searchByValue(t){return await BW(t)}async createSchema(t){return await DW(t)}async dropSchema(t){return await qW(t)}async createTable(t,r){return await FW(t,r)}async dropTable(t){return await VW(t)}async createAttribute(t){return await CW(t)}async createRecords(t){return await UW(t)}async updateRecords(t){return await GW(t)}async upsertRecords(t){try{return await xW(t)}catch(r){throw IW(r,null,null,yW.ERR,r)}}async deleteRecords(t){return await LW(t)}async dropAttribute(t){return await $W(t)}async deleteAuditLogsBefore(t){return await kW(t)}async readAuditLog(t){return await YW(t)}writeTransaction(t,r,s){return KW.writeTransaction(t,r,s)}flush(t,r){return By.flush(t,r)}resetReadTxn(t,r){return By.resetReadTxn(t,r)}getBackup(t){return WW(t)}};Hy.exports=Wh});var Wy={};tt(Wy,{ResourceBridge:()=>Jh});function Xh({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Gy(e,t){let r=us(e),s=Xh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return We(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&&Cu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||zW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,QW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xy(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*ky(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 Vy,Cl,Gr,$y,Yy,kr,Qh,zh,Ky,QW,zW,JW,XW,Fy,Jh,Qy=Se(()=>{"use strict";Vy=C(qy()),Cl=C(Zi()),Gr=C(Q());de();$y=C(pa()),Yy=C(Oa()),kr=C(g()),Qh=C(xs()),zh=C(Fr()),Ky=C(k());Yn();Uu();({HDB_ERROR_MSGS:QW}=Gr.hdb_errors),zW="data",JW=1e4,XW=10,Jh=class extends Vy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Fy=this}async searchByConditions(t){let r=(0,Cl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){us(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Qh.signalSchemaChange(new zh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Zh(t.schema),Qh.signalSchemaChange(new zh.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,Fy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,$y.default)(t);(0,Yy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return We(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=Cu(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 We(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 xy(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,Ky.async_set_timeout)(XW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%JW===0&&await l();return u.length>0&&await l(),n?xy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Cl.default)(t,"hashes");if(r)throw r;return Gy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Gy(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,Cl.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of ky(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return ky(r,t.search_values?.[0],t.search_values?.[1])}}};a(Xh,"getSelect");a(Gy,"getRecords");a(us,"getTable");a(xy,"createDeleteResponse");a(ky,"groupRecordsInHistory")});var Hr=m((Jae,zy)=>{"use strict";var{ResourceBridge:ZW}=(Qy(),re(Wy)),jW=W();jW.initSync();var Ul;function eQ(){return Ul||(Ul=new ZW,Ul)}a(eQ,"getBridge");zy.exports=eQ()});var jy=m((Zae,Zy)=>{"use strict";var Jy=require("lodash"),Ga=require("mathjs"),tQ=require("jsonata"),Xy=k();Zy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jy.uniqWith(e,Jy.isEqual):e,searchJSON:rQ,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 rQ(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=tQ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(rQ,"searchJSON")});var tI=m((ece,eI)=>{"use strict";var ze=require("moment"),jh="YYYY-MM-DDTHH:mm:ss.SSSZZ";ze.suppressDeprecationWarnings=!0;eI.exports={current_date:()=>ze().utc().format("YYYY-MM-DD"),current_time:()=>ze().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ze(e).utc().format("YYYY");case"month":return ze(e).utc().format("MM");case"day":return ze(e).utc().format("DD");case"hour":return ze(e).utc().format("HH");case"minute":return ze(e).utc().format("mm");case"second":return ze(e).utc().format("ss");case"millisecond":return ze(e).utc().format("SSS");default:break}},date:e=>ze(e).utc().format(jh),date_format:(e,t)=>ze(e).utc().format(t),date_add:(e,t,r)=>ze(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ze(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ze(e).utc(),n=ze(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ze().utc().valueOf(),get_server_time:()=>ze().format(jh),offset_utc:(e,t)=>ze(e).utc().utcOffset(t).format(jh)}});var iI=m((tce,nI)=>{"use strict";var sQ=require("@turf/area"),nQ=require("@turf/length"),iQ=require("@turf/circle"),oQ=require("@turf/difference"),aQ=require("@turf/distance"),cQ=require("@turf/boolean-contains"),uQ=require("@turf/boolean-equal"),lQ=require("@turf/boolean-disjoint"),_Q=require("@turf/helpers"),rI=g(),le=k();nI.exports={geoArea:dQ,geoLength:EQ,geoCircle:fQ,geoDifference:hQ,geoDistance:sI,geoNear:mQ,geoContains:SQ,geoEqual:pQ,geoCrosses:TQ,geoConvert:RQ};var em="geo1 is required",tm="geo2 is required";function dQ(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),sQ.default(e)}a(dQ,"geoArea");function EQ(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),nQ.default(e,{units:t||"kilometers"})}a(EQ,"geoLength");function fQ(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)),iQ.default(e,t,{units:r||"kilometers"})}a(fQ,"geoCircle");function hQ(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)),oQ(e,t)}a(hQ,"geoDifference");function sI(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)),aQ.default(e,t,{units:r||"kilometers"})}a(sI,"geoDistance");function mQ(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 sI(e,t,s)<=r}a(mQ,"geoNear");function SQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),cQ.default(e,t)}a(SQ,"geoContains");function pQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),uQ.default(e,t)}a(pQ,"geoEqual");function TQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!lQ.default(e,t)}a(TQ,"geoCrosses");function RQ(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(rI.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rI.GEO_CONVERSION_ENUM).join(",")}`);return _Q[t](e,r)}a(RQ,"geoConvert")});var Dl=m((sce,oI)=>{var ii=jy(),lr=tI(),ls=iI();oI.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=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=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var lI=m((nce,uI)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var gQ=Dl(),aI=require("clone"),Ll=require("recursive-iterator"),se=F(),ne=k(),ro=Hr(),AQ=g(),{hdb_errors:OQ}=Q(),{getDatabases:cI}=(de(),re(Ne)),NQ="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";gQ(pt);var rm=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 Ll(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(aI(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=cI()[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 Ll(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 Ll(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(AQ.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(aI(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(NQ)>-1&&this.tables.forEach(n=>{let i={columnid:cI()[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 ro.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 ro.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 ro.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(p)));else for(let[p,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(p)))}}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 ro.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,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=ka.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,R=p.length;T<R;T++){let O=p[T];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 Ll(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 ro.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 p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}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(OQ.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 ro.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)}};uI.exports=rm});var Ar=m((oce,_I)=>{"use strict";var bQ=jg();_I.exports={searchByConditions:IQ,searchByHash:wQ,searchByValue:CQ,search:UQ};var sm=Hr(),{transformReq:nm}=k(),yQ=lI();async function IQ(e){return nm(e),sm.searchByConditions(e)}a(IQ,"searchByConditions");async function wQ(e){nm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of sm.searchByHash(e))r&&t.push(r);return t}a(wQ,"searchByHash");async function CQ(e){nm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of sm.searchByValue(e))t.push(r);return t}a(CQ,"searchByValue");function UQ(e,t){try{let r=new bQ(e);r.validate(),new yQ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(UQ,"search")});var Ml=m((cce,dI)=>{"use strict";var DQ=Hr();dI.exports={writeTransaction:LQ};function LQ(e,t,r){return DQ.writeTransaction(e,t,r)}a(LQ,"writeTransaction")});var mI=m((_ce,hI)=>{"use strict";var MQ=Ar(),PQ=Bs(),EI=F(),vQ=ir(),lce=Ml(),BQ=require("clone"),om=require("alasql"),HQ=Dl(),fI=require("util"),qQ=fI.promisify(PQ.getTableSchema),FQ=fI.promisify(MQ.search),GQ=g(),im=k();HQ(om);hI.exports={update:kQ};var xQ="There was a problem performing this update. Please check the logs and try again.";async function kQ({statement:e,hdb_user:t}){let r=await qQ(e.table.databaseid,e.table.tableid),s=VQ(e.columns);im.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=BQ(n),c=im.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=om.parse(u).statements[0],_=await FQ(l),d=$Q(s,_);return YQ(o,d,t)}a(kQ,"update");function VQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=om.compile(`SELECT ${r.expression.toString()} AS [${GQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw EI.error(t),new Error(xQ)}}a(VQ,"createUpdateRecord");function $Q(e,t){return im.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($Q,"buildUpdateRecords");async function YQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){EI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(YQ,"updateRecords")});var pI=m((hce,SI)=>{var KQ=require("alasql"),WQ=Ar(),QQ=F(),zQ=Hr(),cm=require("util"),am=k(),JQ=g(),XQ=Bs(),Ece=Ml(),fce=ir(),ZQ="record",jQ="successfully deleted",ez=cm.callbackify(nz),tz=cm.promisify(WQ.search),rz=cm.promisify(XQ.getTableSchema);SI.exports={convertDelete:ez};function sz(e){return`${e.deleted_hashes.length} ${ZQ}${e.deleted_hashes.length===1?"":"s"} ${jQ}`}a(sz,"generateReturnMessage");async function nz({statement:e,hdb_user:t}){let r=await rz(e.table.databaseid,e.table.tableid);am.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=am.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=KQ.parse(o).statements[0],u={operation:JQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await tz(c);let l=await zQ.deleteRecords(u);return am.isEmptyOrZeroLength(l.message)&&(l.message=sz(l)),delete l.txn_time,l}catch(l){throw QQ.error(l),l.hdb_code?l.message:l}}a(nz,"convertDelete")});var OI=m((Sce,AI)=>{"use strict";var iz=En(),{hdb_errors:TI}=Q(),{getDatabases:RI}=(de(),re(Ne));AI.exports={checkSchemaExists:gI,checkSchemaTableExists:oz,schema_describe:iz};async function gI(e){if(!RI()[e])return TI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gI,"checkSchemaExists");async function oz(e,t){let r=await gI(e);if(r)return r;if(!RI()[e][t])return TI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oz,"checkSchemaTableExists")});var Va=m((Tce,az)=>{az.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 ql={};tt(ql,{addAnalyticsListener:()=>dm,recordAction:()=>_s,recordActionBinary:()=>so,setAnalyticsEnabled:()=>cz});function cz(e){MI=e}function _s(e,t,r,s,n){if(!MI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Bl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Bl.set(i,o)),vl||uz()}function so(e,t,r,s,n){_s(e?1:0,t,r,s,n)}function dm(e){vI.push(e)}function uz(){vl=performance.now(),setTimeout(()=>{let e=performance.now()-vl;vl=0;let t=[],r={time:Date.now(),period:e,threadId:oi.threadId,metrics:t};for(let[n,i]of Bl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:oi.threadId,...s});for(let n of vI)n(t);Bl=new Map,oi.parentPort?oi.parentPort.postMessage({type:PI,report:r}):HI({report:r})},_m).unref()}async function lz(e,t=6e4){let r=Em(),s;for(let _ of r.primaryStore.getRange({start:Pl+"z",end:Pl,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:p,type:T,metric:R,count:O,threadId:V,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");p&&(U+="-"+p);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 _z()}for(let[_,d]of i)d.id=Pl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Pl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-NI,active:l-bI,time:c}),NI=u,bI=l}async function dz(e,t){let r=Em(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function Em(){return yI||(yI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function fz(){BI=!0,setInterval(async()=>{await lz(_m,lm),await dz(Ez,_m)},lm/2).unref()}function HI(e,t){let r=e.report;r.threadId=t?.threadId||oi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(II+=s.mean*s.count);r.totalBytesProcessed=II,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(wI.get(t))}),wI.set(t,t.performance.eventLoopUtilization())),r.id=(0,DI.getNextMonotonicTime)(),Em().put(r),BI||fz(),hz&&(qI=Sz(r))}async function Sz(e){if(await qI,!An){let r=(0,$a.dirname)((0,UI.getLogFilePath)());try{An=await(0,um.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{An=await(0,um.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await An.stat()).size;if(t>mz){let r=Buffer.alloc(t);await An.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await An.write(r,{position:0}),await An.truncate(r.length),t=r.length}await An.write(JSON.stringify(e)+`
|
|
6
6
|
`,t)}var oi,CI,UI,$a,um,DI,Hl,LI,Bl,lm,MI,vl,_m,PI,vI,Pl,NI,bI,_z,Ez,yI,BI,II,wI,hz,qI,An,mz,ai=Se(()=>{oi=require("worker_threads"),CI=C(Ve());de();UI=C(F()),$a=require("path"),um=require("fs/promises"),DI=C(vt()),Hl=C(W()),LI=C(g());ts();(0,Hl.initSync)();Bl=new Map,lm=(0,Hl.get)(LI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,MI=lm>0;a(cz,"setAnalyticsEnabled");a(_s,"recordAction");st.recordAnalytics=_s;a(so,"recordActionBinary");vl=0,_m=1e3,PI="analytics-report",vI=[];a(dm,"addAnalyticsListener");a(uz,"sendAnalytics");Pl="sum-";a(lz,"aggregation");NI=0,bI=0,_z=a(()=>new Promise(setImmediate),"rest");a(dz,"cleanup");Ez=36e5;a(Em,"getAnalyticsTable");(0,CI.setChildListenerByType)(PI,HI);a(fz,"startScheduledTasks");II=0,wI=new Map,hz=!1;a(HI,"recordAnalytics");mz=1e6;a(Sz,"logAnalytics")});var He=m((Mce,sw)=>{"use strict";var Tt=W();Tt.initSync();var pz=require("fs-extra"),Tz=require("semver"),Qa=require("path"),{monotonicFactory:Rz}=require("ulidx"),Sm=Rz(),gz=require("util"),GI=require("child_process"),Az=gz.promisify(GI.exec),Oz=GI.spawn,_e=be(),Te=g(),Fl=k(),yr=F(),Gl=vs(),Nz=Ml(),Ya=Nr(),{Encoder:bz,decode:pm}=require("msgpackr"),xI=new bz,{isEmpty:ci}=Fl,kI=br(),VI=12e10,yz=48*36e11,Iz=5e9,{connect:wz,StorageType:$I,RetentionPolicy:YI,AckPolicy:xl,DeliverPolicy:kl,DiscardPolicy:Cz,NatsConnection:Cce,JetStreamManager:Uce,JetStreamClient:Dce,StringCodec:Lce,JSONCodec:Uz,createInbox:Tm,headers:Dz,ErrorCode:FI}=require("nats"),{PACKAGE_ROOT:Lz}=g(),Mz=Va(),{recordAction:Pz}=(ai(),re(ql)),KI=Uz(),vz="clustering",Bz=Mz.engines[_e.NATS_SERVER_NAME],Hz=Qa.join(Lz,"dependencies"),mm=Qa.join(Hz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),fm,hm,Ka,no,io;sw.exports={runCommand:WI,checkNATSServerInstalled:qz,createConnection:Rm,getConnection:Vl,getJetStreamManager:za,getJetStream:QI,getNATSReferences:Gt,getServerList:Gz,createLocalStream:gm,listStreams:zI,deleteLocalStream:xz,getServerConfig:Ja,listRemoteStreams:kz,viewStream:Vz,viewStreamIterator:$z,publishToStream:Yz,createWorkQueueStream:Kz,addSourceToWorkStream:XI,request:Qz,removeSourceFromWorkStream:jI,reloadNATS:Am,reloadNATSHub:zz,reloadNATSLeaf:Jz,extractServerName:ZI,requestErrorHandler:Xz,updateWorkStream:Zz,createLocalTableStream:tw,createTableStreams:jz,purgeTableStream:rw,purgeSchemaTableStreams:eJ,getStreamInfo:tJ,updateLocalStreams:sJ,closeConnection:Fz,getJsmServerName:Xa,addNatsMsgHeader:JI,updateIngestStreamConsumer:Wz};async function WI(e,t=void 0){let{stdout:r,stderr:s}=await Az(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
7
|
`,""));return r.replace(`
|
|
8
8
|
`,"")}a(WI,"runCommand");async function qz(){try{await pz.access(mm)}catch{return!1}let e=await WI(`${mm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Tz.eq(t,Bz)}a(qz,"checkNATSServerInstalled");async function Rm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await kI.getClusterUser();if(ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await wz({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(Rm,"createConnection");async function Fz(){ds&&(await ds.drain(),ds=void 0,no=void 0,io=void 0,Wa=void 0)}a(Fz,"closeConnection");var ds,Wa;async function Vl(){return Wa||(Wa=Rm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ds=await Wa),ds||Wa}a(Vl,"getConnection");async function za(){if(no)return no;ci(ds)&&await Vl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=await ds.jetstreamManager({domain:e}),no}a(za,"getJetStreamManager");async function QI(){if(io)return io;ci(ds)&&await Vl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return io=ds.jetstream({domain:e}),io}a(QI,"getJetStream");async function Gt(){let e=ds||await Vl(),t=no||await za(),r=io||await QI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function Gz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await kI.getClusterUser(),n=await Rm(t,r,s),i=Tm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=KI.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 Fl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(Gz,"getServerList");async function gm(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:$I.File,retention:YI.Limits,subjects:t,discard:Cz.Old,duplicate_window:VI,max_msgs:n,max_bytes:i,max_age:s})}a(gm,"createLocalStream");async function zI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(zI,"listStreams");async function xz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(xz,"deleteLocalStream");async function kz(e){let{connection:t}=await Gt(),r=[],s=Tm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(KI.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(kz,"listRemoteStreams");async function Vz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=Sm(),o={durable_name:i,ack_policy:xl.Explicit};t&&(o.deliver_policy=kl.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=pm(_.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(Vz,"viewStream");async function*$z(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=Sm(),o={durable_name:i,ack_policy:xl.Explicit};t&&(o.deliver_policy=kl.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 _=pm(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a($z,"viewStreamIterator");async function Yz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=JI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:xI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),Pz(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 ew(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 gm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Yz,"publishToStream");function JI(e,t){t===void 0&&(t=Dz());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Fl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Sm()}`;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(JI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),vz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ci(hm)&&(hm={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}),hm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ci(fm)&&(fm={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}),fm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function Kz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:$I.File,retention:YI.Limits,duplicate_window:VI,max_age:yz,max_bytes:Iz,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:xl.Explicit,durable_name:e.durable_name,deliver_policy:kl.All,max_ack_pending:1e4});else throw s}}a(Kz,"createWorkQueueStream");async function Wz(){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:xl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:kl.All,max_ack_pending:1e4}))}a(Wz,"updateIngestStreamConsumer");async function XI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=ZI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Gl.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 p=0,T=n.config.sources.length;p<T;p++)if(d=n.config.sources[p],E=p,_&&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 ZI(e){return e.split(".")[1]}a(ZI,"extractServerName");async function jI(e,t,r){let{schema:s,table:n}=r,i=Gl.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(jI,"removeSourceFromWorkStream");async function Qz(e,t,r=2e4,s=Tm()){if(!Fl.isObject(t))throw new Error("data param must be an object");let n=xI.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 pm(c.data)}a(Qz,"request");function Am(e){return new Promise(async(t,r)=>{let s=Oz(mm,["--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(Am,"reloadNATS");async function zz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Am(e)}a(zz,"reloadNATSHub");async function Jz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Am(e)}a(Jz,"reloadNATSLeaf");function Xz(e,t,r){let s;switch(e.code){case FI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case FI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Xz,"requestErrorHandler");async function Zz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await ew(async()=>{e.subscribe===!0?await XI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await jI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Zz,"updateWorkStream");function ew(e){return Nz.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ew,"exclusiveLock");async function tw(e,t){let r=Gl.createNatsTableStreamName(e,t),s=await Xa(),n=rJ(e,t,s);await gm(r,[n])}a(tw,"createLocalTableStream");async function jz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await tw(s,n)}}a(jz,"createTableStreams");async function rw(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Gl.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(rw,"purgeTableStream");async function eJ(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await rw(e,t[r])}a(eJ,"purgeSchemaTableStreams");async function tJ(e){return(await za()).streams.info(e)}a(tJ,"getStreamInfo");function rJ(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(rJ,"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 sJ(){let e=await za(),t=await Xa(),r=await zI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=nJ(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(sJ,"updateLocalStreams");function nJ(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(nJ,"updateStreamLimits")});var Za=m((Bce,aw)=>{"use strict";var oo=Ku(),ao=OI(),iJ=F(),oJ=require("uuid").v4,vce=require("clone"),Yl=xs(),co=g(),aJ=require("util"),On=Hr(),{handleHDBError:xt,hdb_errors:cJ}=Q(),{HDB_ERROR_MSGS:$l,HTTP_STATUS_CODES:kt}=cJ,{SchemaEventMsg:Kl}=Fr(),nw=He(),{getDatabases:uJ}=(de(),re(Ne)),{transformReq:uo}=k();aw.exports={createSchema:lJ,createSchemaStructure:iw,createTable:_J,createTableStructure:ow,createAttribute:mJ,dropSchema:dJ,dropTable:EJ,dropAttribute:fJ,getBackup:SJ};async function lJ(e){let t=await iw(e);return Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema)),t}a(lJ,"createSchema");async function iw(e){let t=oo.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(uo(e),!await ao.checkSchemaExists(e.schema))throw xt(new Error,$l.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,co.LOG_LEVELS.ERROR,$l.SCHEMA_EXISTS_ERR(e.schema),!0);return await On.createSchema(e),`database '${e.schema}' successfully created`}a(iw,"createSchemaStructure");async function _J(e){return uo(e),await ow(e)}a(_J,"createTable");async function ow(e){let t=oo.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(oo.validateTableResidence(e.residence),!await ao.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,$l.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,co.LOG_LEVELS.ERROR,$l.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:oJ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await On.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 On.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(ow,"createTableStructure");async function dJ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=oo.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);uo(e);let n=await ao.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,co.LOG_LEVELS.ERROR,n,!0);let i=await ao.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await On.dropSchema(e),Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema)),await nw.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(dJ,"dropSchema");async function EJ(e){let t=oo.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);uo(e);let r=await ao.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,co.LOG_LEVELS.ERROR,r,!0);return await On.dropTable(e),await nw.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(EJ,"dropTable");async function fJ(e){let t=oo.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);uo(e);let r=await ao.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,co.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(co.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 On.dropAttribute(e),hJ(e),Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw iJ.error(`Got an error deleting attribute ${aJ.inspect(e)}.`),s}}a(fJ,"dropAttribute");function hJ(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(hJ,"dropAttributeFromGlobal");async function mJ(e){uo(e);let t=uJ()[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 On.createAttribute(e),Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(mJ,"createAttribute");function SJ(e){return On.getBackup(e)}a(SJ,"getBackup")});var uw=m((qce,cw)=>{"use strict";var{OPERATIONS_ENUM:pJ}=g(),Om=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=pJ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};cw.exports=Om});var Nm=m((xce,fw)=>{"use strict";var TJ=Hr(),Gce=uw(),Wl=k(),Ql=g(),RJ=W(),{handleHDBError:lw,hdb_errors:gJ}=Q(),{HDB_ERROR_MSGS:_w,HTTP_STATUS_CODES:dw}=gJ,AJ=Object.values(Ql.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Ew="To use this operation audit log must be enabled in harperdb-config.yaml";fw.exports=OJ;async function OJ(e){if(Wl.isEmpty(e.schema))throw new Error(_w.SCHEMA_REQUIRED_ERR);if(Wl.isEmpty(e.table))throw new Error(_w.TABLE_REQUIRED_ERR);if(!RJ.get(Ql.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lw(new Error,Ew,dw.BAD_REQUEST,Ql.LOG_LEVELS.ERROR,Ew,!0);let t=Wl.checkSchemaTableExist(e.schema,e.table);if(t)throw lw(new Error,t,dw.NOT_FOUND,Ql.LOG_LEVELS.ERROR,t,!0);if(!Wl.isEmpty(e.search_type)&&AJ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await TJ.readAuditLog(e)}a(OJ,"readAuditLog")});var mw=m((Vce,hw)=>{"use strict";var{OPERATIONS_ENUM:NJ}=g(),bm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=NJ.GET_BACKUP,this.schema=t,this.table=r}};hw.exports=bm});var Tw=m((Wce,pw)=>{"use strict";var bJ=Hr(),Yce=mw(),ym=k(),yJ=g(),Kce=W(),{handleHDBError:IJ,hdb_errors:wJ}=Q(),{HDB_ERROR_MSGS:Sw,HTTP_STATUS_CODES:CJ}=wJ;pw.exports=UJ;async function UJ(e){if(ym.isEmpty(e.schema))throw new Error(Sw.SCHEMA_REQUIRED_ERR);if(ym.isEmpty(e.table))throw new Error(Sw.TABLE_REQUIRED_ERR);let t=ym.checkSchemaTableExist(e.schema,e.table);if(t)throw IJ(new Error,t,CJ.NOT_FOUND,yJ.LOG_LEVELS.ERROR,t,!0);return await bJ.getBackup(read_audit_log_object)}a(UJ,"getBackup")});var bw=m((zce,Nw)=>{var Nn=require("validate.js"),gw=Ue(),lo=g(),{handleHDBError:DJ,hdb_errors:LJ}=Q(),{HDB_ERROR_MSGS:Ye,HTTP_STATUS_CODES:MJ}=LJ,Im=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),PJ={STRUCTURE_USER:"structure_user"},Rw=Object.values(lo.ROLE_TYPES_ENUM),vJ="attribute_permissions",BJ="attribute_name",{PERMS_CRUD_ENUM:_o}=lo,HJ=[vJ,...Object.values(_o)],Aw=[_o.READ,_o.INSERT,_o.UPDATE],qJ=[BJ,...Aw];function FJ(e){let t=Im();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Ow(e,t)}a(FJ,"addRoleValidation");function GJ(e){let t=Im();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Ow(e,t)}a(GJ,"alterRoleValidation");function xJ(e){let t=Im();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,gw.validateObject(e,t)}a(xJ,"dropRoleValidation");var kJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Ow(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)kJ.includes(s[o])||n.push(s[o]);n.length>0&&Je(Ye.INVALID_ROLE_JSON_KEYS(n),r);let i=gw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Je(o,r)}),e.permission){let o=VJ(e);o&&Je(o,r),Rw.forEach(c=>{e.permission[c]&&!Nn.isBoolean(e.permission[c])&&Je(Ye.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Rw.indexOf(o)<0){if(o===PJ.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]||Je(Ye.SCHEMA_NOT_FOUND(d),r)}continue}Je(Ye.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Je(Ye.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]){Je(Ye.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{HJ.includes(_)||Je(Ye.INVALID_PERM_KEY(_),r,o,u)}),Object.values(_o).forEach(_=>{Nn.isDefined(l[_])?Nn.isBoolean(l[_])||Je(Ye.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Je(Ye.TABLE_PERM_MISSING(_),r,o,u)}),Nn.isDefined(l.attribute_permissions)){if(!Nn.isArray(l.attribute_permissions)){Je(Ye.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Je(Ye.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(p=>{!qJ.includes(p)&&p!==_o.DELETE&&Je(Ye.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Nn.isDefined(f.attribute_name)){Je(Ye.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Je(Ye.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}Aw.forEach(p=>{Nn.isDefined(f[p])?Nn.isBoolean(f[p])||Je(Ye.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Je(Ye.ATTR_PERM_MISSING(p,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}`;Je(Ye.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return $J(r)}a(Ow,"customValidate");Nw.exports={addRoleValidation:FJ,alterRoleValidation:GJ,dropRoleValidation:xJ};function VJ(e){let{operation:t,permission:r}=e;if(t===lo.OPERATIONS_ENUM.ADD_ROLE||t===lo.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 Ye.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?lo.ROLE_TYPES_ENUM.SUPER_USER:lo.ROLE_TYPES_ENUM.CLUSTER_USER;return Ye.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(VJ,"validateNoSUPerms");function $J(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ye.ROLE_PERMS_ERROR,...e};return DJ(new Error,s,MJ.BAD_REQUEST)}else return null}a($J,"generateRolePermResponse");function Je(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(Je,"addPermError")});var Mm=m((Xce,Cw)=>{"use strict";var yw=ir(),Iw=Ar(),YJ=mn(),Cm=bw(),Um=xs(),KJ=require("uuid").v4,WJ=require("util"),zl=g(),QJ=k(),Dm=Iw.searchByValue,zJ=Iw.searchByHash,JJ=WJ.promisify(YJ.delete),XJ=as(),ZJ=ji(),{hdb_errors:jJ,handleHDBError:Eo}=Q(),{HDB_ERROR_MSGS:ww,HTTP_STATUS_CODES:Jl}=jJ,{UserEventMsg:Lm}=Fr();Cw.exports={addRole:e2,alterRole:t2,dropRole:r2,listRoles:s2};function wm(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(wm,"scrubRoleDetails");async function e2(e){let t=Cm.addRoleValidation(e);if(t)throw t;e=wm(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 Dm(r)||[])}catch(i){throw Eo(i)}if(s&&s.length>0)throw Eo(new Error,ww.ROLE_ALREADY_EXISTS(e.role),Jl.CONFLICT,void 0,void 0,!0);e.id||(e.id=KJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yw.insert(n),Um.signalUserChange(new Lm(process.pid)),e=wm(e),e}a(e2,"addRole");async function t2(e){let t=Cm.alterRoleValidation(e);if(t)throw t;e=wm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await yw.update(r)}catch(n){throw Eo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Eo(new Error,"Invalid role id",Jl.BAD_REQUEST,void 0,void 0,!0);return await Um.signalUserChange(new Lm(process.pid)),e}a(t2,"alterRole");async function r2(e){let t=Cm.dropRoleValidation(e);if(t)throw Eo(new Error,t,Jl.BAD_REQUEST,void 0,void 0,!0);let r=new ZJ(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await zJ(r));if(s.length===0)throw Eo(new Error,ww.ROLE_NOT_FOUND,Jl.NOT_FOUND,void 0,void 0,!0);let n=new XJ(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Dm(n)),o=!1;if(QJ.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 JJ(c),Um.signalUserChange(new Lm(process.pid)),`${s[0].role} successfully deleted`}a(r2,"dropRole");async function s2(){return Dm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(s2,"listRoles")});var Mw=m((jce,Lw)=>{"use strict";var n2=W(),bn=require("joi"),i2=Ue(),Uw=require("moment"),o2=require("fs-extra"),Pm=require("path"),a2=require("lodash"),ja=g(),{LOG_LEVELS:ui}=g(),c2="YYYY-MM-DD hh:mm:ss",u2=Pm.resolve(__dirname,"../logs");Lw.exports=function(e){return i2.validateBySchema(e,l2)};var l2=bn.object({from:bn.custom(Dw),until:bn.custom(Dw),level:bn.valid(ui.NOTIFY,ui.FATAL,ui.ERROR,ui.WARN,ui.INFO,ui.DEBUG,ui.TRACE),order:bn.valid("asc","desc"),limit:bn.number().min(1),start:bn.number().min(0),log_name:bn.custom(_2)});function Dw(e,t){if(Uw(e,Uw.ISO_8601).format(c2)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Dw,"validateDatetime");function _2(e,t){if(a2.invert(ja.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=n2.get(ja.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?ja.LOG_NAMES.HDB:e,i=n===ja.LOG_NAMES.INSTALL?Pm.join(u2,ja.LOG_NAMES.INSTALL):Pm.join(s,n);return o2.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(_2,"validateReadLogPath")});var Bm=m((tue,vw)=>{"use strict";var Xl=g(),d2=F(),E2=W(),f2=Mw(),vm=require("path"),Pw=require("fs-extra"),{once:h2}=require("events"),{handleHDBError:m2,hdb_errors:S2}=Q(),{PACKAGE_ROOT:p2}=g(),T2=vm.join(p2,"logs"),R2=1e3,g2=200;vw.exports=A2;async function A2(e){let t=f2(e);if(t)throw m2(t,t.message,S2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=E2.get(Xl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Xl.LOG_NAMES.HDB:e.log_name,n=s===Xl.LOG_NAMES.INSTALL?vm.join(T2,Xl.LOG_NAMES.INSTALL):vm.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?R2:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!_&&(p=Math.max(Pw.statSync(n).size-(h+5)*g2,0));let T=Pw.createReadStream(n,{start:p});T.on("error",b=>{d2.error(b)});let R=0,O=[],V="",$;T.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=V+b;let z=0,q;for(;(q=P.exec(b))&&!T.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,et,_u]=q,Pi=_u.split("] ["),Ko=Pi[0],kn=Pi[1];Pi.splice(0,2),$={timestamp:et,thread:Ko,level:kn,tags:Pi,message:""},z=q.index+Oe.length}V=b.slice(z)}),T.on("end",b=>{T.destroyed||$&&($.message=V.trim(),U($))}),T.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&&(yn(b,E,O),R++,R===h&&T.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&&(yn(b,E,O),R++,R===h&&T.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&&(yn(b,E,O),R++,R===h&&T.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&&(yn(b,E,O),R++,R===h&&T.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(yn(b,E,O),R++,R===h&&T.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(yn(b,E,O),R++,R===h&&T.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(yn(b,E,O),R++,R===h&&T.destroy());break;default:R<f?R++:(yn(b,E,O),R++,R===h&&T.destroy())}}return a(U,"onLogMessage"),await h2(T,"close"),O}a(A2,"readLog");function yn(e,t,r){t==="desc"?O2(e,r):t==="asc"?N2(e,r):r.push(e)}a(yn,"pushLineToResult");function O2(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(O2,"insertDescending");function N2(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(N2,"insertAscending")});var jl=m((oue,Fw)=>{"use strict";var Hm=require("joi"),{string:Zl,boolean:Bw,date:b2}=Hm.types(),y2=Ue(),{validateSchemaExists:sue,validateTableExists:nue,validateSchemaName:iue}=ss(),I2=g(),w2=be(),Hw=W();Hw.initSync();var C2=Zl.invalid(Hw.get(I2.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(w2.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(),qw={operation:Zl.valid("add_node","update_node"),node_name:C2,subscriptions:Hm.array().items({table:Zl.optional(),schema:Zl.required(),subscribe:Bw.required(),publish:Bw.required().custom(D2),start_time:b2.iso()}).min(1).required()};function U2(e){return y2.validateBySchema(e,Hm.object(qw))}a(U2,"addUpdateNodeValidator");function D2(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(D2,"checkForFalsy");Fw.exports={addUpdateNodeValidator:U2,validation_schema:qw}});var xw=m((cue,Gw)=>{var L2=Ue(),M2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Gw.exports=function(e){return L2.validateObject(e,M2)}});var e_=m((uue,kw)=>{"use strict";var P2=g().OPERATIONS_ENUM,qm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=P2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kw.exports=qm});var $w=m((_ue,Vw)=>{"use strict";var v2={OPERATION:"operation",REFRESH:"refresh"},Fm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Gm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Vw.exports={JWTTokens:Fm,TOKEN_TYPE_ENUM:v2,JWTRSAKeys:Gm}});var rc=m((Eue,Qw)=>{"use strict";var tc=require("jsonwebtoken"),xm=require("fs-extra"),km=k(),Ir=g(),{handleHDBError:Vt,hdb_errors:B2}=Q(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=B2,ec=F(),Yw=il(),Ym=br(),H2=ir().update,q2=e_(),F2=xs(),{UserEventMsg:G2}=Fr(),In=W();In.initSync();var Vm=require("path"),{JWTTokens:x2,JWTRSAKeys:k2,TOKEN_TYPE_ENUM:t_}=$w(),V2=In.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?In.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",$2=In.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?In.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",r_="RS256",$m;Qw.exports={createTokens:Y2,validateOperationToken:W2,refreshOperationToken:K2,validateRefreshToken:Ww};async function Y2(e){if(km.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(km.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(km.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Ym.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ec.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await s_(),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 Kw(i,r.private_key,r.passphrase),c=await tc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:$2,algorithm:r_,subject:t_.REFRESH}),u=Yw.hash(c),l=new q2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await H2(l)}catch(E){ec.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 F2.signalUserChange(new G2(process.pid)),new x2(o,c)}a(Y2,"createTokens");async function Kw(e,t,r){return await tc.sign(e,{key:t,passphrase:r},{expiresIn:V2,algorithm:r_,subject:t_.OPERATION})}a(Kw,"signOperationToken");async function s_(){if($m===void 0)try{let e=Vm.join(In.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Vm.join(In.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Vm.join(In.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await xm.readFile(e)).toString(),n=(await xm.readFile(t)).toString(),i=(await xm.readFile(r)).toString();$m=new k2(i,n,s)}catch(e){throw ec.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return $m}a(s_,"getJWTRSAKeys");async function K2(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 Ww(e.refresh_token);let t=await s_(),r=await tc.decode(e.refresh_token);return{operation_token:await Kw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(K2,"refreshOperationToken");async function W2(e){try{let t=await s_(),r=await tc.verify(e,t.public_key,{algorithms:r_,subject:t_.OPERATION});return await Ym.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ec.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(W2,"validateOperationToken");async function Ww(e){let t;try{let r=await s_(),s=await tc.verify(e,r.public_key,{algorithms:r_,subject:t_.REFRESH});t=await Ym.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ec.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Yw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Ww,"validateRefreshToken")});var Km=m((mue,Xw)=>{"use strict";var Q2=xw(),fo=require("passport"),z2=require("passport-local").Strategy,J2=require("passport-http").BasicStrategy,X2=require("util"),Z2=br(),Jw=X2.callbackify(Z2.findAndValidateUser),hue=rr(),j2=g(),zw=rc();fo.use(new z2(function(e,t,r){Jw(e,t,r)}));fo.use(new J2(function(e,t,r){Jw(e,t,r)}));fo.serializeUser(function(e,t){t(null,e)});fo.deserializeUser(function(e,t){t(null,e)});function e3(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":fo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===j2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?zw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):zw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:fo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(e3,"authorize");function t3(e,t){let r=Q2(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(t3,"checkPermissions");Xw.exports={authorize:e3,checkPermissions:t3}});var wn=m((pue,Zw)=>{"use strict";var Wm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Qm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Zw.exports={Node:Wm,NodeSubscription:Qm}});var eC=m((Rue,jw)=>{"use strict";var r3=g().OPERATIONS_ENUM,zm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=r3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jw.exports=zm});var sc=m((Aue,tC)=>{"use strict";var Jm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Xm=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)}};tC.exports={RemotePayloadObject:Jm,RemotePayloadSubscription:Xm}});var sC=m((Nue,rC)=>{"use strict";var Zm=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}};rC.exports=Zm});var oC=m((Cue,iC)=>{"use strict";var s3=sC(),yue=ke(),nC=Ie(),n3=F(),{getSchemaPath:Iue,getTransactionAuditStorePath:wue}=Ce(),{getDatabases:i3}=(de(),re(Ne));iC.exports=o3;async function o3(e){let t=new s3;try{let r=i3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await nC.environmentDataSize(schema_path,e.name),o=await nC.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){n3.warn(`unable to stat table dbi due to ${r}`)}return t}a(o3,"lmdbGetTableSize")});var cC=m((Due,aC)=>{"use strict";var jm=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}};aC.exports=jm});var ho=m((vue,dC)=>{"use strict";var a3=require("fs-extra"),c3=require("path"),Ut=require("systeminformation"),Cn=F(),u3=He(),eS=be(),i_=g(),l3=oC(),_C=En(),{getThreadInfo:uC}=Ve(),lS=W();lS.initSync();var _3=cC(),{openEnvironment:Mue}=Ie(),{getSchemaPath:Pue}=Ce(),{database:d3}=(de(),re(Ne)),n_;dC.exports={getHDBProcessInfo:nS,getNetworkInfo:oS,getDiskInfo:iS,getMemoryInfo:sS,getCPUInfo:rS,getTimeInfo:tS,getSystemInformation:aS,systemInformation:E3,getTableSize:cS,getMetrics:uS};function tS(){return Ut.time()}a(tS,"getTimeInfo");async function rS(){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:p,raw_currentload_user:T,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(V=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=V;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return Cn.error(`error in getCPUInfo: ${e}`),{}}}a(rS,"getCPUInfo");async function sS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Cn.error(`error in getMemoryInfo: ${e}`),{}}}a(sS,"getMemoryInfo");async function nS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await a3.readFile(c3.join(lS.get(i_.CONFIG_PARAMS.ROOTPATH),i_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===i_.NODE_ERROR_CODES.ENOENT)Cn.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 Cn.error(`error in getHDBProcessInfo: ${t}`),e}}a(nS,"getHDBProcessInfo");async function iS(){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 Cn.error(`error in getDiskInfo: ${t}`),e}}a(iS,"getDiskInfo");async function oS(){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 Cn.error(`error in getNetworkInfo: ${t}`),e}}a(oS,"getNetworkInfo");async function aS(){if(n_!==void 0)return n_;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,n_=e,n_}catch(t){return Cn.error(`error in getSystemInformation: ${t}`),e}}a(aS,"getSystemInformation");async function cS(){let e=[],t=await _C.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await l3(s));return e}a(cS,"getTableSize");async function uS(){let e=await _C.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=d3({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){Cn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(uS,"getMetrics");async function lC(){if(lS.get(i_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await u3.getNATSReferences(),r=await t.streams.info(eS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(eS.WORK_QUEUE_CONSUMER_NAMES.stream_name,eS.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(lC,"getNatsStreamInfo");async function E3(e){let t=new _3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await aS(),t.time=tS(),t.cpu=await rS(),t.memory=await sS(),t.disk=await iS(),t.network=await oS(),t.harperdb_processes=await nS(),t.table_size=await cS(),t.metrics=await uS(),t.threads=await uC(),t.replication=await lC(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await aS();break;case"time":t.time=tS();break;case"cpu":t.cpu=await rS();break;case"memory":t.memory=await sS();break;case"disk":t.disk=await iS();break;case"network":t.network=await oS();break;case"harperdb_processes":t.harperdb_processes=await nS();break;case"table_size":t.table_size=await cS();break;case"database_metrics":case"metrics":t.metrics=await uS();break;case"threads":t.threads=await uC();break;case"replication":t.replication=await lC();break;default:break}return t}a(E3,"systemInformation")});var _S=m((Fue,EC)=>{"use strict";var Hue=require("fs-extra"),que=F();EC.exports={version:f3,printVersion:m3,nodeVersion:h3};var Un=Va();function f3(){if(Un)return Un.version}a(f3,"version");function h3(){if(Un&&Un.engines&&Un.engines["preferred-node"])return Un.engines["preferred-node"]}a(h3,"nodeVersion");function m3(){Un&&console.log(`HarperDB Version ${Un.version}`)}a(m3,"printVersion")});var wr=m((Vue,SC)=>{"use strict";var S3=ir(),dS=k(),p3=require("util"),li=g(),fC=W();fC.initSync();var T3=Km(),hC=Ar(),{Node:xue,NodeSubscription:kue}=wn(),R3=ji(),g3=eC(),{RemotePayloadObject:A3,RemotePayloadSubscription:O3}=sc(),{handleHDBError:N3,hdb_errors:b3}=Q(),{HTTP_STATUS_CODES:y3,HDB_ERROR_MSGS:I3}=b3,w3=as(),C3=ho(),U3=_S(),{getDatabases:D3}=(de(),re(Ne)),L3=p3.promisify(T3.authorize),M3=hC.searchByHash,P3=hC.searchByValue;SC.exports={authHeaderToUser:v3,isEmpty:B3,getNodeRecord:H3,upsertNodeRecord:q3,buildNodePayloads:F3,checkClusteringEnabled:G3,getAllNodeRecords:x3,getSystemInfo:k3,reverseSubscription:mC};async function v3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await L3(t,null),e}a(v3,"authHeaderToUser");function B3(e){return e==null}a(B3,"isEmpty");async function H3(e){let t=new R3(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return M3(t)}a(H3,"getNodeRecord");async function q3(e){let t=new g3(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return S3.upsert(t)}a(q3,"upsertNodeRecord");function mC(e){if(dS.isEmpty(e.subscribe)||dS.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(mC,"reverseSubscription");function F3(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,_=dS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=mC(c),f=D3()[u]?.[l],h=new O3(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new A3(r,t,n,s)}a(F3,"buildNodePayloads");function G3(){if(!fC.get(li.CONFIG_PARAMS.CLUSTERING_ENABLED))throw N3(new Error,I3.CLUSTERING_NOT_ENABLED,y3.BAD_REQUEST,void 0,void 0,!0)}a(G3,"checkClusteringEnabled");async function x3(){let e=new w3(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await P3(e))}a(x3,"getAllNodeRecords");async function k3(){let e=await C3.getSystemInformation();return{hdb_version:U3.version(),node_version:e.node_version,platform:e.platform}}a(k3,"getSystemInfo")});var ES=m((Yue,bC)=>{"use strict";var o_=He(),pC=k(),TC=be(),RC=g(),a_=F(),gC=Za(),V3=yl(),{RemotePayloadObject:$3}=sc(),{handleHDBError:AC,hdb_errors:Y3}=Q(),{HTTP_STATUS_CODES:OC}=Y3,{NodeSubscription:NC}=wn();bC.exports=K3;async function K3(e,t){let r;try{r=await o_.request(`${t}.${TC.REQUEST_SUFFIX}`,new $3(RC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),a_.trace("Response from remote describe all request:",r)}catch(o){a_.error(`addNode received error from describe all request to remote node: ${o}`);let c=o_.requestErrorHandler(o,"add_node",t);throw AC(new Error,c,OC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===TC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw AC(new Error,o,OC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===RC.SYSTEM_SCHEMA_NAME){await o_.createLocalTableStream(c,u);let h=new NC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=pC.doesSchemaExist(c),_=s[c]!==void 0,d=u?pC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(a_.trace(`addNode creating schema: ${c}`),await gC.createSchema({operation:"create_schema",schema:c})),!d&&E){a_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new V3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await gC.createTable(h)}await o_.createLocalTableStream(c,u);let f=new NC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(K3,"reviewSubscriptions")});var l_=m((Wue,wC)=>{"use strict";var{handleHDBError:c_,hdb_errors:W3}=Q(),{HTTP_STATUS_CODES:u_}=W3,{addUpdateNodeValidator:Q3}=jl(),nc=F(),IC=g(),yC=be(),z3=k(),fS=He(),ic=wr(),J3=W(),X3=ES(),{Node:Z3,NodeSubscription:j3}=wn(),{broadcast:eX}=Ve(),tX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",rX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",sX=J3.get(IC.CONFIG_PARAMS.CLUSTERING_NODENAME);wC.exports=nX;async function nX(e,t=!1){nc.trace("addNode called with:",e),ic.checkClusteringEnabled();let r=Q3(e);if(r)throw c_(r,r.message,u_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await ic.getNodeRecord(s);if(!z3.isEmptyOrZeroLength(d))throw c_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,u_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await X3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=tX,o;let c=ic.buildNodePayloads(n,sX,IC.OPERATIONS_ENUM.ADD_NODE,await ic.getSystemInfo());nc.trace("addNode sending remote payload:",c);let u;try{u=await fS.request(`${s}.${yC.REQUEST_SUFFIX}`,c)}catch(d){nc.error(`addNode received error from request: ${d}`);let E=fS.requestErrorHandler(d,"add_node",s);throw c_(new Error,E,u_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===yC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw c_(new Error,d,u_.INTERNAL_SERVER_ERROR,"error",d)}nc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];nc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await fS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new j3(f.schema,f.table,f.publish,f.subscribe))}let _=new Z3(s,l,u.system_info);return await ic.upsertNodeRecord(_),eX({type:"nats_update"}),i.length>0?o.message=rX:o.message=`Successfully added '${s}' to manifest`,o}a(nX,"addNode")});var mS=m((zue,DC)=>{"use strict";var{handleHDBError:__,hdb_errors:iX}=Q(),{HTTP_STATUS_CODES:d_}=iX,{addUpdateNodeValidator:oX}=jl(),oc=F(),UC=g(),CC=be(),aX=k(),hS=He(),ac=wr(),cX=W(),{cloneDeep:uX}=require("lodash"),lX=ES(),{NodeSubscription:_X}=wn(),{broadcast:dX}=Ve(),EX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",fX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(UC.CONFIG_PARAMS.CLUSTERING_NODENAME);DC.exports=mX;async function mX(e){oc.trace("updateNode called with:",e),ac.checkClusteringEnabled();let t=oX(e);if(t)throw __(t,t.message,d_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=uX(await ac.getNodeRecord(r));if(aX.isEmptyOrZeroLength(s))throw __(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,d_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await lX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=ac.buildNodePayloads(n,hX,UC.OPERATIONS_ENUM.UPDATE_NODE,await ac.getSystemInfo());oc.trace("updateNode sending remote payload:",c);let u;try{u=await hS.request(`${r}.${CC.REQUEST_SUFFIX}`,c)}catch(l){oc.error(`updateNode received error from request: ${l}`);let _=hS.requestErrorHandler(l,"update_node",r);throw __(new Error,_,d_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===CC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw __(new Error,l,d_.INTERNAL_SERVER_ERROR,"error",l)}oc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];oc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await hS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await SX(s[0],n,u.system_info),i.length>0?o.message=fX:o.message=`Successfully updated '${r}'`,o}a(mX,"updateNode");async function SX(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 _X(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ac.upsertNodeRecord(s),dX({type:"nats_update"})}a(SX,"updateNodeTable")});var BC=m((Xue,vC)=>{"use strict";var PC=require("joi"),{string:LC}=PC.types(),pX=Ue(),MC=g(),TX=W(),RX=be();vC.exports=gX;function gX(e){let t=LC.invalid(TX.get(MC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(RX.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=PC.object({operation:LC.valid(MC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pX.validateBySchema(e,r)}a(gX,"removeNodeValidator")});var f_=m((jue,kC)=>{"use strict";var{handleHDBError:HC,hdb_errors:AX}=Q(),{HTTP_STATUS_CODES:qC}=AX,OX=BC(),cc=F(),FC=wr(),NX=k(),E_=g(),GC=be(),xC=He(),bX=W(),{RemotePayloadObject:yX}=sc(),{NodeSubscription:IX}=wn(),wX=eo(),CX=mn(),{broadcast:UX}=Ve(),DX=bX.get(E_.CONFIG_PARAMS.CLUSTERING_NODENAME);kC.exports=LX;async function LX(e){cc.trace("removeNode called with:",e),FC.checkClusteringEnabled();let t=OX(e);if(t)throw HC(t,t.message,qC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await FC.getNodeRecord(r);if(NX.isEmptyOrZeroLength(s))throw HC(new Error,`Node '${r}' was not found.`,qC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new yX(E_.OPERATIONS_ENUM.REMOVE_NODE,DX,[]),i,o=!1;try{i=await xC.request(`${r}.${GC.REQUEST_SUFFIX}`,n),cc.trace("Remove node reply from remote node:",r,i)}catch(u){cc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];cc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new IX(_.schema,_.table,!1,!1);await xC.updateWorkStream(d,r)}let c=new wX(E_.SYSTEM_SCHEMA_NAME,E_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await CX.deleteRecord(c),UX({type:"nats_update"}),i?.status===GC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(LX,"removeNode")});var YC=m((tle,$C)=>{"use strict";var VC=require("joi"),{string:MX,array:PX}=VC.types(),vX=Ue(),BX=jl();$C.exports=HX;function HX(e){let t=VC.object({operation:MX.valid("configure_cluster").required(),connections:PX.items(BX.validation_schema).required()});return vX.validateBySchema(e,t)}a(HX,"configureClusterValidator")});var SS=m((sle,JC)=>{"use strict";var qX=g(),h_=F(),FX=k(),GX=f_(),xX=l_(),KC=wr(),kX=YC(),{handleHDBError:WC,hdb_errors:VX}=Q(),{HTTP_STATUS_CODES:QC}=VX,$X="Configure cluster complete.",YX="Failed to configure the cluster. Check the logs for more details.",KX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";JC.exports=WX;async function WX(e){h_.trace("configure cluster called with:",e),KC.checkClusteringEnabled();let t=kX(e);if(t)throw WC(t,t.message,QC.BAD_REQUEST,void 0,void 0,!0);let r=await KC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(zC(GX,{operation:qX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);h_.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(zC(xX,f,f.node_name))}let c=await Promise.allSettled(i);h_.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"&&(h_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(FX.isEmptyOrZeroLength(u))return{message:$X,connections:l};if(_)return{message:KX,failed_nodes:u,connections:l};throw WC(new Error,YX,QC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(WX,"configureCluster");async function zC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(zC,"functionWrapper")});var ZC=m((ile,XC)=>{"use strict";var m_=require("joi"),QX=Ue(),{validateSchemaExists:zX,validateTableExists:JX,validateSchemaName:XX}=ss(),ZX=m_.object({operation:m_.string().valid("purge_stream"),schema:m_.string().custom(zX).custom(XX).required(),table:m_.string().custom(JX).required()});function jX(e){return QX.validateBySchema(e,ZX)}a(jX,"purgeStreamValidator");XC.exports=jX});var pS=m((ale,jC)=>{"use strict";var{handleHDBError:e4,hdb_errors:t4}=Q(),{HTTP_STATUS_CODES:r4}=t4,s4=ZC(),n4=He(),i4=wr();jC.exports=o4;async function o4(e){let t=s4(e);if(t)throw e4(t,t.message,r4.BAD_REQUEST,void 0,void 0,!0);i4.checkClusteringEnabled();let{schema:r,table:s}=e;return await n4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(o4,"purgeStream")});var gS=m((ule,iU)=>{"use strict";var RS=wr(),a4=He(),rU=W(),S_=g(),_i=be(),c4=k(),TS=F(),{RemotePayloadObject:u4}=sc(),{ErrorCode:eU}=require("nats"),tU=rU.get(S_.CONFIG_PARAMS.CLUSTERING_ENABLED),sU=rU.get(S_.CONFIG_PARAMS.CLUSTERING_NODENAME);iU.exports={clusterStatus:l4,buildNodeStatus:nU};async function l4(){let e={node_name:sU,is_enabled:tU,connections:[]};if(!tU)return e;let t=await RS.getAllNodeRecords();if(c4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(nU(t[s],e.connections));return await Promise.allSettled(r),e}a(l4,"clusterStatus");async function nU(e,t){let r=e.name,s=new u4(S_.OPERATIONS_ENUM.CLUSTER_STATUS,sU,void 0,await RS.getSystemInfo()),n,i,o=_i.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await a4.request(_i.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===_i.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=_i.CLUSTER_STATUS_STATUSES.CLOSED,TS.error(`Error getting node status from ${r} `,n))}catch(u){TS.warn(`Error getting node status from ${r}`,u),u.code===eU.NoResponders?o=_i.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===eU.Timeout?o=_i.CLUSTER_STATUS_STATUSES.TIMEOUT:o=_i.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _4(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!==S_.PRE_4_0_0_VERSION&&await RS.upsertNodeRecord(u)}catch(u){TS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(nU,"buildNodeStatus");function _4(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(_4,"NodeStatusObject")});var OS=m((_le,oU)=>{"use strict";var{handleHDBError:d4,hdb_errors:E4}=Q(),{HTTP_STATUS_CODES:f4}=E4,h4=He(),m4=wr(),AS=k(),p_=require("joi"),S4=Ue(),p4=2e3,T4=p_.object({timeout:p_.number().min(1),connected_nodes:p_.boolean(),routes:p_.boolean()});oU.exports=R4;async function R4(e){m4.checkClusteringEnabled();let t=S4.validateBySchema(e,T4);if(t)throw d4(t,t.message,f4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||AS.autoCastBoolean(s),o=n===void 0||AS.autoCastBoolean(n),c={nodes:[]},u=await h4.getServerList(r??p4),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(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:AS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(R4,"clusterNetwork")});var lU=m((Ele,uU)=>{"use strict";var NS=require("joi"),aU=Ue(),{route_constraints:cU}=Jf();uU.exports={setRoutesValidator:g4,deleteRoutesValidator:A4};function g4(e){let t=NS.object({server:NS.valid("hub","leaf").required(),routes:cU.required()});return aU.validateBySchema(e,t)}a(g4,"setRoutesValidator");function A4(e){let t=NS.object({routes:cU.required()});return aU.validateBySchema(e,t)}a(A4,"deleteRoutesValidator")});var yS=m((hle,fU)=>{"use strict";var di=Nr(),bS=k(),T_=g(),_U=lU(),{handleHDBError:dU,hdb_errors:O4}=Q(),{HTTP_STATUS_CODES:EU}=O4,N4="cluster routes successfully set",b4="cluster routes successfully deleted";fU.exports={setRoutes:y4,getRoutes:I4,deleteRoutes:w4};function y4(e){let t=_U.setRoutesValidator(e);if(t)throw dU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=di.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=bS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:N4,set:o,skipped:i}}a(y4,"setRoutes");function I4(){let e=di.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(I4,"getRoutes");function w4(e){let t=_U.deleteRoutesValidator(e);if(t)throw dU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=di.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=bS.isEmptyOrZeroLength(s)?null:s,di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=bS.isEmptyOrZeroLength(n)?null:n,di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:b4,deleted:i,skipped:o}}a(w4,"deleteRoutes")});var mU=m((Sle,hU)=>{"use strict";var uc=require("alasql"),Ei=require("recursive-iterator"),$r=F(),C4=k(),lc=g(),IS=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,D4(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=>lc.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=>!lc.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][lc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=U4(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=>!lc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new uc.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 U4(e){return e.filter(t=>t[lc.PERMS_CRUD_ENUM.READ])}a(U4,"filterReadRestrictedAttrs");function D4(e,t,r,s,n){L4(e,t,r,s,n)}a(D4,"interpretAST");function _c(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(_c,"addSchemaTableToMap");function L4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof uc.yy.Insert?B4(e,t,r):e instanceof uc.yy.Select?M4(e,t,r,s,n):e instanceof uc.yy.Update?P4(e,t,r):e instanceof uc.yy.Delete?v4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(L4,"getRecordAttributesAST");function M4(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(C4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{_c(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),_c(c.table,t,r,s,n)});let o=new Ei(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new Ei(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Ei(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new Ei(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(M4,"getSelectAttributes");function P4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.table.databaseid;_c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&wS(e.table.tableid,n,i.columnid,t,r)}a(P4,"getUpdateAttributes");function v4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ei(e.where),n=e.table.databaseid;_c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&wS(e.table.tableid,n,i.columnid,t,r)}a(v4,"getDeleteAttributes");function B4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.into.databaseid;_c(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&wS(e.into.tableid,n,i.columnid,t,r)}a(B4,"getInsertAttributes");function wS(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(wS,"pushAttribute");hU.exports=IS});var DS=m((Tle,RU)=>{var R_=ya(),SU=require("chalk"),_r=F(),pU=require("prompt"),{promisify:H4}=require("util"),CS=g(),q4=require("fs-extra"),F4=require("path"),G4=k(),x4=_S(),TU=W();TU.initSync();var k4=require("moment"),V4=H4(pU.get),$4=F4.join(TU.getHdbBasePath(),CS.LICENSE_KEY_DIR_NAME,CS.LICENSE_FILE_NAME,CS.LICENSE_FILE_NAME);RU.exports={getFingerprint:K4,setLicense:Y4,parseLicense:US,register:W4,getRegistrationInfo:z4};async function Y4(e){if(e&&e.key&&e.company){try{_r.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await US(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(Y4,"setLicense");async function K4(){let e={};try{e=await R_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _r.error(r),_r.error(t),new Error(r)}return e}a(K4,"getFingerprint");async function US(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_r.info("Validating license input...");let r=R_.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 q4.writeFile($4,JSON.stringify({license_key:e,company:t}))}catch(s){throw _r.error("Failed to write License"),s}return"Registration successful."}a(US,"parseLicense");async function W4(){let e=await Q4();return US(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(W4,"register");async function Q4(){let e=await R_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:SU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:SU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{pU.start()}catch(s){_r.error(s)}let r;try{r=await V4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Q4,"promptForRegistration");async function z4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await R_.getLicense()}catch(r){throw _r.error(`There was an error when searching licenses due to: ${r.message}`),r}if(G4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=x4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=k4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(z4,"getRegistrationInfo")});var AU=m((gle,gU)=>{"use strict";var J4=be(),LS=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+J4.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"}};gU.exports=LS});var bU=m((Ole,NU)=>{"use strict";var OU=be(),MS=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+OU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+OU.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"}};NU.exports=MS});var IU=m((ble,yU)=>{"use strict";var PS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};yU.exports=PS});var CU=m((Ile,wU)=>{"use strict";var X4=be(),vS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+X4.SERVER_SUFFIX.ADMIN,this.password=r}};wU.exports=vS});var qS=m((Cle,LU)=>{"use strict";var dc=require("path"),N_=require("fs-extra"),Z4=AU(),j4=bU(),eZ=IU(),tZ=CU(),BS=br(),mo=k(),Kt=Nr(),O_=g(),g_=be(),{CONFIG_PARAMS:Xe}=O_,fc=F(),b_=W(),UU=vs(),HS=He(),Ec="clustering",rZ=1e4,DU=5;LU.exports={generateNatsConfig:sZ,removeNatsConfig:nZ};async function sZ(e=!1,t=void 0){b_.initSync();let r=b_.get(Xe.ROOTPATH),s=dc.join(r,Ec,g_.PID_FILES.HUB),n=dc.join(r,Ec,g_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=dc.join(r,Ec,g_.NATS_CONFIG_FILES.HUB_SERVER),c=dc.join(r,Ec,g_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(Xe.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HS.checkNATSServerInstalled()||y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await BS.listUsers(),T=Kt.getConfigFromFile(Xe.CLUSTERING_USER),R=await BS.getClusterUser();(mo.isEmpty(R)||R.active!==!0)&&y_(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await A_(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await A_(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await A_(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),await A_(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],V=[];for(let[Oe,et]of p.entries())et.role.role===O_.ROLE_TYPES_ENUM.CLUSTER_USER&&et.active&&(O.push(new tZ(et.username,UU.decrypt(et.hash))),V.push(new eZ(et.username,UU.decrypt(et.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!mo.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 Z4(Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,V);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=mo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===O_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await N_.writeJson(o,b),fc.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 j4(Kt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,V,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===O_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await N_.writeJson(c,q),fc.trace(`Leaf server config written to ${c}`))}a(sZ,"generateNatsConfig");async function A_(e){let t=b_.get(e);return mo.isEmpty(t)&&y_(`port undefined for '${e}'`),await mo.isPortTaken(t)&&y_(`'${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(A_,"isPortAvailable");function y_(e){let t=`Error generating clustering config: ${e}`;fc.error(t),console.error(t),process.exit(1)}a(y_,"generateNatsConfigError");async function nZ(e){let{port:t,config_file:r}=HS.getServerConfig(e),{username:s,decrypt_hash:n}=await BS.getClusterUser(),i=0,o=500;for(;i<DU;){try{let l=await HS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){fc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=DU)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 mo.async_set_timeout(o*i)}let c="0".repeat(rZ),u=dc.join(b_.get(Xe.ROOTPATH),Ec,r);await N_.writeFile(u,c),await N_.remove(u),fc.notify(e,"started.")}a(nZ,"removeNatsConfig")});var qU=m((Dle,HU)=>{"use strict";var dr=W(),iZ=ya(),oe=g(),hc=be(),$s=require("path"),{PACKAGE_ROOT:w_}=g(),MU=W(),I_=k(),So="/dev/null",oZ=$s.join(w_,"launchServiceScripts"),PU=$s.join(w_,"utility/scripts"),aZ=$s.join(PU,oe.HDB_RESTART_SCRIPT),vU=$s.resolve(w_,"dependencies",`${process.platform}-${process.arch}`,hc.NATS_BINARY_NAME);function BU(){let t=iZ.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 I_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=I_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:w_}}a(BU,"generateMainServerConfig");var cZ=9930;function uZ(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=$s.join(e,"clustering",hc.NATS_CONFIG_FILES.HUB_SERVER),r=$s.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=MU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=hc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==cZ?"-"+s:""),script:vU,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=So,i.error_file=So),i}a(uZ,"generateNatsHubServerConfig");var lZ=9940;function _Z(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=$s.join(e,"clustering",hc.NATS_CONFIG_FILES.LEAF_SERVER),r=$s.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=MU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=hc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==lZ?"-"+s:""),script:vU,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=So,i.error_file=So),i}a(_Z,"generateNatsLeafServerConfig");function dZ(){dr.initSync();let e=$s.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:oZ,autorestart:!1};return dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=So,t.error_file=So),t}a(dZ,"generateClusteringUpgradeV4ServiceConfig");function EZ(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return I_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=I_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:PU},script:aZ}}a(EZ,"generateRestart");function fZ(){return{apps:[BU()]}}a(fZ,"generateAllServiceConfigs");HU.exports={generateAllServiceConfigs:fZ,generateMainServerConfig:BU,generateRestart:EZ,generateNatsHubServerConfig:uZ,generateNatsLeafServerConfig:_Z,generateClusteringUpgradeV4ServiceConfig:dZ}});var jU=m((qle,ZU)=>{"use strict";var Re=g(),hZ=k(),mc=qS(),Sc=He(),Es=be(),Dn=qU(),C_=W(),Ys=F(),mZ=wr(),{startWorker:FU,onMessageFromWorkers:SZ}=Ve(),pZ=ho(),TZ=require("util"),xU=require("child_process"),{execFile:RZ}=xU,Mle=TZ.promisify(xU.exec),Ple=require("systeminformation"),fe;ZU.exports={enterPM2Mode:gZ,start:fi,stop:FS,reload:kU,restart:VU,list:GS,describe:YU,connect:Ks,kill:yZ,startAllServices:IZ,startService:xS,getUniqueServicesList:KU,restartAllServices:wZ,isServiceRegistered:WU,reloadStopStart:QU,restartHdb:$U,deleteProcess:NZ,startClusteringProcesses:JU,startClusteringThreads:XU,isHdbRestartRunning:bZ,isClusteringRunning:UZ,stopClustering:CZ,reloadClustering:DZ};var{PACKAGE_ROOT:vle}=g(),Ble=g(),{loggerWithTag:Hle}=Ys,pc=!1;SZ(e=>{e.type==="restart"&&C_.initSync(!0)});function gZ(){pc=!0}a(gZ,"enterPM2Mode");function Ks(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ys.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ks,"connect");var Wt,AZ=10,GU;function fi(e){if(pc)return OZ(e);let t=RZ(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),!GU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<AZ&&fi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=C_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ys.OUTPUTS.STDERR:Ys.OUTPUTS.STDOUT;Ys.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Es.LOG_LEVELS[d]}if(Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ys.OUTPUTS.STDERR:Ys.OUTPUTS.STDOUT;Ys.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(()=>{GU=!0,Wt&&(Wt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Wt.push(t)}a(fi,"start");function OZ(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(OZ,"startWithPM2");function FS(e){if(!pc){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 Ks()}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(FS,"stop");function kU(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(kU,"reload");function VU(e){if(!pc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(VU,"restart");function NZ(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(NZ,"deleteProcess");async function $U(){await fi(Dn.generateRestart())}a($U,"restartHdb");async function bZ(){let e=await GS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(bZ,"isHdbRestartRunning");function GS(){return new Promise(async(e,t)=>{try{await Ks()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(GS,"list");function YU(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(YU,"describe");function yZ(){if(!pc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ks()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(yZ,"kill");async function IZ(){try{await JU(),await XU(),await fi(Dn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(IZ,"startAllServices");async function xS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Dn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Dn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Dn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Dn.generateNatsHubServerConfig(),await fi(t),await mc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Dn.generateNatsLeafServerConfig(),await fi(t),await mc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Dn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fi(t)}catch(t){throw fe.disconnect(),t}}a(xS,"startService");async function KU(){try{let e=await GS(),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(KU,"getUniqueServicesList");async function wZ(e=[]){try{let t=!1,r=await KU();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 VU(o))}t&&await QU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(wZ,"restartAllServices");async function WU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await pZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(WU,"isServiceRegistered");async function QU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?C_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):C_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await YU(e),s=hZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await FS(e),await xS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await $U():await kU(e)}a(QU,"reloadStopStart");var zU;async function JU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await xS(t)}}a(JU,"startClusteringProcesses");async function XU(){zU=FU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Sc.createWorkQueueStream(Es.WORK_QUEUE_CONSUMER_NAMES),await Sc.updateIngestStreamConsumer(),await Sc.updateLocalStreams();let e=await mZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ys.info("Starting clustering upgrade 4.0.0 process"),FU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(XU,"startClusteringThreads");async function CZ(){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 zU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await FS(t)}}a(CZ,"stopClustering");async function UZ(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await WU(t)===!1)return!1}return!0}a(UZ,"isClusteringRunning");async function DZ(){await mc.generateNatsConfig(!0),await Sc.reloadNATSHub(),await Sc.reloadNATSLeaf(),await mc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await mc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(DZ,"reloadClustering")});var QS=m((Gle,iD)=>{"use strict";var LZ=require("minimist"),{isMainThread:$S,parentPort:rD}=require("worker_threads"),qe=g(),{PROCESS_DESCRIPTORS_VALIDATE:Tc}=qe,hs=F(),YS=k(),U_=qS(),po=He(),kS=be(),sD=Nr(),ms=jU(),eD=ho(),MZ=bE(),{restartWorkers:D_,onMessageByType:PZ}=Ve(),{handleHDBError:vZ,hdb_errors:BZ}=Q(),{HTTP_STATUS_CODES:HZ}=BZ,L_=W();L_.initSync();var Rc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,qZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tD="Clustering is not enabled so cannot be restarted",FZ="Invalid service",hi,Yr;iD.exports={restart:nD,restartService:KS};$S&&PZ(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?KS({service:e.workerType}):nD({operation:"restart"})});async function nD(e){Yr=Object.keys(e).length===0,hi=await ms.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=LZ(process.argv);if(t.service){await KS(t);return}if(Yr&&!hi){console.error(qZ);return}if(Yr&&console.log(Rc),hi){ms.enterPM2Mode(),hs.notify(Rc);let r=MZ(Object.keys(qe.CONFIG_PARAM_MAP),!0);return YS.isEmptyOrZeroLength(Object.keys(r))||sD.updateConfigValue(void 0,void 0,r,!0,!0),xZ(),Rc}return $S?(hs.notify(Rc),await WS(),setTimeout(()=>{D_()},50)):rD.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),Rc}a(nD,"restart");async function KS(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw vZ(new Error,FZ,HZ.BAD_REQUEST,void 0,void 0,!0);if(hi=await ms.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!$S)return rD.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Tc.clustering:if(!L_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tD;break}Yr&&console.log("Restarting clustering"),hs.notify("Restarting clustering"),await WS();break;case Tc.clustering_config:case Tc["clustering config"]:if(!L_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tD;break}Yr&&console.log("Restarting clustering_config"),hs.notify("Restarting clustering_config"),await ms.reloadClustering();break;case"custom_functions":case"custom functions":case Tc.harperdb:case Tc.http_workers:if(Yr&&!hi){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),hs.notify("Restarting http_workers"),hi?await ms.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{D_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(hs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(KS,"restartService");async function GZ(){await po.publishToStream(`${kS.SUBJECT_PREFIXES.TXN}.${kS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,kS.WORK_QUEUE_CONSUMER_NAMES.stream_name,po.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(GZ,"postDummyNatsMsg");async function xZ(){await WS(),await ms.restart(qe.HDB_PROC_DESCRIPTOR),await YS.async_set_timeout(2e3),L_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await VS(),Yr&&(await po.closeConnection(),process.exit(0))}a(xZ,"restartPM2Mode");async function WS(){if(!sD.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await eD.getHDBProcessInfo()).clustering.length===0)hs.trace("Clustering not running, restart will start clustering services"),await U_.generateNatsConfig(!0),await ms.startClusteringProcesses(),await ms.startClusteringThreads(),await VS(),Yr&&await po.closeConnection();else{await GZ(),await U_.generateNatsConfig(!0),hi?(hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ms.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ms.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await eD.getHDBProcessInfo()).clustering.forEach(n=>{hs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await YS.async_set_timeout(3e3),await VS(),await po.updateLocalStreams(),Yr&&await po.closeConnection(),hs.trace("Restart clustering restarting ingest and reply service threads");let t=D_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=D_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(WS,"restartClustering");async function VS(){await U_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await U_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(VS,"removeNatsConfig")});var mD=m((Vle,hD)=>{"use strict";var kle=require("lodash"),Qt=g(),{handleHDBError:oD,hdb_errors:kZ}=Q(),{HDB_ERROR_MSGS:VZ,HTTP_STATUS_CODES:$Z}=kZ,zS=F();hD.exports={getRolePermissions:KZ};var mi=Object.create(null),YZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),lD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),_D=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"),JS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,..._D(t,r,s,n)}),"table_perms_template"),aD=a((e,t=_D())=>({attribute_name:e,describe:fD(t),[gc]:t[gc],[XS]:t[XS],[ZS]:t[ZS]}),"attr_perms_template"),cD=a((e,t=!1)=>({attribute_name:e,describe:t,[gc]:t}),"timestamp_attr_perms_template"),{READ:gc,INSERT:XS,UPDATE:ZS}=Qt.PERMS_CRUD_ENUM,dD=Object.values(Qt.PERMS_CRUD_ENUM),ED=[gc,XS,ZS];function KZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(mi[t]&&mi[t].key===s)return mi[t].perms;let n=WZ(e,r);return mi[t]?mi[t].key=s:mi[t]=YZ(s),mi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw zS.error(s),zS.debug(r),oD(new Error,VZ.OUTDATED_PERMS_TRANSLATION_ERROR,$Z.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
@@ -23,4 +23,4 @@
|
|
|
23
23
|
|
|
24
24
|
`+rT.readFileSync(o):"")},s.http2=!0}return s}a(R9,"getServerOptions");iP.exports=R9});var uP=m((fde,cP)=>{"use strict";var sT=W();sT.initSync();var{CONFIG_PARAMS:aP}=g();function g9(){let e=sT.get(aP.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=sT.get(aP.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(g9,"getCORSOptions");cP.exports=g9});var dP=m((mde,_P)=>{"use strict";var lP=W();lP.initSync();var A9=g();function O9(){return lP.get(A9.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(O9,"getHeaderTimeoutConfig");_P.exports=O9});var oT={};tt(oT,{customFunctionsServer:()=>y9,handleFile:()=>b9,ready:()=>C9});async function b9(e,t,r,s){if(!en){let c=nT.get(iT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);en=bP(c),st.http((await en).server)}let n=await en,i=(0,fP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),EP.has(i)||(EP.add(i),n.register(w9(i,o)))}async function y9(){try{Le.info("In Custom Functions Fastify server"+process.cwd()),Le.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Le.debug(`Custom Functions server process ${process.pid} starting up.`),await I9();let e=nT.get(iT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=en=await bP(t)}catch(s){throw Le.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Le.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Le.error(`Custom Functions ${process.pid} Error: ${e}`),Le.error(e),process.exit(1)}}async function I9(){try{Le.info("Custom Functions starting configuration."),await RP.setUsersToGlobal(),Le.info("Custom Functions completed configuration.")}catch(e){Le.error(e)}}function w9(e,t){return async function(r){try{Le.info("Custom Functions starting buildRoutes"),Le.trace("Loading fastify routes folder "+e),(0,hP.existsSync)(e)&&r.register(TP.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Le.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Le.error(n.message):n&&Le.error(n),o()})}catch(s){Le.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function bP(e){Le.info("Custom Functions starting buildServer.");let t=(0,gP.default)(e),r=(0,mP.default)(t);r.server.headersTimeout=(0,OP.default)(),r.setErrorHandler(NP.serverErrorHandler);let s=(0,AP.default)();return s&&r.register(SP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(pP.default),await r.register(N9),await r.after(),Op(r),Le.info("Custom Functions completed buildServer."),r}function C9(){if(en)return en.then?en.then(e=>e.ready()):en.ready()}var fP,hP,mP,SP,pP,TP,nT,iT,Le,N9,RP,gP,AP,OP,NP,en,EP,yP=Se(()=>{fP=require("path"),hP=require("fs"),mP=C(require("fastify")),SP=C(require("@fastify/cors")),pP=C(wp()),TP=C(require("@fastify/autoload")),nT=C(W()),iT=C(g()),Le=C(F()),N9=C(nP()),RP=C(br()),gP=C(oP()),AP=C(uP()),OP=C(dP()),NP=C(bd());Ao();ts();EP=new Set;a(b9,"handleFile");a(y9,"customFunctionsServer");a(I9,"setUp");a(w9,"buildRouteFolder");a(bP,"buildServer");a(C9,"ready")});var aT={};tt(aT,{start:()=>U9});function U9(e){let t=e.root;return{handleFile(r,s,n){wP||(wP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=IP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,CP.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))),IP.set(s,n)}}}var CP,IP,wP,UP=Se(()=>{CP=C(require("send")),IP=new Map;a(U9,"start")});function M9(e,t=1,r){if(cT++,(0,Oi.startWorker)("server/threads/threadServer.js",{name:wd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===wd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});L9.push(n),await n,Po.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Id.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Po.indexOf(s);o>-1&&Po.splice(o,1)}if(a(i,"removeWorker"),vo){let o=vo;vo=[];for(let c of o)PP[c.localPort](c)}}}),r){let s=setInterval(()=>{uT?uT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oi.shutdownWorkers)(),cT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function vP(e=0,t){if(typeof e=="string")try{(0,Ud.existsSync)(e)&&(0,Ud.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=P9:r=v9(t):r=lT;let s=(0,MP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},PP[e]=i=>{uT=!0,r(i,(o,c)=>{if(!o){DP?(DP.deliverSocket(i,e,c),i.resume()):cT>0?(vo.length===0&&setTimeout(()=>{vo.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(),vo.push(i)):(console.log("start up a dynamic thread to handle request"),M9(0));return}o.requests++;let u=i._handle.fd;Cd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):F9(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 Cd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function lT(e,t){let r,s=0;for(let n of Po){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=yd)return yd=i,t(r);s=i}yd=0,t(r)}function P9(e,t){let r=e.remoteAddress,s=Bo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);lT(e,i=>{Bo.set(r,{worker:i,lastUsed:n}),t(i)})}function v9(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=Bo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);lT(s,_=>{Bo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function H9(){yd=0;for(let e of Po)e.expectedIdle=e.recentELU.idle+B9,e.requests=1;Po.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function F9(e,t,r){let s=q9++;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(),Id.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")),Id.delete(s)),n.event=="destroy"&&(e.destroy(),Id.delete(s))})}var Oi,MP,wd,Cd,Ud,D9,Po,vo,PP,DP,cT,L9,uT,yd,LP,Bo,B9,Id,q9,BP=Se(()=>{Oi=C(Ve()),MP=require("net"),wd=C(g()),Cd=C(F()),Ud=require("fs"),{isMainThread:D9}=require("worker_threads"),Po=[],vo=[],PP=[],cT=0,L9=[];D9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(M9,"startHTTPWorker");a(vP,"startSocketServer");yd=0;a(lT,"findMostIdleWorker");LP=36e5,Bo=new Map;a(P9,"findByRemoteAddressAffinity");a(v9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Bo)r.lastUsed+LP<e&&Bo.delete(t)},LP).unref();B9=1e3;a(H9,"updateWorkerIdleness");(0,Oi.setMonitorListener)(H9);Id=new Map,q9=1;a(F9,"proxySocket")});var xP=m((Ide,GP)=>{"use strict";var G9=require("cluster"),Qr=W();Qr.initSync();var qP=g(),Nde=require("util"),tn=F(),_T=require("fs"),x9=require("fastify"),bde=Va(),k9=require("@fastify/cors"),V9=require("@fastify/compress"),$9=require("@fastify/static"),Y9=wp(),K9=require("path"),{PACKAGE_ROOT:W9}=g(),Q9=Bs(),z9=k(),J9=br(),X9=ya(),{server:Z9}=(ts(),re(Pu)),{authHandler:j9,handlePostRequest:e7,serverErrorHandler:t7,reqBodyValidationHandler:r7}=bd(),yde=require("net"),{registerContentHandlers:s7}=(Ao(),re(qL)),n7=1024*1024*1024,FP="TRUE",{HDB_SETTINGS_NAMES:bi,CONFIG_PARAMS:i7}=qP,o7=bi.CORS_ENABLED_KEY,a7="CORS_ACCESSLIST",c7=bi.SERVER_TIMEOUT_KEY,u7=bi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,l7=bi.SERVER_HEADERS_TIMEOUT_KEY,_7=bi.PRIVATE_KEY_KEY,d7=bi.CERT_KEY,E7=bi.HTTP_SECURE_ENABLED_KEY,Ni;GP.exports={hdbServer:HP,start:HP};async function HP(e){try{tn.info("In Fastify server"+process.cwd()),tn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),tn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=G9.isMaster,await f7();let t=Qr.get(E7),r=t&&(t===!0||t.toUpperCase()===FP);Ni=h7(r),await Ni.ready(),e||(e={}),e.isOperationsServer=!0,Ni.server.cantCleanupProperly=!0;try{Z9.http(Ni.server,e),Ni.server.closeIdleConnections||await Ni.listen({port:0,host:"::"})}catch(s){throw Ni.close(),tn.error(s),tn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),tn.fatal(t),process.exit(1)}}a(HP,"operationsServer");async function f7(){tn.trace("Configuring HarperDB process."),Q9.setSchemaDataToGlobal(),await J9.setUsersToGlobal(),await X9.getLicense()}a(f7,"setUp");function h7(e){tn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=m7(e),r=x9(t);r.server.headersTimeout=p7(),r.setErrorHandler(t7);let s=S7();s&&r.register(k9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(Y9),r.register(V9),r.register($9,{root:K9.join(W9,"docs")}),s7(r);let n=Qr.get(qP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!z9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[r7,j9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),e7(i,o)}),r.get("/health",()=>"HarperDB is running."),tn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(h7,"buildServer");function m7(e){let t=Qr.get(c7),r=Qr.get(u7),s={bodyLimit:n7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(_7),i=Qr.get(d7),o=Qr.get(i7.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:_T.readFileSync(n),cert:_T.readFileSync(i)+(o?`
|
|
25
25
|
|
|
26
|
-
`+_T.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(m7,"getServerOptions");function S7(){let e=Qr.get(o7),t=Qr.get(a7),r;return e&&(e===!0||e.toUpperCase()===FP)&&(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(S7,"getCORSOpts");function p7(){return Qr.get(l7)}a(p7,"getHeaderTimeoutConfig")});var jP=m((Dde,ZP)=>{"use strict";var{decode:T7}=require("msgpackr"),{isMainThread:R7,parentPort:g7,threadId:Cde}=require("worker_threads"),dT=He(),Ho=be(),A7=g(),Kc=F(),kP=W(),YP=g();Ve();var O7=vs(),{recordAction:N7,recordActionBinary:b7}=(ai(),re(ql)),{publishToStream:y7}=dT,Ude={durable:Ho.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Ho.WORK_QUEUE_CONSUMER_NAMES.deliver_group},I7,w7,C7,KP,WP;ZP.exports={initialize:QP,workQueueListener:XP,setSubscription:U7,setIgnoreOrigin:L7,getDatabaseSubscriptions:D7};async function QP(){WP=!0,Kc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await dT.getNATSReferences();I7=e,w7=e.info.server_name,C7=t,KP=r}a(QP,"initialize");var Ld=new Map;function U7(e,t,r){let s=Ld.get(e);s||Ld.set(e,s=new Map),s.set(t,r),WP||QP().then(XP)}a(U7,"setSubscription");function D7(){return Ld}a(D7,"getDatabaseSubscriptions");var zP;function L7(e){zP=e}a(L7,"setIgnoreOrigin");var JP=100,VP=new Array(JP),Dd=0;async function XP(){let t=await(await KP.consumers.get(Ho.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ho.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await VP[Dd],VP[Dd]=M7(r).catch(s=>{Kc.error(s)}),++Dd>=JP&&(Dd=0)}a(XP,"workQueueListener");R7||g7.on("message",async e=>{let{type:t}=e;t===YP.ITC_EVENT_TYPES.SHUTDOWN&&dT.closeConnection()});async function M7(e){let t=T7(e.data);N7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Ho.MSG_HEADERS.ORIGIN)===kP.get(A7.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!zP;if(b7(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;Kc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Kc.trace(`messageProcessor nats msg id: ${e.headers.get(Ho.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=Ld.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:$P(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let R=l.map((O,V)=>({type:$P(i),value:O,id:_?.[V],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}kP.get(YP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&y7(e.subject.split(".").slice(0,-1).join("."),O7.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Kc.error(i)}e.ack()}a(M7,"messageProcessor");function $P(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a($P,"convertOperation")});var pT={};tt(pT,{disableNATS:()=>v7,setNATSReplicator:()=>ET,start:()=>P7});function P7(){Pd.default.get(vd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&H7()}function v7(e=!0){nv=e}function H7(){if(nv)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];ET(n,r,i)}}TT((r,s)=>{ET(r.tableName,r.databaseName,r),s&&ov(r)}),!ev&&(ev=!0)}function ET(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){ov(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,tv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<B7}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 Md(i.transaction,i)),o.user=i.user):o=iv),o}a(n,"getNATSTransaction")}function ov(e){let t=Pd.default.get(vd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,hT.publishToStream)(`${mT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ST.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 hT,mT,ST,tv,rv,Pd,vd,sv,nv,B7,iv,ev,Md,fT,av=Se(()=>{de();Zr();hT=C(He()),mT=C(be()),ST=C(vs());aa();tv=C(jP()),rv=C(vt()),Pd=C(W()),vd=C(g()),sv=C(F());a(P7,"start");a(v7,"disableNATS");B7=2;a(H7,"assignReplicationSource");a(ET,"setNATSReplicator");a(ov,"publishSchema");Md=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=Pd.default.get(vd.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||(sv.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,hT.publishToStream)(`${mT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,ST.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},fT=class extends Md{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,rv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};iv=new fT});async function uv({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await RT.getResource(e,{});n=new AT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await RT.get(e);i&&i.delete()}n=new Hd(e,t)}return n}function gT(){return Bd++,Bd>65500&&(Bd=1),Bd}var cv,Wc,RT,Bd,Hd,AT,lv=Se(()=>{de();Ac();cv=C(vt()),Wc=C(F());Yn();RT=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(uv,"getSession");Bd=1;a(gT,"getNextMessageId");Hd=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=Ln.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 p=h.path,T=h.Resource,R=await We(f,async()=>{let O=await T.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 V of O)try{let $;if(V.type&&V.type!=="put"&&V.type!=="delete"&&V.type!=="message"||s&&!s(V))continue;r?(V.topic=n,$=this.needsAcknowledge(V)):$=gT();let U=V.id;Array.isArray(U)&&(U=To(U)),U==null&&(U=""),this.listener(p+"/"+U,V.value,$,t)}catch($){(0,Wc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return gT()}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=Ln.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 We(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=[]}},AT=class extends Hd{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=gT();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,Wc.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,cv.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),RT.put(this.sessionRecord)),t.qos}}});var bT={};tt(bT,{start:()=>F7});async function F7({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:l,onClose:_}=Ev(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,rn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;q7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,fv.getSuperUser)());let{onMessage:u,onClose:l}=Ev(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,rn.info)("Socket error",_)})},{port:t,securePort:s})}function Ev(e,t,r,s,n){dv||(dv=!0,dm(_=>{_.push({metric:"mqtt-connections",connections:OT})})),OT++;let i,o={protocolVersion:4},c=(0,qd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){OT--,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 st.auth(_.username,_.password.toString()),(0,NT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&_v.notify({username:s.username,status:sn.AUTH_AUDIT_STATUS.SUCCESS,type:sn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,NT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&_v.error({username:s.username,status:sn.AUTH_AUDIT_STATUS.FAILURE,type:sn.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=uv({user:s,..._}),i=await i}catch(O){return(0,rn.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,V,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,rn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let V;try{V=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,rn.error)($),V=128}f.push(V)}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",p=e.deserialize||(e.deserialize=Io(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,R;try{R=await i.publish(_,T)}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 p=(0,qd.generate)(f,o);t(p),_s(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ws(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var qd,fv,NT,sn,rn,_v,q7,dv,OT,hv=Se(()=>{qd=require("mqtt-packet");lv();fv=C(br());Ao();ai();ts();NT=C(W()),sn=C(g()),rn=C(F()),_v=(0,rn.loggerWithTag)("auth-event"),q7=!0;a(F7,"start");OT=0;a(Ev,"onSocket")});var bv={};tt(bv,{loadComponent:()=>Fd,loadComponentDirectories:()=>Nv});function Nv(e,t){t&&(IT=t),e&&(wT=e);let r=[];if((0,gs.existsSync)(yT)){let n=(0,gs.readdirSync)(yT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Pr.join)(yT,o);r.push(Fd(c,IT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Fd(s,IT,s)),Promise.all(r).then(()=>{Ov=!0})}async function Fd(e,t,r,s,n){if(!Sv.has(e)){Sv.set(e,!0),n&&(wT=n);try{let i,o=(0,Pr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(o)?i=(0,pv.parseDocument)((0,gs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=V7;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,gs.existsSync)(f=(0,Pr.join)(E,"node_modules",u));)if(E=(0,Pr.dirname)(E),E.length<(0,Av.getHdbBasePath)().length){f=null;break}if(f)_=await Fd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=k7[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,nt(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Qc.isMainThread&&(_=await _.startOnMainThread?.({server:st,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!mv.includes(T)){mv.push(T);let R=CT.get(UT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);vP(T,R)}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(_=await _.start?.({server:st,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),wT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,gv.handleHDBError)("Can not reference parent directories");let T=(0,Pr.join)(e,l.files);for(let R of await(0,Tv.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:V}=R,$=(0,Pr.relative)(e,O),U=(0,Pr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(V.isFile()){let P=await x7(O);Qc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Qc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${V.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new zc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new zc(E),null,!0)}}if(Qc.isMainThread&&!Ov&&(0,Rv.watchDir)(e,async()=>Nv()),i.extensionModule)return await vu((0,Pr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new zc(i))}}}var gs,Pr,Qc,pv,CT,UT,Tv,Rv,gv,Av,G7,x7,yT,wT,Ov,IT,k7,V7,mv,Sv,zc,yv=Se(()=>{gs=require("fs"),Pr=require("path"),Qc=require("worker_threads"),pv=require("yaml"),CT=C(W()),UT=C(g());Lg();Bg();Hg();xL();yP();UP();Tv=C(require("fast-glob")),Rv=C(Ve());WE();ts();gv=C(Q());Zr();de();BP();Av=C(W()),G7=C(xP());q_();av();hv();({readFile:x7}=gs.promises),yT=CT.get(UT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),wT=new Map;a(Nv,"loadComponentDirectories");k7={REST:Ip,graphqlSchema:KE,jsResource:zE,fastifyRoutes:oT,login:XE,static:aT,operationsApi:G7,customFunctions:{},clustering:pT,authentication:Oc,mqtt:bT},V7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},mv=[],Sv=new Map;a(Fd,"loadComponent");zc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Lv=m((iEe,Dv)=>{"use strict";var kd=require("fs-extra"),DT=require("path"),Gd=F(),Iv=k(),xd=g(),Uv=W(),$7=Nr();Dv.exports=Y7;async function Y7(){let e=K7(),t=Uv.get(xd.CONFIG_PARAMS.ROOTPATH),r=DT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+xd.PACKAGE_ROOT}},n=DT.join(t,"node_modules");await kd.ensureDir(n);let i,o=!0,c=!1;try{i=await kd.readJson(r)}catch(u){if(Iv.isEmptyOrZeroLength(e))return;if(u.code!==xd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Iv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await wv(l);s.dependencies[u]=_+l}if(!o){Gd.notify("Installing components"),await Cv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await wv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Gd.notify("Removing component",u),c=!0);c&&(Gd.notify("Updating components."),await Cv(r,s))}a(Y7,"installComponents");function K7(){let e=$7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(K7,"getComponentsConfig");async function wv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":DT.extname(e)||await kd.pathExists(e)?"file:":"github:"}a(wv,"getPkgPrefix");async function Cv(e,t){Gd.trace("npm installing components package.json",t),await kd.writeFile(e,JSON.stringify(t,null," ")),await K_().installAllRootModules(Uv.get(xd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Cv,"installPackages")});var vv=m((aEe,Pv)=>{var{isMainThread:Mv}=require("worker_threads"),{getTables:W7}=(de(),re(Ne)),{loadComponentDirectories:Q7,loadComponent:z7}=(yv(),re(bv)),{resetResources:J7}=(Ac(),re(SD)),X7=Lv(),Z7=Nr(),{dirname:j7}=require("path"),{getConnection:eee}=He(),tee=W(),ree=g(),LT=new Map;async function see(e=!1){!Mv&&tee.get(ree.CONFIG_PARAMS.CLUSTERING_ENABLED)&&eee(),Mv&&await X7();let t=J7();W7(),t.isWorker=e,await z7(j7(Z7.getConfigFilePath()),t,"hdb",!0,LT),await Q7(LT,t);let r=[];for(let[s]of LT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(see,"loadRootComponents");Pv.exports.loadRootComponents=see});var Ve=m((lEe,qn)=>{"use strict";var{Worker:nee,MessageChannel:iee,parentPort:As,isMainThread:HT,threadId:oee,workerData:Jc}=require("worker_threads"),{PACKAGE_ROOT:aee}=g(),{join:qv,isAbsolute:cee,extname:$d}=require("path"),{server:uee}=(ts(),re(Pu)),{watch:lee,readdir:_ee}=require("fs/promises"),{totalmem:Bv}=require("os"),qT=g(),yi=F(),uEe=g(),{randomBytes:dee}=require("crypto"),Eee=1024*1024,Hn=[],Bn=[],fee=50,Fv=1e4,hee="restart",Gv="request_thread_info",xv="resource_report",kv="thread_info",Vv="added-port",mee="ack",MT;qn.exports={startWorker:PT,restartWorkers:FT,shutdownWorkers:Ree,workers:Hn,setMonitorListener:wee,onMessageFromWorkers:gee,onMessageByType:Aee,broadcast:Oee,broadcastWithAcknowledgement:bee,setChildListenerByType:Tee,getWorkerIndex:Yv,getTicketKeys:Kv,setMainIsWorker:See,restartNumber:Jc?.restartNumber||1};var $v;function Yv(){return Jc?Jc.workerIndex:$v?0:void 0}a(Yv,"getWorkerIndex");function See(e){$v=e}a(See,"setMainIsWorker");var Vd;function Kv(){return Vd||(Vd=HT?dee(48):Jc.ticketKeys,Vd)}a(Kv,"getTicketKeys");Object.defineProperty(uee,"workerIndex",{get(){return Yv()}});var Wv={[Gv](e,t){yee(t)},[xv](e,t){Iee(t,e)}};function PT(e,t={}){let r=process.constrainedMemory?.()||Bv();r=Math.min(r,Bv());let s=Math.max(Math.floor(r/Eee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Bn){let{port1:u,port2:l}=new iee;c.postMessage({type:Vv,port:u},[u]),i.push(l)}$d(e)||(e+=".js");let o=new nee(cee(e)?e:qv(aee,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:qn.exports.restartNumber,ticketKeys:Kv()},transferList:i},t));return Kd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{PT(e,t)},o.on("error",c=>{console.error("Worker error:",c),yi.error("Worker error:",c)}),o.on("exit",c=>{Hn.splice(Hn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<fee?(t.unexpectedRestarts=o.unexpectedRestarts+1,PT(e,t)):yi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Wv[c.type]?.(c,o)}),Hn.push(o),Uee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(PT,"startWorker");var pee=[qT.THREAD_TYPES.HTTP];async function FT(e=null,t=2,r=!0){if(HT){if(r){let{loadRootComponents:n}=vv();await n()}qn.exports.restartNumber++,t<1&&(t=t*Hn.length);let s=[];for(let n of Hn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:qn.exports.restartNumber,type:qT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=pee.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Fv*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 As.postMessage({type:hee,workerType:e})}a(FT,"restartWorkers");function Tee(e,t){Wv[e]=t}a(Tee,"setChildListenerByType");function Ree(e){return FT(e,1/0,!1)}a(Ree,"shutdownWorkers");var Qv=[];function gee(e){Qv.push(e)}a(gee,"onMessageFromWorkers");var vT=new Map;function Aee(e,t){let r=vT.get(e);r||vT.set(e,r=[]),r.push(t)}a(Aee,"onMessageByType");function Oee(e){for(let t of Bn)try{t.postMessage(e)}catch(r){yi.error("Unable to send message to worker",r)}}a(Oee,"broadcast");var Yd=new Map,Nee=1;function bee(e){return new Promise(t=>{let r=0;for(let s of Bn)try{let n=Nee++,i=a(()=>{Yd.delete(n),--r===0&&t(),s!==As&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Yd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Yd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yi.error("Unable to send message to worker",n)}r===0&&t()})}a(bee,"broadcastWithAcknowledgement");function yee(e){e.postMessage({type:kv,workers:zv()})}a(yee,"sendThreadInfo");function zv(){let e=Date.now();return Hn.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(zv,"getChildWorkerInfo");function Iee(e,t){e.resources=t,e.resources.updated=Date.now()}a(Iee,"recordResourceReport");var BT;function wee(e){BT=e}a(wee,"setMonitorListener");var Cee=1e3,Hv=!1;function Uee(){Hv||(Hv=!0,setInterval(()=>{for(let e of Hn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BT&&BT()},Cee).unref())}a(Uee,"startMonitoring");var Dee=1e3;if(As){Kd(As);for(let e of Jc.addPorts)Kd(e);setInterval(()=>{let e=process.memoryUsage();As.postMessage({type:xv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Dee).unref(),MT=a(()=>new Promise((e,t)=>{As.on("message",r),As.postMessage({type:Gv});function r(s){s.type===kv&&(As.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else MT=zv;qn.exports.getThreadInfo=MT;function Kd(e,t){Bn.push(e),e.on("message",r=>{if(r.type===Vv)Kd(r.port);else if(r.type===mee){let s=Yd.get(r.id);s&&s()}else{for(let n of Qv)n(r,e);let s=vT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yi.error(i)}}}).on("close",()=>{Bn.splice(Bn.indexOf(e),1)}).on("exit",()=>{Bn.splice(Bn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Kd,"addPort");if(HT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await _ee(s,{withFileTypes:!0}))i.isDirectory()&&r(qv(s,i.name));for await(let{filename:i}of lee(s,{persistent:!1}))($d(i)===".ts"||$d(i)===".js"||$d(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await FT(),yi.info("Reloaded HarperDB components")},100))},"watch_dir");qn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else As.on("message",async e=>{let{type:t}=e;t===qT.ITC_EVENT_TYPES.SHUTDOWN&&(qn.exports.restartNumber=e.restartNumber,As.unref(),setTimeout(()=>{yi.warn("Thread did not voluntarily terminate",oee),process.exit(0)},Fv).unref())})});function $T(e){let t=e.auditStore=e.openDB(eB.AUDIT_STORE_NAME,Mee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,rB.getWorkerIndex)()===0&&e.on("aftercommit",()=>{xT||(xT=setTimeout(()=>{if(xT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Jv,0]})){if((n[0]&15)===VT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Jv/10).unref())}),t}function zd(e,t,r){let s=iB[r.type],n=3;if(t?t.length>80?(s|=Wd,n=(0,nn.writeKey)(t,Os,e?14:6),GT.setUint16(2,n)):(n=(0,nn.writeKey)(t,Os,e?11:3),Os[1]=n):Os[1]=0,e){s|=nB;let i=s&Wd?6:3;GT.setFloat64(i,e),t||(n=i+8)}return Os[0]=s,s&Wd?GT.setUint16(4,0):Os[2]=0,r.value?Buffer.concat([Os.slice(0,n),r.value]):Os.subarray(0,n)}function Fn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Wd,i=n?6:3,o;r&nB&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&kT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:iB[r&7],value:u,lastVersion:o,get user(){return c?(0,nn.readKey)(e,i,c):void 0}}}var nn,Qd,eB,tB,rB,sB,Os,GT,Lee,Mee,Jv,xT,kT,Xv,VT,Zv,jv,Wd,nB,iB,Xc=Se(()=>{nn=require("ordered-binary"),Qd=C(W()),eB=C(ke()),tB=C(g()),rB=C(Ve()),sB=C(k());(0,Qd.initSync)();Os=Buffer.alloc(1024),GT=new DataView(Os.buffer,Os.byteOffset,1024),Lee={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,nn.writeKey)(e[2],t,r+12)}else return(0,nn.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,nn.readKey)(e,t+12,r)]}else return(0,nn.readKey)(e,t,r)}},Mee={encoding:"binary",keyEncoder:Lee},Jv=(0,sB.convertToMS)((0,Qd.get)(tB.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,xT=null;a($T,"openAuditStore");kT=16,Xv=1,VT=2,Zv=3,jv=4,Wd=128,nB=64,iB={put:Xv|kT,[Xv]:"put",delete:VT,[VT]:"delete",message:Zv|kT,[Zv]:"message",invalidate:jv,[jv]:"invalidate"};a(zd,"createAuditEntry");a(Fn,"readAuditEntry")});var YT,Ii,Pee,Zc,Jd,oB=Se(()=>{YT=C(vt());Xc();Ii=Symbol("completion"),Pee=100,Zc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,YT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Ii]&&(i||(i=[]),i.push(d[Ii])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,zd(_.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<Pee>>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=[]}},Jd=class extends Zc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,YT.getNextMonotonicTime)())}getReadTxn(){}}});function lB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Fo||((0,wi.onMessageByType)(cB,d=>{let E=d.auditIds;WT(d.path,E,d.txnId)}),(0,wi.onMessageByType)(uB,d=>{(0,Ns.trace)("confirming to proceed with txn",d.txnId)}),Fo=Object.create(null));let c=Fo[i]||(Fo[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=To(t);let l=new KT(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function WT(e,t,r,s){if(!Fo)return;let n=Fo[e];if(n){if(qo&&qo+1!==r){(0,Ns.trace)("Waiting to ensure latest txn id",qo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c);if(qo+1!==r){await(0,wi.broadcastWithAcknowledgement)({type:uB,txnId:r});for(let[o,c]of Xd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c)}Xd.delete(r),(0,Ns.trace)("Proceeding with txn id",r),qo=r-1,WT(e,t,r,s)})();return Xd.set(r,i),i}(0,Ns.trace)("Notifying with txn id",r,s),qo=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,aB.writeKey)(i,Bee,0);let _=i[3];_&&(i.length=3);let d,E=To(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,Ns.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=Fn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(R){console.error(R),(0,Ns.info)(R)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function _B(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&vee)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,wi.broadcast)({type:cB,path:n,auditIds:l,txnId:c,start:u}),WT(n,l,c,!0))})}}var Ns,wi,aB,cB,uB,vee,Fo,Bee,KT,qo,Xd,dB=Se(()=>{Ns=C(F()),wi=C(Ve()),aB=require("ordered-binary");aa();Ac();Xc();cB="transaction",uB="transaction-await",vee=67108864,Bee=Buffer.alloc(4096);a(lB,"addSubscription");KT=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"}}},Xd=new Map;a(WT,"notifyFromTransactionData");a(_B,"listenToCommits")});var Vp={};tt(Vp,{coerceType:()=>Zd,makeTable:()=>eE,setServerUtilities:()=>xee});function eE(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=[]),_B(i,u);let p=0,T,R,O,V={},$,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&&(V=Z);let z;E&&ER();class q extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,G=w.table?Be[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[G.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await G.getResource(w.id,w,jc);switch(w.type){case"put":return L._writeUpdate(v,jc);case"delete":return L._writeDelete(jc);case"publish":return L._writePublish(v,jc);case"invalidate":return L.invalidate(jc);default:Di.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ui.getWorkerIndex)()):(0,Ui.getWorkerIndex)()===0,G=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(G)for await(let L of G)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=We(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(Me=>Me.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),ru.signalSchemaChange(new su.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&ru.signalUserChange(new su.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(x){console.error("error in subscription handler",x)}}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,G,x={transaction:w?.getReadTxn()},X;return _u(S,N,x,y,D?.allowInvalidated,(J,Y)=>{Y?G(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,G=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ui.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ER(),q.audit=!0}static coerceId(S){return S===""?null:Zd(S,V)}static async dropTable(){if(delete Be[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));ru.signalSchemaChange(new su.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[Ds])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=QT(y,"read");N.select=w.filter(G=>v[G])}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=QT(w,"update");for(let G in N)if(!v[G])return!1;if(D)for(let G of w){let L=G.attribute_name;!G.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=QT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ft],y&&(S=Object.assign(y,S)),this[ft]=y=S}return!this[ce]&&t&&!(y||(y=this[ft]))?.[t]&&(y||(y=this[ft]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let x in r)w[x]=this.getProperty(x);let v=q.Source,G,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(G=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ii]:G}}})}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,gB.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,G=this[ae];y||(this[ce]={}),D.addWrite({key:G,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,x)=>{let X;if(x){if(w)return;let Y=i.getEntry(G);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[hB]&&(w=!yu(S),w))return;t&&S[t]!==G&&(S[t]=G),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(G,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Di.trace("Checking timestamp for put",G,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,Go.asBinary)(J),L),et(this[ae],y,S),y===null&&!x&&kn(-1),{type:E&&"put",value:J,[Ii]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(v,G)=>{let L=this[ce];if(G){let x=i.getEntry(y);L=x?.value;let X=this[Ae];X&&x?.version>(X.lastModified||0)&&(X.lastModified=x.version)}if(!D&&(D=!0,!S?.isNotification)){let x=q.Source;x?.delete&&(!x.delete.reliesOnPrototype||x.prototype.delete)&&(w=x.delete(y,this))}if(!(this[Zt]>v))return et(this[ae],L),Di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||dR(),G||kn(1)):i.remove(this[ae]),{type:E&&"delete",[Ii]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,Me=j==null?V:h.find(cn=>cn.name==j);if(Me)Me.type&&(Y[1]===void 0?Y.value=w(Y.value,Me):Y[1]=w(Y[1],Me));else if(j!=null)throw(0,Ci.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(Me=>Zd(Me,j)):Zd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,TB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===eu.SEARCH_TYPES.EQUALS){let Me=Y[0]??Y.attribute;if(Me==null||Me===t)Y.estimated_count=1;else{let cn=r[Me];Y.estimated_count=cn?cn.getValuesCount(Y[1]??Y.value):1/0}}else j===eu.SEARCH_TYPES.CONTAINS||j===eu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===eu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=qee:Y.estimated_count=Hee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let G=S.select,L=y[0],x;if(!L)x=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:G?.length<4}:{start:!1,transaction:v,lazy:G?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Go.SKIP);else{let Y=FE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(GE);x=J(Y,j)}else{for(let Me=1;Me<y.length;Me++){let cn=y[Me],mE=FE(cn,v,D,q,S.allowFullScan);Y=Y.concat(mE)}let j=new Set;Y=Y.filter(Me=>j.has(Me)?!1:(j.add(Me),!0)),x=J(Y)}}(S.offset||S.limit!==void 0)&&(x=x.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),x.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let Me=j?.length,cn={transaction:v,lazy:Me>0||G?.length<4,alwaysPrefetch:!0};return Y.map(mE=>new Promise(SE=>_u(mE,X,cn,null,!1,SH=>{let pE=SH?.value;if(!pE)return SE(Go.SKIP);for(let TE=0;TE<Me;TE++)if(!j[TE](pE))return SE(Go.SKIP);SE(pE)})))}return a(J,"idsToRecords"),x}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=lB(q,this[ae]??null,function(v,G,L){try{this.send({id:v,timestamp:L,...G})}catch(x){console.error(x)}},S.startTime,this[Ds]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Ds]){if(w){if(y)throw new Ci.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:G}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,x,X]=v;if(v.length>3&&(X=v.slice(2)),x!==s)continue;let J=Fn(G,i);(D==null||pB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:G,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[x,X,J]=G;if(G.length>3&&(J=G.slice(2)),X!==s)continue;if(D==null||pB(D,J)){let Y=Fn(L,i);if(v.push({id:J,timestamp:x,...Y}),--y<=0)break}}catch(x){Di.error("Error getting history entry",G,x)}for(let G=v.length;G>0;)N.send(v[--G]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:G,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,RB.MAXIMUM_KEY],versions:!0}))G&&N.send({id:v,timestamp:L,value:G})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let G=[],L=v;do{let x=[L,s,D],X=u.get(x);if(X){S.omitCurrent=!0;let J=Fn(X,i);G.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let x=G.length;x>0;)N.send(G[--x]);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:(G,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 x=L>0?i.get(y):this[ce];x===void 0&&!L&&(E||f)&&(E||dR(),kn(1));let X={type:"message",value:i.encoder.encode(S),[Ii]:w};return!D.hasWrittenTime&&this[Zt]>G&&(G=X.newTxnTime=this[Zt]+.001),i.put(y,x??null,G),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 Zc(i,S.user,u)),D}else return new Jd(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?.(G=>typeof G=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ci.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[mB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ci.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ci.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return 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(){wu(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,G]=D;D.length>3&&(G=D.slice(2)),v===s&&(N=i.remove(G))}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(x=>setImmediate(x));let[w,v,G]=D;if(D.length>3&&(G=D.slice(2)),v!==s)continue;let L=Fn(y,i);L.id=G,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],G=u.get(v);if(G){let L=Fn(G,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[hB]=!0,d&&q.setTTLExpiration(d/1e3),b&&mH(),q;function et(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,G=N?.[y],L=S?.[y];if(G===L&&!v)continue;D=!0;let x=(0,tu.getIndexedValues)(L);if(x){EB&&w.prefetch(x.map(X=>({key:X,value:Z})),SB);for(let X=0,J=x.length;X<J;X++)w.remove(x[X],Z)}if(x=(0,tu.getIndexedValues)(G),x){EB&&w.prefetch(x.map(X=>({key:X,value:Z})),SB);for(let X=0,J=x.length;X<J;X++)w.put(x[X],Z)}}return D}a(et,"updateIndices");function _u(Z,S,N,D,y,w){let v=a(()=>{let G=N.transaction;if(G?.isDone)throw new Error("Invalid read transaction");let L;G&&!G.hasRunLoadRecord&&(L=!0,G.hasRunLoadRecord=!0);let x;try{x=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(G)+" 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(x?(S&&x?.version>(S.lastModified||0)&&(S.lastModified=x.version),J=x.version,X=x.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&so(Y,"cache-hit",n),Y&&!y&&(D&&(D[mB]=!0),R))return Ko(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(x?.value?.[ce])throw new Error("Can not assign a record with a record property");w(x)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(_u,"loadRecord");function Pi(){P=new Set,(0,Ui.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Pi,"setupCommitListeners");async function Ko(Z,S=null,N,D){if(N<0){let L;return P||Pi(),await new Promise(x=>{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 x(Ko(Z,L.value,L.version,D));x(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),x(Ko(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},G=D?.responseHeaders;G&&(v.responseHeaders=G);try{let L=performance.now(),x=await q.Source.get(Z,v),X=performance.now()-L;_s(X,"cache-resolution",n),G&&G.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,tu.getNextMonotonicTime)());let j=et(Z,S,x)&&N||y>0;return x?(t&&(x[t]=Z),typeof x.toJSON=="function"&&(x=x.toJSON()),i.put(Z,x,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],zd(y,null,x?{type:"put",value:i.encoder.encode(x)}:{type:"delete"})),{version:J,value:x}}catch(L){throw i.put(Z,S,N,w),L}}a(Ko,"getFromSource");function kn(Z){p||(p=i.get([fB,zT.threadId])||0),p+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([fB,zT.threadId],p)},50))}a(kn,"recordDeletion");function dR(){T||(T=setTimeout(()=>{if(T=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),kn(-1)}}},q.getRecordCount()*100+Gee).unref())}a(dR,"enqueueDeletionCleanup");function ER(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),kn(-1)})}a(ER,"addDeleteRemoval");function mH(){(0,Ui.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Di.error("Error in evicting old records",Z)}},Fee).unref()}a(mH,"runRecordExpirationEviction")}function QT(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 SB(){}function xee(e){gB=e}function Zd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!kee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,jd.autoCast)(e)}function pB(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,Go,tu,TB,zT,eu,nu,Ci,ru,su,Di,RB,Ui,jd,gB,Hee,qee,Fee,EB,fB,Zt,hB,MEe,mB,jc,Gee,kee,md=Se(()=>{zr=C(g()),Go=require("lmdb"),tu=C(vt()),TB=require("lodash"),zT=require("worker_threads");Zr();oB();eu=C(ke()),nu=C(W());dB();Ci=C(Q()),ru=C(xs()),su=C(Fr());de();Lu();Di=C(F());Uu();Yn();RB=require("ordered-binary"),Ui=C(Ve());Xc();jd=C(k());ai();Hee=1e8,qee=1e7,Fee=6e4;nu.initSync();EB=nu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),fB=Symbol.for("deletions"),Zt=Symbol.for("version"),hB=Symbol.for("incremental-update"),MEe=Symbol("source-resource"),mB=Symbol("load-from-source"),jc={isNotification:!0,allowInvalidated:!0},Gee=(0,jd.convertToMS)(nu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(eE,"makeTable");a(QT,"attributesAsObject");a(SB,"noop");a(xee,"setServerUtilities");kee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Zd,"coerceType");a(pB,"isDescendantId")});var Ne={};tt(Ne,{database:()=>Fa,databases:()=>Be,dropDatabase:()=>Zh,dropTableMeta:()=>Qee,getDatabases:()=>xr,getTables:()=>Vee,onUpdatedTable:()=>TT,readMetaDb:()=>iu,resetDatabases:()=>$ee,table:()=>nt,tables:()=>sr});function Vee(){return nE||xr(),sr||{}}function xr(){if(nE)return Be;nE=!0,$o=new Map;let e=(0,yt.getHdbBasePath)()&&(0,ve.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,ve.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,ve.basename)(r.name,".mdb");r.isFile()&&(0,ve.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&iu((0,ve.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,Vo.getBaseSchemaPath)())){for(let r of(0,hr.readdirSync)((0,Vo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,ve.join)((0,Vo.getBaseSchemaPath)(),r.name),n=(0,ve.join)((0,Vo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,ve.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ve.join)(n,i.name);iu((0,ve.join)(s,i.name),(0,ve.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,ve.extname)(o.name).toLowerCase()===".mdb"&&iu((0,ve.join)(n,o.name),(0,ve.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,ve.join)(c.path,(0,ve.basename)(o+".mdb"));(0,hr.existsSync)(u)&&iu(u,o,r,null,!0)}}for(let r in Be){let s=$o.get(r);if(s){let n=Be[r];r.includes("delete")&&Pe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Pe.trace(`delete table class ${i}`),delete n[i])}else if(delete Be[r],r==="data"){for(let n in sr)delete sr[n];delete sr[iE]}}return $o=null,Be}}function $ee(){nE=!1;for(let[,e]of Gn)e.needsDeletion=!0;xr();for(let[e,t]of Gn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Gn.delete(e));return Be}function iu(e,t,r=ZT,s,n){let i=new JT.default(e,!1);e.includes("delete")&&Pe.trace(`reading meta data from ${e}`);try{let o=Gn.get(e);o?o.needsDeletion=!1:(o=(0,tE.open)(i),Gn.set(e,o));let c=new Li.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(xo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,tE.open)(i),l.isLegacy=!0):l=$T(o));let _=bB(r),d=_[iE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&Pe.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let R=E.get(p);R||E.set(p,R={attributes:[]}),(T==null||h.is_hash_attribute)&&(R.primary=h),T!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let q of p)if(q.is_hash_attribute||q.isPrimaryKey){T=q;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let R=_[f],O={},V=[],$,U,b=typeof T.audit=="boolean"?T.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=T.trackDeletes,z=T.expiration;if(R)O=R.indices,V=R.attributes,R.schemaVersion++;else{$=T.tableId,$?$>=(u.get(ko)||0)&&u.putSync(ko,$+1):(T.tableId=$=u.get(ko),$||($=1),u.putSync(ko,$+1),u.putSync(T.key,T));let q=new Li.default(!T.is_hash_attribute,T.is_hash_attribute);Pe.trace(`openDB ${T.key} from ${r}`),U=o.openDB(T.key,q),U.rootStore=o,U.tableId=$}for(let q of p){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let et=new Li.default(!q.is_hash_attribute,q.is_hash_attribute);Pe.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,et)}let Oe=V.find(et=>et.name===q.name);Oe?V.splice(V.indexOf(Oe),1,q):V.push(q)}}catch(Oe){Pe.error("Error trying to update attribute",q,V,O,Oe)}}if(!R){Pe.trace(`creating table class ${f}`,Object.keys(_)),R=yB(_,f,eE({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of jT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function bB(e){let t=Be[e];if(t||(e==="data"?t=Be[e]=sr:e==="system"?Object.defineProperty(Be,"system",{value:t=Object.create(null),configurable:!0}):t=Be[e]=Object.create(null)),$o&&!$o.has(e)){let r=new Set;t[iE]=r,$o.set(e,r)}return t}function yB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=ZT),xr();let r=bB(e),s=(0,ve.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,ve.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,ve.join)(s,(n?t:e)+".mdb"),o=Gn.get(i);if(!o){let c=new JT.default(i,!1);o=(0,tE.open)(c),Gn.set(i,o)}return o}async function Zh(e){if(!Be[e])throw new Error("Schema does not exist");let t=Be[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gn.delete(n.path),n.status==="open"&&(await n.close(),await AB.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[iE]}delete Be[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=ZT);let u=Fa({database:t,table:e}),l=Be[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 p=new Li.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let T,R;if(_){if(Pe.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=$T(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]),Pe.trace(`${e} table loading, opening primary store`);let b=new Li.default(!1,!0),P=e+"/";Pe.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Pe.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,p),z.tableId=h.get(ko),z.tableId||(z.tableId=1),h.putSync(ko,z.tableId+1),E.tableId=z.tableId,_=yB(l,e,eE({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,T=!0,$(),h.put(P,E)}Pe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Pe.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,p)),_.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){$(),T=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Pe.trace(`${e} table loading, comparing atributes`);let V=[];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});T=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new Li.default(!0,!1);Pe.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ou.workerData?.restartNumber)&&(T=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ou.workerData?.restartNumber)&&(T=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),V.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(T=!0,$(),h.put(b,U))}}finally{R&&R()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Pe.trace(`${e} table loading, running index`),V.length>0||O.length>0?_.indexingOperation=Wee(_,V,O):T&&rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let U of jT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Pe.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function Wee(e,t,r){try{let s=e.schemaVersion;await rE.signalSchemaChange(new sE.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,p=(0,OB.getIndexedValues)(_[h]);if(p)for(let T=0,R=p.length;T<R;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,Pe.error(E)}),ou.workerData&&ou.workerData.restartNumber!==NB.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>Yee?await n:u>Kee&&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 rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Pe.error("Error in indexing",s)}}function Qee({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 TT(e){jT.push(e)}var yt,xo,tE,ve,hr,Vo,Li,JT,jt,AB,XT,OB,rE,sE,ou,Pe,NB,ZT,iE,sr,Be,ko,jT,nE,Gn,$o,Yee,Kee,de=Se(()=>{yt=C(W()),xo=C(ke()),tE=require("lmdb"),ve=require("path"),hr=require("fs"),Vo=C(Ce());md();Li=C(Hu()),JT=C(Fu()),jt=C(g()),AB=C(require("fs-extra")),XT=require("../index"),OB=C(vt()),rE=C(xs()),sE=C(Fr()),ou=require("worker_threads"),Pe=C(F()),NB=C(Ve());Xc();ZT="data",iE=Symbol("defined-tables");(0,yt.initSync)();sr=Object.create(null),Be=Object.create(null);(0,XT._assignPackageExport)("databases",Be);(0,XT._assignPackageExport)("tables",sr);ko=Symbol.for("next-table-id"),jT=[],Gn=new Map;a(Vee,"getTables");a(xr,"getDatabases");a($ee,"resetDatabases");a(iu,"readMetaDb");a(bB,"ensureDB");a(yB,"setTable");a(Fa,"database");a(Zh,"dropDatabase");a(nt,"table");Yee=1e3,Kee=10;a(Wee,"runIndexing");a(Qee,"dropTableMeta");a(TT,"onUpdatedTable")});var k=m((kEe,GB)=>{"use strict";var xn=require("path"),DB=require("fs-extra"),er=F(),IB=require("fs-extra"),oE=require("os"),zee=require("net"),Jee=require("recursive-iterator"),xe=g(),Xee=KR(),wB=require("papaparse"),aE=require("moment"),{inspect:Zee}=require("util"),CB=require("is-number"),xEe=require("lodash"),jee=require("minimist"),ete=require("https"),tte=require("http"),{hdb_errors:cE}=Q(),rte=/^((\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)))$/,LB=require("util").promisify(setTimeout),ste=100,nte=5,ite="",ote=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};GB.exports={isEmpty:mr,isEmptyOrZeroLength:bs,arrayHasEmptyValues:ute,arrayHasEmptyOrZeroLengthValues:lte,buildFolderPath:_te,isBoolean:MB,errorizeMessage:ate,stripFileExtension:Ete,autoCast:fte,autoCastJSON:PB,autoCastJSONDeep:tR,removeDir:hte,compareVersions:mte,isCompatibleDataVersion:Ste,escapeRawValue:pte,unescapeValue:Tte,stringifyProps:Rte,timeoutPromise:Ate,isClusterOperation:Nte,getClusterUser:yte,checkGlobalSchemaTable:bte,getHomeDir:BB,getPropsFilePath:gte,promisifyPapaParse:Ite,removeBOM:HB,createEventPromise:wte,checkProcessRunning:Cte,checkSchemaTableExist:Ute,checkSchemaExists:qB,checkTableExists:FB,getStartOfTomorrowInSeconds:Dte,getLimitKey:Lte,isObject:dte,isNotEmptyAndHasValue:cte,autoCasterIsNumberCheck:vB,backtickASTSchemaItems:Mte,isPortTaken:Ote,createForkArgs:Pte,autoCastBoolean:vte,async_set_timeout:LB,getTableHashAttribute:Bte,doesSchemaExist:Hte,doesTableExist:qte,stringifyObj:Fte,ms_to_time:Gte,changeExtension:xte,getEnvCliRootPath:rR,noBootFile:kte,httpRequest:Vte,transformReq:$te,convertToMS:Yte,PACKAGE_ROOT:xe.PACKAGE_ROOT};function ate(e){return e instanceof Error?e:new Error(e)}a(ate,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function cte(e){return!mr(e)&&(e||e===0||e===""||MB(e))}a(cte,"isNotEmptyAndHasValue");function bs(e){return mr(e)||e.length===0||e.size===0}a(bs,"isEmptyOrZeroLength");function ute(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(ute,"arrayHasEmptyValues");function lte(e){if(bs(e))return!0;for(let t=0;t<e.length;t++)if(bs(e[t]))return!0;return!1}a(lte,"arrayHasEmptyOrZeroLengthValues");function _te(...e){try{return e.join(xn.sep)}catch{console.error(e)}}a(_te,"buildFolderPath");function MB(e){return mr(e)?!1:e===!0||e===!1}a(MB,"isBoolean");function dte(e){return mr(e)?!1:typeof e=="object"}a(dte,"isObject");function Ete(e){return bs(e)?ite:e.slice(0,-ote)}a(Ete,"stripFileExtension");function fte(e){return mr(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:vB(e)===!0?Number(e):rte.test(e)?new Date(e):e}a(fte,"autoCast");function PB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(PB,"autoCastJSON");function tR(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=tR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=tR(r);s!==r&&(e[t]=s)}return e}else return PB(e)}a(tR,"autoCastJSONDeep");function vB(e){if(e.startsWith("0.")&&CB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&CB(e))}a(vB,"autoCasterIsNumberCheck");async function hte(e){if(bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await IB.emptyDir(e),await IB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(hte,"removeDir");function mte(e,t){if(bs(e)){er.info("Invalid current version sent as parameter.");return}if(bs(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(mte,"compareVersions");function Ste(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Ste,"isCompatibleDataVersion");function pte(e){if(mr(e))return e;let t=String(e);return t==="."?xe.UNICODE_PERIOD:t===".."?xe.UNICODE_PERIOD+xe.UNICODE_PERIOD:t.replace(xe.FORWARD_SLASH_REGEX,xe.UNICODE_FORWARD_SLASH)}a(pte,"escapeRawValue");function Tte(e){if(mr(e))return e;let t=String(e);return t===xe.UNICODE_PERIOD?".":t===xe.UNICODE_PERIOD+xe.UNICODE_PERIOD?"..":String(e).replace(xe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Tte,"unescapeValue");function Rte(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+oE.EOL}!bs(s)&&s[0]===";"?r+=" "+s+n+oE.EOL:bs(s)||(r+=s+"="+n+oE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Rte,"stringifyProps");function BB(){let e;try{e=oE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(BB,"getHomeDir");function gte(){let e=xn.join(BB(),xe.HDB_HOME_DIR_NAME,xe.BOOT_PROPS_FILE_NAME);return DB.existsSync(e)||(e=xn.join(__dirname,"../","hdb_boot_properties.file")),e}a(gte,"getPropsFilePath");function Ate(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Ate,"timeoutPromise");async function Ote(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=zee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Ote,"isPortTaken");function Nte(e){try{return xe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Nte,"isClusterOperation");function bte(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bte,"checkGlobalSchemaTable");function yte(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||bs(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(yte,"getClusterUser");function Ite(){wB.parsePromise=function(e,t,r){return new Promise(function(s,n){wB.parse(e,{header:!0,transformHeader:HB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Ite,"promisifyPapaParse");function HB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(HB,"removeBOM");function wte(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Zee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(wte,"createEventPromise");async function Cte(e){let t=!0,r=0;do await LB(ste*r++),(await Xee.findPs(e)).length>0&&(t=!1);while(t&&r<nte);if(t)throw new Error(`process ${e} was not started`)}a(Cte,"checkProcessRunning");function Ute(e,t){let r=qB(e);if(r)return r;let s=FB(e,t);if(s)return s}a(Ute,"checkSchemaTableExist");function qB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qB,"checkSchemaExists");function FB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(FB,"checkTableExists");function Dte(){let e=aE().utc().add(1,xe.MOMENT_DAYS_TAG).startOf(xe.MOMENT_DAYS_TAG).unix(),t=aE().utc().unix();return e-t}a(Dte,"getStartOfTomorrowInSeconds");function Lte(){return aE().utc().format("DD-MM-YYYY")}a(Lte,"getLimitKey");function Mte(e){try{let t=new Jee(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(Mte,"backtickASTSchemaItems");function Pte(e){return[e]}a(Pte,"createForkArgs");function vte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(vte,"autoCastBoolean");function Bte(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Bte,"getTableHashAttribute");function Hte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Hte,"doesSchemaExist");function qte(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(qte,"doesTableExist");function Fte(e){try{return JSON.stringify(e)}catch{return e}}a(Fte,"stringifyObj");function Gte(e){let t=aE.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(Gte,"ms_to_time");function xte(e,t){let r=xn.basename(e,xn.extname(e));return xn.join(xn.dirname(e),r+t)}a(xte,"changeExtension");function rR(){if(process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=jee(process.argv);if(e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(rR,"getEnvCliRootPath");var eR;function kte(){if(eR)return eR;let e=rR();rR()&&DB.pathExistsSync(xn.join(e,xe.HDB_CONFIG_FILE))&&(eR=!0)}a(kte,"noBootFile");function Vte(e,t){let r;return e.protocol==="http:"?r=tte:r=ete,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(Vte,"httpRequest");function $te(e){if(!e.schema&&!e.database){e.schema=xe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a($te,"transformReq");function Yte(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(Yte,"convertToMS")});var W=m(($Ee,VB)=>{"use strict";var sR=require("fs-extra"),Jr=require("path"),xB=require("os"),Kte=require("properties-reader"),au=F(),Mi=k(),te=g(),uE=Nr(),Wte="Error initializing environment manager",lE="BOOT_PROPS_FILE_PATH",kB=!1,Qte={[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},on={};VB.exports={BOOT_PROPS_FILE_PATH:lE,getHdbBasePath:zte,setHdbBasePath:Jte,get:Xte,initSync:jte,setProperty:Ee,initTestEnvironment:ere};function zte(){return on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(zte,"getHdbBasePath");function Jte(e){on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Jte,"setHdbBasePath");function Xte(e){let t=uE.getConfigValue(e);return t===void 0?on[e]:t}a(Xte,"get");function Ee(e,t){Qte[e]&&(on[e]=t),uE.updateConfigObject(e,t)}a(Ee,"setProperty");function Zte(){let e;try{e=Mi.getPropsFilePath(),sR.accessSync(e,sR.constants.F_OK|sR.constants.R_OK),kB=!0;let t=Kte(e);return on[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),on[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),on[lE]=e,!0}catch{return au.trace(`Environment manager found no properties file at ${e}`),!1}}a(Zte,"doesPropFileExist");function jte(e=!1){try{(kB||Zte()||Mi.noBootFile())&&(uE.initConfig(e),on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=uE.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){au.error(Wte),au.error(t),console.error(t),process.exit(1)}}a(jte,"initSync");function ere(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=Jr.join(__dirname,"../../","unitTests");on[lE]=Jr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Jr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,xB.userInfo()?xB.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Jr.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,Jr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,Jr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Mi.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Mi.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Mi.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Mi.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,Jr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Mi.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 ${lE}. Please check your boot props and settings files`;au.fatal(r),au.error(t)}}a(ere,"initTestEnvironment")});var QB=m((KEe,WB)=>{"use strict";var KB=require("joi"),{string:cu,boolean:$B,array:tre}=KB.types(),YB=g(),rre=Ue();WB.exports=sre;function sre(e){let t=KB.object({operation:cu.valid(YB.OPERATIONS_ENUM.ADD_NODE,YB.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:cu.required(),subscriptions:tre.items({schema:cu.required(),table:cu.optional(),hash_attribute:cu.optional(),subscribe:$B.required(),publish:$B.required()}).min(1).required()});return rre.validateBySchema(e,t)}a(sre,"updateRemoteSourceValidator")});var uu=m((QEe,zB)=>{"use strict";var nR=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};zB.exports=nR});var eH=m((JEe,jB)=>{"use strict";var nre=QB(),an=F(),iR=be(),ire=g(),oR=wr(),JB=He(),XB=Za(),ore=yl(),{Node:are,NodeSubscription:ZB}=wn(),aR=uu(),cR=k(),cre=W(),{cloneDeep:ure}=require("lodash"),{broadcast:lre}=Ve();jB.exports=_re;async function _re(e){try{let t=nre(e);if(t)return an.error(`Validation error in updateRemoteSource: ${t.message}`),new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=ure(await oR.getNodeRecord(s)),c=!cR.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&an.trace(`Existing record found for ${s}, updating records subscriptions`);for(let l=0,_=r.length;l<_;l++){let d=r[l],E=d.schema,f=d.table;if(!cR.doesSchemaExist(E)){an.trace(`updateRemoteSource creating schema: ${E}`);try{await XB.createSchema({operation:"create_schema",schema:E})}catch(h){an.error(h)}}if(f&&!cR.doesTableExist(E,f)){let h=new ore(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),an.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await XB.createTable(h)}catch(p){an.error(p)}an.trace(`Creating local stream for ${E}.${f}`),await JB.createLocalTableStream(E,f)}if(await JB.updateWorkStream(d,s),c){let h=!1;for(let p=0,T=o.subscriptions.length;p<T;p++){let R=o.subscriptions[p];if(R.schema===E&&R.table===f){R.publish=d.publish,R.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new ZB(E,f,d.publish,d.subscribe))}else i.push(new ZB(E,f,d.publish,d.subscribe))}c||(o=new are(s,i,void 0),an.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await oR.upsertNodeRecord(u),lre({type:"nats_update"}),new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${cre.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await oR.getSystemInfo())}catch(t){an.error(t);let r=t.message?t.message:t;return new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(_re,"updateRemoteSource")});var nH=m((ZEe,sH)=>{"use strict";var rH=require("joi"),{string:tH}=rH.types(),dre=g(),Ere=Ue();sH.exports=fre;function fre(e){let t=rH.object({operation:tH.valid(dre.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:tH.required()});return Ere.validateBySchema(e,t)}a(fre,"removeRemoteSourceValidator")});var oH=m((efe,iH)=>{"use strict";var hre=nH(),_E=F(),dE=be(),uR=g(),mre=wr(),Sre=k(),pre=He(),Tre=W(),EE=uu(),{NodeSubscription:Rre}=wn(),gre=eo(),Are=mn(),{broadcast:Ore}=Ve(),Nre=Tre.get(uR.CONFIG_PARAMS.CLUSTERING_NODENAME);iH.exports=bre;async function bre(e){try{let t=hre(e);if(t)return _E.error(`Validation error in removeRemoteSource: ${t.message}`),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await mre.getNodeRecord(r);if(Sre.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return _E.error(i),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];_E.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Rre(c.schema,c.table,!1,!1);await pre.updateWorkStream(u,r)}let n=new gre(uR.SYSTEM_SCHEMA_NAME,uR.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Are.deleteRecord(n),Ore({type:"nats_update"}),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Nre} successfully removed node '${r}'.`)}catch(t){_E.error(t);let r=t.message?t.message:t;return new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(bre,"removeRemoteSource")});var _H=m((rfe,lH)=>{"use strict";var fE=F(),hE=g(),aH=be(),cH=W(),yre=k(),uH=uu(),Ire=wr(),wre=e_(),Cre=ir();lH.exports=Ure;async function Ure(e){try{fE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=yre.ms_to_time(t),s=new Dre(cH.get(hE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),cH.get(hE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await Ire.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new wre(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Cre.update(i)}catch(n){fE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return fE.trace("getRemoteSourceConfig response:",s),new uH(aH.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){fE.error(t);let r=t.message?t.message:t;return new uH(aH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Ure,"getRemoteSourceConfig");function Dre(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(Dre,"ConfigResponseObject")});var hH=m((nfe,fH)=>{"use strict";var dH=W();dH.initSync();var EH=He(),lu=F(),Yo=g(),lR=be(),Lre=eH(),Mre=oH(),Pre=_H(),vre=uu(),{encode:Bre,decode:Hre}=require("msgpackr"),qre=Bs(),Fre=En(),Gre=require("util"),xre=g(),{isMainThread:kre,parentPort:Vre}=require("worker_threads");Ve();var $re=Gre.promisify(qre.setSchemaDataToGlobal),_R=dH.get(Yo.CONFIG_PARAMS.CLUSTERING_NODENAME);fH.exports=Yre;async function Yre(){try{lu.notify("Starting reply service."),await $re();let e=await EH.getConnection(),t=`${_R}.__request__`,r=e.subscribe(t,{queue:_R});await Kre(r)}catch(e){lu.error(e)}}a(Yre,"initialize");async function Kre(e){for await(let t of e){let r=Hre(t.data),s;switch(r.operation){case Yo.OPERATIONS_ENUM.ADD_NODE:case Yo.OPERATIONS_ENUM.UPDATE_NODE:s=await Lre(r);break;case Yo.OPERATIONS_ENUM.REMOVE_NODE:s=await Mre(r);break;case Yo.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Pre(r);break;case Yo.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Wre();break;default:let n=`node '${_R}' reply service received unrecognized request operation`;lu.error(n),s=new vre(lR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}lu.trace(s),t.respond(Bre(s))}}a(Kre,"handleRequest");async function Wre(){try{return{status:lR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Fre.describeAll()}}catch(e){return lu.error(e),{status:lR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Wre,"getRemoteDescribeAll");kre||Vre.on("message",async e=>{let{type:t}=e;t===xre.ITC_EVENT_TYPES.SHUTDOWN&&EH.closeConnection()})});var Qre=hH();(async()=>{try{await Qre()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
26
|
+
`+_T.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(m7,"getServerOptions");function S7(){let e=Qr.get(o7),t=Qr.get(a7),r;return e&&(e===!0||e.toUpperCase()===FP)&&(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(S7,"getCORSOpts");function p7(){return Qr.get(l7)}a(p7,"getHeaderTimeoutConfig")});var jP=m((Dde,ZP)=>{"use strict";var{decode:T7}=require("msgpackr"),{isMainThread:R7,parentPort:g7,threadId:Cde}=require("worker_threads"),dT=He(),Ho=be(),A7=g(),Kc=F(),kP=W(),YP=g();Ve();var O7=vs(),{recordAction:N7,recordActionBinary:b7}=(ai(),re(ql)),{publishToStream:y7}=dT,Ude={durable:Ho.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Ho.WORK_QUEUE_CONSUMER_NAMES.deliver_group},I7,w7,C7,KP,WP;ZP.exports={initialize:QP,workQueueListener:XP,setSubscription:U7,setIgnoreOrigin:L7,getDatabaseSubscriptions:D7};async function QP(){WP=!0,Kc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await dT.getNATSReferences();I7=e,w7=e.info.server_name,C7=t,KP=r}a(QP,"initialize");var Ld=new Map;function U7(e,t,r){let s=Ld.get(e);s||Ld.set(e,s=new Map),s.set(t,r),WP||QP().then(XP)}a(U7,"setSubscription");function D7(){return Ld}a(D7,"getDatabaseSubscriptions");var zP;function L7(e){zP=e}a(L7,"setIgnoreOrigin");var JP=100,VP=new Array(JP),Dd=0;async function XP(){let t=await(await KP.consumers.get(Ho.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ho.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await VP[Dd],VP[Dd]=M7(r).catch(s=>{Kc.error(s)}),++Dd>=JP&&(Dd=0)}a(XP,"workQueueListener");R7||g7.on("message",async e=>{let{type:t}=e;t===YP.ITC_EVENT_TYPES.SHUTDOWN&&dT.closeConnection()});async function M7(e){let t=T7(e.data);N7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Ho.MSG_HEADERS.ORIGIN)===kP.get(A7.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!zP;if(b7(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;Kc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Kc.trace(`messageProcessor nats msg id: ${e.headers.get(Ho.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=Ld.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:$P(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let R=l.map((O,V)=>({type:$P(i),value:O,id:_?.[V],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}kP.get(YP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&y7(e.subject.split(".").slice(0,-1).join("."),O7.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Kc.error(i)}e.ack()}a(M7,"messageProcessor");function $P(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a($P,"convertOperation")});var pT={};tt(pT,{disableNATS:()=>v7,setNATSReplicator:()=>ET,start:()=>P7});function P7(){Pd.default.get(vd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&H7()}function v7(e=!0){nv=e}function H7(){if(nv)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];ET(n,r,i)}}TT((r,s)=>{ET(r.tableName,r.databaseName,r),s&&ov(r)}),!ev&&(ev=!0)}function ET(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){ov(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,tv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<B7}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 Md(i.transaction,i)),o.user=i.user):o=iv),o}a(n,"getNATSTransaction")}function ov(e){let t=Pd.default.get(vd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,hT.publishToStream)(`${mT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ST.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 hT,mT,ST,tv,rv,Pd,vd,sv,nv,B7,iv,ev,Md,fT,av=Se(()=>{de();Zr();hT=C(He()),mT=C(be()),ST=C(vs());aa();tv=C(jP()),rv=C(vt()),Pd=C(W()),vd=C(g()),sv=C(F());a(P7,"start");a(v7,"disableNATS");B7=2;a(H7,"assignReplicationSource");a(ET,"setNATSReplicator");a(ov,"publishSchema");Md=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=Pd.default.get(vd.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||(sv.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,hT.publishToStream)(`${mT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,ST.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},fT=class extends Md{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,rv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};iv=new fT});async function uv({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await RT.getResource(e,{});n=new AT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await RT.get(e);i&&i.delete()}n=new Hd(e,t)}return n}function gT(){return Bd++,Bd>65500&&(Bd=1),Bd}var cv,Wc,RT,Bd,Hd,AT,lv=Se(()=>{de();Ac();cv=C(vt()),Wc=C(F());Yn();RT=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(uv,"getSession");Bd=1;a(gT,"getNextMessageId");Hd=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=Ln.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 p=h.path,T=h.Resource,R=await We(f,async()=>{let O=await T.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 V of O)try{let $;if(V.type&&V.type!=="put"&&V.type!=="delete"&&V.type!=="message"||s&&!s(V))continue;r?(V.topic=n,$=this.needsAcknowledge(V)):$=gT();let U=V.id;Array.isArray(U)&&(U=To(U)),U==null&&(U=""),this.listener(p+"/"+U,V.value,$,t)}catch($){(0,Wc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return gT()}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=Ln.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 We(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=[]}},AT=class extends Hd{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=gT();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,Wc.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,cv.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),RT.put(this.sessionRecord)),t.qos}}});var bT={};tt(bT,{start:()=>F7});async function F7({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:l,onClose:_}=Ev(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,rn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;q7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,fv.getSuperUser)());let{onMessage:u,onClose:l}=Ev(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,rn.info)("Socket error",_)})},{port:t,securePort:s})}function Ev(e,t,r,s,n){dv||(dv=!0,dm(_=>{_.push({metric:"mqtt-connections",connections:OT})})),OT++;let i,o={protocolVersion:4},c=(0,qd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){OT--,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 st.auth(_.username,_.password.toString()),(0,NT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&_v.notify({username:s.username,status:sn.AUTH_AUDIT_STATUS.SUCCESS,type:sn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,NT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&_v.error({username:s.username,status:sn.AUTH_AUDIT_STATUS.FAILURE,type:sn.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=uv({user:s,..._}),i=await i}catch(O){return(0,rn.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,V,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,rn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let V;try{V=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,rn.error)($),V=128}f.push(V)}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",p=e.deserialize||(e.deserialize=Io(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,R;try{R=await i.publish(_,T)}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 p=(0,qd.generate)(f,o);t(p),_s(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ws(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var qd,fv,NT,sn,rn,_v,q7,dv,OT,hv=Se(()=>{qd=require("mqtt-packet");lv();fv=C(br());Ao();ai();ts();NT=C(W()),sn=C(g()),rn=C(F()),_v=(0,rn.loggerWithTag)("auth-event"),q7=!0;a(F7,"start");OT=0;a(Ev,"onSocket")});var bv={};tt(bv,{loadComponent:()=>Fd,loadComponentDirectories:()=>Nv});function Nv(e,t){t&&(IT=t),e&&(wT=e);let r=[];if((0,gs.existsSync)(yT)){let n=(0,gs.readdirSync)(yT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Pr.join)(yT,o);r.push(Fd(c,IT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Fd(s,IT,s)),Promise.all(r).then(()=>{Ov=!0})}async function Fd(e,t,r,s,n){if(!Sv.has(e)){Sv.set(e,!0),n&&(wT=n);try{let i,o=(0,Pr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(o)?i=(0,pv.parseDocument)((0,gs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=V7;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,gs.existsSync)(f=(0,Pr.join)(E,"node_modules",u));)if(E=(0,Pr.dirname)(E),E.length<(0,Av.getHdbBasePath)().length){f=null;break}if(f)_=await Fd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=k7[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,nt(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Qc.isMainThread&&(_=await _.startOnMainThread?.({server:st,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!mv.includes(T)){mv.push(T);let R=CT.get(UT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);vP(T,R)}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(_=await _.start?.({server:st,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),wT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,gv.handleHDBError)("Can not reference parent directories");let T=(0,Pr.join)(e,l.files);for(let R of await(0,Tv.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:V}=R,$=(0,Pr.relative)(e,O),U=(0,Pr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(V.isFile()){let P=await x7(O);Qc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Qc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${V.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new zc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new zc(E),null,!0)}}if(Qc.isMainThread&&!Ov&&(0,Rv.watchDir)(e,async()=>Nv()),i.extensionModule)return await vu((0,Pr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new zc(i))}}}var gs,Pr,Qc,pv,CT,UT,Tv,Rv,gv,Av,G7,x7,yT,wT,Ov,IT,k7,V7,mv,Sv,zc,yv=Se(()=>{gs=require("fs"),Pr=require("path"),Qc=require("worker_threads"),pv=require("yaml"),CT=C(W()),UT=C(g());Lg();Bg();Hg();xL();yP();UP();Tv=C(require("fast-glob")),Rv=C(Ve());WE();ts();gv=C(Q());Zr();de();BP();Av=C(W()),G7=C(xP());q_();av();hv();({readFile:x7}=gs.promises),yT=CT.get(UT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),wT=new Map;a(Nv,"loadComponentDirectories");k7={REST:Ip,graphqlSchema:KE,jsResource:zE,fastifyRoutes:oT,login:XE,static:aT,operationsApi:G7,customFunctions:{},clustering:pT,authentication:Oc,mqtt:bT},V7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},mv=[],Sv=new Map;a(Fd,"loadComponent");zc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Lv=m((iEe,Dv)=>{"use strict";var kd=require("fs-extra"),DT=require("path"),Gd=F(),Iv=k(),xd=g(),Uv=W(),$7=Nr();Dv.exports=Y7;async function Y7(){let e=K7(),t=Uv.get(xd.CONFIG_PARAMS.ROOTPATH),r=DT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+xd.PACKAGE_ROOT}},n=DT.join(t,"node_modules");await kd.ensureDir(n);let i,o=!0,c=!1;try{i=await kd.readJson(r)}catch(u){if(Iv.isEmptyOrZeroLength(e))return;if(u.code!==xd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Iv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await wv(l);s.dependencies[u]=_+l}if(!o){Gd.notify("Installing components"),await Cv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await wv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Gd.notify("Removing component",u),c=!0);c&&(Gd.notify("Updating components."),await Cv(r,s))}a(Y7,"installComponents");function K7(){let e=$7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(K7,"getComponentsConfig");async function wv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":DT.extname(e)||await kd.pathExists(e)?"file:":"github:"}a(wv,"getPkgPrefix");async function Cv(e,t){Gd.trace("npm installing components package.json",t),await kd.writeFile(e,JSON.stringify(t,null," ")),await K_().installAllRootModules(Uv.get(xd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Cv,"installPackages")});var vv=m((aEe,Pv)=>{var{isMainThread:Mv}=require("worker_threads"),{getTables:W7}=(de(),re(Ne)),{loadComponentDirectories:Q7,loadComponent:z7}=(yv(),re(bv)),{resetResources:J7}=(Ac(),re(SD)),X7=Lv(),Z7=Nr(),{dirname:j7}=require("path"),{getConnection:eee}=He(),tee=W(),ree=g(),LT=new Map;async function see(e=!1){!Mv&&tee.get(ree.CONFIG_PARAMS.CLUSTERING_ENABLED)&&eee(),Mv&&await X7();let t=J7();W7(),t.isWorker=e,await z7(j7(Z7.getConfigFilePath()),t,"hdb",!0,LT),await Q7(LT,t);let r=[];for(let[s]of LT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(see,"loadRootComponents");Pv.exports.loadRootComponents=see});var Ve=m((lEe,qn)=>{"use strict";var{Worker:nee,MessageChannel:iee,parentPort:As,isMainThread:HT,threadId:oee,workerData:Jc}=require("worker_threads"),{PACKAGE_ROOT:aee}=g(),{join:qv,isAbsolute:cee,extname:$d}=require("path"),{server:uee}=(ts(),re(Pu)),{watch:lee,readdir:_ee}=require("fs/promises"),{totalmem:Bv}=require("os"),qT=g(),yi=F(),uEe=g(),{randomBytes:dee}=require("crypto"),Eee=1024*1024,Hn=[],Bn=[],fee=50,Fv=1e4,hee="restart",Gv="request_thread_info",xv="resource_report",kv="thread_info",Vv="added-port",mee="ack",MT;qn.exports={startWorker:PT,restartWorkers:FT,shutdownWorkers:Ree,workers:Hn,setMonitorListener:wee,onMessageFromWorkers:gee,onMessageByType:Aee,broadcast:Oee,broadcastWithAcknowledgement:bee,setChildListenerByType:Tee,getWorkerIndex:Yv,getTicketKeys:Kv,setMainIsWorker:See,restartNumber:Jc?.restartNumber||1};var $v;function Yv(){return Jc?Jc.workerIndex:$v?0:void 0}a(Yv,"getWorkerIndex");function See(e){$v=e}a(See,"setMainIsWorker");var Vd;function Kv(){return Vd||(Vd=HT?dee(48):Jc.ticketKeys,Vd)}a(Kv,"getTicketKeys");Object.defineProperty(uee,"workerIndex",{get(){return Yv()}});var Wv={[Gv](e,t){yee(t)},[xv](e,t){Iee(t,e)}};function PT(e,t={}){let r=process.constrainedMemory?.()||Bv();r=Math.min(r,Bv());let s=Math.max(Math.floor(r/Eee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Bn){let{port1:u,port2:l}=new iee;c.postMessage({type:Vv,port:u},[u]),i.push(l)}$d(e)||(e+=".js");let o=new nee(cee(e)?e:qv(aee,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:qn.exports.restartNumber,ticketKeys:Kv()},transferList:i},t));return Kd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{PT(e,t)},o.on("error",c=>{console.error("Worker error:",c),yi.error("Worker error:",c)}),o.on("exit",c=>{Hn.splice(Hn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<fee?(t.unexpectedRestarts=o.unexpectedRestarts+1,PT(e,t)):yi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Wv[c.type]?.(c,o)}),Hn.push(o),Uee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(PT,"startWorker");var pee=[qT.THREAD_TYPES.HTTP];async function FT(e=null,t=2,r=!0){if(HT){if(r){let{loadRootComponents:n}=vv();await n()}qn.exports.restartNumber++,t<1&&(t=t*Hn.length);let s=[];for(let n of Hn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:qn.exports.restartNumber,type:qT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=pee.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Fv*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 As.postMessage({type:hee,workerType:e})}a(FT,"restartWorkers");function Tee(e,t){Wv[e]=t}a(Tee,"setChildListenerByType");function Ree(e){return FT(e,1/0,!1)}a(Ree,"shutdownWorkers");var Qv=[];function gee(e){Qv.push(e)}a(gee,"onMessageFromWorkers");var vT=new Map;function Aee(e,t){let r=vT.get(e);r||vT.set(e,r=[]),r.push(t)}a(Aee,"onMessageByType");function Oee(e){for(let t of Bn)try{t.postMessage(e)}catch(r){yi.error("Unable to send message to worker",r)}}a(Oee,"broadcast");var Yd=new Map,Nee=1;function bee(e){return new Promise(t=>{let r=0;for(let s of Bn)try{let n=Nee++,i=a(()=>{Yd.delete(n),--r===0&&t(),s!==As&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Yd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Yd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yi.error("Unable to send message to worker",n)}r===0&&t()})}a(bee,"broadcastWithAcknowledgement");function yee(e){e.postMessage({type:kv,workers:zv()})}a(yee,"sendThreadInfo");function zv(){let e=Date.now();return Hn.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(zv,"getChildWorkerInfo");function Iee(e,t){e.resources=t,e.resources.updated=Date.now()}a(Iee,"recordResourceReport");var BT;function wee(e){BT=e}a(wee,"setMonitorListener");var Cee=1e3,Hv=!1;function Uee(){Hv||(Hv=!0,setInterval(()=>{for(let e of Hn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BT&&BT()},Cee).unref())}a(Uee,"startMonitoring");var Dee=1e3;if(As){Kd(As);for(let e of Jc.addPorts)Kd(e);setInterval(()=>{let e=process.memoryUsage();As.postMessage({type:xv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Dee).unref(),MT=a(()=>new Promise((e,t)=>{As.on("message",r),As.postMessage({type:Gv});function r(s){s.type===kv&&(As.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else MT=zv;qn.exports.getThreadInfo=MT;function Kd(e,t){Bn.push(e),e.on("message",r=>{if(r.type===Vv)Kd(r.port);else if(r.type===mee){let s=Yd.get(r.id);s&&s()}else{for(let n of Qv)n(r,e);let s=vT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yi.error(i)}}}).on("close",()=>{Bn.splice(Bn.indexOf(e),1)}).on("exit",()=>{Bn.splice(Bn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Kd,"addPort");if(HT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await _ee(s,{withFileTypes:!0}))i.isDirectory()&&r(qv(s,i.name));for await(let{filename:i}of lee(s,{persistent:!1}))($d(i)===".ts"||$d(i)===".js"||$d(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await FT(),yi.info("Reloaded HarperDB components")},100))},"watch_dir");qn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else As.on("message",async e=>{let{type:t}=e;t===qT.ITC_EVENT_TYPES.SHUTDOWN&&(qn.exports.restartNumber=e.restartNumber,As.unref(),setTimeout(()=>{yi.warn("Thread did not voluntarily terminate",oee),process.exit(0)},Fv).unref())})});function $T(e){let t=e.auditStore=e.openDB(eB.AUDIT_STORE_NAME,Mee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,rB.getWorkerIndex)()===0&&e.on("aftercommit",()=>{xT||(xT=setTimeout(()=>{if(xT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Jv,0]})){if((n[0]&15)===VT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Jv/10).unref())}),t}function zd(e,t,r){let s=iB[r.type],n=3;if(t?t.length>80?(s|=Wd,n=(0,nn.writeKey)(t,Os,e?14:6),GT.setUint16(2,n)):(n=(0,nn.writeKey)(t,Os,e?11:3),Os[1]=n):Os[1]=0,e){s|=nB;let i=s&Wd?6:3;GT.setFloat64(i,e),t||(n=i+8)}return Os[0]=s,s&Wd?GT.setUint16(4,0):Os[2]=0,r.value?Buffer.concat([Os.slice(0,n),r.value]):Os.subarray(0,n)}function Fn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Wd,i=n?6:3,o;r&nB&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&kT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:iB[r&7],value:u,lastVersion:o,get user(){return c?(0,nn.readKey)(e,i,c):void 0}}}var nn,Qd,eB,tB,rB,sB,Os,GT,Lee,Mee,Jv,xT,kT,Xv,VT,Zv,jv,Wd,nB,iB,Xc=Se(()=>{nn=require("ordered-binary"),Qd=C(W()),eB=C(ke()),tB=C(g()),rB=C(Ve()),sB=C(k());(0,Qd.initSync)();Os=Buffer.alloc(1024),GT=new DataView(Os.buffer,Os.byteOffset,1024),Lee={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,nn.writeKey)(e[2],t,r+12)}else return(0,nn.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,nn.readKey)(e,t+12,r)]}else return(0,nn.readKey)(e,t,r)}},Mee={encoding:"binary",keyEncoder:Lee},Jv=(0,sB.convertToMS)((0,Qd.get)(tB.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,xT=null;a($T,"openAuditStore");kT=16,Xv=1,VT=2,Zv=3,jv=4,Wd=128,nB=64,iB={put:Xv|kT,[Xv]:"put",delete:VT,[VT]:"delete",message:Zv|kT,[Zv]:"message",invalidate:jv,[jv]:"invalidate"};a(zd,"createAuditEntry");a(Fn,"readAuditEntry")});var YT,Ii,Pee,Zc,Jd,oB=Se(()=>{YT=C(vt());Xc();Ii=Symbol("completion"),Pee=100,Zc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,YT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Ii]&&(i||(i=[]),i.push(d[Ii])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,zd(_.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<Pee>>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=[]}},Jd=class extends Zc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,YT.getNextMonotonicTime)())}getReadTxn(){}}});function lB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Fo||((0,wi.onMessageByType)(cB,d=>{let E=d.auditIds;WT(d.path,E,d.txnId)}),(0,wi.onMessageByType)(uB,d=>{(0,Ns.trace)("confirming to proceed with txn",d.txnId)}),Fo=Object.create(null));let c=Fo[i]||(Fo[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=To(t);let l=new KT(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function WT(e,t,r,s){if(!Fo)return;let n=Fo[e];if(n){if(qo&&qo+1!==r){(0,Ns.trace)("Waiting to ensure latest txn id",qo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c);if(qo+1!==r){await(0,wi.broadcastWithAcknowledgement)({type:uB,txnId:r});for(let[o,c]of Xd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c)}Xd.delete(r),(0,Ns.trace)("Proceeding with txn id",r),qo=r-1,WT(e,t,r,s)})();return Xd.set(r,i),i}(0,Ns.trace)("Notifying with txn id",r,s),qo=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,aB.writeKey)(i,Bee,0);let _=i[3];_&&(i.length=3);let d,E=To(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,Ns.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=Fn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(R){console.error(R),(0,Ns.info)(R)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function _B(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&vee)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,wi.broadcast)({type:cB,path:n,auditIds:l,txnId:c,start:u}),WT(n,l,c,!0))})}}var Ns,wi,aB,cB,uB,vee,Fo,Bee,KT,qo,Xd,dB=Se(()=>{Ns=C(F()),wi=C(Ve()),aB=require("ordered-binary");aa();Ac();Xc();cB="transaction",uB="transaction-await",vee=67108864,Bee=Buffer.alloc(4096);a(lB,"addSubscription");KT=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"}}},Xd=new Map;a(WT,"notifyFromTransactionData");a(_B,"listenToCommits")});var Vp={};tt(Vp,{coerceType:()=>Zd,makeTable:()=>eE,setServerUtilities:()=>xee});function eE(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=[]),_B(i,u);let p=0,T,R,O,V={},$,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&&(V=Z);let z;E&&ER();class q extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,G=w.table?Be[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[G.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await G.getResource(w.id,w,jc);switch(w.type){case"put":return L._writeUpdate(v,jc);case"delete":return L._writeDelete(jc);case"publish":return L._writePublish(v,jc);case"invalidate":return L.invalidate(jc);default:Di.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ui.getWorkerIndex)()):(0,Ui.getWorkerIndex)()===0,G=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(G)for await(let L of G)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=We(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(Me=>Me.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),ru.signalSchemaChange(new su.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&ru.signalUserChange(new su.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(x){console.error("error in subscription handler",x)}}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,G,x={transaction:w?.getReadTxn()},X;return _u(S,N,x,y,D?.allowInvalidated,(J,Y)=>{Y?G(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,G=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ui.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ER(),q.audit=!0}static coerceId(S){return S===""?null:Zd(S,V)}static async dropTable(){if(delete Be[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));ru.signalSchemaChange(new su.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[Ds])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=QT(y,"read");N.select=w.filter(G=>v[G])}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=QT(w,"update");for(let G in N)if(!v[G])return!1;if(D)for(let G of w){let L=G.attribute_name;!G.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=QT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ft],y&&(S=Object.assign(y,S)),this[ft]=y=S}return!this[ce]&&t&&!(y||(y=this[ft]))?.[t]&&(y||(y=this[ft]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let x in r)w[x]=this.getProperty(x);let v=q.Source,G,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(G=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ii]:G}}})}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,gB.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,G=this[ae];y||(this[ce]={}),D.addWrite({key:G,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,x)=>{let X;if(x){if(w)return;let Y=i.getEntry(G);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[hB]&&(w=!yu(S),w))return;t&&S[t]!==G&&(S[t]=G),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(G,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Di.trace("Checking timestamp for put",G,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,Go.asBinary)(J),L),et(this[ae],y,S),y===null&&!x&&kn(-1),{type:E&&"put",value:J,[Ii]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(v,G)=>{let L=this[ce];if(G){let x=i.getEntry(y);L=x?.value;let X=this[Ae];X&&x?.version>(X.lastModified||0)&&(X.lastModified=x.version)}if(!D&&(D=!0,!S?.isNotification)){let x=q.Source;x?.delete&&(!x.delete.reliesOnPrototype||x.prototype.delete)&&(w=x.delete(y,this))}if(!(this[Zt]>v))return et(this[ae],L),Di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||dR(),G||kn(1)):i.remove(this[ae]),{type:E&&"delete",[Ii]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,Me=j==null?V:h.find(cn=>cn.name==j);if(Me)Me.type&&(Y[1]===void 0?Y.value=w(Y.value,Me):Y[1]=w(Y[1],Me));else if(j!=null)throw(0,Ci.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(Me=>Zd(Me,j)):Zd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,TB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===eu.SEARCH_TYPES.EQUALS){let Me=Y[0]??Y.attribute;if(Me==null||Me===t)Y.estimated_count=1;else{let cn=r[Me];Y.estimated_count=cn?cn.getValuesCount(Y[1]??Y.value):1/0}}else j===eu.SEARCH_TYPES.CONTAINS||j===eu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===eu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=qee:Y.estimated_count=Hee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let G=S.select,L=y[0],x;if(!L)x=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:G?.length<4}:{start:!1,transaction:v,lazy:G?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Go.SKIP);else{let Y=FE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(GE);x=J(Y,j)}else{for(let Me=1;Me<y.length;Me++){let cn=y[Me],mE=FE(cn,v,D,q,S.allowFullScan);Y=Y.concat(mE)}let j=new Set;Y=Y.filter(Me=>j.has(Me)?!1:(j.add(Me),!0)),x=J(Y)}}(S.offset||S.limit!==void 0)&&(x=x.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),x.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let Me=j?.length,cn={transaction:v,lazy:Me>0||G?.length<4,alwaysPrefetch:!0};return Y.map(mE=>new Promise(SE=>_u(mE,X,cn,null,!1,SH=>{let pE=SH?.value;if(!pE)return SE(Go.SKIP);for(let TE=0;TE<Me;TE++)if(!j[TE](pE))return SE(Go.SKIP);SE(pE)})))}return a(J,"idsToRecords"),x}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=lB(q,this[ae]??null,function(v,G,L){try{this.send({id:v,timestamp:L,...G})}catch(x){console.error(x)}},S.startTime,this[Ds]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Ds]){if(w){if(y)throw new Ci.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:G}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,x,X]=v;if(v.length>3&&(X=v.slice(2)),x!==s)continue;let J=Fn(G,i);(D==null||pB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:G,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[x,X,J]=G;if(G.length>3&&(J=G.slice(2)),X!==s)continue;if(D==null||pB(D,J)){let Y=Fn(L,i);if(v.push({id:J,timestamp:x,...Y}),--y<=0)break}}catch(x){Di.error("Error getting history entry",G,x)}for(let G=v.length;G>0;)N.send(v[--G]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:G,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,RB.MAXIMUM_KEY],versions:!0}))G&&N.send({id:v,timestamp:L,value:G})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let G=[],L=v;do{let x=[L,s,D],X=u.get(x);if(X){S.omitCurrent=!0;let J=Fn(X,i);G.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let x=G.length;x>0;)N.send(G[--x]);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:(G,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 x=L>0?i.get(y):this[ce];x===void 0&&!L&&(E||f)&&(E||dR(),kn(1));let X={type:"message",value:i.encoder.encode(S),[Ii]:w};return!D.hasWrittenTime&&this[Zt]>G&&(G=X.newTxnTime=this[Zt]+.001),i.put(y,x??null,G),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 Zc(i,S.user,u)),D}else return new Jd(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?.(G=>typeof G=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ci.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[mB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ci.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ci.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return 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(){wu(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,G]=D;D.length>3&&(G=D.slice(2)),v===s&&(N=i.remove(G))}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(x=>setImmediate(x));let[w,v,G]=D;if(D.length>3&&(G=D.slice(2)),v!==s)continue;let L=Fn(y,i);L.id=G,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],G=u.get(v);if(G){let L=Fn(G,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[hB]=!0,d&&q.setTTLExpiration(d/1e3),b&&mH(),q;function et(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,G=N?.[y],L=S?.[y];if(G===L&&!v)continue;D=!0;let x=(0,tu.getIndexedValues)(L);if(x){EB&&w.prefetch(x.map(X=>({key:X,value:Z})),SB);for(let X=0,J=x.length;X<J;X++)w.remove(x[X],Z)}if(x=(0,tu.getIndexedValues)(G),x){EB&&w.prefetch(x.map(X=>({key:X,value:Z})),SB);for(let X=0,J=x.length;X<J;X++)w.put(x[X],Z)}}return D}a(et,"updateIndices");function _u(Z,S,N,D,y,w){let v=a(()=>{let G=N.transaction;if(G?.isDone)throw new Error("Invalid read transaction");let L;G&&!G.hasRunLoadRecord&&(L=!0,G.hasRunLoadRecord=!0);let x;try{x=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(G)+" 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(x?(S&&x?.version>(S.lastModified||0)&&(S.lastModified=x.version),J=x.version,X=x.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&so(Y,"cache-hit",n),Y&&!y&&(D&&(D[mB]=!0),R))return Ko(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(x?.value?.[ce])throw new Error("Can not assign a record with a record property");w(x)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(_u,"loadRecord");function Pi(){P=new Set,(0,Ui.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Pi,"setupCommitListeners");async function Ko(Z,S=null,N,D){if(N<0){let L;return P||Pi(),await new Promise(x=>{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 x(Ko(Z,L.value,L.version,D));x(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),x(Ko(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},G=D?.responseHeaders;G&&(v.responseHeaders=G);try{let L=performance.now(),x=await q.Source.get(Z,v),X=performance.now()-L;_s(X,"cache-resolution",n),G&&G.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,tu.getNextMonotonicTime)());let j=et(Z,S,x)&&N||y>0;return x?(t&&(x[t]=Z),typeof x.toJSON=="function"&&(x=x.toJSON()),i.put(Z,x,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],zd(y,null,x?{type:"put",value:i.encoder.encode(x)}:{type:"delete"})),{version:J,value:x}}catch(L){throw i.put(Z,S,N,w),L}}a(Ko,"getFromSource");function kn(Z){p||(p=i.get([fB,zT.threadId])||0),p+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([fB,zT.threadId],p)},50))}a(kn,"recordDeletion");function dR(){T||(T=setTimeout(()=>{if(T=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),kn(-1)}}},q.getRecordCount()*100+Gee).unref())}a(dR,"enqueueDeletionCleanup");function ER(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),kn(-1)})}a(ER,"addDeleteRemoval");function mH(){(0,Ui.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Di.error("Error in evicting old records",Z)}},Fee).unref()}a(mH,"runRecordExpirationEviction")}function QT(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 SB(){}function xee(e){gB=e}function Zd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!kee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,jd.autoCast)(e)}function pB(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,Go,tu,TB,zT,eu,nu,Ci,ru,su,Di,RB,Ui,jd,gB,Hee,qee,Fee,EB,fB,Zt,hB,MEe,mB,jc,Gee,kee,md=Se(()=>{zr=C(g()),Go=require("lmdb"),tu=C(vt()),TB=require("lodash"),zT=require("worker_threads");Zr();oB();eu=C(ke()),nu=C(W());dB();Ci=C(Q()),ru=C(xs()),su=C(Fr());de();Lu();Di=C(F());Uu();Yn();RB=require("ordered-binary"),Ui=C(Ve());Xc();jd=C(k());ai();Hee=1e8,qee=1e7,Fee=6e4;nu.initSync();EB=nu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),fB=Symbol.for("deletions"),Zt=Symbol.for("version"),hB=Symbol.for("incremental-update"),MEe=Symbol("source-resource"),mB=Symbol("load-from-source"),jc={isNotification:!0,allowInvalidated:!0},Gee=(0,jd.convertToMS)(nu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(eE,"makeTable");a(QT,"attributesAsObject");a(SB,"noop");a(xee,"setServerUtilities");kee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Zd,"coerceType");a(pB,"isDescendantId")});var Ne={};tt(Ne,{database:()=>Fa,databases:()=>Be,dropDatabase:()=>Zh,dropTableMeta:()=>Qee,getDatabases:()=>xr,getTables:()=>Vee,onUpdatedTable:()=>TT,readMetaDb:()=>iu,resetDatabases:()=>$ee,table:()=>nt,tables:()=>sr});function Vee(){return nE||xr(),sr||{}}function xr(){if(nE)return Be;nE=!0,$o=new Map;let e=(0,yt.getHdbBasePath)()&&(0,ve.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,ve.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,ve.basename)(r.name,".mdb");r.isFile()&&(0,ve.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&iu((0,ve.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,Vo.getBaseSchemaPath)())){for(let r of(0,hr.readdirSync)((0,Vo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,ve.join)((0,Vo.getBaseSchemaPath)(),r.name),n=(0,ve.join)((0,Vo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,ve.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ve.join)(n,i.name);iu((0,ve.join)(s,i.name),(0,ve.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,ve.extname)(o.name).toLowerCase()===".mdb"&&iu((0,ve.join)(n,o.name),(0,ve.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,ve.join)(c.path,(0,ve.basename)(o+".mdb"));(0,hr.existsSync)(u)&&iu(u,o,r,null,!0)}}for(let r in Be){let s=$o.get(r);if(s){let n=Be[r];r.includes("delete")&&Pe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Pe.trace(`delete table class ${i}`),delete n[i])}else if(delete Be[r],r==="data"){for(let n in sr)delete sr[n];delete sr[iE]}}return $o=null,Be}}function $ee(){nE=!1;for(let[,e]of Gn)e.needsDeletion=!0;xr();for(let[e,t]of Gn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Gn.delete(e));return Be}function iu(e,t,r=ZT,s,n){let i=new JT.default(e,!1);e.includes("delete")&&Pe.trace(`reading meta data from ${e}`);try{let o=Gn.get(e);o?o.needsDeletion=!1:(o=(0,tE.open)(i),Gn.set(e,o));let c=new Li.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(xo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,tE.open)(i),l.isLegacy=!0):l=$T(o));let _=bB(r),d=_[iE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&Pe.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let R=E.get(p);R||E.set(p,R={attributes:[]}),(T==null||h.is_hash_attribute)&&(R.primary=h),T!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let q of p)if(q.is_hash_attribute||q.isPrimaryKey){T=q;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let R=_[f],O={},V=[],$,U,b=typeof T.audit=="boolean"?T.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=T.trackDeletes,z=T.expiration;if(R)O=R.indices,V=R.attributes,R.schemaVersion++;else{$=T.tableId,$?$>=(u.get(ko)||0)&&u.putSync(ko,$+1):(T.tableId=$=u.get(ko),$||($=1),u.putSync(ko,$+1),u.putSync(T.key,T));let q=new Li.default(!T.is_hash_attribute,T.is_hash_attribute);Pe.trace(`openDB ${T.key} from ${r}`),U=o.openDB(T.key,q),U.rootStore=o,U.tableId=$}for(let q of p){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let et=new Li.default(!q.is_hash_attribute,q.is_hash_attribute);Pe.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,et)}let Oe=V.find(et=>et.name===q.name);Oe?V.splice(V.indexOf(Oe),1,q):V.push(q)}}catch(Oe){Pe.error("Error trying to update attribute",q,V,O,Oe)}}if(!R){Pe.trace(`creating table class ${f}`,Object.keys(_)),R=yB(_,f,eE({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of jT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function bB(e){let t=Be[e];if(t||(e==="data"?t=Be[e]=sr:e==="system"?Object.defineProperty(Be,"system",{value:t=Object.create(null),configurable:!0}):t=Be[e]=Object.create(null)),$o&&!$o.has(e)){let r=new Set;t[iE]=r,$o.set(e,r)}return t}function yB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=ZT),xr();let r=bB(e),s=(0,ve.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,ve.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,ve.join)(s,(n?t:e)+".mdb"),o=Gn.get(i);if(!o){let c=new JT.default(i,!1);o=(0,tE.open)(c),Gn.set(i,o)}return o}async function Zh(e){if(!Be[e])throw new Error("Schema does not exist");let t=Be[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gn.delete(n.path),n.status==="open"&&(await n.close(),await AB.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[iE]}delete Be[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=ZT);let u=Fa({database:t,table:e}),l=Be[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 p=new Li.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let T,R;if(_){if(Pe.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=$T(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]),Pe.trace(`${e} table loading, opening primary store`);let b=new Li.default(!1,!0),P=e+"/";Pe.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Pe.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,p),z.tableId=h.get(ko),z.tableId||(z.tableId=1),h.putSync(ko,z.tableId+1),E.tableId=z.tableId,_=yB(l,e,eE({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,T=!0,$(),h.put(P,E)}Pe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Pe.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,p)),_.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){$(),T=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Pe.trace(`${e} table loading, comparing atributes`);let V=[];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});T=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new Li.default(!0,!1);Pe.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ou.workerData?.restartNumber)&&(T=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ou.workerData?.restartNumber)&&(T=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),V.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(T=!0,$(),h.put(b,U))}}finally{R&&R()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Pe.trace(`${e} table loading, running index`),V.length>0||O.length>0?_.indexingOperation=Wee(_,V,O):T&&rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let U of jT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Pe.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function Wee(e,t,r){try{let s=e.schemaVersion;await rE.signalSchemaChange(new sE.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,p=(0,OB.getIndexedValues)(_[h]);if(p)for(let T=0,R=p.length;T<R;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,Pe.error(E)}),ou.workerData&&ou.workerData.restartNumber!==NB.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>Yee?await n:u>Kee&&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 rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Pe.error("Error in indexing",s)}}function Qee({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 TT(e){jT.push(e)}var yt,xo,tE,ve,hr,Vo,Li,JT,jt,AB,XT,OB,rE,sE,ou,Pe,NB,ZT,iE,sr,Be,ko,jT,nE,Gn,$o,Yee,Kee,de=Se(()=>{yt=C(W()),xo=C(ke()),tE=require("lmdb"),ve=require("path"),hr=require("fs"),Vo=C(Ce());md();Li=C(Hu()),JT=C(Fu()),jt=C(g()),AB=C(require("fs-extra")),XT=require("../index"),OB=C(vt()),rE=C(xs()),sE=C(Fr()),ou=require("worker_threads"),Pe=C(F()),NB=C(Ve());Xc();ZT="data",iE=Symbol("defined-tables");(0,yt.initSync)();sr=Object.create(null),Be=Object.create(null);(0,XT._assignPackageExport)("databases",Be);(0,XT._assignPackageExport)("tables",sr);ko=Symbol.for("next-table-id"),jT=[],Gn=new Map;a(Vee,"getTables");a(xr,"getDatabases");a($ee,"resetDatabases");a(iu,"readMetaDb");a(bB,"ensureDB");a(yB,"setTable");a(Fa,"database");a(Zh,"dropDatabase");a(nt,"table");Yee=1e3,Kee=10;a(Wee,"runIndexing");a(Qee,"dropTableMeta");a(TT,"onUpdatedTable")});var k=m((kEe,GB)=>{"use strict";var xn=require("path"),DB=require("fs-extra"),er=F(),IB=require("fs-extra"),oE=require("os"),zee=require("net"),Jee=require("recursive-iterator"),xe=g(),Xee=KR(),wB=require("papaparse"),aE=require("moment"),{inspect:Zee}=require("util"),CB=require("is-number"),xEe=require("lodash"),jee=require("minimist"),ete=require("https"),tte=require("http"),{hdb_errors:cE}=Q(),rte=/^((\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)))$/,LB=require("util").promisify(setTimeout),ste=100,nte=5,ite="",ote=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};GB.exports={isEmpty:mr,isEmptyOrZeroLength:bs,arrayHasEmptyValues:ute,arrayHasEmptyOrZeroLengthValues:lte,buildFolderPath:_te,isBoolean:MB,errorizeMessage:ate,stripFileExtension:Ete,autoCast:fte,autoCastJSON:PB,autoCastJSONDeep:tR,removeDir:hte,compareVersions:mte,isCompatibleDataVersion:Ste,escapeRawValue:pte,unescapeValue:Tte,stringifyProps:Rte,timeoutPromise:Ate,isClusterOperation:Nte,getClusterUser:yte,checkGlobalSchemaTable:bte,getHomeDir:BB,getPropsFilePath:gte,promisifyPapaParse:Ite,removeBOM:HB,createEventPromise:wte,checkProcessRunning:Cte,checkSchemaTableExist:Ute,checkSchemaExists:qB,checkTableExists:FB,getStartOfTomorrowInSeconds:Dte,getLimitKey:Lte,isObject:dte,isNotEmptyAndHasValue:cte,autoCasterIsNumberCheck:vB,backtickASTSchemaItems:Mte,isPortTaken:Ote,createForkArgs:Pte,autoCastBoolean:vte,async_set_timeout:LB,getTableHashAttribute:Bte,doesSchemaExist:Hte,doesTableExist:qte,stringifyObj:Fte,ms_to_time:Gte,changeExtension:xte,getEnvCliRootPath:rR,noBootFile:kte,httpRequest:Vte,transformReq:$te,convertToMS:Yte,PACKAGE_ROOT:xe.PACKAGE_ROOT};function ate(e){return e instanceof Error?e:new Error(e)}a(ate,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function cte(e){return!mr(e)&&(e||e===0||e===""||MB(e))}a(cte,"isNotEmptyAndHasValue");function bs(e){return mr(e)||e.length===0||e.size===0}a(bs,"isEmptyOrZeroLength");function ute(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(ute,"arrayHasEmptyValues");function lte(e){if(bs(e))return!0;for(let t=0;t<e.length;t++)if(bs(e[t]))return!0;return!1}a(lte,"arrayHasEmptyOrZeroLengthValues");function _te(...e){try{return e.join(xn.sep)}catch{console.error(e)}}a(_te,"buildFolderPath");function MB(e){return mr(e)?!1:e===!0||e===!1}a(MB,"isBoolean");function dte(e){return mr(e)?!1:typeof e=="object"}a(dte,"isObject");function Ete(e){return bs(e)?ite:e.slice(0,-ote)}a(Ete,"stripFileExtension");function fte(e){return mr(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:vB(e)===!0?Number(e):rte.test(e)?new Date(e):e}a(fte,"autoCast");function PB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(PB,"autoCastJSON");function tR(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=tR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=tR(r);s!==r&&(e[t]=s)}return e}else return PB(e)}a(tR,"autoCastJSONDeep");function vB(e){if(e.startsWith("0.")&&CB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&CB(e))}a(vB,"autoCasterIsNumberCheck");async function hte(e){if(bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await IB.emptyDir(e),await IB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(hte,"removeDir");function mte(e,t){if(bs(e)){er.info("Invalid current version sent as parameter.");return}if(bs(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(mte,"compareVersions");function Ste(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Ste,"isCompatibleDataVersion");function pte(e){if(mr(e))return e;let t=String(e);return t==="."?xe.UNICODE_PERIOD:t===".."?xe.UNICODE_PERIOD+xe.UNICODE_PERIOD:t.replace(xe.FORWARD_SLASH_REGEX,xe.UNICODE_FORWARD_SLASH)}a(pte,"escapeRawValue");function Tte(e){if(mr(e))return e;let t=String(e);return t===xe.UNICODE_PERIOD?".":t===xe.UNICODE_PERIOD+xe.UNICODE_PERIOD?"..":String(e).replace(xe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Tte,"unescapeValue");function Rte(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+oE.EOL}!bs(s)&&s[0]===";"?r+=" "+s+n+oE.EOL:bs(s)||(r+=s+"="+n+oE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Rte,"stringifyProps");function BB(){let e;try{e=oE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(BB,"getHomeDir");function gte(){let e=xn.join(BB(),xe.HDB_HOME_DIR_NAME,xe.BOOT_PROPS_FILE_NAME);return DB.existsSync(e)||(e=xn.join(__dirname,"../","hdb_boot_properties.file")),e}a(gte,"getPropsFilePath");function Ate(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Ate,"timeoutPromise");async function Ote(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=zee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Ote,"isPortTaken");function Nte(e){try{return xe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Nte,"isClusterOperation");function bte(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bte,"checkGlobalSchemaTable");function yte(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||bs(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(yte,"getClusterUser");function Ite(){wB.parsePromise=function(e,t,r){return new Promise(function(s,n){wB.parse(e,{header:!0,transformHeader:HB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Ite,"promisifyPapaParse");function HB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(HB,"removeBOM");function wte(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Zee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(wte,"createEventPromise");async function Cte(e){let t=!0,r=0;do await LB(ste*r++),(await Xee.findPs(e)).length>0&&(t=!1);while(t&&r<nte);if(t)throw new Error(`process ${e} was not started`)}a(Cte,"checkProcessRunning");function Ute(e,t){let r=qB(e);if(r)return r;let s=FB(e,t);if(s)return s}a(Ute,"checkSchemaTableExist");function qB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qB,"checkSchemaExists");function FB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(FB,"checkTableExists");function Dte(){let e=aE().utc().add(1,xe.MOMENT_DAYS_TAG).startOf(xe.MOMENT_DAYS_TAG).unix(),t=aE().utc().unix();return e-t}a(Dte,"getStartOfTomorrowInSeconds");function Lte(){return aE().utc().format("DD-MM-YYYY")}a(Lte,"getLimitKey");function Mte(e){try{let t=new Jee(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(Mte,"backtickASTSchemaItems");function Pte(e){return[e]}a(Pte,"createForkArgs");function vte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(vte,"autoCastBoolean");function Bte(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Bte,"getTableHashAttribute");function Hte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Hte,"doesSchemaExist");function qte(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(qte,"doesTableExist");function Fte(e){try{return JSON.stringify(e)}catch{return e}}a(Fte,"stringifyObj");function Gte(e){let t=aE.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(Gte,"ms_to_time");function xte(e,t){let r=xn.basename(e,xn.extname(e));return xn.join(xn.dirname(e),r+t)}a(xte,"changeExtension");function rR(){if(process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=jee(process.argv);if(e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(rR,"getEnvCliRootPath");var eR;function kte(){if(eR)return eR;let e=rR();rR()&&DB.pathExistsSync(xn.join(e,xe.HDB_CONFIG_FILE))&&(eR=!0)}a(kte,"noBootFile");function Vte(e,t){let r;return e.protocol==="http:"?r=tte:r=ete,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(Vte,"httpRequest");function $te(e){if(!e.schema&&!e.database){e.schema=xe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a($te,"transformReq");function Yte(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(Yte,"convertToMS")});var W=m(($Ee,VB)=>{"use strict";var sR=require("fs-extra"),Jr=require("path"),xB=require("os"),Kte=require("properties-reader"),au=F(),Mi=k(),te=g(),uE=Nr(),Wte="Error initializing environment manager",lE="BOOT_PROPS_FILE_PATH",kB=!1,Qte={[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},on={};VB.exports={BOOT_PROPS_FILE_PATH:lE,getHdbBasePath:zte,setHdbBasePath:Jte,get:Xte,initSync:jte,setProperty:Ee,initTestEnvironment:ere};function zte(){return on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(zte,"getHdbBasePath");function Jte(e){on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Jte,"setHdbBasePath");function Xte(e){let t=uE.getConfigValue(e);return t===void 0?on[e]:t}a(Xte,"get");function Ee(e,t){Qte[e]&&(on[e]=t),uE.updateConfigObject(e,t)}a(Ee,"setProperty");function Zte(){let e;try{e=Mi.getPropsFilePath(),sR.accessSync(e,sR.constants.F_OK|sR.constants.R_OK),kB=!0;let t=Kte(e);return on[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),on[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),on[lE]=e,!0}catch{return au.trace(`Environment manager found no properties file at ${e}`),!1}}a(Zte,"doesPropFileExist");function jte(e=!1){try{(kB||Zte()||Mi.noBootFile())&&(uE.initConfig(e),on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=uE.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){au.error(Wte),au.error(t),console.error(t),process.exit(1)}}a(jte,"initSync");function ere(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=Jr.join(__dirname,"../../","unitTests");on[lE]=Jr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Jr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,xB.userInfo()?xB.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Jr.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,Jr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,Jr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Mi.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Mi.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Mi.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Mi.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,Jr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Mi.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 ${lE}. Please check your boot props and settings files`;au.fatal(r),au.error(t)}}a(ere,"initTestEnvironment")});var QB=m((KEe,WB)=>{"use strict";var KB=require("joi"),{string:cu,boolean:$B,array:tre}=KB.types(),YB=g(),rre=Ue();WB.exports=sre;function sre(e){let t=KB.object({operation:cu.valid(YB.OPERATIONS_ENUM.ADD_NODE,YB.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:cu.required(),subscriptions:tre.items({schema:cu.required(),table:cu.optional(),hash_attribute:cu.optional(),subscribe:$B.required(),publish:$B.required()}).min(1).required()});return rre.validateBySchema(e,t)}a(sre,"updateRemoteSourceValidator")});var uu=m((QEe,zB)=>{"use strict";var nR=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};zB.exports=nR});var eH=m((JEe,jB)=>{"use strict";var nre=QB(),an=F(),iR=be(),ire=g(),oR=wr(),JB=He(),XB=Za(),ore=yl(),{Node:are,NodeSubscription:ZB}=wn(),aR=uu(),cR=k(),cre=W(),{cloneDeep:ure}=require("lodash"),{broadcast:lre}=Ve();jB.exports=_re;async function _re(e){try{let t=nre(e);if(t)return an.error(`Validation error in updateRemoteSource: ${t.message}`),new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=ure(await oR.getNodeRecord(s)),c=!cR.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&an.trace(`Existing record found for ${s}, updating records subscriptions`);for(let l=0,_=r.length;l<_;l++){let d=r[l],E=d.schema,f=d.table;if(!cR.doesSchemaExist(E)){an.trace(`updateRemoteSource creating schema: ${E}`);try{await XB.createSchema({operation:"create_schema",schema:E})}catch(h){an.error(h)}}if(f&&!cR.doesTableExist(E,f)){let h=new ore(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),an.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await XB.createTable(h)}catch(p){an.error(p)}an.trace(`Creating local stream for ${E}.${f}`),await JB.createLocalTableStream(E,f)}if(await JB.updateWorkStream(d,s),c){let h=!1;for(let p=0,T=o.subscriptions.length;p<T;p++){let R=o.subscriptions[p];if(R.schema===E&&R.table===f){R.publish=d.publish,R.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new ZB(E,f,d.publish,d.subscribe))}else i.push(new ZB(E,f,d.publish,d.subscribe))}c||(o=new are(s,i,void 0),an.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await oR.upsertNodeRecord(u),lre({type:"nats_update"}),new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${cre.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await oR.getSystemInfo())}catch(t){an.error(t);let r=t.message?t.message:t;return new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(_re,"updateRemoteSource")});var nH=m((ZEe,sH)=>{"use strict";var rH=require("joi"),{string:tH}=rH.types(),dre=g(),Ere=Ue();sH.exports=fre;function fre(e){let t=rH.object({operation:tH.valid(dre.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:tH.required()});return Ere.validateBySchema(e,t)}a(fre,"removeRemoteSourceValidator")});var oH=m((efe,iH)=>{"use strict";var hre=nH(),_E=F(),dE=be(),uR=g(),mre=wr(),Sre=k(),pre=He(),Tre=W(),EE=uu(),{NodeSubscription:Rre}=wn(),gre=eo(),Are=mn(),{broadcast:Ore}=Ve(),Nre=Tre.get(uR.CONFIG_PARAMS.CLUSTERING_NODENAME);iH.exports=bre;async function bre(e){try{let t=hre(e);if(t)return _E.error(`Validation error in removeRemoteSource: ${t.message}`),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await mre.getNodeRecord(r);if(Sre.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return _E.error(i),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];_E.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Rre(c.schema,c.table,!1,!1);await pre.updateWorkStream(u,r)}let n=new gre(uR.SYSTEM_SCHEMA_NAME,uR.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Are.deleteRecord(n),Ore({type:"nats_update"}),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Nre} successfully removed node '${r}'.`)}catch(t){_E.error(t);let r=t.message?t.message:t;return new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(bre,"removeRemoteSource")});var _H=m((rfe,lH)=>{"use strict";var fE=F(),hE=g(),aH=be(),cH=W(),yre=k(),uH=uu(),Ire=wr(),wre=e_(),Cre=ir();lH.exports=Ure;async function Ure(e){try{fE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=yre.ms_to_time(t),s=new Dre(cH.get(hE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),cH.get(hE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await Ire.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new wre(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Cre.update(i)}catch(n){fE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return fE.trace("getRemoteSourceConfig response:",s),new uH(aH.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){fE.error(t);let r=t.message?t.message:t;return new uH(aH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Ure,"getRemoteSourceConfig");function Dre(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(Dre,"ConfigResponseObject")});var hH=m((nfe,fH)=>{"use strict";var dH=W();dH.initSync();var EH=He(),lu=F(),Yo=g(),lR=be(),Lre=eH(),Mre=oH(),Pre=_H(),vre=uu(),{encode:Bre,decode:Hre}=require("msgpackr"),qre=Bs(),Fre=En(),Gre=require("util"),xre=g(),{isMainThread:kre,parentPort:Vre}=require("worker_threads");Ve();var $re=Gre.promisify(qre.setSchemaDataToGlobal),_R=dH.get(Yo.CONFIG_PARAMS.CLUSTERING_NODENAME);fH.exports=Yre;async function Yre(){try{lu.notify("Starting reply service."),await $re();let e=await EH.getConnection(),t=`${_R}.__request__`,r=e.subscribe(t,{queue:_R});await Kre(r)}catch(e){lu.error(e)}}a(Yre,"initialize");async function Kre(e){for await(let t of e){let r=Hre(t.data),s;switch(r.operation){case Yo.OPERATIONS_ENUM.ADD_NODE:case Yo.OPERATIONS_ENUM.UPDATE_NODE:s=await Lre(r);break;case Yo.OPERATIONS_ENUM.REMOVE_NODE:s=await Mre(r);break;case Yo.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Pre(r);break;case Yo.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Wre();break;default:let n=`node '${_R}' reply service received unrecognized request operation`;lu.error(n),s=new vre(lR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}lu.trace(s),t.respond(Bre(s))}}a(Kre,"handleRequest");async function Wre(){try{return{status:lR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Fre.describeAll()}}catch(e){return lu.error(e),{status:lR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Wre,"getRemoteDescribeAll");kre||Vre.on("message",async e=>{let{type:t}=e;t===xre.ITC_EVENT_TYPES.SHUTDOWN&&EH.closeConnection()})});var Qre=hH();(async()=>{try{await Qre()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|