harperdb 4.3.0-alpha.2 → 4.3.0-beta.2

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.
@@ -1,27 +1,27 @@
1
- "use strict";var Dx=Object.create;var za=Object.defineProperty;var Mx=Object.getOwnPropertyDescriptor;var Ux=Object.getOwnPropertyNames;var Px=Object.getPrototypeOf,vx=Object.prototype.hasOwnProperty;var a=(e,t)=>za(e,"name",{value:t,configurable:!0});var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)za(e,r,{get:t[r],enumerable:!0})},dA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ux(t))!vx.call(e,s)&&s!==r&&za(e,s,{get:()=>t[s],enumerable:!(n=Mx(t,s))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?Dx(Px(e)):{},dA(t||!e||!e.__esModule?za(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>dA(za({},"__esModule",{value:!0}),e);var hA=T((uie,EA)=>{var Bx=require("fast-glob"),{statSync:WE,existsSync:QE,readFileSync:Hx,writeFileSync:xx}=require("fs"),{spawnSync:Fx,spawn:qx,execFileSync:cie}=require("child_process"),{isMainThread:Gx}=require("worker_threads"),{join:Ys,relative:fA}=require("path"),{PACKAGE_ROOT:An}=M(),{tmpdir:kx,platform:Vx}=require("os");require("source-map-support").install();var $x=["resources","server","dataLayer","components"],Ja="ts-build",zE,Yx=__filename.endsWith("tsBuild.js");if(Yx){if(Gx){let r;try{WE(Ys(An,Ja)),r=!0}catch{}if(r)for(let n of Bx.sync($x.map(s=>s+"/**/*.ts"),{cwd:An})){let s=0,i=0;try{s=WE(Ys(An,n)).mtimeMs-5e3,i=WE(Ys(An,Ja,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),zE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),zE=!0;if(zE){let n=Ys(An,"node_modules/.bin/tsc");Vx()==="win32"&&(n+=".cmd");let s=Fx(n,{cwd:An});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ys(kx(),"harperdb-tsc.pid"),o;if(QE(i))try{process.kill(+Hx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=qx(n,["--watch"],{cwd:An,detached:!0,stdio:"ignore"});xx(i,c.pid.toString()),c.unref()}}}}let e=EA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(An)&&!n[0].includes("node_modules")){let i=fA(An,n[0]),o;i.startsWith(Ja)?o=Ys(An,fA(Ja,i)):o=Ys(An,Ja,i);let c=Ys(o,r),u=c+".js";if(QE(u))return u;if(c.includes(".")&&QE(c))return c}return t(r,n,s)}}});var M=T((die,CA)=>{"use strict";var Xr=require("path"),Kx=require("fs"),{relative:lie,join:_ie}=Xr,{existsSync:Wx}=Kx;function Qx(){let e=__dirname;for(;!Wx(Xr.join(e,"package.json"));){let t=Xr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Qx,"getHDBPackageRoot");var Ks=Qx(),mA="js",Ul=mA,zx="harperdb-config.yaml",Jx="defaultConfig.yaml",Xx="hdb",pA=`harperdb.${Ul}`,SA=`customFunctionsServer.${Ul}`,jx=`restartHdb.${Ul}`,XE="HarperDB",Ml="Custom Functions",Pl="Clustering Hub",vl="Clustering Leaf",Zx="Clustering Ingest Service",eF="Clustering Reply Service",tF="foreground.pid",rF="hdb.pid",nF="data",sF={HDB:XE,CLUSTERING_HUB:Pl,CLUSTERING_LEAF:vl,CLUSTERING_INGEST_SERVICE:Zx,CLUSTERING_REPLY_SERVICE:eF,CUSTOM_FUNCTIONS:Ml,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},iF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},oF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},aF={harperdb:XE,"clustering hub":Pl,"clustering leaf":vl,"custom functions":Ml,custom_functions:Ml,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},cF={CLUSTERING_HUB_PROC_DESCRIPTOR:Pl,CLUSTERING_LEAF_PROC_DESCRIPTOR:vl},JE={HDB:Xr.join(Ks,"server/harperdb"),CUSTOM_FUNCTIONS:Xr.join(Ks,"server/customFunctions"),CLUSTERING_HUB:Xr.join(Ks,"server/nats"),CLUSTERING_LEAF:Xr.join(Ks,"server/nats")},uF={HDB:Xr.join(JE.HDB,pA),CUSTOM_FUNCTIONS:Xr.join(JE.CUSTOM_FUNCTIONS,SA)},lF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Xr.join(Ks,"launchServiceScripts/launchUpdateNodes4-0-0.js")},_F={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},TA="support@harperdb.io",dF="customer-success@harperdb.io",gA=1,fF=4141,RA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",EF="https://www.harperdb.io/product",hF=`For support, please submit a request at ${RA} or contact ${TA}`,AA=`For license support, please contact ${dF}`,mF="None of the specified records were found.",pF="hash attribute not found",SF=`Your current license only supports ${gA} role. ${AA}`,TF="Your current license only supports 3 connections to a node.",gF="127.0.0.1",RF=1,AF=/^\.$/,OF=/^\.\.$/,bF="U+002E",NF=/\//g,yF="U+002F",IF=/U\+002F/g,wF=/^U\+002E$/,CF=/^U\+002EU\+002E$/,LF="d",DF=999999,MF="*",UF="--max-old-space-size=",PF="system",vF="__hdb_hash",BF=".harperdb",HF=".hdb",xF="keys",FF="hdb_boot_properties.file",qF=".updateConfig.json",GF="SIGTSTP",kF=24,VF=6e4,$F=448,YF="blob",KF="trash",WF="database",QF="schema",zF="transactions",JF=".count",XF="id",jF="PROCESS_NAME",OA={SETTINGS_PATH_KEY:"settings_path"},bA=require("lodash"),ZF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},eq={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},tq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},rq={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},nq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},yr="hdb_internal:",sq={CREATE_SCHEMA:yr+"create_schema",CREATE_TABLE:yr+"create_table",CREATE_ATTRIBUTE:yr+"create_attribute",ADD_USER:yr+"add_user",ALTER_USER:yr+"alter_user",DROP_USER:yr+"drop_user",HDB_NODES:yr+"hdb_nodes",HDB_USERS:yr+"hdb_users",HDB_WORKERS:yr+"hdb_workers",CATCHUP:yr+"catchup",SCHEMA_CATCHUP:yr+"schema_catchup",WORKER_ROOM:yr+"cluster_workers"},iq={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},oq="060493.ks",aq=".license",cq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},uq={CSV:".csv",JSON:".json"},lq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},_q={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xa={};Xa[X.INSERT]=X.INSERT;Xa[X.UPDATE]=X.UPDATE;Xa[X.UPSERT]=X.UPSERT;Xa[X.DELETE]=X.DELETE;var ve=Object.create(null);ve[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;ve[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;ve[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;ve[X.READ_LOG]=X.READ_LOG;ve[X.ADD_NODE]=X.ADD_NODE;ve[X.LIST_USERS]=X.LIST_USERS;ve[X.LIST_ROLES]=X.LIST_ROLES;ve[X.USER_INFO]=X.USER_INFO;ve[X.SQL]=X.SQL;ve[X.GET_JOB]=X.GET_JOB;ve[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;ve[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;ve[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;ve[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;ve[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;ve[X.REMOVE_NODE]=X.REMOVE_NODE;ve[X.RESTART]=X.RESTART;ve[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;ve[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;ve[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;ve[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;ve[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;ve[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;ve[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;ve[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var dq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},fq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},NA={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},Eq=bA.invert(NA),hq={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},C={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",MAXHEAPMEMORY:"maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},yA={settings_path:OA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];yA[t.toLowerCase()]=t}var mq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},pq={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Sq={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},Tq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},gq={VERSION_DEFAULT:"2.2.0"},Rq={DEVELOPMENT:8192,DEFAULT:512},Aq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Oq={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},bq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},IA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Nq=Symbol("metadata"),yq="__clustering__",Iq=Object.values(IA),wq=15984864e5,wA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Cq=bA.invert(wA),Lq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Dq=111,Mq=`\r
2
- `,Uq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Pq=["*","%"],vq="unauthorized_access",Bq="func_val",Hq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},xq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Fq={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"},qq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Gq={HTTP:"http"},kq={STOPPED:"stopped",ONLINE:"online"},Vq="3.x.x",$q={SUCCESS:"success",FAILURE:"failure"},Yq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};CA.exports={LOCAL_HARPERDB_OPERATIONS:ve,HDB_SUPPORT_ADDRESS:TA,HDB_SUPPORT_URL:RA,HDB_PRICING_URL:EF,SUPPORT_HELP_MSG:hF,LICENSE_HELP_MSG:AA,HDB_PROC_NAME:pA,HDB_PROC_DESCRIPTOR:XE,CLUSTERING_LEAF_PROC_DESCRIPTOR:vl,CLUSTERING_HUB_PROC_DESCRIPTOR:Pl,SYSTEM_SCHEMA_NAME:PF,HASH_FOLDER_NAME:vF,HDB_HOME_DIR_NAME:BF,UPDATE_FILE_NAME:qF,LICENSE_KEY_DIR_NAME:xF,BOOT_PROPS_FILE_NAME:FF,JOB_TYPE_ENUM:pq,JOB_STATUS_ENUM:cq,SYSTEM_TABLE_NAMES:rq,SYSTEM_TABLE_HASH_ATTRIBUTES:nq,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:uq,S3_BUCKET_AUTH_KEYS:lq,VALID_SQL_OPS_ENUM:_q,GEO_CONVERSION_ENUM:fq,HDB_SETTINGS_NAMES:NA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Eq,SERVICE_ACTIONS_ENUM:dq,CLUSTER_MESSAGE_TYPE_ENUM:Sq,CLUSTER_CONNECTION_DIRECTION_ENUM:Tq,CLUSTER_EVENTS_DEFS_ENUM:Aq,PERIOD_REGEX:AF,DOUBLE_PERIOD_REGEX:OF,UNICODE_PERIOD:bF,FORWARD_SLASH_REGEX:NF,UNICODE_FORWARD_SLASH:yF,ESCAPED_FORWARD_SLASH_REGEX:IF,ESCAPED_PERIOD_REGEX:wF,ESCAPED_DOUBLE_PERIOD_REGEX:CF,REG_KEY_FILE_NAME:oq,RESTART_TIMEOUT_MS:VF,HDB_FILE_PERMISSIONS:$F,DATABASES_DIR_NAME:WF,LEGACY_DATABASES_DIR_NAME:QF,TRANSACTIONS_DIR_NAME:zF,LIMIT_COUNT_NAME:JF,ID_ATTRIBUTE_STRING:XF,INSERT_MODULE_ENUM:eq,UPGRADE_JSON_FIELD_NAMES_ENUM:tq,RESTART_CODE:GF,RESTART_CODE_NUM:kF,CLUSTER_OPERATIONS:Xa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:iq,HDB_INTERNAL_SC_CHANNEL_PREFIX:yr,INTERNAL_SC_CHANNELS:sq,CLUSTERING_MESSAGE_TYPES:Lq,HDB_FILE_SUFFIX:HF,BLOB_FOLDER_NAME:YF,HDB_TRASH_DIR:KF,ORIGINATOR_SET_VALUE:Dq,LICENSE_VALUES:gq,RAM_ALLOCATION_ENUM:Rq,TIME_STAMP_NAMES_ENUM:IA,TIME_STAMP_NAMES:Iq,PERMS_UPDATE_RELEASE_TIMESTAMP:wq,SEARCH_NOT_FOUND_MESSAGE:mF,SEARCH_ATTRIBUTE_NOT_FOUND:pF,LICENSE_ROLE_DENIED_RESPONSE:SF,LICENSE_MAX_CONNS_REACHED:TF,BASIC_LICENSE_MAX_NON_CU_ROLES:gA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:fF,VALUE_SEARCH_COMPARATORS:wA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Cq,LICENSE_FILE_NAME:aq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Oq,NEW_LINE:Mq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:RF,MOMENT_DAYS_TAG:LF,API_TURNOVER_SEC:DF,LOOPBACK:gF,CODE_EXTENSION:Ul,WILDCARD_SEARCH_VALUE:MF,NODE_ERROR_CODES:bq,JAVASCRIPT_EXTENSION:mA,PERMS_CRUD_ENUM:Uq,UNAUTHORIZED_PERMISSION_NAME:vq,SEARCH_WILDCARDS:Pq,FUNC_VAL:Bq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Hq,JWT_ENUM:xq,CLUSTERING_FLAG:yq,ITC_EVENT_TYPES:Fq,CUSTOM_FUNCTION_PROC_NAME:SA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ml,SERVICES:qq,THREAD_TYPES:Gq,MEM_SETTING_KEY:UF,HDB_RESTART_SCRIPT:jx,PROCESS_DESCRIPTORS:sF,SERVICE_SERVERS:uF,SERVICE_SERVERS_CWD:JE,PROCESS_DESCRIPTORS_VALIDATE:aF,LAUNCH_SERVICE_SCRIPTS:lF,LOG_LEVELS:oF,PROCESS_NAME_ENV_PROP:jF,LOG_NAMES:iF,PM2_PROCESS_STATUSES:kq,CONFIG_PARAM_MAP:yA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:zx,HDB_DEFAULT_CONFIG_FILE:Jx,ROLE_TYPES_ENUM:_F,BOOT_PROP_PARAMS:OA,INSTALL_PROMPTS:ZF,HDB_ROOT_DIR_NAME:Xx,CLUSTERING_PROCESSES:cF,FOREGROUND_PID_FILE:tF,PACKAGE_ROOT:Ks,PRE_4_0_0_VERSION:Vq,DATABASES_PARAM_CONFIG:mq,METADATA_PROPERTY:Nq,AUTH_AUDIT_STATUS:$q,AUTH_AUDIT_TYPES:Yq,HDB_PID_FILE:rF,DEFAULT_DATABASE_NAME:nF,LEGACY_CONFIG_PARAMS:hq};hA()});var jE=T((Eie,MA)=>{"use strict";var LA=require("minimist");MA.exports=Kq;function Kq(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=DA(process.env),n=DA(LA(process.argv))):(r=process.env,n=LA(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(Kq,"assignCMDENVVariables");function DA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(DA,"objKeysToLowerCase")});var V=T((mie,ih)=>{"use strict";var yi=require("fs-extra"),{workerData:Wq,threadId:Qq}=require("worker_threads"),hs=require("path"),vA=require("yaml"),BA=require("properties-reader"),bt=M(),UA=jE(),zq=require("os"),{PACKAGE_ROOT:eh}=M(),{_assignPackageExport:Jq}=require("../../index"),Za={};for(let e in console)Za[e]||(Za[e]=console[e]);var tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},HA={STDOUT:"stdOut",STDERR:"stdErr"},Xq=hs.join(eh,"logs"),jq=hs.join(eh,"config/yaml/",bt.HDB_DEFAULT_CONFIG_FILE),Zq=1e4,Es,kn,er,Bl,Hl,ec,Po,ja;ja===void 0&&xA();ih.exports={notify:GA,fatal:kA,error:tc,warn:sh,info:xl,debug:nh,trace:rh,setLogLevel:oG,log_level:er,loggerWithTag:eG,suppressLogging:tG,initLogSettings:xA,setupConsoleLogging:FA,logCustomLevel:sG,closeLogFile:th,getLogFilePath:()=>ec,OUTPUTS:HA,AuthAuditLog:uG};Jq("logger",ih.exports);function xA(e=!1){try{if(ja===void 0||e){th();let t=iG(),r=UA(["ROOTPATH"]);try{ja=BA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!yi.pathExistsSync(hs.join(r.ROOTPATH,bt.HDB_CONFIG_FILE)))throw n}({level:er,config_log_path:Hl,to_file:Es,to_stream:kn}=aG(r.ROOTPATH?hs.join(r.ROOTPATH,bt.HDB_CONFIG_FILE):ja.get("settings_path"))),Bl=bt.LOG_NAMES.HDB,ec=hs.join(Hl,Bl)}}catch(t){if(ja=void 0,t.code===bt.NODE_ERROR_CODES.ENOENT){let r=UA(Object.keys(bt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=bt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===bt.CONFIG_PARAMS.LOGGING_LEVEL){er=u;continue}if(c===bt.CONFIG_PARAMS.LOGGING_STDSTREAMS){kn=u;continue}c===bt.CONFIG_PARAMS.LOGGING_FILE&&(Es=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=cG();Es=Es===void 0?s:Es,Es=PA(Es),kn=kn===void 0?i:kn,kn=PA(kn),er=er===void 0?n:er,Hl=Xq,Bl=bt.LOG_NAMES.INSTALL,ec=hs.join(Hl,Bl);return}throw tc("Error initializing log settings"),tc(t),t}process.env.DEV_MODE&&(kn=!0),FA()}a(xA,"initLogSettings");var ZE=!0;function FA(){Uo("error",tc),Uo("warn",sh),Uo("log",xl),Uo("info",xl),Uo("debug",nh),Uo("trace",rh)}a(FA,"setupConsoleLogging");function Uo(e,t){console[e]=function(...r){if(ZE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Za[e](...r)}}a(Uo,"logConsole");function eG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(GA),fatal:r(kA),error:r(tc),warn:r(sh),info:r(xl),debug:r(nh),trace:r(rh)};function r(n){return function(...s){return n(t,...s)}}}a(eG,"loggerWithTag");function tG(e){try{ZE=!1,e()}finally{ZE=!0}}a(tG,"suppressLogging");var rG=Wq?.name?.replace(/ /g,"-")||"main";function ms(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-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||rG+"/"+Qq);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
3
- `}a(ms,"createLogRecord");function rc(e){Es&&qA(e),kn&&process.stdout.write(e)}a(rc,"logStdOut");function Fl(e){Es&&qA(e),kn&&process.stderr.write(e)}a(Fl,"logStdErr");function qA(e){nG(),Po?yi.appendFileSync(Po,e):Za.log(e)}a(qA,"logToFile");function th(){try{yi.closeSync(Po)}catch{}Po=null}a(th,"closeLogFile");function nG(){if(!Po){try{if(!ec)debugger;Po=yi.openSync(ec,"a")}catch(e){Za.error(e)}setTimeout(()=>{th()},Zq).unref()}}a(nG,"openLogFile");function xl(...e){tr[er]<=tr.info&&rc(ms("info",e))}a(xl,"info");function rh(...e){tr[er]<=tr.trace&&rc(ms("trace",e))}a(rh,"trace");function tc(...e){tr[er]<=tr.error&&Fl(ms("error",e))}a(tc,"error");function nh(...e){tr[er]<=tr.debug&&rc(ms("debug",e))}a(nh,"debug");function GA(...e){tr[er]<=tr.notify&&rc(ms("notify",e))}a(GA,"notify");function kA(...e){tr[er]<=tr.fatal&&Fl(ms("fatal",e))}a(kA,"fatal");function sh(...e){tr[er]<=tr.warn&&Fl(ms("warn",e))}a(sh,"warn");function sG(e,t,...r){t===HA.STDERR?Fl(ms(e,r)):rc(ms(e,r))}a(sG,"logCustomLevel");function iG(){let e;try{e=zq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hs.join(e,bt.HDB_HOME_DIR_NAME,bt.BOOT_PROPS_FILE_NAME);return yi.existsSync(t)||(t=hs.join(eh,"utility/hdb_boot_properties.file")),t}a(iG,"getPropsFilePath");function oG(e){er=e}a(oG,"setLogLevel");function PA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(PA,"autoCastBoolean");function aG(e){try{if(e.includes("config/settings.js")){let o=BA(e);return{level:o.get(bt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hs.dirname(o.get(bt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(bt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(bt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=vA.parseDocument(yi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===bt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(aG,"getLogConfig");function cG(){try{let e=vA.parseDocument(yi.readFileSync(jq,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(cG,"getDefaultConfig");function uG(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(uG,"AuthAuditLog")});var $A=T((Sie,VA)=>{"use strict";var lG=require("util"),_G=require("path"),dG=require("child_process"),fG=lG.promisify(dG.execFile),EG=1e3*1e3*10;VA.exports={findPs:hG};async function hG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await fG("ps",["wwxo",`pid,${r}`],{maxBuffer:EG});for(let s of n.trim().split(`
4
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:_G.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(hG,"findPs")});var ht=T((gie,KA)=>{"use strict";var mG="__dbis__",pG="__txns__",SG="__environment_name__",TG="__dbi_defintion__",gG={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"},RG=["__createdtime__","__updatedtime__"],AG="\uFFFF",YA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},OG=Object.values(YA);KA.exports={AUDIT_STORE_NAME:pG,INTERNAL_DBIS_NAME:mG,DBI_DEFINITION_NAME:TG,SEARCH_TYPES:gG,TIMESTAMP_NAMES:RG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:SG,TRANSACTIONS_DBI_NAMES_ENUM:YA,TRANSACTIONS_DBIS:OG,OVERFLOW_MARKER:AG}});var Ir=T((Rie,tO)=>{"use strict";var WA=M(),QA=ht(),zA={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},JA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),XA={500:JA("There was an error processing your request."),400:"Invalid request"},bG=XA[zA.INTERNAL_SERVER_ERROR],NG={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.`},yG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},IG={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"},wG={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 ${QA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${QA.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"},CG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${WA.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 ${WA.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"},jA={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"},LG={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."},DG={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`},MG={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"},UG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},PG={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`},ZA={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.`},eO={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}`},vG={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."},BG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},HG={...jA,...IG,...NG,...LG,...DG,...MG,...UG,...PG,...CG,...ZA,...eO,...vG,...BG,...yG};tO.exports={CHECK_LOGS_WRAPPER:JA,HDB_ERROR_MSGS:HG,DEFAULT_ERROR_MSGS:XA,DEFAULT_ERROR_RESP:bG,HTTP_STATUS_CODES:zA,LMDB_ERRORS_ENUM:wG,AUTHENTICATION_ERROR_MSGS:jA,VALIDATION_ERROR_MSGS:ZA,ITC_ERRORS:eO}});var Z=T((Oie,sO)=>{"use strict";var vo=Ir(),xG=V(),FG=M(),ql=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,rO),this.statusCode=n||vo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vo.DEFAULT_ERROR_MSGS[n]?vo.DEFAULT_ERROR_MSGS[n]:vo.DEFAULT_ERROR_MSGS[vo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&xG[s](i)}},oh=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}},ah=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function rO(e,t,r,n=FG.LOG_LEVELS.ERROR,s=null,i=!1){if(nO(e))return e;let o=new ql(e,t,r,n,s);return i&&delete o.stack,o}a(rO,"handleHDBError");function nO(e){return e.__proto__.constructor.name===ql.name}a(nO,"isHDBError");sO.exports={isHDBError:nO,handleHDBError:rO,ClientError:oh,ServerError:ah,hdb_errors:vo}});var oO=T((Nie,iO)=>{"use strict";var qG={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,`\r
1
+ "use strict";var Wx=Object.create;var Ka=Object.defineProperty;var Qx=Object.getOwnPropertyDescriptor;var zx=Object.getOwnPropertyNames;var Jx=Object.getPrototypeOf,Xx=Object.prototype.hasOwnProperty;var a=(e,t)=>Ka(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)Ka(e,r,{get:t[r],enumerable:!0})},gA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of zx(t))!Xx.call(e,s)&&s!==r&&Ka(e,s,{get:()=>t[s],enumerable:!(n=Qx(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?Wx(Jx(e)):{},gA(t||!e||!e.__esModule?Ka(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>gA(Ka({},"__esModule",{value:!0}),e);var OA=g((Lie,AA)=>{var jx=require("fast-glob"),{statSync:QE,existsSync:zE,readFileSync:Zx,writeFileSync:eF}=require("fs"),{spawnSync:tF,spawn:rF,execFileSync:Die}=require("child_process"),{isMainThread:nF}=require("worker_threads"),{join:ks,relative:RA}=require("path"),{PACKAGE_ROOT:mn}=M(),{tmpdir:sF,platform:iF}=require("os");require("source-map-support").install();var oF=["resources","server","dataLayer","components"],Wa="ts-build",JE,aF=__filename.endsWith("tsBuild.js");if(aF){if(nF){let r;try{QE(ks(mn,Wa)),r=!0}catch{}if(r)for(let n of jx.sync(oF.map(s=>s+"/**/*.ts"),{cwd:mn})){let s=0,i=0;try{s=QE(ks(mn,n)).mtimeMs-5e3,i=QE(ks(mn,Wa,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),JE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),JE=!0;if(JE){let n=ks(mn,"node_modules/.bin/tsc");iF()==="win32"&&(n+=".cmd");let s=tF(n,{cwd:mn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=ks(sF(),"harperdb-tsc.pid"),o;if(zE(i))try{process.kill(+Zx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=rF(n,["--watch"],{cwd:mn,detached:!0,stdio:"ignore"});eF(i,c.pid.toString()),c.unref()}}}}let e=AA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(mn)&&!n[0].includes("node_modules")){let i=RA(mn,n[0]),o;i.startsWith(Wa)?o=ks(mn,RA(Wa,i)):o=ks(mn,Wa,i);let c=ks(o,r),u=c+".js";if(zE(u))return u;if(c.includes(".")&&zE(c))return c}return t(r,n,s)}}});var M=g((Pie,HA)=>{"use strict";var zr=require("path"),cF=require("fs"),{relative:Mie,join:Uie}=zr,{existsSync:uF}=cF;function lF(){let e=__dirname;for(;!uF(zr.join(e,"package.json"));){let t=zr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(lF,"getHDBPackageRoot");var Vs=lF(),bA="js",Il=bA,_F="harperdb-config.yaml",dF="defaultConfig.yaml",fF="hdb",NA=`harperdb.${Il}`,yA=`customFunctionsServer.${Il}`,EF=`restartHdb.${Il}`,jE="HarperDB",wl="Custom Functions",Cl="Clustering Hub",Dl="Clustering Leaf",hF="Clustering Ingest Service",mF="Clustering Reply Service",pF="foreground.pid",SF="hdb.pid",TF="data",gF={HDB:jE,CLUSTERING_HUB:Cl,CLUSTERING_LEAF:Dl,CLUSTERING_INGEST_SERVICE:hF,CLUSTERING_REPLY_SERVICE:mF,CUSTOM_FUNCTIONS:wl,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},RF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},AF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},OF={harperdb:jE,"clustering hub":Cl,"clustering leaf":Dl,"custom functions":wl,custom_functions:wl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},bF={CLUSTERING_HUB_PROC_DESCRIPTOR:Cl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Dl},XE={HDB:zr.join(Vs,"server/harperdb"),CUSTOM_FUNCTIONS:zr.join(Vs,"server/customFunctions"),CLUSTERING_HUB:zr.join(Vs,"server/nats"),CLUSTERING_LEAF:zr.join(Vs,"server/nats")},NF={HDB:zr.join(XE.HDB,NA),CUSTOM_FUNCTIONS:zr.join(XE.CUSTOM_FUNCTIONS,yA)},yF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:zr.join(Vs,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:zr.join(Vs,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:zr.join(Vs,"launchServiceScripts/launchUpdateNodes4-0-0.js")},wF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},wA="support@harperdb.io",IF="customer-success@harperdb.io",IA=1,CF=4141,CA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",DF="https://www.harperdb.io/product",LF=`For support, please submit a request at ${CA} or contact ${wA}`,DA=`For license support, please contact ${IF}`,MF="None of the specified records were found.",UF="hash attribute not found",PF=`Your current license only supports ${IA} role. ${DA}`,vF="Your current license only supports 3 connections to a node.",BF="127.0.0.1",HF=1,xF=/^\.$/,FF=/^\.\.$/,qF="U+002E",GF=/\//g,kF="U+002F",VF=/U\+002F/g,$F=/^U\+002E$/,YF=/^U\+002EU\+002E$/,KF="d",WF=999999,QF="*",zF="--max-old-space-size=",JF="system",XF="__hdb_hash",jF=".harperdb",ZF=".hdb",eq="keys",tq="hdb_boot_properties.file",rq=".updateConfig.json",nq="SIGTSTP",sq=24,iq=6e4,oq=448,aq="blob",cq="trash",uq="database",lq="schema",_q="transactions",dq=".count",fq="id",Eq="PROCESS_NAME",LA={SETTINGS_PATH_KEY:"settings_path"},MA=require("lodash"),hq={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},mq={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},pq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Sq={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},Tq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Ar="hdb_internal:",gq={CREATE_SCHEMA:Ar+"create_schema",CREATE_TABLE:Ar+"create_table",CREATE_ATTRIBUTE:Ar+"create_attribute",ADD_USER:Ar+"add_user",ALTER_USER:Ar+"alter_user",DROP_USER:Ar+"drop_user",HDB_NODES:Ar+"hdb_nodes",HDB_USERS:Ar+"hdb_users",HDB_WORKERS:Ar+"hdb_workers",CATCHUP:Ar+"catchup",SCHEMA_CATCHUP:Ar+"schema_catchup",WORKER_ROOM:Ar+"cluster_workers"},Rq={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},Aq="060493.ks",Oq=".license",bq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},j={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},Nq={CSV:".csv",JSON:".json"},yq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},wq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Qa={};Qa[j.INSERT]=j.INSERT;Qa[j.UPDATE]=j.UPDATE;Qa[j.UPSERT]=j.UPSERT;Qa[j.DELETE]=j.DELETE;var Be=Object.create(null);Be[j.DESCRIBE_ALL]=j.DESCRIBE_ALL;Be[j.DESCRIBE_TABLE]=j.DESCRIBE_TABLE;Be[j.DESCRIBE_SCHEMA]=j.DESCRIBE_SCHEMA;Be[j.READ_LOG]=j.READ_LOG;Be[j.ADD_NODE]=j.ADD_NODE;Be[j.LIST_USERS]=j.LIST_USERS;Be[j.LIST_ROLES]=j.LIST_ROLES;Be[j.USER_INFO]=j.USER_INFO;Be[j.SQL]=j.SQL;Be[j.GET_JOB]=j.GET_JOB;Be[j.SEARCH_JOBS_BY_START_DATE]=j.SEARCH_JOBS_BY_START_DATE;Be[j.DELETE_FILES_BEFORE]=j.DELETE_FILES_BEFORE;Be[j.EXPORT_LOCAL]=j.EXPORT_LOCAL;Be[j.EXPORT_TO_S3]=j.EXPORT_TO_S3;Be[j.CLUSTER_STATUS]=j.CLUSTER_STATUS;Be[j.REMOVE_NODE]=j.REMOVE_NODE;Be[j.RESTART]=j.RESTART;Be[j.CUSTOM_FUNCTIONS_STATUS]=j.CUSTOM_FUNCTIONS_STATUS;Be[j.GET_CUSTOM_FUNCTIONS]=j.GET_CUSTOM_FUNCTIONS;Be[j.GET_CUSTOM_FUNCTION]=j.GET_CUSTOM_FUNCTION;Be[j.SET_CUSTOM_FUNCTION]=j.SET_CUSTOM_FUNCTION;Be[j.DROP_CUSTOM_FUNCTION]=j.DROP_CUSTOM_FUNCTION;Be[j.ADD_CUSTOM_FUNCTION_PROJECT]=j.ADD_CUSTOM_FUNCTION_PROJECT;Be[j.DROP_CUSTOM_FUNCTION_PROJECT]=j.DROP_CUSTOM_FUNCTION_PROJECT;Be[j.PACKAGE_CUSTOM_FUNCTION_PROJECT]=j.PACKAGE_CUSTOM_FUNCTION_PROJECT;Be[j.DEPLOY_CUSTOM_FUNCTION_PROJECT]=j.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Iq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},Cq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},UA={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},Dq=MA.invert(UA),Lq={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},C={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",MAXHEAPMEMORY:"maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},PA={settings_path:LA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,http_mtls:C.HTTP_MTLS,http_mtls_user:C.HTTP_MTLS_USER,http_mtls_required:C.HTTP_MTLS_REQUIRED,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:C.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];PA[t.toLowerCase()]=t}var Mq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Uq={csv_file_load:"csv_file_load",csv_data_load:j.CSV_DATA_LOAD,csv_url_load:j.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Pq={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},vq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Bq={VERSION_DEFAULT:"2.2.0"},Hq={DEVELOPMENT:8192,DEFAULT:512},xq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Fq={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},qq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},vA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Gq=Symbol("metadata"),kq="__clustering__",Vq=Object.values(vA),$q=15984864e5,BA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Yq=MA.invert(BA),Kq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Wq=111,Qq=`\r
2
+ `,zq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jq=["*","%"],Xq="unauthorized_access",jq="func_val",Zq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tG={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"},rG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},nG={HTTP:"http"},sG={STOPPED:"stopped",ONLINE:"online"},iG="3.x.x",oG={SUCCESS:"success",FAILURE:"failure"},aG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};HA.exports={LOCAL_HARPERDB_OPERATIONS:Be,HDB_SUPPORT_ADDRESS:wA,HDB_SUPPORT_URL:CA,HDB_PRICING_URL:DF,SUPPORT_HELP_MSG:LF,LICENSE_HELP_MSG:DA,HDB_PROC_NAME:NA,HDB_PROC_DESCRIPTOR:jE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Dl,CLUSTERING_HUB_PROC_DESCRIPTOR:Cl,SYSTEM_SCHEMA_NAME:JF,HASH_FOLDER_NAME:XF,HDB_HOME_DIR_NAME:jF,UPDATE_FILE_NAME:rq,LICENSE_KEY_DIR_NAME:eq,BOOT_PROPS_FILE_NAME:tq,JOB_TYPE_ENUM:Uq,JOB_STATUS_ENUM:bq,SYSTEM_TABLE_NAMES:Sq,SYSTEM_TABLE_HASH_ATTRIBUTES:Tq,OPERATIONS_ENUM:j,VALID_S3_FILE_TYPES:Nq,S3_BUCKET_AUTH_KEYS:yq,VALID_SQL_OPS_ENUM:wq,GEO_CONVERSION_ENUM:Cq,HDB_SETTINGS_NAMES:UA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Dq,SERVICE_ACTIONS_ENUM:Iq,CLUSTER_MESSAGE_TYPE_ENUM:Pq,CLUSTER_CONNECTION_DIRECTION_ENUM:vq,CLUSTER_EVENTS_DEFS_ENUM:xq,PERIOD_REGEX:xF,DOUBLE_PERIOD_REGEX:FF,UNICODE_PERIOD:qF,FORWARD_SLASH_REGEX:GF,UNICODE_FORWARD_SLASH:kF,ESCAPED_FORWARD_SLASH_REGEX:VF,ESCAPED_PERIOD_REGEX:$F,ESCAPED_DOUBLE_PERIOD_REGEX:YF,REG_KEY_FILE_NAME:Aq,RESTART_TIMEOUT_MS:iq,HDB_FILE_PERMISSIONS:oq,DATABASES_DIR_NAME:uq,LEGACY_DATABASES_DIR_NAME:lq,TRANSACTIONS_DIR_NAME:_q,LIMIT_COUNT_NAME:dq,ID_ATTRIBUTE_STRING:fq,INSERT_MODULE_ENUM:mq,UPGRADE_JSON_FIELD_NAMES_ENUM:pq,RESTART_CODE:nq,RESTART_CODE_NUM:sq,CLUSTER_OPERATIONS:Qa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Rq,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ar,INTERNAL_SC_CHANNELS:gq,CLUSTERING_MESSAGE_TYPES:Kq,HDB_FILE_SUFFIX:ZF,BLOB_FOLDER_NAME:aq,HDB_TRASH_DIR:cq,ORIGINATOR_SET_VALUE:Wq,LICENSE_VALUES:Bq,RAM_ALLOCATION_ENUM:Hq,TIME_STAMP_NAMES_ENUM:vA,TIME_STAMP_NAMES:Vq,PERMS_UPDATE_RELEASE_TIMESTAMP:$q,SEARCH_NOT_FOUND_MESSAGE:MF,SEARCH_ATTRIBUTE_NOT_FOUND:UF,LICENSE_ROLE_DENIED_RESPONSE:PF,LICENSE_MAX_CONNS_REACHED:vF,BASIC_LICENSE_MAX_NON_CU_ROLES:IA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:CF,VALUE_SEARCH_COMPARATORS:BA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Yq,LICENSE_FILE_NAME:Oq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Fq,NEW_LINE:Qq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:HF,MOMENT_DAYS_TAG:KF,API_TURNOVER_SEC:WF,LOOPBACK:BF,CODE_EXTENSION:Il,WILDCARD_SEARCH_VALUE:QF,NODE_ERROR_CODES:qq,JAVASCRIPT_EXTENSION:bA,PERMS_CRUD_ENUM:zq,UNAUTHORIZED_PERMISSION_NAME:Xq,SEARCH_WILDCARDS:Jq,FUNC_VAL:jq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Zq,JWT_ENUM:eG,CLUSTERING_FLAG:kq,ITC_EVENT_TYPES:tG,CUSTOM_FUNCTION_PROC_NAME:yA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:wl,SERVICES:rG,THREAD_TYPES:nG,MEM_SETTING_KEY:zF,HDB_RESTART_SCRIPT:EF,PROCESS_DESCRIPTORS:gF,SERVICE_SERVERS:NF,SERVICE_SERVERS_CWD:XE,PROCESS_DESCRIPTORS_VALIDATE:OF,LAUNCH_SERVICE_SCRIPTS:yF,LOG_LEVELS:AF,PROCESS_NAME_ENV_PROP:Eq,LOG_NAMES:RF,PM2_PROCESS_STATUSES:sG,CONFIG_PARAM_MAP:PA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:_F,HDB_DEFAULT_CONFIG_FILE:dF,ROLE_TYPES_ENUM:wF,BOOT_PROP_PARAMS:LA,INSTALL_PROMPTS:hq,HDB_ROOT_DIR_NAME:fF,CLUSTERING_PROCESSES:bF,FOREGROUND_PID_FILE:pF,PACKAGE_ROOT:Vs,PRE_4_0_0_VERSION:iG,DATABASES_PARAM_CONFIG:Mq,METADATA_PROPERTY:Gq,AUTH_AUDIT_STATUS:oG,AUTH_AUDIT_TYPES:aG,HDB_PID_FILE:SF,DEFAULT_DATABASE_NAME:TF,LEGACY_CONFIG_PARAMS:Lq};OA()});var ZE=g((Bie,qA)=>{"use strict";var xA=require("minimist");qA.exports=cG;function cG(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=FA(process.env),n=FA(xA(process.argv))):(r=process.env,n=xA(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(cG,"assignCMDENVVariables");function FA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(FA,"objKeysToLowerCase")});var Y=g((xie,oh)=>{"use strict";var Oi=require("fs-extra"),{workerData:uG,threadId:lG}=require("worker_threads"),us=require("path"),VA=require("yaml"),$A=require("properties-reader"),St=M(),GA=ZE(),_G=require("os"),{PACKAGE_ROOT:th}=M(),{_assignPackageExport:dG}=require("../../index"),Ja={};for(let e in console)Ja[e]||(Ja[e]=console[e]);var Xt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},YA={STDOUT:"stdOut",STDERR:"stdErr"},fG=us.join(th,"logs"),EG=us.join(th,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),hG=1e4,cs,xn,Jt,Ll,Ml,Xa,Do,za;za===void 0&&KA();oh.exports={notify:zA,fatal:JA,error:ja,warn:ih,info:Ul,debug:sh,trace:nh,setLogLevel:AG,log_level:Jt,loggerWithTag:mG,suppressLogging:pG,initLogSettings:KA,setupConsoleLogging:WA,logCustomLevel:gG,closeLogFile:rh,getLogFilePath:()=>Xa,OUTPUTS:YA,AuthAuditLog:NG};dG("logger",oh.exports);function KA(e=!1){try{if(za===void 0||e){rh();let t=RG(),r=GA(["ROOTPATH"]);try{za=$A(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Oi.pathExistsSync(us.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw n}({level:Jt,config_log_path:Ml,to_file:cs,to_stream:xn}=OG(r.ROOTPATH?us.join(r.ROOTPATH,St.HDB_CONFIG_FILE):za.get("settings_path"))),Ll=St.LOG_NAMES.HDB,Xa=us.join(Ml,Ll)}}catch(t){if(za=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=GA(Object.keys(St.CONFIG_PARAM_MAP),!0);for(let o in r){let c=St.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===St.CONFIG_PARAMS.LOGGING_LEVEL){Jt=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){xn=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(cs=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=bG();cs=cs===void 0?s:cs,cs=kA(cs),xn=xn===void 0?i:xn,xn=kA(xn),Jt=Jt===void 0?n:Jt,Ml=fG,Ll=St.LOG_NAMES.INSTALL,Xa=us.join(Ml,Ll);return}throw ja("Error initializing log settings"),ja(t),t}process.env.DEV_MODE&&(xn=!0),WA()}a(KA,"initLogSettings");var eh=!0;function WA(){Co("error",ja),Co("warn",ih),Co("log",Ul),Co("info",Ul),Co("debug",sh),Co("trace",nh)}a(WA,"setupConsoleLogging");function Co(e,t){console[e]=function(...r){if(eh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ja[e](...r)}}a(Co,"logConsole");function mG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(zA),fatal:r(JA),error:r(ja),warn:r(ih),info:r(Ul),debug:r(sh),trace:r(nh)};function r(n){return function(...s){return n(t,...s)}}}a(mG,"loggerWithTag");function pG(e){try{eh=!1,e()}finally{eh=!0}}a(pG,"suppressLogging");var SG=uG?.name?.replace(/ /g,"-")||"main";function ls(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-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||SG+"/"+lG);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
3
+ `}a(ls,"createLogRecord");function Za(e){cs&&QA(e),xn&&process.stdout.write(e)}a(Za,"logStdOut");function Pl(e){cs&&QA(e),xn&&process.stderr.write(e)}a(Pl,"logStdErr");function QA(e){TG(),Do?Oi.appendFileSync(Do,e):Ja.log(e)}a(QA,"logToFile");function rh(){try{Oi.closeSync(Do)}catch{}Do=null}a(rh,"closeLogFile");function TG(){if(!Do){try{if(!Xa)debugger;Do=Oi.openSync(Xa,"a")}catch(e){Ja.error(e)}setTimeout(()=>{rh()},hG).unref()}}a(TG,"openLogFile");function Ul(...e){Xt[Jt]<=Xt.info&&Za(ls("info",e))}a(Ul,"info");function nh(...e){Xt[Jt]<=Xt.trace&&Za(ls("trace",e))}a(nh,"trace");function ja(...e){Xt[Jt]<=Xt.error&&Pl(ls("error",e))}a(ja,"error");function sh(...e){Xt[Jt]<=Xt.debug&&Za(ls("debug",e))}a(sh,"debug");function zA(...e){Xt[Jt]<=Xt.notify&&Za(ls("notify",e))}a(zA,"notify");function JA(...e){Xt[Jt]<=Xt.fatal&&Pl(ls("fatal",e))}a(JA,"fatal");function ih(...e){Xt[Jt]<=Xt.warn&&Pl(ls("warn",e))}a(ih,"warn");function gG(e,t,...r){t===YA.STDERR?Pl(ls(e,r)):Za(ls(e,r))}a(gG,"logCustomLevel");function RG(){let e;try{e=_G.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=us.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return Oi.existsSync(t)||(t=us.join(th,"utility/hdb_boot_properties.file")),t}a(RG,"getPropsFilePath");function AG(e){Jt=e}a(AG,"setLogLevel");function kA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kA,"autoCastBoolean");function OG(e){try{if(e.includes("config/settings.js")){let o=$A(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:us.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=VA.parseDocument(Oi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(OG,"getLogConfig");function bG(){try{let e=VA.parseDocument(Oi.readFileSync(EG,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(bG,"getDefaultConfig");function NG(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(NG,"AuthAuditLog")});var jA=g((qie,XA)=>{"use strict";var yG=require("util"),wG=require("path"),IG=require("child_process"),CG=yG.promisify(IG.execFile),DG=1e3*1e3*10;XA.exports={findPs:LG};async function LG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await CG("ps",["wwxo",`pid,${r}`],{maxBuffer:DG});for(let s of n.trim().split(`
4
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:wG.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(LG,"findPs")});var lt=g((kie,eO)=>{"use strict";var MG="__dbis__",UG="__txns__",PG="__environment_name__",vG="__dbi_defintion__",BG={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"},HG=["__createdtime__","__updatedtime__"],xG="\uFFFF",ZA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},FG=Object.values(ZA);eO.exports={AUDIT_STORE_NAME:UG,INTERNAL_DBIS_NAME:MG,DBI_DEFINITION_NAME:vG,SEARCH_TYPES:BG,TIMESTAMP_NAMES:HG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PG,TRANSACTIONS_DBI_NAMES_ENUM:ZA,TRANSACTIONS_DBIS:FG,OVERFLOW_MARKER:xG}});var Or=g((Vie,uO)=>{"use strict";var tO=M(),rO=lt(),nO={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},sO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),iO={500:sO("There was an error processing your request."),400:"Invalid request"},qG=iO[nO.INTERNAL_SERVER_ERROR],GG={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.`},kG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VG={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"},$G={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 ${rO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${rO.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"},YG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${tO.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 ${tO.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"},oO={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"},KG={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."},WG={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`},QG={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"},zG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JG={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`},aO={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.`},cO={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}`},XG={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."},jG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZG={...oO,...VG,...GG,...KG,...WG,...QG,...zG,...JG,...YG,...aO,...cO,...XG,...jG,...kG};uO.exports={CHECK_LOGS_WRAPPER:sO,HDB_ERROR_MSGS:ZG,DEFAULT_ERROR_MSGS:iO,DEFAULT_ERROR_RESP:qG,HTTP_STATUS_CODES:nO,LMDB_ERRORS_ENUM:$G,AUTHENTICATION_ERROR_MSGS:oO,VALIDATION_ERROR_MSGS:aO,ITC_ERRORS:cO}});var ee=g((Yie,dO)=>{"use strict";var Lo=Or(),ek=Y(),tk=M(),vl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,lO),this.statusCode=n||Lo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Lo.DEFAULT_ERROR_MSGS[n]?Lo.DEFAULT_ERROR_MSGS[n]:Lo.DEFAULT_ERROR_MSGS[Lo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&ek[s](i)}},ah=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}},ch=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function lO(e,t,r,n=tk.LOG_LEVELS.ERROR,s=null,i=!1){if(_O(e))return e;let o=new vl(e,t,r,n,s);return i&&delete o.stack,o}a(lO,"handleHDBError");function _O(e){return e.__proto__.constructor.name===vl.name}a(_O,"isHDBError");dO.exports={isHDBError:_O,handleHDBError:lO,ClientError:ah,ServerError:ch,hdb_errors:Lo}});var EO=g((Wie,fO)=>{"use strict";var rk={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,`\r
5
5
  `),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,`\r
6
- `)},GG="certificate.pem",kG="privateKey.pem",VG="ca.pem";iO.exports={CERTIFICATE_VALUES:qG,CERTIFICATE_PEM_NAME:GG,PRIVATEKEY_PEM_NAME:kG,CA_PEM_NAME:VG}});var et=T((yie,aO)=>{"use strict";var rr=require("validate.js");rr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||rr.validators.type.checks[t](e)?null:` must be a '${t}' value`};rr.validators.type.checks={Object:function(e){return rr.isObject(e)&&!rr.isArray(e)},Array:rr.isArray,Integer:rr.isInteger,Number:rr.isNumber,String:rr.isString,Date:rr.isDate,Boolean:function(e){return typeof e=="boolean"}};rr.validators.hasValidFileExt=function(e,t){return rr.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};aO.exports={validateObject:$G,validateObjectAsync:YG,validateBySchema:KG};function $G(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=rr(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 rr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}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 uh=T((Cie,dO)=>{"use strict";var _O=require("fs-extra"),ce=require("joi"),WG=require("os"),{boolean:Be,string:jr,number:Pt,array:ch}=ce.types(),{totalmem:cO}=require("os"),Ii=require("path"),QG=V(),Gl=J(),wie=oO(),uO=M(),zG=et(),lO="log",JG="components",XG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",jG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ZG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",ek="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",tk="rootPath config parameter is undefined",rk="clustering.enabled config parameter is undefined",wi=Pt.min(0).required(),kl=ch.items({host:jr.required(),port:wi}).empty(null),Vn;dO.exports={configValidator:nk,routesValidator:uk,route_constraints:kl};function nk(e){if(Vn=e.rootPath,Gl.isEmpty(Vn))throw tk;let t=Be.required(),r=Pt.min(0).max(1e3).empty(null).default(ck),n=jr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nc),s=jr.optional().empty(null),i=jr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(nc),c=ce.custom(ik).empty(null).default(nc),u=e.clustering?.enabled;if(Gl.isEmpty(u))throw rk;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:wi,routes:kl}).required()}).required(),leafNodes:ce.object({network:ce.object({port:wi}).required()}).required(),network:ce.object({port:wi}).required()}).required(),leafServer:ce.object({network:ce.object({port:wi,routes:kl}).required(),streams:ce.object({maxAge:Pt.min(120).allow(null).optional(),maxBytes:Pt.min(1).allow(null).optional(),maxMsgs:Pt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required(),verify:Be.optional()}),user:jr.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Be,cacheTTL:Pt.required(),enableSessions:Be}),analytics:ce.object({aggregatePeriod:Pt}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Be.optional(),compress:Be.optional(),interval:jr.custom(ak).optional().empty(null),maxSize:jr.custom(ok).optional().empty(null),path:jr.optional().empty(null).default(nc)}).required(),root:n,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:ch.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(nc),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:jr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:wi,securePort:wi,mtls:ce.alternatives([Be.optional(),ce.object({user:jr.optional(),certificateAuthority:s})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:Pt.optional(),cors:Be.optional(),corsAccessList:ch.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Pt.min(0).optional(),storage:ce.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:jr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(nk,"configValidator");function sk(e){return _O.existsSync(e)?null:`Specified path ${e} does not exist.`}a(sk,"doesPathExist");function ik(e,t){ce.assert(e,jr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=sk(e);if(r)return t.message(r)}a(ik,"validatePath");function ok(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(XG);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ZG):e}a(ok,"validateRotationMaxSize");function ak(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(jG);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ek):e}a(ak,"validateRotationInterval");function ck(e,t){let r=t.state.path.join("."),n=WG.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||cO();return i=Math.round(Math.min(i,cO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),QG.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(ck,"setDefaultThreads");function nc(e,t){let r=t.state.path.join(".");if(!Gl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Gl.isEmpty(Vn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ii.join(Vn,JG);case"logging.root":return Ii.join(Vn,lO);case"clustering.leafServer.streams.path":return Ii.join(Vn,"clustering","leaf");case"storage.path":let n=Ii.join(Vn,uO.LEGACY_DATABASES_DIR_NAME);return _O.existsSync(n)?n:Ii.join(Vn,uO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ii.join(Vn,lO);case"operationsApi.network.domainSocket":return r==null?null:Ii.join(Vn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(nc,"setDefaultRoot");function uk(e){let t=ce.object({routes:kl});return zG.validateBySchema({routes:e},t)}a(uk,"routesValidator")});var Ci={};Ve(Ci,{server:()=>lt});var fO,lt,nr=Ae(()=>{fO=require("../../index"),lt={};(0,fO._assignPackageExport)("server",lt)});var Lr=T((Mie,AO)=>{"use strict";var Cr=M(),vt=J(),Nt=V(),{configValidator:lk,routesValidator:EO}=uh(),sr=require("fs-extra"),_k=require("yaml"),On=require("path"),dk=require("is-number"),mO=require("properties-reader"),fk=require("lodash"),{handleHDBError:Ek}=Z(),{HTTP_STATUS_CODES:hk,HDB_ERROR_MSGS:Vl}=Ir(),Die=require("minimist"),{server:mk}=(nr(),ee(Ci)),{DATABASES_PARAM_CONFIG:sc,CONFIG_PARAMS:wr,CONFIG_PARAM_MAP:bn}=Cr,pk="Unable to get config value because config is uninitialized",Sk="Config successfully initialized",Tk="Error backing up config file",gk="Empty parameter sent to getConfigValue",pO=On.join(Cr.PACKAGE_ROOT,"config","yaml",Cr.HDB_DEFAULT_CONFIG_FILE),Rk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",hO={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"},$l,yt,Yl;AO.exports={createConfigFile:Ak,getDefaultConfig:Ok,getConfigValue:TO,initConfig:_h,flattenConfig:Bo,updateConfigValue:gO,updateConfigObject:Nk,getConfiguration:wk,setConfiguration:Ck,readConfigFile:fh,getClusteringRoutes:Lk,initOldConfig:RO,getConfigFromFile:Dk,getConfigFilePath:Li,addConfig:Mk,deleteConfigFromFile:Uk,getConfigObj:Pk};function Ak(e){let t=Ws(pO);$l=Bo(t.toJSON());let r;for(let o in e){let c=bn[o.toLowerCase()];if(c===wr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=lh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Nt.error(l)}}}r&&SO(t,r),dh(t);let n=t.toJSON();yt=Bo(n);let s=t.getIn(["rootPath"]),i=On.join(s,Cr.HDB_CONFIG_FILE);sr.createFileSync(i),sr.writeFileSync(i,String(t)),Nt.trace(`Config file written to ${i}`)}a(Ak,"createConfigFile");function SO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!vt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(sc.TABLES))for(let i in n[s][sc.TABLES])for(let o in n[s][sc.TABLES][i]){let c=n[s][sc.TABLES][i][o],u=[wr.DATABASES,s,sc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[wr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Nt.error("Error parsing schemas CLI/env config arguments",n)}}a(SO,"setSchemasConfig");function Ok(e){if($l===void 0){let r=Ws(pO);$l=Bo(r.toJSON())}let t=bn[e.toLowerCase()];if(t!==void 0)return $l[t.toLowerCase()]}a(Ok,"getDefaultConfig");function TO(e){if(e==null){Nt.error(gk);return}if(yt===void 0){Nt.trace(pk);return}let t=bn[e.toLowerCase()];if(t!==void 0)return yt[t.toLowerCase()]}a(TO,"getConfigValue");function Li(e=vt.getPropsFilePath()){let t=vt.getEnvCliRootPath();return t?On.join(t,Cr.HDB_CONFIG_FILE):mO(e).get(Cr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Li,"getConfigFilePath");function _h(e=!1){if(yt===void 0||e){let t;if(!vt.noBootFile()){t=vt.getPropsFilePath();try{sr.accessSync(t,sr.constants.F_OK|sr.constants.R_OK)}catch(i){throw Nt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Li(t),n;if(r.includes("config/settings.js"))try{RO(r);return}catch(i){if(i.code!==Cr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ws(r)}catch(i){if(i.code===Cr.NODE_ERROR_CODES.ENOENT){Nt.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Nt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bk(n,r),dh(n);let s=n.toJSON();if(mk.config=s,yt=Bo(s),yt.logging_rotation_rotate)for(let i in hO)yt[i]&&Nt.error(`Config ${hO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Nt.trace(Sk)}}a(_h,"initConfig");function bk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],On.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],On.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],On.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Nt.trace("Updating config file with missing config params"),sr.writeFileSync(t,String(e)))}a(bk,"checkForUpdatedConfig");function dh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=lk(t);if(r.error)throw Vl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),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),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(dh,"validateConfig");function Nk(e,t){yt===void 0&&(yt={});let r=bn[e.toLowerCase()];if(r===void 0){Nt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(Nk,"updateConfigObject");function gO(e,t,r=void 0,n=!1,s=!1,i=!1){yt===void 0&&_h();let o=TO(bn.hdb_root),c=On.join(o,Cr.HDB_CONFIG_FILE),u=Ws(c),_;if(r===void 0&&e.toLowerCase()===wr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=bn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=lh(f,t);u.setIn([...E],h)}else for(let f in r){let E=bn[f.toLowerCase()];if(E===wr.HTTP_SECUREPORT&&r[f]===yt[wr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===wr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===yt[wr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===wr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Cr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=lh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(A){Nt.error(A)}}}_&&SO(u,_),dh(u);let l=u.getIn(["rootPath"]),d=On.join(l,Cr.HDB_CONFIG_FILE);n===!0&&yk(c,l),sr.writeFileSync(d,String(u)),s&&(yt=Bo(u.toJSON())),Nt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(gO,"updateConfigValue");function yk(e,t){try{let r=On.join(t,"backup",`${Cr.HDB_CONFIG_FILE}.bak`);sr.copySync(e,r),Nt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Nt.error(Tk),Nt.error(r)}}a(yk,"backupConfigFile");var Ik=["databases"];function Bo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Yl=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i))if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!Ik.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!wr[u.toUpperCase()]&&bn[u]&&(s[bn[u].toLowerCase()]=o[c]),s[u]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Bo,"flattenConfig");function lh(e,t){if(e===wr.CLUSTERING_NODENAME||e===wr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(dk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||vt.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 vt.autoCast(t)}a(lh,"castConfigValue");function wk(){let e=vt.getPropsFilePath(),t=Li(e);return Ws(t).toJSON()}a(wk,"getConfiguration");async function Ck(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return gO(void 0,void 0,s,!0),Rk}catch(i){throw typeof i=="string"||i instanceof String?Ek(i,i,hk.BAD_REQUEST,void 0,void 0,!0):i}}a(Ck,"setConfiguration");function fh(){let e=vt.getPropsFilePath();try{sr.accessSync(e,sr.constants.F_OK|sr.constants.R_OK)}catch(n){if(!vt.noBootFile())throw Nt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Li(e);return Ws(t).toJSON()}a(fh,"readConfigFile");function Ws(e){return _k.parseDocument(sr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ws,"parseYamlDoc");function Lk(){let e=fh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=vt.isEmptyOrZeroLength(t)?[]:t;let r=EO(t);if(r)throw Vl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=vt.isEmptyOrZeroLength(n)?[]:n;let s=EO(n);if(s)throw Vl.CONFIG_VALIDATION(s.message);if(!vt.isEmptyOrZeroLength(n)&&!vt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!vt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Lk,"getClusteringRoutes");function RO(e){let t=mO(e);yt={};for(let r in bn){let n=t.get(r.toUpperCase());if(vt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=bn[r].toLowerCase();s===wr.LOGGING_ROOT?yt[s]=On.dirname(n):yt[s]=n}return yt}a(RO,"initOldConfig");function Dk(e){let t=fh();return fk.get(t,e.replaceAll("_","."))}a(Dk,"getConfigFromFile");async function Mk(e,t){let r=Ws(Li());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await sr.writeFile(Li(),String(r))}a(Mk,"addConfig");function Uk(e){let t=Li(vt.getPropsFilePath()),r=Ws(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=On.join(n,Cr.HDB_CONFIG_FILE);sr.writeFileSync(s,String(r))}a(Uk,"deleteConfigFromFile");function Pk(){return Yl||(_h(),Yl)}a(Pk,"getConfigObj")});var j=T((Pie,yO)=>{"use strict";var Eh=require("fs-extra"),Di=require("path"),OO=require("os"),vk=require("properties-reader"),oc=V(),ic=J(),ae=M(),Kl=Lr(),Bk="Error initializing environment manager",Wl="BOOT_PROPS_FILE_PATH",bO=!1,Hk={[ae.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ps={};yO.exports={BOOT_PROPS_FILE_PATH:Wl,getHdbBasePath:xk,setHdbBasePath:Fk,get:NO,initSync:Gk,setProperty:Ce,initTestEnvironment:kk};function xk(){return ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(xk,"getHdbBasePath");function Fk(e){ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Fk,"setHdbBasePath");function NO(e){let t=Kl.getConfigValue(e);return t===void 0?ps[e]:t}a(NO,"get");function Ce(e,t){Hk[e]&&(ps[e]=t),Kl.updateConfigObject(e,t)}a(Ce,"setProperty");function qk(){let e;try{e=ic.getPropsFilePath(),Eh.accessSync(e,Eh.constants.F_OK|Eh.constants.R_OK),bO=!0;let t=vk(e);return ps[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),ps[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ps[Wl]=e,!0}catch{return oc.trace(`Environment manager found no properties file at ${e}`),!1}}a(qk,"doesPropFileExist");function Gk(e=!1){try{(bO||qk()||ic.noBootFile())&&(Kl.initConfig(e),ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Kl.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){oc.error(Bk),oc.error(t),console.error(t),process.exit(1)}}a(Gk,"initSync");function kk(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Di.join(__dirname,"../../","unitTests");ps[Wl]=Di.join(u,"hdb_boot_properties.file"),Ce(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Di.join(u,"settings.test")),Ce(ae.HDB_SETTINGS_NAMES.INSTALL_USER,OO.userInfo()?OO.userInfo().username:void 0),Ce(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ce(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Di.join(u,"envDir","log")),Ce(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ce(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ce(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ce(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Di.join(u,"envDir")),Ce(ae.CONFIG_PARAMS.STORAGE_PATH,Di.join(u,"envDir")),s&&(Ce(ae.CONFIG_PARAMS.HTTP_SECUREPORT,NO(ae.CONFIG_PARAMS.HTTP_PORT)),Ce(ae.CONFIG_PARAMS.HTTP_PORT,null)),Ce(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ce(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ce(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ic.isEmpty(i)?!1:i),Ce(ae.CONFIG_PARAMS.HTTP_CORS,ic.isEmpty(i)?!1:i),Ce(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ce(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Di.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ce(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ic.isEmpty(c)?!1:c),o&&(Ce("CORS_ACCESSLIST",o),Ce(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ce(ae.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ce(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ce(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Wl}. Please check your boot props and settings files`;oc.fatal(r),oc.error(t)}}a(kk,"initTestEnvironment")});var We=T((Bie,UO)=>{"use strict";var _c=M(),Vk=J(),ir=j(),dc=require("path"),$k=require("minimist"),IO=require("fs-extra"),wO=require("lodash");ir.initSync();var{CONFIG_PARAMS:Qs,DATABASES_PARAM_CONFIG:ac,SYSTEM_SCHEMA_NAME:Ql}=_c,cc,uc,lc;function CO(){if(cc!==void 0)return cc;if(ir.getHdbBasePath()!==void 0)return cc=ir.get(Qs.STORAGE_PATH)||dc.join(ir.getHdbBasePath(),_c.DATABASES_DIR_NAME),cc}a(CO,"getBaseSchemaPath");function LO(){if(uc!==void 0)return uc;if(ir.getHdbBasePath()!==void 0)return uc=MO(Ql),uc}a(LO,"getSystemSchemaPath");function DO(){if(lc!==void 0)return lc;if(ir.getHdbBasePath()!==void 0)return lc=ir.get(_c.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dc.join(ir.getHdbBasePath(),_c.TRANSACTIONS_DIR_NAME),lc}a(DO,"getTransactionAuditStoreBasePath");function Yk(e,t){let r=ir.get(Qs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dc.join(DO(),e.toString())}a(Yk,"getTransactionAuditStorePath");function MO(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(_c.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dc.join(CO(),e)}a(MO,"getSchemaPath");function Kk(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,$k(process.argv));let n=r[Qs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Vk.isObject(n))throw o;i=n}for(let o of i){let c=o[Ql];if(!c)continue;let u=ir.get(Qs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ac.PATH];if(_)return wO.set(u,[Ql,ac.TABLES,t,ac.PATH],_),ir.setProperty(Qs.DATABASES,u),_;let l=c?.[ac.PATH];if(l)return wO.set(u,[Ql,ac.PATH],l),ir.setProperty(Qs.DATABASES,u),l}}let s=r[Qs.STORAGE_PATH.toUpperCase()];if(s){if(!IO.pathExistsSync(s))throw new Error(s+" does not exist");let i=dc.join(s,e);return IO.mkdirsSync(i),ir.setProperty(Qs.STORAGE_PATH,s),i}return LO()}a(Kk,"initSystemSchemaPaths");function Wk(){cc=void 0,uc=void 0,lc=void 0}a(Wk,"resetPaths");UO.exports={getBaseSchemaPath:CO,getSystemSchemaPath:LO,getTransactionAuditStorePath:Yk,getTransactionAuditStoreBasePath:DO,getSchemaPath:MO,initSystemSchemaPaths:Kk,resetPaths:Wk}});var Dr=T((qie,xO)=>{"use strict";var Qk=Ir().LMDB_ERRORS_ENUM,xie=require("lmdb"),zk=ht(),Fie=require("buffer").Buffer,{OVERFLOW_MARKER:PO,MAX_SEARCH_KEY_LENGTH:zl}=zk,vO=["number","string","symbol","boolean","bigint"];function Jk(e){if(e=e?.primaryStore||e,!e)throw new Error(Qk.ENV_REQUIRED)}a(Jk,"validateEnv");function Xk(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(Xk,"stringifyData");function jk(e){return e instanceof Date?e.valueOf():e}a(jk,"convertKeyValueToWrite");function Zk(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(vO.includes(typeof e))return e.length>zl?[e.slice(0,zl)+PO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(vO.includes(typeof i))i.length>zl?r.push(i.slice(0,zl)+PO):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(Zk,"getIndexedValues");var Jl=0,BO=0;function HO(){BO=Date.now()-performance.now()}a(HO,"adjustStartTime");HO();var eV=6e4;setInterval(HO,eV).unref();function tV(){let e=performance.now()+BO;return e>Jl?(Jl=e,e):(Jl+=488e-6,Jl)}a(tV,"getNextMonotonicTime");xO.exports={validateEnv:Jk,stringifyData:Xk,convertKeyValueToWrite:jk,getNextMonotonicTime:tV,getIndexedValues:Zk}});var FO,Nn,hh,fc=Ae(()=>{FO=require("events"),Nn=class extends FO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new hh;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)}},hh=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}}}});var ph={};Ve(ph,{loadGQLSchema:()=>sV,start:()=>mh,startOnMainThread:()=>nV});function mh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let K=function(F){if(F.kind==="NonNullType"){let Y=K(F.type);return Y.nullable=!1,Y}if(F.kind==="ListType")return{type:"array",elements:K(F.type)};let Q={type:F.name?.value};return Object.defineProperty(Q,"location",{value:F.loc.startToken}),Q};a(K,"getProperty");let A=S.name.value,I=[],w={table:null,database:null,properties:I};f.set(A,w);for(let F of S.directives){if(F.name.value==="table"){for(let P of F.arguments)w[P.name.value]=P.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=A),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,E.push(w)}if(F.name.value==="sealed"&&(w.sealed=!0),F.name.value==="export"){w.export=!0;for(let P of F.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let F of S.fields){let P=K(F.type);P.name=F.name.value,I.push(P);for(let Q of F.directives)if(Q.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,B=!0);else if(Q.name.value==="indexed")P.indexed=!0;else if(Q.name.value==="relationship"){let Y={};for(let z of Q.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(Q.name.value==="createdTime")P.assignCreatedTime=!0;else if(Q.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(Q.name.value==="expiresAt")P.expiresAt=!0;else if(Q.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of Q.arguments)z.name.value==="role"&&Y.push(z.value.value)}}w.type=A,A==="Query"&&(h=w)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):rV.includes(S.type)||(0,qO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Xl.dirname)(n),S.tableClass):i.set((0,Xl.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Xl.dirname)(n)+"/"+S.name,A.tableClass)}}}var Xl,qO,rV,nV,sV,GO=Ae(()=>{Xl=require("path");ge();qO=v(tt()),rV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(mh,"start");nV=mh,sV=mh({ensureTable:_t}).handleFile});async function jl(e){return iV?(Ec||(Ec=oV(cV)),(await(await Ec).import(e)).namespace):import(e)}async function oV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ec=new Compartment({console,Math,Date,fetch:aV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,VO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Ft,tables:Mr,databases:rt})}};let n=await(0,kO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ec}function aV(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 cV(){return{Resource:Ft,tables:Mr}}var kO,VO,iV,Ec,Sh=Ae(()=>{yn();ge();kO=require("fs/promises"),VO=require("path"),iV=!1;a(jl,"secureImport");a(oV,"getCompartment");a(aV,"secureOnlyFetch");a(cV,"getGlobalVars")});var gh={};Ve(gh,{handleFile:()=>uV});async function uV(e,t,r,n){let s=new Map,i=(0,$O.pathToFileURL)(r).toString(),o=await jl(i);u(o.default)&&n.set((0,Th.dirname)(t),o.default),c(o,(0,Th.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var $O,Th,YO=Ae(()=>{$O=require("url");Sh();Th=require("path");a(uV,"handleFile")});var Ah={};Ve(Ah,{start:()=>lV});function lV({resources:e}){e.set("login",Rh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Rh,KO=Ae(()=>{yn();a(lV,"start");Rh=class extends Ft{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var ZO={};Ve(ZO,{parse:()=>bh,streamAsJSON:()=>hc,stringify:()=>Mi});function hc(e){return new Oh({value:e})}function WO(e){return console.error(e),JSON.stringify(e.toString())}function QO(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Mi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===XO)return jO(e);if(t.resolution)return t.resolution.then(()=>Mi(e));throw t}}function jO(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=jO(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Mi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function bh(e){return fV.test(e)?_V.parse(e):JSON.parse(e)}var zO,JO,_V,dV,XO,Oh,fV,Nh=Ae(()=>{zO=require("stream"),JO=v(require("json-bigint-fixes")),_V=(0,JO.default)({useNativeBigInt:!0}),dV=1e4,XO={};BigInt.prototype.toJSON=function(){throw XO};a(hc,"streamAsJSON");Oh=class extends zO.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),WO)}catch(s){yield WO(s)}else yield Mi(t)}else yield Mi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);QO(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>dV?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 QO(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(WO,"handleError");a(QO,"when");a(Mi,"stringify");a(jO,"jsStringify");fV=/-?\d{16,}/;a(bh,"parse")});var db=T((roe,_b)=>{"use strict";var yh=require("recursive-iterator"),EV=require("alasql"),Ih=require("clone"),eb=J(),{handleHDBError:tb,hdb_errors:hV}=Z(),{HDB_ERROR_MSGS:rb,HTTP_STATUS_CODES:nb}=hV,{getDatabases:mV}=(ge(),ee(xe)),pV=["DISTINCT_ARRAY"],sb=Symbol("validateTables"),wh=Symbol("validateTable"),toe=Symbol("getAllColumns"),ib=Symbol("validateAllColumns"),Zl=Symbol("findColumn"),ob=Symbol("validateOrderBy"),mc=Symbol("validateSegment"),Ch=Symbol("validateColumn"),ab=Symbol("setColumnsForTable"),cb=Symbol("checkColumnsForAsterisk"),ub=Symbol("validateGroupBy"),lb=Symbol("hasColumns"),Lh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[sb](),this[cb](),this[ib]()}[sb](){if(this[lb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[wh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[wh](t.table)})}}[lb](){let t=!1,r=new yh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[wh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=mV();if(!r[t.databaseid])throw tb(new Error,rb.SCHEMA_NOT_FOUND(t.databaseid),nb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw tb(new Error,rb.TABLE_NOT_FOUND(t.databaseid,t.tableid),nb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ih(s);i.table=Ih(t),this.attributes.push(i)})}[Zl](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)}[cb](){let t=new yh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[ab](r.tableid)}[ab](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new EV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ib](){this[mc](this.statement.columns,!1),this[mc](this.statement.joins,!1),this[mc](this.statement.where,!1),this[ub](this.statement.group,!1),this[mc](this.statement.order,!0)}[mc](t,r){if(!t)return;let n=new yh(t),s=[];for(let{node:i,path:o}of n)!eb.isEmpty(i)&&!eb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ob](i):s.push(this[Ch](i)));return s}[ub](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&pV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ih(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Zl](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Zl](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[ob](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Ch](t)}[Ch](t){let r=this[Zl](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};_b.exports=Lh});var Eb=T((soe,fb)=>{"use strict";var Dh=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")}};fb.exports=Dh});var mb=T((ooe,hb)=>{"use strict";var Mh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};hb.exports=Mh});var Rb={};Ve(Rb,{HAS_EXPIRATION:()=>xh,LAST_TIMESTAMP_PLACEHOLDER:()=>Tc,LOCAL_TIMESTAMP:()=>SV,METADATA:()=>pc,NO_TIMESTAMP:()=>Uh,PENDING_LOCAL_TIME:()=>Fh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Hh,RecordEncoder:()=>Bh,TIMESTAMP_ASSIGN_LAST:()=>gV,TIMESTAMP_ASSIGN_NEW:()=>Tb,TIMESTAMP_ASSIGN_PREVIOUS:()=>gb,TIMESTAMP_PLACEHOLDER:()=>e_,TIMESTAMP_RECORD_PREVIOUS:()=>Ph,getUpdateRecord:()=>qh,handleLocalTimeForGets:()=>s_});function AV(){return Sc[0]=Sc[0]^64,TV.getFloat64(0)}function s_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[pc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ui.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ui.length;u++){let _=Ui[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ui.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function qh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Ho=i?.localTime?Ph|gb:Uh:Ho=u?i?.localTime?Ph|16384:Tb|16384:Uh,l>0&&(c|=xh),r_=c,vh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ho>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let A=_?.user?.username;if(E&&(t_=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,w=r.get(I);if(w){let B=Bt(w).previousLocalTime;return r.put(I,n_(o,t,n,B,A,d,t_),{ifVersion:p}),S}}r.put(Tc,n_(o,t,n,i?.localTime?1:0,A,d,t_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var pb,Sb,e_,Tc,Hh,SV,pc,Sc,TV,Uh,Tb,gV,gb,Ph,xh,Fh,RV,t_,Ho,r_,vh,Bh,uoe,Ui,gc=Ae(()=>{pb=require("msgpackr");Pi();Sb=v(V()),e_=new Uint8Array([1,1,1,1,4,64,0,0]),Tc=new Uint8Array([1,1,1,1,1,0,0,0]),Hh=new Uint8Array([1,1,1,1,3,64,0,0]),SV=Symbol("local-timestamp"),pc=Symbol("metadata"),Sc=new Uint8Array(8),TV=new DataView(Sc.buffer,0,8),Uh=0,Tb=0,gV=1,gb=3,Ph=4,xh=16,Fh=1,Ho=0,r_=-1,vh=0,Bh=class extends pb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Ho||r_>=0){let i=0,o=Ho;o&&(i+=8,Ho=0);let c=r_,u=vh;c>=0&&(i+=2,r_=-1,u&&(i+=8,vh=0));let _=RV=r.call(this,n,s|2048|i);t_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(e_[4]=o,e_[5]=o>>8,_.set(e_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Sc,0,c),c+=8;else for(let d=0;d<8;d++)Sc[d]=t[c++];u=AV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&xh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(AV,"getTimestamp");uoe=Map.prototype.get;a(s_,"handleLocalTimeForGets");Ui=[];setInterval(()=>{for(let e=0;e<Ui.length;e++){let t=Ui[e].deref();!t||t.isDone||t.isCommitted?Ui.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Sb.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(qh,"getUpdateRecord")});var i_=T((_oe,Ab)=>{"use strict";var kh=j(),Vh=M(),{RecordEncoder:OV}=(gc(),ee(Rb));kh.initSync();var bV=kh.get(Vh.CONFIG_PARAMS.STORAGE_COMPRESSION),NV=kh.get(Vh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,yV=Vh.UPDATES_PROPERTY,Gh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=bV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=NV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:OV},this.alwaysLazyProperty=n=>n===yV)}};Ab.exports=Gh});var a_=T((foe,bb)=>{"use strict";var xo=j(),Rc=M();xo.initSync();var IV=xo.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xo.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xo.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ob=xo.get(Rc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),wV=xo.get(Rc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),o_=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=IV,this.noFSAccess=!0,Ob!==void 0&&(this.overlappingSync=Ob),this.noReadAhead=wV}};bb.exports=o_;o_.MAX_DBS=1e4});var $e=T((hoe,Pb)=>{"use strict";var Yh=require("lmdb"),In=require("fs-extra"),Ur=require("path"),c_=Dr(),Ib=V(),or=Ir().LMDB_ERRORS_ENUM,u_=mb(),Kh=i_(),wb=a_(),zs=ht(),Nb=M(),{table:CV,resetDatabases:LV}=(ge(),ee(xe)),yb=j(),wn=zs.INTERNAL_DBIS_NAME,Cb=zs.DBI_DEFINITION_NAME,DV="data.mdb",MV="lock.mdb",Ac=".mdb",UV="-lock",$h=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Zr(t,r),this.key_type=this.dbi[zs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[zs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Yh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function l_(e,t){if(e===void 0)throw new Error(or.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(or.ENV_NAME_REQUIRED)}a(l_,"pathEnvNameValidation");async function Wh(e,t,r=!0){try{await In.access(e)}catch(n){throw n.code==="ENOENT"?new Error(or.INVALID_BASE_PATH):n}try{let n=Ur.join(e,t+Ac);return await In.access(n,In.constants.R_OK|In.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await In.access(Ur.join(e,t,DV),In.constants.R_OK|In.constants.F_OK),Ur.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(or.INVALID_ENVIRONMENT)}else throw new Error(or.INVALID_ENVIRONMENT);throw n}}a(Wh,"validateEnvironmentPath");function __(e,t){if(c_.validateEnv(e),t===void 0)throw new Error(or.DBI_NAME_REQUIRED)}a(__,"validateEnvDBIName");async function PV(e,t,r=!1,n=!1){l_(e,t);let s=Ur.basename(e);t=t.toString();let i=yb.get(Nb.CONFIG_PARAMS.DATABASES);i||yb.setProperty(Nb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Wh(e,t,n),Lb(e,t,r)}catch(o){if(o.message===or.INVALID_ENVIRONMENT){let c=Ur.join(e,t);await In.mkdirp(n?c:e);let u=new wb(n?c:c+Ac,!1),_=Yh.open(u);_.dbis=Object.create(null);let l=new Kh(!1);_.openDB(wn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Qh(e,t,r);return _[zs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(PV,"createEnvironment");async function vV(e,t,r,n=!0){l_(e,t),t=t.toString();let s=Ur.join(e,t);return CV({table:t,database:Ur.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(vV,"copyEnvironment");async function Lb(e,t,r=!1){l_(e,t),t=t.toString();let n=Qh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Wh(e,t),i=Ur.join(e,t+Ac),o=s!=i,c=new wb(s,o),u=Yh.open(c);u.dbis=Object.create(null);let _=Mb(u);for(let l=0;l<_.length;l++)Zr(u,_[l]);return u[zs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(Lb,"openEnvironment");async function BV(e,t,r=!1){l_(e,t),t=t.toString();let n=Ur.join(e,t+Ac),s=await Wh(e,t);if(global.lmdb_map!==void 0){let i=Qh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Db(o),delete global.lmdb_map[i]}}await In.remove(s),await In.remove(s===n?s+UV:Ur.join(Ur.dirname(s),MV))}a(BV,"deleteEnvironment");async function Db(e){c_.validateEnv(e);let t=e[zs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Db,"closeEnvironment");function Qh(e,t,r=!1){let s=`${Ur.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Qh,"getCachedEnvironmentName");function HV(e){c_.validateEnv(e);let t=Object.create(null),r=Zr(e,wn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==wn)try{t[n]=Object.assign(new u_,s)}catch{Ib.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(HV,"listDBIDefinitions");function Mb(e){c_.validateEnv(e);let t=[],r=Zr(e,wn);for(let{key:n}of r.getRange({start:!1}))n!==wn&&t.push(n);return t}a(Mb,"listDBIs");function xV(e,t){let n=Zr(e,wn).getEntry(t),s=new u_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Ib.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(xV,"getDBIDefinition");function Ub(e,t,r,n=!r){if(__(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Zr(e,t)}catch(s){if(s.message===or.DBI_DOES_NOT_EXIST){let i=new Kh(r,n===!0),o=e.openDB(t,i),c=new u_(r===!0,n);return o[Cb]=c,Zr(e,wn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Ub,"createDBI");function Zr(e,t){if(__(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==wn?r=xV(e,t):r=new u_,r===void 0)throw new Error(or.DBI_DOES_NOT_EXIST);let n;try{let s=new Kh(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(or.DBI_DOES_NOT_EXIST):s}return n[Cb]=r,e.dbis[t]=n,n}a(Zr,"openDBI");function FV(e,t){__(e,t),t=t.toString();let r=Zr(e,t),n=r.getStats();return r[zs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(FV,"statDBI");async function qV(e,t){try{let r=Ur.join(e,t+Ac);return(await In.stat(r)).size}catch{throw new Error(or.INVALID_ENVIRONMENT)}}a(qV,"environmentDataSize");function GV(e,t){if(__(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_DROP_INTERNAL_DBIS_NAME);Zr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Zr(e,wn).removeSync(t)}a(GV,"dropDBI");function kV(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Zr(e,i)}catch(o){if(o.message===or.DBI_DOES_NOT_EXIST)Ub(e,i,i!==t,i===t),n=!0;else throw o}}n&&LV()}a(kV,"initializeDBIs");Pb.exports={openDBI:Zr,openEnvironment:Lb,createEnvironment:PV,listDBIs:Mb,listDBIDefinitions:HV,createDBI:Ub,dropDBI:GV,statDBI:FV,deleteEnvironment:BV,initializeDBIs:kV,TransactionCursor:$h,environmentDataSize:qV,copyEnvironment:vV,closeEnvironment:Db}});var Bb=T((poe,vb)=>{"use strict";var zh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};vb.exports=zh});var xb=T((Toe,Hb)=>{"use strict";var Jh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Hb.exports=Jh});var qb=T((Roe,Fb)=>{"use strict";var Xh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Fb.exports=Xh});var Fo=T((yoe,Vb)=>{"use strict";var VV=$e(),$V=Bb(),YV=xb(),KV=qb(),$n=Dr(),Oc=Ir().LMDB_ERRORS_ENUM,WV=ht(),Ss=M(),QV=J(),zV=require("uuid"),Ooe=require("lmdb"),{handleHDBError:JV,hdb_errors:XV}=Z(),{OVERFLOW_MARKER:boe,MAX_SEARCH_KEY_LENGTH:Noe}=WV,Gb=j();Gb.initSync();var d_=Gb.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jh=Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME,vi=Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function jV(e,t,r,n,s=$n.getNextMonotonicTime()){rm(e,t,r,n),Zh(e,t,r);let i=new $V,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];kb(_,!0,s);let l=ZV(e,t,r,_),d=_[t];o.push(l),c.push(d)}return em(o,c,n,i,s)}a(jV,"insertRecords");function ZV(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Ss.FUNC_VAL],n[o]=c)}let u=$n.getIndexedValues(c),_=e.dbis[o];if(u){d_&&_.prefetch(u.map(l=>({key:l,value:s})),f_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}d_&&e.dbis[t].prefetch([s],f_),e.dbis[t].put(s,n,n[vi])})}a(ZV,"insertRecord");function e$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(e$,"removeSkippedRecords");function kb(e,t,r){let n=r>0;(n||!Number.isInteger(e[vi]))&&(e[vi]=r||(r=$n.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[jh]))&&(e[jh]=r||$n.getNextMonotonicTime()):delete e[jh]}a(kb,"setTimestamps");function Zh(e,t,r){r.indexOf(Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),VV.initializeDBIs(e,t,r)}a(Zh,"initializeTransaction");async function t$(e,t,r,n,s=$n.getNextMonotonicTime()){rm(e,t,r,n),Zh(e,t,r);let i=new YV,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=tm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return em(c,u,n,i,s,o)}a(t$,"updateRecords");async function r$(e,t,r,n,s=$n.getNextMonotonicTime()){try{rm(e,t,r,n)}catch(u){throw JV(u,u.message,XV.HTTP_STATUS_CODES.BAD_REQUEST)}Zh(e,t,r);let i=new KV,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;QV.isEmpty(_[t])?(l=zV.v4(),_[t]=l):l=_[t];let d=tm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return em(o,c,n,i,s)}a(r$,"upsertRecords");async function em(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||$n.getNextMonotonicTime(),e$(r,i),n}a(em,"finalizeWrite");function tm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(kb(r,!l,o),Number.isInteger(r[vi])&&_[vi]>r[vi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let w=p([[_]]);Array.isArray(w)&&(p=w[0][Ss.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=$n.getIndexedValues(A);if(I){d_&&S.prefetch(I.map(w=>({key:w,value:n})),f_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],n)}if(I=$n.getIndexedValues(p),I){d_&&S.prefetch(I.map(w=>({key:w,value:n})),f_);for(let w=0,B=I.length;w<B;w++)S.put(I[w],n)}}let E=Object.assign({},_,r);c.put(n,E,E[vi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:tm(e,t,r,n,s,i,o))}a(tm,"updateUpsertRecord");function n$(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(Oc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Oc.WRITE_ATTRIBUTES_REQUIRED):new Error(Oc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(n$,"validateBasic");function rm(e,t,r,n){if(n$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Oc.RECORDS_REQUIRED):new Error(Oc.RECORDS_MUST_BE_ARRAY)}a(rm,"validateWrite");function f_(){}a(f_,"noop");Vb.exports={insertRecords:jV,updateRecords:t$,upsertRecords:r$}});var Bi=T((woe,s$)=>{s$.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",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Kn=T((Coe,Kb)=>{"use strict";var Yb=J(),$b=M(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Yn=require("joi"),Js={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},i$=Yn.alternatives(Yn.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),Yn.number(),Yn.array()).required(),o$=Yn.alternatives(Yn.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),Yn.number()),a$=Yn.alternatives(Yn.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),Yn.number()).required();function c$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Js.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(c$,"checkValidTable");function u$(e,t){return Yb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(u$,"validateSchemaExists");function l$(e,t){let r=t.state.ancestors[0].schema;return Yb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(l$,"validateTableExists");function _$(e,t){return e.toLowerCase()===$b.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$b.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(_$,"validateSchemaName");Kb.exports={common_validators:Js,schema_regex:qo,hdb_schema_table:i$,validateSchemaExists:u$,validateTableExists:l$,validateSchemaName:_$,checkValidTable:c$,hdb_database:o$,hdb_table:a$}});var E_=T((Doe,Wb)=>{var{common_validators:Wn}=Kn(),Nc=et(),bc="is required",mt={database:{presence:!1,format:Wn.schema_format,length:Wn.schema_length},schema:{presence:!1,format:Wn.schema_format,length:Wn.schema_length},table:{presence:!0,format:Wn.schema_format,length:Wn.schema_length},attribute:{presence:!0,format:Wn.schema_format,length:Wn.schema_length},hash_attribute:{presence:!0,format:Wn.schema_format,length:Wn.schema_length}};function yc(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(yc,"makeAttributesStrings");function d$(e){return e=yc(e),mt.table.presence=!1,mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(d$,"schema_object");function f$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(f$,"table_object");function E$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence=!1,Nc.validateObject(e,mt)}a(E$,"create_table_object");function h$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence={message:bc},mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(h$,"attribute_object");function m$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(m$,"describe_table");function p$(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(p$,"validateTableResidence");Wb.exports={schema_object:d$,create_table_object:E$,table_object:f$,attribute_object:h$,describe_table:m$,validateTableResidence:p$}});var zb=T((Uoe,Qb)=>{"use strict";var S$=require("uuid"),nm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||S$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Qb.exports=nm});var h_=T((voe,Jb)=>{"use strict";var T$=zb(),sm=class extends T${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Jb.exports=sm});var jb=T((Hoe,Xb)=>{"use strict";Xb.exports=R$;var g$="inserted";function R$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===g$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(R$,"returnObject")});var m_=T((Foe,nN)=>{"use strict";var A$=M(),im=$e(),O$=Fo(),{getSystemSchemaPath:b$,getSchemaPath:N$}=We(),y$=Bi(),I$=E_(),w$=h_(),C$=jb(),{handleHDBError:Zb,hdb_errors:tN}=Z(),eN=J(),{HTTP_STATUS_CODES:L$}=tN,om=y$.hdb_attribute,rN=[];for(let e=0;e<om.attributes.length;e++)rN.push(om.attributes[e].attribute);var D$="inserted";nN.exports=M$;async function M$(e){let t=I$.attribute_object(e);if(t)throw Zb(new Error,t.message,tN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&eN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Zb(new Error,r,L$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=eN.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new w$(e.schema,e.table,e.attribute,e.id);try{let i=await im.openEnvironment(N$(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}`);im.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await im.openEnvironment(b$(),A$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await O$.insertRecords(o,om.hash_attribute,rN,[s]);return C$(D$,c,{records:[s]},u)}catch(i){throw i}}a(M$,"lmdbCreateAttribute")});var cm=T((Goe,iN)=>{var{hdb_table:U$,hdb_database:sN}=Kn(),P$=et(),am=require("joi"),v$={undefined:"undefined",null:"null"},B$=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||v$[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),H$=am.object({database:sN,schema:sN,table:U$,records:am.array().items(am.object().custom(B$)).required()});iN.exports=function(e){return P$.validateBySchema(e,H$)}});var Ic=T(($oe,aN)=>{"use strict";var Ts=J(),oN=V(),Voe=cm(),{getDatabases:x$}=(ge(),ee(xe)),{ClientError:Hi}=Z();aN.exports=F$;function F$(e){if(Ts.isEmpty(e))throw new Hi("invalid update parameters defined.");if(Ts.isEmptyOrZeroLength(e.schema))throw new Hi("invalid schema specified.");if(Ts.isEmptyOrZeroLength(e.table))throw new Hi("invalid table specified.");if(!Array.isArray(e.records))throw new Hi("records must be an array");let t=x$()[e.schema]?.[e.table];if(Ts.isEmpty(t))throw new Hi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Ts.isEmptyOrZeroLength(o[r]))throw oN.error("a valid hash attribute must be provided with update record:",o),new Hi("a valid hash attribute must be provided with update record, check log for more info");if(!Ts.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw oN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Hi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ts.isEmpty(o[r])&&o[r]!==""&&n.has(Ts.autoCast(o[r]))&&(o.skip=!0),n.add(Ts.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(F$,"insertUpdateValidate")});var wc=T((Koe,cN)=>{"use strict";var q$=M().OPERATIONS_ENUM,um=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=q$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};cN.exports=um});var Mc=T((zoe,uN)=>{"use strict";var Qoe=wc(),p_=M(),_m=J(),lm=V(),G$=require("uuid"),{handleHDBError:Cc,hdb_errors:k$}=Z(),{HDB_ERROR_MSGS:Lc,HTTP_STATUS_CODES:Dc}=k$;uN.exports=V$;function V$(e,t,r){for(let s=0;s<t.length;s++)$$(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];Y$(i,r,e.operation)}}a(V$,"processRows");function $$(e){if(Buffer.byteLength(String(e))>p_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cc(new Error,Lc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(_m.isEmptyOrZeroLength(e)||_m.isEmpty(e.trim()))throw Cc(new Error,Lc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a($$,"validateAttribute");function Y$(e,t,r){if(!e.hasOwnProperty(t)||_m.isEmptyOrZeroLength(e[t])){if(r===p_.OPERATIONS_ENUM.INSERT||r===p_.OPERATIONS_ENUM.UPSERT){e[t]=G$.v4();return}throw lm.error("Update transaction aborted due to record with no hash value:",e),Cc(new Error,Lc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>p_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw lm.error(e),Cc(new Error,Lc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw lm.error(e),Cc(new Error,Lc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(Y$,"validateHash")});var _N=T((Xoe,lN)=>{"use strict";var dm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};lN.exports=dm});var EN=T((Zoe,fN)=>{"use strict";var fm=$e(),K$=V(),dN=Ir().LMDB_ERRORS_ENUM;fN.exports=W$;async function W$(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 fm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==dN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await fm.closeEnvironment(global.lmdb_map[n]),await fm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==dN.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){K$.error(t)}}a(W$,"cleanLMDBMap")});var gs=T((tae,SN)=>{"use strict";var Uc=require("crypto"),Q$=j(),{CONFIG_PARAMS:z$}=M(),mN="aes-256-cbc",J$=32,X$=16,Em=64,pN=32,j$=Em+pN,hN=new Map;SN.exports={encrypt:Z$,decrypt:e1,createNatsTableStreamName:t1};function Z$(e){let t=Uc.randomBytes(J$),r=Uc.randomBytes(X$),n=Uc.createCipheriv(mN,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Z$,"encrypt");function e1(e){let t=e.substr(0,Em),r=e.substr(Em,pN),n=e.substr(j$,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uc.createDecipheriv(mN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(e1,"decrypt");function t1(e,t){let r=Q$.get(z$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hN.get(r);return n||(n=Uc.createHash("md5").update(r).digest("hex"),hN.set(r,n)),n}a(t1,"createNatsTableStreamName")});var xi=T((sae,gN)=>{"use strict";var nae=en(),S_=V(),TN=E_(),r1=gs(),T_=J(),{handleHDBError:g_,hdb_errors:n1}=Z(),{HDB_ERROR_MSGS:R_,HTTP_STATUS_CODES:hm}=n1,s1=j();s1.initSync();var{getDatabases:mm}=(ge(),ee(xe));gN.exports={describeAll:i1,describeTable:A_,describeSchema:o1};async function i1(e){try{let t=T_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=mm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await A_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await A_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){S_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return S_.error("Got an error in describeAll"),S_.error(t),g_(new Error,R_.DESCRIBE_ALL_ERR)}}a(i1,"describeAll");async function A_(e,t){T_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=TN.describe_table(e);if(i)throw i;let c=mm()[r];if(!c)throw g_(new Error,R_.SCHEMA_NOT_FOUND(e.schema),hm.NOT_FOUND);let u=c[n];if(!u)throw g_(new Error,R_.TABLE_NOT_FOUND(e.schema,e.table),hm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=r1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){S_.warn(`unable to stat table dbi due to ${f}`)}return d}a(A_,"descTable");async function o1(e){T_.transformReq(e);let t=TN.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 n=e.schema.toString(),i=mm()[n];if(!i)throw g_(new Error,R_.SCHEMA_NOT_FOUND(e.schema),hm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),T_.isEmpty(u)||u.describe){let _=await A_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(o1,"describeSchema")});var Xs=T((cae,NN)=>{var a1=Bi(),{callbackify:AN,promisify:c1}=require("util"),{getDatabases:ON}=(ge(),ee(xe));NN.exports={setSchemaDataToGlobal:RN,getTableSchema:u1,getSystemSchema:l1,setSchemaDataToGlobalAsync:c1(RN)};var bN=xi(),oae=AN(bN.describeAll),aae=AN(bN.describeTable);function RN(e){global.hdb_schema=ON(),e&&e()}a(RN,"setSchemaDataToGlobal");function u1(e,t,r){let n=ON()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(u1,"getTableSchema");function l1(){return a1}a(l1,"getSystemSchema")});var tn=T((lae,CN)=>{"use strict";var b_=cm(),qt=J(),_1=require("util"),N_=Cn(),d1=Xs(),yN=V(),{handleHDBError:Fi,hdb_errors:f1}=Z(),{HTTP_STATUS_CODES:qi}=f1,E1=_1.promisify(d1.getTableSchema),h1="updated",IN="inserted",wN="upserted";CN.exports={insert:p1,update:S1,upsert:T1,validation:m1,flush:g1};async function m1(e){if(qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await E1(e.schema,e.table),r=b_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&qt.isEmptyOrZeroLength(c[n]))throw yN.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(!qt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw yN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!qt.isEmpty(c[n])&&c[n]!==""&&s.has(qt.autoCast(c[n]))&&(c.skip=!0),s.add(qt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(m1,"validation");async function p1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=b_(e);if(t)throw Fi(new Error,t.message,qi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,qi.BAD_REQUEST);let n=await N_.createRecords(e);return O_(IN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(p1,"insertData");async function S1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=b_(e);if(t)throw Fi(new Error,t.message,qi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,qi.BAD_REQUEST);let n=await N_.updateRecords(e);return qt.isEmpty(n.existing_rows)?O_(h1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):O_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(S1,"updateData");async function T1(e){if(e.operation!=="upsert")throw Fi(new Error,"invalid operation, must be upsert",qi.INTERNAL_SERVER_ERROR);let t=b_(e);if(t)throw Fi(new Error,t.message,qi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,qi.BAD_REQUEST);let n=await N_.upsertRecords(e);return O_(wN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(T1,"upsertData");function O_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===IN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===wN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(O_,"returnObject");function g1(e){return qt.transformReq(e),N_.flush(e.schema,e.table)}a(g1,"flush")});var Sm=T((dae,MN)=>{var R1=et(),pm=require("joi"),{hdb_table:A1,hdb_database:LN}=Kn(),DN={schema:LN,database:LN,table:A1},O1={date:pm.date().iso().required()},b1={timestamp:pm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};MN.exports=function(e,t){let r=t==="timestamp"?{...DN,...b1}:{...DN,...O1},n=pm.object(r);return R1.validateBySchema(e,n)}});var vN=T((fae,PN)=>{var N1=et(),Tm=require("joi"),{hdb_table:y1,hdb_database:UN}=Kn(),I1=Tm.object({schema:UN,database:UN,table:y1,hash_values:Tm.array().required(),ids:Tm.array()});PN.exports=function(e){return N1.validateBySchema(e,I1)}});var HN=T((Eae,BN)=>{"use strict";var gm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},Rm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},Am=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};BN.exports={InsertObject:gm,NoSQLSeachObject:Rm,DeleteResponseObject:Am}});var Vi=T((mae,kN)=>{"use strict";var FN=Sm(),w1=vN(),Gi=J(),xN=require("moment"),qN=V(),{promisify:C1,callbackify:L1}=require("util"),ki=M(),D1=Xs(),Om=C1(D1.getTableSchema),bm=Cn(),{DeleteResponseObject:M1}=HN(),{handleHDBError:js,hdb_errors:U1}=Z(),{HDB_ERROR_MSGS:y_,HTTP_STATUS_CODES:Zs}=U1,P1="records successfully deleted",v1=L1(GN);kN.exports={delete:v1,deleteRecord:GN,deleteFilesBefore:B1,deleteAuditLogsBefore:H1};async function B1(e){let t=FN(e,"date");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),!xN(e.date,xN.ISO_8601).isValid())throw js(new Error,y_.INVALID_DATE,Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,y_.INVALID_DATE,!0);let n=Gi.checkSchemaTableExist(e.schema,e.table);if(n)throw js(new Error,n,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,n,!0);let s=await bm.deleteRecordsBefore(e);if(await Om(e.schema,e.table),qN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B1,"deleteFilesBefore");async function H1(e){let t=FN(e,"timestamp");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),isNaN(e.timestamp))throw js(new Error,y_.INVALID_VALUE("Timestamp"),Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,y_.INVALID_VALUE("Timestamp"),!0);let r=Gi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,r,!0);let n=await bm.deleteAuditLogsBefore(e);return await Om(e.schema,e.table),qN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(H1,"deleteAuditLogsBefore");async function GN(e){e.ids&&(e.hash_values=e.ids);let t=w1(e);if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);Gi.transformReq(e);let r=Gi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,r,!0);try{await Om(e.schema,e.table);let n=await bm.deleteRecords(e);return Gi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${P1}`),n}catch(n){if(n.message===ki.SEARCH_NOT_FOUND_MESSAGE){let s=new M1;return s.message=ki.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(GN,"deleteRecord")});var I_=T((Sae,YN)=>{var x1=require("crypto"),VN=9;function F1(e){let t=G1(VN),r=$N(e+t);return t+r}a(F1,"createHash");function q1(e,t){let r=e?.substr(0,VN),n=r+$N(t+r);return e===n}a(q1,"validateHash");function G1(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(G1,"generateSalt");function $N(e){return x1.createHash("md5").update(e).digest("hex")}a($N,"md5");YN.exports={hash:F1,validate:q1}});var WN=T((gae,KN)=>{var Nm=et(),Qt={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 k1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Nm.validateObject(e,Qt)}a(k1,"addUserValidation");function V1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Nm.validateObject(e,Qt)}a(V1,"alterUserValidation");function $1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Nm.validateObject(e,Qt)}a($1,"dropUserValidation");KN.exports={addUserValidation:k1,alterUserValidation:V1,dropUserValidation:$1}});var nt=T((Oae,zN)=>{"use strict";var{platform:Aae}=require("os"),Y1="nats-server.zip",ym="nats-server",K1=process.platform==="win32"?`${ym}.exe`:ym,Im="HDB",W1=/^[^\s.,*>]+$/,QN="__request__",Q1=a(e=>`${e}.${QN}`,"REQUEST_SUBJECT"),z1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},J1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},X1={HUB:"hub.pid",LEAF:"leaf.pid"},j1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Z1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Im,deliver_subject:"__HDB__.WORKQUEUE"},eY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Im,deliver_subject:"HDB.SCHEMAQUEUE"},tY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Im,deliver_subject:"HDB.USERQUEUE"},rY={SUCCESS:"success",ERROR:"error"},nY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sY={TXN:"txn",MSGID:"msgid"},Go={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iY={[Go.ERR]:1,[Go.WRN]:2,[Go.INF]:3,[Go.DBG]:4,[Go.TRC]:5},oY={debug:"-D",trace:"-DVV"};zN.exports={NATS_SERVER_ZIP:Y1,NATS_SERVER_NAME:ym,NATS_BINARY_NAME:K1,PID_FILES:X1,NATS_CONFIG_FILES:J1,SERVER_SUFFIX:j1,WORK_QUEUE_CONSUMER_NAMES:Z1,SCHEMA_QUEUE_CONSUMER_NAMES:eY,USER_QUEUE_CONSUMER_NAMES:tY,NATS_TERM_CONSTRAINTS_RX:W1,REQUEST_SUFFIX:QN,UPDATE_REMOTE_RESPONSE_STATUSES:rY,CLUSTER_STATUS_STATUSES:nY,REQUEST_SUBJECT:Q1,SUBJECT_PREFIXES:sY,MSG_HEADERS:z1,LOG_LEVELS:Go,LOG_LEVEL_FLAGS:oY,LOG_LEVEL_HIERARCHY:iY}});var XN=T((Nae,JN)=>{"use strict";var w_=M(),C_=class{static{a(this,"BaseLicense")}constructor(t=0,r=w_.RAM_ALLOCATION_ENUM.DEFAULT,n=w_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},wm=class extends C_{static{a(this,"ExtendedLicense")}constructor(t=0,r=w_.RAM_ALLOCATION_ENUM.DEFAULT,n=w_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};JN.exports={BaseLicense:C_,ExtendedLicense:wm}});var $i=T((Iae,ny)=>{"use strict";var Vo=require("fs-extra"),ZN=I_(),ey=require("crypto"),aY=require("moment"),cY=require("uuid").v4,zt=V(),Lm=require("path"),uY=J(),ei=M(),{totalmem:jN}=require("os"),lY=XN().ExtendedLicense,ko="invalid license key format",_Y="061183",dY="mofi25",fY="aes-256-cbc",EY=16,hY=32,ty=j();ty.initSync();var Cm;ny.exports={validateLicense:ry,generateFingerPrint:pY,licenseSearch:Um,getLicense:gY,checkMemoryLimit:RY};function Dm(){return Lm.join(ty.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(Dm,"getLicenseDirPath");function mY(){let e=Dm();return Lm.join(e,ei.LICENSE_FILE_NAME)}a(mY,"getLicenseFilePath");function Mm(){let e=Dm();return Lm.join(e,ei.REG_KEY_FILE_NAME)}a(Mm,"getFingerPrintFilePath");async function pY(){let e=Mm();try{return await Vo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await SY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(pY,"generateFingerPrint");async function SY(){let e=cY(),t=ZN.hash(e),r=Mm();try{await Vo.mkdirp(Dm()),await Vo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(n),new Error("There was an error generating the fingerprint")}return t}a(SY,"writeFingerprint");function ry(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ei.RAM_ALLOCATION_ENUM.DEFAULT,version:ei.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let n=Mm(),s=!1;try{s=Vo.statSync(n)}catch(i){zt.error(i)}if(s){let i;try{i=Vo.readFileSync(n,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(dY),c=o[1];c=Buffer.concat([Buffer.from(c)],EY);let u=Buffer.concat([Buffer.from(i)],hY),_=ey.createDecipheriv(fY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=TY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ko),zt.error(ko),new Error(ko)}let d;if(isNaN(l))try{d=JSON.parse(l),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(ko),zt.error(ko),new Error(ko)}else r.exp_date=l;r.exp_date<aY().valueOf()&&(r.valid_date=!1),ZN.validate(o[1],`${_Y}${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||zt.error("Invalid licence"),r}a(ry,"validateLicense");function TY(e,t){try{let r=ey.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{zt.warn("Check old license failed")}}a(TY,"checkOldLicense");function Um(){let e=new lY,t=[];try{t=Vo.readFileSync(mY(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(uY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=ry(s.license_key,s.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(s){zt.error("There was an error parsing the license string."),zt.error(s),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Cm=e,e}a(Um,"licenseSearch");async function gY(){return Cm||await Um(),Cm}a(gY,"getLicense");function RY(){let e=Um().ram_allocation,t=process.constrainedMemory?.()||jN();if(t=Math.round(Math.min(t,jN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(RY,"checkMemoryLimit")});var rn=T((Mae,Ty)=>{"use strict";var ay="username is required",cy="nothing to update, must supply active, role or password to update",uy="password cannot be an empty string",ly="If role is specified, it cannot be empty.",_y="active must be true or false";Ty.exports={addUser:LY,alterUser:DY,dropUser:UY,getSuperUser:HY,userInfo:PY,listUsers:D_,listUsersExternal:vY,setUsersToGlobal:Yo,findAndValidateUser:py,getClusterUser:xY,USERNAME_REQUIRED:ay,ALTERUSER_NOTHING_TO_UPDATE:cy,EMPTY_PASSWORD:uy,EMPTY_ROLE:ly,ACTIVE_BOOLEAN:_y};var dy=tn(),AY=Vi(),Bm=I_(),fy=WN(),Ey=en(),Hm=Rs(),Pr=J(),hy=require("validate.js"),Te=V(),{promisify:OY}=require("util"),xm=gs(),sy=M(),iy=nt(),bY=Lr(),Cae=j(),Lae=$i(),NY=Bi(),{table:Dae}=(ge(),ee(xe)),{handleHDBError:Qn,hdb_errors:yY}=Z(),{HTTP_STATUS_CODES:zn,AUTHENTICATION_ERROR_MSGS:Pm,HDB_ERROR_MSGS:$o}=yY,{UserEventMsg:Fm}=Ln(),vm=require("lodash"),{server:qm}=(nr(),ee(Ci)),IY=V();qm.getUser=(e,t)=>py(e,t,t!=null);var my={username:!0,active:!0,role:!0,password:!0},oy=new Map,L_=Ey.searchByValue,wY=Ey.searchByHash,CY=OY(AY.delete);async function LY(e){let t=hy.cleanAttributes(e,my),r=fy.addUserValidation(t);if(r)throw Qn(new Error,r.message,zn.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await L_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw Qn(new Error,$o.ROLE_NAME_NOT_FOUND(t.role),zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Qn(new Error,$o.DUP_ROLES_FOUND(t.role),zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=xm.encrypt(t.password)),t.password=Bm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dy.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Yo()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw Qn(new Error,$o.USER_ALREADY_EXISTS(t.username),zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Hm.signalUserChange(new Fm(process.pid)),`${c.username} successfully added`}a(LY,"addUser");async function DY(e){let t=hy.cleanAttributes(e,my);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(ay);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(cy);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(uy);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(_y);let r=MY(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=xm.encrypt(t.password)),t.password=Bm.hash(t.password)),t.role==="")throw new Error(ly);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await L_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=$o.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),Qn(new Error,c,zn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$o.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),Qn(new Error,c,zn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await dy.update(n)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Yo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Hm.signalUserChange(new Fm(process.pid)),s}a(DY,"alterUser");function MY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(MY,"isClusterUser");async function UY(e){try{let t=fy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Qn(new Error,$o.USER_NOT_EXIST(e.username),zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await CY(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Yo()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return Hm.signalUserChange(new Fm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(UY,"dropUser");async function PY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=vm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await wY(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(PY,"userInfo");async function vY(){let e;try{e=await D_()}catch(t){throw Te.error("Got an error listing users."),Te.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(vY,"listUsersExternal");async function D_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await L_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=vm.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await L_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=vm.cloneDeep(o),o.role=r[o.role],BY(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Pr.errorizeMessage(e)}return null}a(D_,"listUsers");function BY(e){try{if(!e){Te.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(NY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(BY,"appendSystemTablesToRole");async function Yo(){try{let e=await D_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Yo,"setUsersToGlobal");async function py(e,t,r=!0){global.hdb_users||await Yo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Qn(new Error,Pm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Qn(new Error,Pm.USER_INACTIVE,zn.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(oy.get(t)===n.password)return s;if(Bm.validate(n.password,t))oy.set(t,n.password);else throw Qn(new Error,Pm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(py,"findAndValidateUser");async function HY(){global.hdb_users||await Yo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(HY,"getSuperUser");async function xY(){let e=await D_(),t=bY.getConfigFromFile(sy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===sy.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=xm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+iy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+iy.SERVER_SUFFIX.ADMIN,r}a(xY,"getClusterUser");var Sy=[];qm.invalidateUser=function(e){for(let t of Sy)try{t(e)}catch(r){IY.error("Error invalidating user",r)}};qm.onInvalidatedUser=function(e){Sy.push(e)}});var vc=T((Bae,Oy)=>{"use strict";var Yi=V(),vr=M(),FY=EN(),Pae=Xs(),vae=xi(),qY=rn(),{validateEvent:gy}=Ln(),Pc=Cn(),GY=require("process"),{resetDatabases:kY}=(ge(),ee(xe)),VY={[vr.ITC_EVENT_TYPES.SCHEMA]:$Y,[vr.ITC_EVENT_TYPES.USER]:Ay};async function $Y(e){let t=gy(e);if(t){Yi.error(t);return}Yi.trace("ITC schemaHandler received schema event:",e),await FY(e.message),await YY(e.message)}a($Y,"schemaHandler");async function YY(e){try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=kY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Yi.error(t)}}a(YY,"syncSchemaMetadata");var Ry=[];async function Ay(e){try{try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Yi.warn(r)}let t=gy(e);if(t){Yi.error(t);return}Yi.trace(`ITC userHandler ${vr.HDB_ITC_CLIENT_PREFIX}${GY.pid} received user event:`,e),await qY.setUsersToGlobal();for(let r of Ry)r()}catch(t){Yi.error(t)}}a(Ay,"userHandler");Ay.addListener=function(e){Ry.push(e)};Oy.exports=VY});var Ln=T((kae,Ny)=>{"use strict";var xae=V(),Gm=J(),KY=M(),{ITC_ERRORS:Bc}=Ir(),{parentPort:Fae,threadId:WY,isMainThread:QY,workerData:qae}=require("worker_threads"),{onMessageFromWorkers:zY,broadcast:Gae,broadcastWithAcknowledgement:JY}=tt();Ny.exports={sendItcEvent:XY,validateEvent:by,SchemaEventMsg:jY,UserEventMsg:ZY};var M_;zY(async(e,t)=>{M_=M_||vc(),by(e),M_[e.type]&&await M_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function XY(e){return!QY&&e.message&&(e.message.originator=WY),JY(e)}a(XY,"sendItcEvent");function by(e){if(typeof e!="object")return Bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Gm.isEmpty(e.type))return Bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Gm.isEmpty(e.message))return Bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Gm.isEmpty(e.message.originator))return Bc.MISSING_ORIGIN;if(KY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bc.INVALID_EVENT(e.type)}a(by,"validateEvent");function jY(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(jY,"SchemaEventMsg");function ZY(e){this.originator=e}a(ZY,"UserEventMsg")});var Rs=T((Yae,Cy)=>{"use strict";var yy=M(),$ae=J(),U_=V(),Iy=_N(),Ko,{sendItcEvent:wy}=Ln();function eK(e){try{U_.trace("signalSchemaChange called with message:",e),Ko=Ko||vc();let t=new Iy(yy.ITC_EVENT_TYPES.SCHEMA,e);return Ko.schema(t),wy(t)}catch(t){U_.error(t)}}a(eK,"signalSchemaChange");function tK(e){try{U_.trace("signalUserChange called with message:",e),Ko=Ko||vc();let t=new Iy(yy.ITC_EVENT_TYPES.USER,e);return Ko.user(t),wy(t)}catch(t){U_.error(t)}}a(tK,"signalUserChange");Cy.exports={signalSchemaChange:eK,signalUserChange:tK}});var P_=T((Wae,Dy)=>{"use strict";var Ly=J(),rK=M(),nK=V(),sK=m_(),iK=h_(),oK=Rs(),{SchemaEventMsg:aK}=Ln(),cK="already exists in";Dy.exports=uK;async function uK(e,t,r){if(Ly.isEmptyOrZeroLength(r))return r;let n=[];Ly.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await lK(e,t.schema,t.name,i)})),s}a(uK,"lmdbCheckForNewAttributes");async function lK(e,t,r,n){let s=new iK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await _K(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(cK))nK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(lK,"createNewAttribute");async function _K(e){let t;return t=await sK(e),oK.signalSchemaChange(new aK(process.pid,rK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_K,"createAttribute")});var Wo=T((zae,My)=>{"use strict";var km=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};My.exports=km});var Py=T((Xae,Uy)=>{"use strict";var dK=Wo(),fK=M().OPERATIONS_ENUM,Vm=class extends dK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(fK.INSERT,r,n,s,i),this.records=t}};Uy.exports=Vm});var By=T((Zae,vy)=>{"use strict";var EK=Wo(),hK=M().OPERATIONS_ENUM,$m=class extends EK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(hK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};vy.exports=$m});var xy=T((tce,Hy)=>{"use strict";var mK=Wo(),pK=M().OPERATIONS_ENUM,Ym=class extends mK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(pK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Hy.exports=Ym});var qy=T((nce,Fy)=>{"use strict";var SK=Wo(),TK=M().OPERATIONS_ENUM,Km=class extends SK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(TK.DELETE,n,s,t,i),this.original_records=r}};Fy.exports=Km});var Hc=T((oce,$y)=>{"use strict";var ice=require("path"),Gy=$e(),gK=Py(),RK=By(),AK=xy(),OK=qy(),Qo=ht(),ky=J(),{CONFIG_PARAMS:bK}=M(),Vy=j();Vy.initSync();var v_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:NK}=We();$y.exports=yK;async function yK(e,t){if(Vy.get(bK.LOGGING_AUDITLOG)===!1)return;let r=NK(e.schema,e.table),n=await Gy.openEnvironment(r,e.table,!0),s=IK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Gy.initializeDBIs(n,Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),ky.isEmpty(s.user_name)||n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(yK,"writeTransaction");function IK(e,t){let r=ky.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===v_.INSERT)return new gK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.UPDATE)return new RK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.UPSERT)return new AK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.DELETE)return new OK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(IK,"createTransactionObject")});var Wm=T((uce,Yy)=>{"use strict";var wK=Ic(),cce=wc(),xc=M(),CK=Mc(),LK=Fo().insertRecords,DK=$e(),MK=V(),UK=P_(),{getSchemaPath:PK}=We(),vK=Hc();Yy.exports=BK;async function BK(e){try{let{schema_table:t,attributes:r}=wK(e);CK(e,r,t.hash_attribute),e.schema!==xc.SYSTEM_SCHEMA_NAME&&(r.includes(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await UK(e.hdb_auth_header,t,r),s=PK(e.schema,e.table),i=await DK.openEnvironment(s,e.table),o=await LK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vK(e,o)}catch(c){MK.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(BK,"lmdbCreateRecords")});var Qy=T((_ce,Wy)=>{"use strict";var Ky=M(),HK=Wm(),xK=wc(),FK=require("fs-extra"),{getSchemaPath:qK}=We();Wy.exports=GK;async function GK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new xK(Ky.SYSTEM_SCHEMA_NAME,Ky.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await HK(r),await FK.mkdirp(qK(e.schema))}a(GK,"lmdbCreateSchema")});var Jy=T((fce,zy)=>{"use strict";var Qm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};zy.exports=Qm});var eI=T((Sce,Zy)=>{"use strict";var Xy=$e(),zm=Dr(),Jm=Ir().LMDB_ERRORS_ENUM,kK=ht(),jy=V(),hce=J(),VK=require("lmdb"),$K=Jy(),YK=M(),{OVERFLOW_MARKER:mce,MAX_SEARCH_KEY_LENGTH:pce}=kK,KK=YK.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WK(e,t,r,n){if(zm.validateEnv(e),t===void 0)throw new Error(Jm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jm.IDS_REQUIRED):new Error(Jm.IDS_MUST_BE_ITERABLE);try{let s=Xy.listDBIs(e);Xy.initializeDBIs(e,t,s);let i=new $K,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[KK]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,VK.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],w=h[A];if(w!=null)try{let B=zm.getIndexedValues(w);if(B)for(let K=0,F=B.length;K<F;K++)I.remove(B[K],o)}catch{jy.warn(`cannot delete from attribute: ${A}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jy.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=zm.getNextMonotonicTime(),i}catch(s){throw s}}a(WK,"deleteRecords");Zy.exports={deleteRecords:WK}});var Fc=T((gce,rI)=>{"use strict";var zo=J(),QK=eI(),zK=$e(),{getSchemaPath:JK}=We(),XK=Hc(),jK=V();rI.exports=ZK;async function ZK(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zo.isEmptyOrZeroLength(e.hash_values)&&!zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];zo.isEmpty(u)||e.hash_values.push(u)}}if(zo.isEmptyOrZeroLength(e.hash_values))return tI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=JK(e.schema,e.table),i=await zK.openEnvironment(s,e.table),o=await QK.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await XK(e,o)}catch(c){jK.error(`unable to write transaction due to ${c.message}`)}return tI(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(ZK,"lmdbDeleteRecords");function tI(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(tI,"createDeleteResponse")});var jm=T((Oce,nI)=>{"use strict";var eW=M(),Ace=Dr();function Xm(e,t){let r=Object.create(null);if(t.length===1&&eW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Xm,"parseRow");function tW(e,t,r,n){let s=Xm(r,e);n.push(s)}a(tW,"searchAll");function rW(e,t,r,n){let s=Xm(r,e);n[t]=s}a(rW,"searchAllToMap");function nW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(nW,"iterateDBI");function Ki(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ki,"pushResults");function sW(e,t,r,n,s,i){t.toString().endsWith(e)&&Ki(t,r,n,s,i)}a(sW,"endsWith");function iW(e,t,r,n,s,i){t.toString().includes(e)&&Ki(t,r,n,s,i)}a(iW,"contains");function oW(e,t,r,n,s,i){t>e&&Ki(t,r,n,s,i)}a(oW,"greaterThanCompare");function aW(e,t,r,n,s,i){t>=e&&Ki(t,r,n,s,i)}a(aW,"greaterThanEqualCompare");function cW(e,t,r,n,s,i){t<e&&Ki(t,r,n,s,i)}a(cW,"lessThanCompare");function uW(e,t,r,n,s,i){t<=e&&Ki(t,r,n,s,i)}a(uW,"lessThanEqualCompare");nI.exports={parseRow:Xm,searchAll:tW,searchAllToMap:rW,iterateDBI:nW,endsWith:sW,contains:iW,greaterThanCompare:oW,greaterThanEqualCompare:aW,lessThanCompare:cW,lessThanEqualCompare:uW,pushResults:Ki}});var Jo=T((wce,lI)=>{"use strict";var ti=$e(),Nce=V(),Br=Dr(),B_=ht(),dt=Ir().LMDB_ERRORS_ENUM,yce=J(),lW=M(),H_=jm(),{parseRow:_W}=H_,Ice=require("lmdb"),{OVERFLOW_MARKER:sI,MAX_SEARCH_KEY_LENGTH:dW}=B_;function iI(e,t,r,n=!1,s=void 0,i=void 0){return Wi(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(iI,"iterateFullIndex");function qc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Wi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(w=>({value:w}))):d.getRange(I)})}a(qc,"iterateRangeBetween");function Wi(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[B_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ti.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Wi,"setupTransaction");function oI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(sI)){if(!s)if(r)s=ti.openDBI(e,r);else{let u=ti.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ti.openDBI(e,u[_]),!s[B_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(oI,"getOverflowCheck");function fW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Wi(e,t,t,(o,c,u)=>(x_(r),r=Gc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>_W(_.value,r))))}a(fW,"searchAll");function EW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);x_(r),r=Gc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of iI(e,t,t,n,s,i))o.set(c,H_.parseRow(u,r));return o}a(EW,"searchAllToMap");function hW(e,t,r=!1,n=void 0,s=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=iI(e,void 0,t,r,n,s),c=o.transaction,u=oI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(hW,"iterateDBI");function mW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(mW,"countAll");function pW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,t,r,(c,u,_,l)=>(n=Br.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(pW,"equals");function SW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(SW,"count");function TW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,null,r,(c,u)=>{n=Br.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(TW,"startsWith");function gW(e,t,r,n,s=!1,i=void 0,o=void 0){return aI(e,t,r,n,s,i,o,!0)}a(gW,"endsWith");function aI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ri(e,r,n),Wi(e,null,r,(u,_,l,d)=>{let f=oI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(sI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[B_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(aI,"contains");function RW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!0,!1)}a(RW,"greaterThan");function AW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!1,!1)}a(AW,"greaterThanEqual");function OW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!0)}a(OW,"lessThan");function bW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!1)}a(bW,"lessThanEqual");function NW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=Br.convertKeyValueToWrite(n),s=Br.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qc(e,t,r,n,s,i,o,c)}a(NW,"between");function yW(e,t,r,n){Br.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(x_(r),r=Gc(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=H_.parseRow(c,r)),o}a(yW,"searchByHash");function IW(e,t,r){Br.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(IW,"checkHashExists");function wW(e,t,r,n,s=[]){return uI(e,t,r,n,s),cI(e,t,r,n,s).map(i=>i[1])}a(wW,"batchSearchByHash");function CW(e,t,r,n,s=[]){uI(e,t,r,n,s);let i=new Map;for(let[o,c]of cI(e,t,r,n,s))i.set(o,c);return i}a(CW,"batchSearchByHashToMap");function cI(e,t,r,n,s=[]){return Wi(e,t,t,(i,o,c)=>{r=Gc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,H_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(cI,"batchHashSearch");function uI(e,t,r,n,s){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(x_(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(uI,"initializeBatchSearchByHash");function x_(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(x_,"validateFetchAttributes");function ri(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>dW)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function Gc(e,t){return t.length===1&&lW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(Gc,"setGetWholeRowAttributes");lI.exports={searchAll:fW,searchAllToMap:EW,count:SW,countAll:mW,equals:pW,startsWith:TW,endsWith:gW,contains:aI,searchByHash:yW,setGetWholeRowAttributes:Gc,batchSearchByHash:wW,batchSearchByHashToMap:CW,checkHashExists:IW,iterateDBI:hW,greaterThan:RW,greaterThanEqual:AW,lessThan:OW,lessThanEqual:bW,between:NW}});var Xo=T((Lce,hI)=>{var _I=require("lodash"),dI=et(),fe=require("joi"),LW=J(),{hdb_schema_table:kc,checkValidTable:fI,hdb_table:EI,hdb_database:F_}=Kn(),{handleHDBError:DW,hdb_errors:MW}=Z(),{getDatabases:UW}=(ge(),ee(xe)),{HTTP_STATUS_CODES:PW}=MW,vW=fe.object({database:F_,schema:F_,table:EI,search_attribute:kc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),BW=fe.object({database:F_,schema:F_,table:EI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(kc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(kc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});hI.exports=function(e,t){let r=null;switch(t){case"value":r=dI.validateBySchema(e,vW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(fI("database",e.schema)),i(fI("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=dI.validateBySchema(e,BW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=LW.checkGlobalSchemaTable(e.schema,e.table);if(s)return DW(new Error,s,PW.NOT_FOUND);let o=UW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=_I.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!_I.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Zm=T((Mce,mI)=>{"use strict";var HW=$e(),xW=Xo(),{getSchemaPath:FW}=We();mI.exports=qW;function qW(e){let t=xW(e,"hashes");if(t)throw t;let r=FW(e.schema,e.table);return HW.openEnvironment(r,e.table)}a(qW,"initialize")});var ep=T((Pce,pI)=>{"use strict";var GW=Jo(),kW=Zm();pI.exports=VW;async function VW(e){let t=await kW(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return GW.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(VW,"lmdbGetDataByHash")});var jo=T((Bce,SI)=>{"use strict";var tp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};SI.exports=tp});var gI=T((Fce,TI)=>{"use strict";var xce=jo(),$W=Jo(),YW=Zm();TI.exports=KW;async function KW(e){let t=await YW(e),r=global.hdb_schema[e.schema][e.table];return $W.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(KW,"lmdbSearchByHash")});var Jn=T((Gce,RI)=>{"use strict";var rp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};RI.exports=rp});var q_=T((Vce,II)=>{"use strict";var Jt=Jo(),WW=$e(),QW=J(),Ee=ht(),Qi=M(),zW=Bi(),AI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:JW}=We(),As=Qi.SEARCH_WILDCARDS;async function XW(e,t,r){let n;e.schema===Qi.SYSTEM_SCHEMA_NAME?n=zW[e.table]:n=global.hdb_schema[e.schema][e.table];let s=yI(e,n.hash_attribute,r,t);return bI(e,s,n.hash_attribute,r)}a(XW,"prepSearch");async function bI(e,t,r,n){let s=JW(e.schema,e.table),i=await WW.openEnvironment(s,e.table),o=NI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(jW(e,r)===!1){let l=e.search_attribute;if(l===r)return n?OI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?OI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(bI,"executeSearch");function NI(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 Ee.SEARCH_TYPES.EQUALS:s=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(NI,"searchByType");function OI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(OI,"createMapFromIterable");function jW(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(jW,"checkToFetchMore");function yI(e,t,r,n){if(QW.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),As.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(As[0])<0&&s.indexOf(As[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(As.indexOf(i)>=0&&As.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(As.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(As.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(As[0])||s.includes(As[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(AI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Qi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Qi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Qi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Qi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AI.UNKNOWN_SEARCH_TYPE)}}a(yI,"createSearchTypeFromSearchObject");II.exports={executeSearch:bI,createSearchTypeFromSearchObject:yI,prepSearch:XW,searchByType:NI}});var CI=T((Kce,wI)=>{"use strict";var Yce=Jn(),ZW=Xo(),eQ=J(),tQ=M(),rQ=q_();wI.exports=nQ;function nQ(e,t){if(!eQ.isEmpty(t)&&tQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=ZW(e,"value");if(n)throw n;return rQ.prepSearch(e,t,!0)}a(nQ,"lmdbGetDataByValue")});var Vc=T((zce,LI)=>{"use strict";var Qce=Jn(),sQ=Xo(),iQ=J(),oQ=M(),aQ=q_();LI.exports=cQ;async function cQ(e,t){if(!iQ.isEmpty(t)&&oQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=sQ(e,"value");if(n)throw n;return aQ.prepSearch(e,t,!1)}a(cQ,"lmdbSearchByValue")});var MI=T((jce,DI)=>{"use strict";var Xce=ht(),np=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},sp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},ip=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DI.exports={SearchByConditionsObject:np,SearchCondition:sp,SortAttribute:ip}});var HI=T((rue,BI)=>{"use strict";var eue=MI().SearchByConditionsObject,uQ=Jn(),lQ=Xo(),op=Jo(),G_=ht(),{Resource:tue}=(yn(),ee(ap)),vI=q_(),_Q=jm(),dQ=require("lodash"),{getSchemaPath:fQ}=We(),UI=$e(),{handleHDBError:EQ,hdb_errors:hQ}=Z(),{HTTP_STATUS_CODES:mQ}=hQ,pQ=1e8;BI.exports=SQ;async function SQ(e){let t=lQ(e,"conditions");if(t)throw EQ(t,t.message,mQ.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=fQ(e.schema,e.table),n=await UI.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)UI.openDBI(n,_.search_attribute);let i=dQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===G_.SEARCH_TYPES.EQUALS?_.estimated_count=op.count(n,_.search_attribute,_.search_value):l===G_.SEARCH_TYPES.CONTAINS||l===G_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=pQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await PI(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(vI.filterByType),d=l.length,f=op.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))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(E=>_Q.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await PI(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=op.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(SQ,"lmdbSearchByConditions");async function PI(e,t,r,n){let s=new uQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===G_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,vI.searchByType(e,s,i,n).map(o=>o.value)}a(PI,"executeConditionSearch")});var $c=T((sue,xI)=>{"use strict";var TQ=M().OPERATIONS_ENUM,cp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=TQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};xI.exports=cp});var up=T((oue,KI)=>{"use strict";var kI=Jn(),VI=$c(),$I=Vc(),YI=Fc(),ar=M(),FI=J(),qI=$e(),{getTransactionAuditStorePath:gQ,getSchemaPath:RQ}=We(),GI=V();KI.exports=AQ;async function AQ(e){try{if(FI.isEmpty(global.hdb_schema[e.schema])||FI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await OQ(e),await bQ(e);let t=RQ(e.schema,e.table);try{await qI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")GI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gQ(e.schema,e.table);await qI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")GI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(AQ,"lmdbDropTable");async function OQ(e){let t=new kI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await $I(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new VI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await YI(s)}a(OQ,"deleteAttributesFromSystem");async function bQ(e){let t=new kI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await $I(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new VI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await YI(s)}catch(i){throw i}}a(bQ,"dropTableFromSystem")});var QI=T((cue,WI)=>{"use strict";var NQ=require("fs-extra"),yQ=Jn(),IQ=jo(),wQ=$c(),CQ=up(),LQ=Fc(),DQ=ep(),MQ=Vc(),Os=M(),{getSchemaPath:UQ}=We(),{handleHDBError:PQ,hdb_errors:vQ}=Z(),{HDB_ERROR_MSGS:BQ,HTTP_STATUS_CODES:HQ}=vQ;WI.exports=xQ;async function xQ(e){let t;try{t=await FQ(e.schema);let r=new yQ(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await MQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await CQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new wQ(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await LQ(s);let i=UQ(t);await NQ.remove(i)}catch(r){throw r}}a(xQ,"lmdbDropSchema");async function FQ(e){let t=new IQ(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await DQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw PQ(new Error,BQ.SCHEMA_NOT_FOUND(e),HQ.NOT_FOUND,void 0,void 0,!0);return n}a(FQ,"validateDropSchema")});var _p=T((lue,zI)=>{"use strict";var lp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};zI.exports=lp});var XI=T((fue,JI)=>{"use strict";var qQ=require("fs-extra"),k_=$e(),{getTransactionAuditStorePath:GQ}=We(),dp=ht(),due=_p();JI.exports=kQ;async function kQ(e){let t;try{let r=GQ(e.schema,e.table);await qQ.mkdirp(r),t=await k_.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{k_.createDBI(t,dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),k_.createDBI(t,dp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),k_.createDBI(t,dp.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(kQ,"createTransactionsAuditEnvironment")});var tw=T((hue,ew)=>{"use strict";var fp=M(),jI=$e(),VQ=Fo(),{getSystemSchemaPath:$Q,getSchemaPath:YQ}=We(),KQ=Bi(),WQ=m_(),Ep=h_(),QQ=V(),zQ=XI(),mp=KQ.hdb_table,ZI=[];for(let e=0;e<mp.attributes.length;e++)ZI.push(mp.attributes[e].attribute);ew.exports=JQ;async function JQ(e,t){let r=YQ(t.schema,t.table),n=new Ep(t.schema,t.table,fp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ep(t.schema,t.table,fp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ep(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jI.createEnvironment(r,t.table),e!==void 0){let o=await jI.openEnvironment($Q(),fp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await VQ.insertRecords(o,mp.hash_attribute,ZI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await hp(n),await hp(s),await hp(i)}await zQ(t)}catch(o){throw o}}a(JQ,"lmdbCreateTable");async function hp(e){try{await WQ(e)}catch(t){QQ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(hp,"createAttribute")});var nw=T((pue,rw)=>{"use strict";var XQ=Ic(),jQ=Mc(),ZQ=P_(),Yc=M(),ez=Fo().updateRecords,tz=$e(),{getSchemaPath:rz}=We(),nz=Hc(),sz=V();rw.exports=iz;async function iz(e){try{let{schema_table:t,attributes:r}=XQ(e);jQ(e,r,t.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(r.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ZQ(e.hdb_auth_header,t,r),s=rz(e.schema,e.table),i=await tz.openEnvironment(s,e.table),o=await ez(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await nz(e,o)}catch(c){sz.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(iz,"lmdbUpdateRecords")});var iw=T((Tue,sw)=>{"use strict";var oz=M().OPERATIONS_ENUM,pp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=oz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sw.exports=pp});var aw=T((Aue,ow)=>{"use strict";var Rue=iw(),az=Ic(),cz=Mc(),uz=P_(),Kc=M(),lz=Fo().upsertRecords,_z=$e(),{getSchemaPath:dz}=We(),fz=Hc(),Ez=V(),{handleHDBError:hz,hdb_errors:mz}=Z();ow.exports=pz;async function pz(e){let t;try{t=az(e)}catch(u){throw hz(u,u.message,mz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;cz(e,n,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(n.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await uz(e.hdb_auth_header,r,n),i=dz(e.schema,e.table),o=await _z.openEnvironment(i,e.table),c=await lz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await fz(e,c)}catch(u){Ez.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(pz,"lmdbUpsertRecords")});var uw=T((bue,cw)=>{"use strict";var Sp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};cw.exports=Sp});var _w=T((yue,lw)=>{"use strict";var Tp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};lw.exports=Tp});var Ew=T((Cue,fw)=>{"use strict";var gp=$e(),{getTransactionAuditStorePath:Sz}=We(),wue=uw(),Wc=ht(),Tz=J(),dw=_w(),gz=require("util").promisify,Rz=gz(setTimeout),Az=1e4,Oz=100;fw.exports=bz;async function bz(e){let t=Sz(e.schema,e.table),r=await gp.openEnvironment(t,e.table,!0),n=gp.listDBIs(r);gp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new dw;do s=await Nz(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await Rz(Oz);while(s.transactions_deleted>0);return i}a(bz,"deleteAuditLogsBefore");async function Nz(e,t){let r=new dw;try{let n=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Tz.isEmpty(c)||(s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Az)break}return await s,r}catch(n){throw n}}a(Nz,"deleteTransactions")});var mw=T((Due,hw)=>{"use strict";var Rp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};hw.exports=Rp});var Sw=T((Pue,pw)=>{"use strict";var yz=Jn(),Iz=$c(),Uue=mw(),Xn=M(),wz=J(),Ap=$e(),Cz=Bi(),Lz=Vc(),Dz=Fc(),{getSchemaPath:Mz}=We();pw.exports=Uz;async function Uz(e,t=!0){let r;e.schema===Xn.SYSTEM_SCHEMA_NAME?r=Cz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await vz(e),s=Mz(e.schema,e.table),i=await Ap.openEnvironment(s,e.table);return t===!0&&await Pz(e,i,r.hash_attribute),Ap.dropDBI(i,e.attribute),n}a(Uz,"lmdbDropAttribute");async function Pz(e,t,r){let n=Ap.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(Pz,"removeAttributeFromAllObjects");async function vz(e){let t=new yz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Lz(t)).filter(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(wz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Iz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Dz(i)}a(vz,"dropAttributeFromSystem")});var bw=T((Hue,Ow)=>{"use strict";var Op=$e(),Zo=ht(),Bue=Dr(),bp=M(),Tw=J(),{getTransactionAuditStorePath:Bz}=We(),Hz=Jo(),V_=Wo(),xz=V();Ow.exports=Fz;async function Fz(e){let t=Bz(e.schema,e.table),r=await Op.openEnvironment(t,e.table,!0),n=Op.listDBIs(r);Op.initializeDBIs(r,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case bp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gw(r,e.search_values);case bp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Gz(r,e.search_values,s);case bp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return qz(r,e.search_values);default:return gw(r)}}a(Fz,"readAuditLog");function gw(e,t=[0,Date.now()]){Tw.isEmpty(t[0])&&(t[0]=0),Tw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new V_,s))}a(gw,"searchTransactionsByTimestamp");function qz(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Aw(e,i))}return Object.fromEntries(r)}a(qz,"searchTransactionsByUsername");function Gz(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Hz.equals(e,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=Aw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);Rw(u,"records",r,l,o),Rw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Gz,"searchTransactionsByHashValues");function Rw(e,t,r,n,s){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(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new V_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new V_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(Rw,"loopRecords");function Aw(e,t){let r=[];try{let n=e.dbis[Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new V_,i);r.push(o)}}catch(i){xz.warn(i)}return r}catch(n){throw n}}a(Aw,"batchSearchTransactions")});var yw=T((Gue,Nw)=>{"use strict";var{getSchemaPath:Fue}=We(),que=$e(),{database:kz}=(ge(),ee(xe));Nw.exports={writeTransaction:Vz};async function Vz(e,t,r){return kz({database:e,table:t}).transaction(r)}a(Vz,"writeTransaction")});var Lw=T((Vue,Cw)=>{"use strict";var{getSchemaPath:Iw}=We(),ww=$e();Cw.exports={flush:$z,resetReadTxn:Yz};async function $z(e,t){return(await ww.openEnvironment(Iw(e,t),t.toString())).flushed}a($z,"flush");async function Yz(e,t){try{(await ww.openEnvironment(Iw(e,t),t.toString())).resetReadTxn()}catch{}}a(Yz,"resetReadTxn")});var Pw=T((Yue,Uw)=>{"use strict";var{Readable:Kz}=require("stream"),{getDatabases:Wz}=(ge(),ee(xe)),{readSync:Qz,openSync:zz,createReadStream:Dw}=require("fs"),{open:Jz}=require("lmdb"),Mw=i_(),Xz=a_(),{AUDIT_STORE_OPTIONS:jz}=(Pi(),ee(vw)),{INTERNAL_DBIS_NAME:Zz,AUDIT_STORE_NAME:eJ}=ht();Uw.exports=rJ;var Np=32768,tJ=100;async function rJ(e){let t=e.database||e.schema||"data",r=Wz()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=Jz({noSync:!0,maxDbs:Xz.MAX_DBS}),f,E=d.openDB(Zz,new Mw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,w){w.encoding="binary",w.encoder=void 0;let B=d.openDB(I,w),K=l.openDB(I,w);for(let{key:F,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(F,Q,P),p++%tJ===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:w}of l.getRange({transaction:h,start:!1}))if(s.some(B=>I.startsWith?.(B+"/"))){E.put(I,w);let[,B]=I.split("/"),K=!B,F=new Mw(!K,K);await S(I,F)}e.include_audit&&await S(eJ,Object.assign({},jz)),await f;let A=Dw(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=zz(o.path);return o.transaction(()=>{let _=Buffer.alloc(Np);Qz(c,_,0,Np),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Dw(null,{fd:c,start:Np}),f=new Kz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(rJ,"getBackup")});var xw=T((Wue,Hw)=>{"use strict";var nJ=V(),{handleHDBError:sJ}=Z(),iJ=Eb(),oJ=m_(),aJ=Wm(),cJ=Qy(),uJ=Fc(),lJ=ep(),_J=gI(),dJ=CI(),fJ=Vc(),EJ=HI(),hJ=QI(),mJ=tw(),pJ=nw(),SJ=aw(),TJ=Ew(),gJ=up(),RJ=Sw(),AJ=bw(),OJ=yw(),Bw=Lw(),bJ=Pw(),yp=class extends iJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return EJ(t)}async getDataByHash(t){return await lJ(t)}async searchByHash(t){return await _J(t)}async getDataByValue(t,r){return await dJ(t,r)}async searchByValue(t){return await fJ(t)}async createSchema(t){return await cJ(t)}async dropSchema(t){return await hJ(t)}async createTable(t,r){return await mJ(t,r)}async dropTable(t){return await gJ(t)}async createAttribute(t){return await oJ(t)}async createRecords(t){return await aJ(t)}async updateRecords(t){return await pJ(t)}async upsertRecords(t){try{return await SJ(t)}catch(r){throw sJ(r,null,null,nJ.ERR,r)}}async deleteRecords(t){return await uJ(t)}async dropAttribute(t){return await RJ(t)}async deleteAuditLogsBefore(t){return await TJ(t)}async readAuditLog(t){return await AJ(t)}writeTransaction(t,r,n){return OJ.writeTransaction(t,r,n)}flush(t,r){return Bw.flush(t,r)}resetReadTxn(t,r){return Bw.resetReadTxn(t,r)}getBackup(t){return bJ(t)}};Hw.exports=yp});function wJ(){IJ=setInterval(function(){for(let e of Ip)if(e.stale){let t=e[Re]?.url;Fw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},yJ).unref()}var wp,Fw,NJ,Ip,zi,$_,yJ,IJ,Cp=Ae(()=>{wp=v(Dr()),Fw=v(V());yn();NJ=100,Ip=new Set,zi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),Ip.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Ip.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,wp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<NJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},$_=class extends zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,wp.getNextMonotonicTime)())}getReadTxn(){}},yJ=3e4;a(wJ,"startMonitoringTxns");wJ()});function Qe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new zi;e.timestamp&&(n.timestamp=e.timestamp),n[Re]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var qw,Ji=Ae(()=>{qw=require("../../index");yn();Cp();a(Qe,"transaction");(0,qw._assignPackageExport)("transaction",Qe);Qe.commit=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Qe.abort=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var zw={};Ve(zw,{ResourceBridge:()=>Mp});function Up({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 kw(e,t){let r=jn(e),n=Up(e,r);if(!r)throw new Dn.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Qe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&K_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function jn(e){let t=e.database||e.schema||LJ,r=Mn()[t];if(!r)throw(0,Dn.handleHDBError)(new Error,CJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Vw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*$w(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var Yw,Y_,Dn,Kw,Ww,Un,Lp,Dp,Qw,CJ,LJ,DJ,MJ,Gw,Mp,Jw=Ae(()=>{"use strict";Yw=v(xw()),Y_=v(Xo()),Dn=v(Z());ge();Kw=v(Ic()),Ww=v(Mc()),Un=v(M()),Lp=v(Rs()),Dp=v(Ln()),Qw=v(J());Ji();W_();({HDB_ERROR_MSGS:CJ}=Dn.hdb_errors),LJ="data",DJ=1e4,MJ=10,Mp=class extends Yw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Gw=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Y_.default)(t,"conditions");if(r)throw(0,Dn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=jn(t);if(!n)throw new Dn.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Up(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Dn.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}_t({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await jn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=jn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){jn(t).dropTable()}createSchema(t){return Qc({database:t.schema,table:null}),Lp.signalSchemaChange(new Dp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Pp(t.schema),Lp.signalSchemaChange(new Dp.SchemaEventMsg(process.pid,Un.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,Gw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Kw.default)(t);(0,Ww.default)(t,n,r.primaryKey);let s,i=Mn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Qe(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=K_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mn()[t.schema][t.table],n={user:t.hdb_user};return Qe(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return Vw(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Dn.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Un.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,Qw.async_set_timeout)(MJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%DJ===0&&await _();return u.length>0&&await _(),s?Vw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Y_.default)(t,"hashes");if(r)throw r;return kw(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of kw(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Un.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Y_.default)(t,"value");if(n)throw n;let s=jn(t);if(!s)throw new Dn.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===Un.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Up(t,s)})}async getDataByValue(t,r){let n=new Map,s=jn(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){jn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return jn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=jn(t),n={};switch(t.search_type){case Un.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Un.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of $w(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return $w(r,t.search_values?.[0],t.search_values?.[1])}}};a(Up,"getSelect");a(kw,"getRecords");a(jn,"getTable");a(Vw,"createDeleteResponse");a($w,"groupRecordsInHistory")});var Cn=T((ale,Xw)=>{"use strict";var{ResourceBridge:UJ}=(Jw(),ee(zw)),PJ=j();PJ.initSync();var Q_;function vJ(){return Q_||(Q_=new UJ,Q_)}a(vJ,"getBridge");Xw.exports=vJ()});var tC=T((ule,eC)=>{"use strict";var jw=require("lodash"),zc=require("mathjs"),BJ=require("jsonata"),Zw=J();eC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?jw.uniqWith(e,jw.isEqual):e,searchJSON:HJ,mad:Jc.bind(null,zc.mad),mean:Jc.bind(null,zc.mean),mode:Jc.bind(null,zc.mode),prod:Jc.bind(null,zc.prod),median:Jc.bind(null,zc.median)};function Jc(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Jc,"aggregateFunction");function HJ(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(Zw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Zw.isEmpty(this.__ala__.res[r])){let n=BJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(HJ,"searchJSON")});var nC=T((_le,rC)=>{"use strict";var pt=require("moment"),vp="YYYY-MM-DDTHH:mm:ss.SSSZZ";pt.suppressDeprecationWarnings=!0;rC.exports={current_date:()=>pt().utc().format("YYYY-MM-DD"),current_time:()=>pt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return pt(e).utc().format("YYYY");case"month":return pt(e).utc().format("MM");case"day":return pt(e).utc().format("DD");case"hour":return pt(e).utc().format("HH");case"minute":return pt(e).utc().format("mm");case"second":return pt(e).utc().format("ss");case"millisecond":return pt(e).utc().format("SSS");default:break}},date:e=>pt(e).utc().format(vp),date_format:(e,t)=>pt(e).utc().format(t),date_add:(e,t,r)=>pt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>pt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=pt(e).utc(),s=pt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>pt().utc().valueOf(),get_server_time:()=>pt().format(vp),offset_utc:(e,t)=>pt(e).utc().utcOffset(t).format(vp)}});var aC=T((dle,oC)=>{"use strict";var xJ=require("@turf/area"),FJ=require("@turf/length"),qJ=require("@turf/circle"),GJ=require("@turf/difference"),kJ=require("@turf/distance"),VJ=require("@turf/boolean-contains"),$J=require("@turf/boolean-equal"),YJ=require("@turf/boolean-disjoint"),KJ=require("@turf/helpers"),sC=M(),me=J(),bs=V();oC.exports={geoArea:WJ,geoLength:QJ,geoCircle:zJ,geoDifference:JJ,geoDistance:iC,geoNear:XJ,geoContains:jJ,geoEqual:ZJ,geoCrosses:e2,geoConvert:t2};function WJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return xJ.default(e)}catch(t){return bs.trace(t,e),NaN}}a(WJ,"geoArea");function QJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return FJ.default(e,{units:t||"kilometers"})}catch(r){return bs.trace(r,e),NaN}}a(QJ,"geoLength");function zJ(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return qJ.default(e,t,{units:r||"kilometers"})}catch(n){return bs.trace(n,e,t),NaN}}a(zJ,"geoCircle");function JJ(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return GJ(e,t)}catch(r){return bs.trace(r,e,t),NaN}}a(JJ,"geoDifference");function iC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return kJ.default(e,t,{units:r||"kilometers"})}catch(n){return bs.trace(n,e,t),NaN}}a(iC,"geoDistance");function XJ(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iC(e,t,n)<=r}catch(s){return bs.trace(s,e,t),!1}}a(XJ,"geoNear");function jJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return VJ.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(jJ,"geoContains");function ZJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return $J.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(ZJ,"geoEqual");function e2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!YJ.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(e2,"geoCrosses");function t2(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(sC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),KJ[t](e,r)}a(t2,"geoConvert")});var z_=T((Ele,cC)=>{var Xi=tC(),Hr=nC(),Zn=aC();cC.exports=e=>{e.aggr.mad=e.aggr.MAD=Xi.mad,e.aggr.mean=e.aggr.MEAN=Xi.mean,e.aggr.mode=e.aggr.MODE=Xi.mode,e.aggr.prod=e.aggr.PROD=Xi.prod,e.aggr.median=e.aggr.MEDIAN=Xi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Zn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Zn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Zn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Zn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Zn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Zn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Zn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Zn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Zn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Zn.geoNear}});var dC=T((hle,_C)=>{"use strict";var Xc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var r2=z_(),uC=require("clone"),J_=require("recursive-iterator"),ue=V(),we=J(),ea=Cn(),n2=M(),{hdb_errors:s2}=Z(),{getDatabases:lC}=(ge(),ee(xe)),i2="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";r2(cr);var Bp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw ue.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(n),new Error(Pn)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{return t=await this._finalSQL(),t}catch(n){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}}_getColumns(){let t=new J_(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(uC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Xc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=lC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new J_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new cr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new cr.yy.LogicValue({value:i}):n instanceof cr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new cr.yy.NumValue({value:i}))});if(t){ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new J_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!we.isEmpty(n2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.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 _=0;_<u.length;_++)if(u[_].value)n.add(u[_].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,...n])}}}_setAliasesForColumns(){if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Xc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await cr.promise(r)}catch(r){throw ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(uC(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(we.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(i2)>-1&&this.tables.forEach(s=>{let i={columnid:lC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xc.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ea.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ea.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ea.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ue.error(l),new Error(Pn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ea.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ue.error(l),new Error(Pn)}}}_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 cr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new cr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new cr.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 s=t.is_func?new cr.yy.FuncValue:new cr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await cr.promise(h,t),t=null}catch(E){throw ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ue.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Xc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new J_(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Xc.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(Pn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await ea.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ue.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.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 s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ue.trace(`Final SQL: ${s}`),n=await cr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ue.error(s2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await ea.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(Pn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};_C.exports=Bp});var en=T((ple,fC)=>{"use strict";var o2=db();fC.exports={searchByConditions:c2,searchByHash:u2,searchByValue:l2,search:_2};var Hp=Cn(),{transformReq:xp}=J(),a2=dC();async function c2(e){return xp(e),Hp.searchByConditions(e)}a(c2,"searchByConditions");async function u2(e){xp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Hp.searchByHash(e))r&&t.push(r);return t}a(u2,"searchByHash");async function l2(e){xp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Hp.searchByValue(e))t.push(r);return t}a(l2,"searchByValue");function _2(e,t){try{let r=new o2(e);r.validate(),new a2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(_2,"search")});var X_=T((Tle,EC)=>{"use strict";var d2=Cn();EC.exports={writeTransaction:f2};function f2(e,t,r){return d2.writeTransaction(e,t,r)}a(f2,"writeTransaction")});var SC=T((Ale,pC)=>{"use strict";var E2=en(),h2=Xs(),hC=V(),m2=tn(),Rle=X_(),p2=require("clone"),qp=require("alasql"),S2=z_(),mC=require("util"),T2=mC.promisify(h2.getTableSchema),g2=mC.promisify(E2.search),R2=M(),Fp=J();S2(qp);pC.exports={update:O2};var A2="There was a problem performing this update. Please check the logs and try again.";async function O2({statement:e,hdb_user:t}){let r=await T2(e.table.databaseid,e.table.tableid),n=b2(e.columns);Fp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=p2(s),c=Fp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=qp.parse(u).statements[0],l=await g2(_),d=N2(n,l);return y2(o,d,t)}a(O2,"update");function b2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=qp.compile(`SELECT ${r.expression.toString()} AS [${R2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw hC.error(t),new Error(A2)}}a(b2,"createUpdateRecord");function N2(e,t){return Fp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(N2,"buildUpdateRecords");async function y2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await m2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){hC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(y2,"updateRecords")});var gC=T((yle,TC)=>{var I2=require("alasql"),w2=en(),C2=V(),L2=Cn(),kp=require("util"),Gp=J(),D2=M(),M2=Xs(),ble=X_(),Nle=tn(),U2="record",P2="successfully deleted",v2=kp.callbackify(F2),B2=kp.promisify(w2.search),H2=kp.promisify(M2.getTableSchema);TC.exports={convertDelete:v2};function x2(e){return`${e.deleted_hashes.length} ${U2}${e.deleted_hashes.length===1?"":"s"} ${P2}`}a(x2,"generateReturnMessage");async function F2({statement:e,hdb_user:t}){let r=await H2(e.table.databaseid,e.table.tableid);Gp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Gp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=I2.parse(o).statements[0],u={operation:D2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await B2(c);let _=await L2.deleteRecords(u);return Gp.isEmptyOrZeroLength(_.message)&&(_.message=x2(_)),delete _.txn_time,_}catch(_){throw C2.error(_),_.hdb_code?_.message:_}}a(F2,"convertDelete")});var NC=T((wle,bC)=>{"use strict";var q2=xi(),{hdb_errors:RC}=Z(),{getDatabases:AC}=(ge(),ee(xe));bC.exports={checkSchemaExists:OC,checkSchemaTableExists:G2,schema_describe:q2};async function OC(e){if(!AC()[e])return RC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OC,"checkSchemaExists");async function G2(e,t){let r=await OC(e);if(r)return r;if(!AC()[e][t])return RC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(G2,"checkSchemaTableExists")});var jc=T((Lle,k2)=>{k2.exports={name:"harperdb",version:"4.3.0-alpha.2",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:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},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":"pm2 kill && 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:resources && 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:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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":"pm2 kill && 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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.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:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.3-beta.2",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",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:"^5.3.3","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 ru={};Ve(ru,{addAnalyticsListener:()=>tu,recordAction:()=>xr,recordActionBinary:()=>nn,setAnalyticsEnabled:()=>V2});function V2(e){vC=e}function xr(e,t,r,n,s){if(!vC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=ed.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},ed.set(i,o)}j_||$2()}function nn(e,t,r,n,s){xr(!!e,t,r,n,s)}function tu(e){xC.push(e)}function $2(){j_=performance.now(),setTimeout(async()=>{let e=performance.now()-j_;j_=0;let t=[],r={time:Date.now(),period:e,threadId:ji.threadId,metrics:t};for(let[s,i]of ed){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of FC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await qC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ji.threadId,byThread:!0,...n});for(let s of xC)s(t);ed=new Map,ji.parentPort?ji.parentPort.postMessage({type:HC,report:r}):VC({report:r})},BC).unref()}async function Y2(e,t=6e4){let r=Yp(),n=GC(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let I of S||[]){let{path:w,method:B,type:K,metric:F,count:P,total:Q,distribution:Y,threads:z,...re}=I;P||(P=1);let Ie=F+(w?"-"+w:"");B!==void 0&&(Ie+="-"+B),K!==void 0&&(Ie+="-"+K);let ne=o.get(Ie);if(ne){if(ne.threads){let de=ne.threads[A];if(de)ne=de;else{ne.threads[A]=Object.assign({},re);continue}}ne.count||(ne.count=1);let ct=ne.count;for(let de in re){let ut=re[de];typeof ut=="number"&&(ne[de]=(ne[de]*ct+ut*P)/(ct+P))}ne.count+=P,Q>=0&&(ne.total+=Q,ne.ratio=ne.total/ne.count)}else ne=Object.assign({period:t},I),delete ne.distribution,o.set(Ie,ne),ne.byThread&&(ne.threads=[],ne.threads[A]=Object.assign({},re),u.push(ne));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let ct=c.get(Ie);ct?ct.push(...Y):c.set(Ie,Y)}}await qC()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:w,total:B,distribution:K,threads:F,...P}=h;F=F.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let z of F){let re=z[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,ut)=>de.value>ut.value?1:-1);let A=S.count-1,I=[],w=0,B=0,K;for(let de of FC){let ut=A*de;for(;w<ut;)K=p[B++],w+=K.count,B===1&&w--;let Tn=p[B>1?B-2:0];K||(K=p[0]),I.push(K.value-(K.value-Tn.value)*(w-ut)/K.count)}let[F,P,Q,Y,z,re,Ie,ne,ct]=I;Object.assign(S,{p1:F,p10:P,p25:Q,median:Y,p75:z,p90:re,p95:Ie,p99:ne,p999:ct})}let l;for(let[h,p]of o)p.id=(0,Z_.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,Z_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-yC,active:E-IC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}yC=f,IC=E}async function wC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Yp(){return CC||(CC=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function GC(){return LC||(LC=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Q2(){kC=!0;let e=(0,eu.get)($p.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Y2(BC,e),await wC(Yp(),K2),await wC(GC(),W2)},Math.min(e/2,2147483647)).unref()}function VC(e,t){let r=e.report;r.threadId=t?.threadId||ji.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(DC+=n.mean*n.count);r.totalBytesProcessed=DC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(MC.get(t))}),MC.set(t,t.performance.eventLoopUtilization())),r.id=(0,Z_.getNextMonotonicTime)(),Yp().primaryStore.put(r.id,r),kC||Q2(),z2&&($C=X2(r))}async function X2(e){if(await $C,!ni){let r=(0,Zc.dirname)((0,PC.getLogFilePath)());try{ni=await(0,Vp.open)((0,Zc.join)(r,"analytics.log"),"r+")}catch{ni=await(0,Vp.open)((0,Zc.join)(r,"analytics.log"),"w+")}}let t=(await ni.stat()).size;if(t>J2){let r=Buffer.alloc(t);await ni.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ni.write(r,{position:0}),await ni.truncate(r.length),t=r.length}await ni.write(JSON.stringify(e)+`
8
- `,t)}var ji,UC,PC,Zc,Vp,Z_,eu,$p,ed,vC,j_,BC,HC,xC,FC,yC,IC,qC,K2,W2,CC,LC,kC,DC,MC,z2,$C,ni,J2,Ns=Ae(()=>{ji=require("worker_threads"),UC=v(tt());ge();PC=v(V()),Zc=require("path"),Vp=require("fs/promises"),Z_=v(Dr()),eu=v(j()),$p=v(M());nr();(0,eu.initSync)();ed=new Map,vC=(0,eu.get)($p.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(V2,"setAnalyticsEnabled");a(xr,"recordAction");lt.recordAnalytics=xr;a(nn,"recordActionBinary");j_=0,BC=1e3,HC="analytics-report",xC=[];a(tu,"addAnalyticsListener");FC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a($2,"sendAnalytics");a(Y2,"aggregation");yC=0,IC=0,qC=a(()=>new Promise(setImmediate),"rest");a(wC,"cleanup");K2=36e5,W2=31536e6;a(Yp,"getRawAnalyticsTable");a(GC,"getAnalyticsTable");(0,UC.setChildListenerByType)(HC,VC);a(Q2,"startScheduledTasks");DC=0,MC=new Map,z2=!1;a(VC,"recordAnalytics");J2=1e6;a(X2,"logAnalytics")});var It=T(($le,lL)=>{"use strict";var Gt=j();Gt.initSync();var j2=require("fs-extra"),Z2=require("semver"),iu=require("path"),{monotonicFactory:e4}=require("ulidx"),KC=e4(),t4=require("util"),WC=require("child_process"),r4=t4.promisify(WC.exec),n4=WC.spawn,Oe=nt(),Me=M(),zp=J(),Fr=V(),td=gs(),s4=X_(),nu=Lr(),{onMessageByType:i4}=tt(),{isMainThread:o4}=require("worker_threads"),{Encoder:a4,decode:Jp}=require("msgpackr"),QC=new a4,{isEmpty:ro}=zp,zC=rn(),c4=48*36e11,u4=5e9;o4&&i4(Me.ITC_EVENT_TYPES.RESTART,()=>{sn=void 0,to=void 0});var{connect:l4,StorageType:JC,RetentionPolicy:XC,AckPolicy:rd,DeliverPolicy:nd,DiscardPolicy:_4,NatsConnection:qle,JetStreamManager:Gle,JetStreamClient:kle,StringCodec:Vle,JSONCodec:d4,createInbox:Xp,headers:f4,ErrorCode:YC}=require("nats"),{PACKAGE_ROOT:E4}=M(),h4=jc(),{recordAction:m4}=(Ns(),ee(ru)),jC=d4(),p4="clustering",S4=h4.engines[Oe.NATS_SERVER_NAME],T4=iu.join(E4,"dependencies"),Qp=iu.join(T4,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),Kp,Wp,su,Zi,eo;lL.exports={runCommand:ZC,checkNATSServerInstalled:g4,createConnection:jp,getConnection:sd,getJetStreamManager:ou,getJetStream:tL,getNATSReferences:ur,getServerList:A4,createLocalStream:Zp,listStreams:rL,deleteLocalStream:O4,getServerConfig:au,listRemoteStreams:b4,viewStream:N4,viewStreamIterator:y4,publishToStream:I4,createWorkQueueStream:w4,addSourceToWorkStream:sL,request:L4,removeSourceFromWorkStream:oL,reloadNATS:eS,reloadNATSHub:D4,reloadNATSLeaf:M4,extractServerName:iL,requestErrorHandler:U4,updateWorkStream:P4,createLocalTableStream:cL,createTableStreams:v4,purgeTableStream:uL,purgeSchemaTableStreams:B4,getStreamInfo:H4,updateLocalStreams:F4,closeConnection:R4,getJsmServerName:cu,addNatsMsgHeader:nL,updateIngestStreamConsumer:C4,clearClientCache:eL};async function ZC(e,t=void 0){let{stdout:r,stderr:n}=await r4(e,{cwd:t});if(n)throw new Error(n.replace(`
6
+ `)},nk="certificate.pem",sk="privateKey.pem",ik="ca.pem";fO.exports={CERTIFICATE_VALUES:rk,CERTIFICATE_PEM_NAME:nk,PRIVATEKEY_PEM_NAME:sk,CA_PEM_NAME:ik}});var Xe=g((Qie,hO)=>{"use strict";var jt=require("validate.js");jt.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||jt.validators.type.checks[t](e)?null:` must be a '${t}' value`};jt.validators.type.checks={Object:function(e){return jt.isObject(e)&&!jt.isArray(e)},Array:jt.isArray,Integer:jt.isInteger,Number:jt.isNumber,String:jt.isString,Date:jt.isDate,Boolean:function(e){return typeof e=="boolean"}};jt.validators.hasValidFileExt=function(e,t){return jt.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};hO.exports={validateObject:ok,validateObjectAsync:ak,validateBySchema:ck};function ok(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=jt(e,t,{format:"flat"});return r?new Error(r):null}a(ok,"validateObject");async function ak(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await jt.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(ak,"validateObjectAsync");function ck(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(ck,"validateBySchema")});var lh=g((Xie,gO)=>{"use strict";var TO=require("fs-extra"),ce=require("joi"),uk=require("os"),{boolean:De,string:br,number:It,array:uh}=ce.types(),{totalmem:mO}=require("os"),bi=require("path"),lk=Y(),Bl=J(),Jie=EO(),pO=M(),_k=Xe(),SO="log",dk="components",fk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Ek="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",mk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",pk="rootPath config parameter is undefined",Sk="clustering.enabled config parameter is undefined",Ni=It.min(0).required(),Hl=uh.items({host:br.required(),port:Ni}).empty(null),Fn;gO.exports={configValidator:Tk,routesValidator:Nk,route_constraints:Hl};function Tk(e){if(Fn=e.rootPath,Bl.isEmpty(Fn))throw pk;let t=De.required(),r=It.min(0).max(1e3).empty(null).default(bk),n=br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ec),s=br.optional().empty(null),i=br.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(ec),c=ce.custom(Rk).empty(null).default(ec),u=e.clustering?.enabled;if(Bl.isEmpty(u))throw Sk;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:Ni,routes:Hl}).required()}).required(),leafNodes:ce.object({network:ce.object({port:Ni}).required()}).required(),network:ce.object({port:Ni}).required()}).required(),leafServer:ce.object({network:ce.object({port:Ni,routes:Hl}).required(),streams:ce.object({maxAge:It.min(120).allow(null).optional(),maxBytes:It.min(1).allow(null).optional(),maxMsgs:It.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required(),verify:De.optional()}),user:br.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:De,cacheTTL:It.required(),enableSessions:De}),analytics:ce.object({aggregatePeriod:It}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:De,logSuccessful:De}),file:De.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:De.optional(),compress:De.optional(),interval:br.custom(Ok).optional().empty(null),maxSize:br.custom(Ak).optional().empty(null),path:br.optional().empty(null).default(ec)}).required(),root:n,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:ce.object({network:ce.object({cors:De.optional(),corsAccessList:uh.optional(),headersTimeout:It.min(1).optional(),keepAliveTimeout:It.min(1).optional(),port:It.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(ec),securePort:It.optional().empty(null),timeout:It.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:Ni,securePort:Ni,mtls:ce.alternatives([De.optional(),ce.object({user:br.optional(),certificateAuthority:s,required:De.optional()})])}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:ce.object({compressionThreshold:It.optional(),cors:De.optional(),corsAccessList:uh.optional(),headersTimeout:It.min(1).optional(),port:It.min(0).optional().empty(null),securePort:It.min(0).optional().empty(null),mtls:ce.alternatives([De.optional(),ce.object({user:br.optional(),certificateAuthority:s,required:De.optional()})])}).required(),threads:r.optional(),maxHeapMemory:It.min(0).optional(),storage:ce.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:br.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Tk,"configValidator");function gk(e){return TO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(gk,"doesPathExist");function Rk(e,t){ce.assert(e,br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=gk(e);if(r)return t.message(r)}a(Rk,"validatePath");function Ak(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(fk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(hk):e}a(Ak,"validateRotationMaxSize");function Ok(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Ek);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mk):e}a(Ok,"validateRotationInterval");function bk(e,t){let r=t.state.path.join("."),n=uk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||mO();return i=Math.round(Math.min(i,mO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),lk.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(bk,"setDefaultThreads");function ec(e,t){let r=t.state.path.join(".");if(!Bl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Bl.isEmpty(Fn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return bi.join(Fn,dk);case"logging.root":return bi.join(Fn,SO);case"clustering.leafServer.streams.path":return bi.join(Fn,"clustering","leaf");case"storage.path":let n=bi.join(Fn,pO.LEGACY_DATABASES_DIR_NAME);return TO.existsSync(n)?n:bi.join(Fn,pO.DATABASES_DIR_NAME);case"logging.rotation.path":return bi.join(Fn,SO);case"operationsApi.network.domainSocket":return r==null?null:bi.join(Fn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ec,"setDefaultRoot");function Nk(e){let t=ce.object({routes:Hl});return _k.validateBySchema({routes:e},t)}a(Nk,"routesValidator")});var yi={};Ve(yi,{server:()=>je});var RO,je,Zt=Oe(()=>{RO=require("../../index"),je={};(0,RO._assignPackageExport)("server",je)});var wr=g((eoe,DO)=>{"use strict";var yr=M(),Ct=J(),Tt=Y(),{configValidator:yk,routesValidator:AO}=lh(),er=require("fs-extra"),wk=require("yaml"),pn=require("path"),Ik=require("is-number"),bO=require("properties-reader"),Ck=require("lodash"),{handleHDBError:Dk}=ee(),{HTTP_STATUS_CODES:Lk,HDB_ERROR_MSGS:xl}=Or(),Zie=require("minimist"),{server:Mk}=(Zt(),te(yi)),{DATABASES_PARAM_CONFIG:tc,CONFIG_PARAMS:Nr,CONFIG_PARAM_MAP:Sn}=yr,Uk="Unable to get config value because config is uninitialized",Pk="Config successfully initialized",vk="Error backing up config file",Bk="Empty parameter sent to getConfigValue",NO=pn.join(yr.PACKAGE_ROOT,"config","yaml",yr.HDB_DEFAULT_CONFIG_FILE),Hk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",OO={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"},Fl,gt,ql;DO.exports={createConfigFile:xk,getDefaultConfig:Fk,getConfigValue:wO,initConfig:dh,flattenConfig:Mo,updateConfigValue:IO,updateConfigObject:Gk,getConfiguration:$k,setConfiguration:Yk,readConfigFile:Eh,getClusteringRoutes:Kk,initOldConfig:CO,getConfigFromFile:Wk,getConfigFilePath:wi,addConfig:Qk,deleteConfigFromFile:zk,getConfigObj:Jk};function xk(e){let t=$s(NO);Fl=Mo(t.toJSON());let r;for(let o in e){let c=Sn[o.toLowerCase()];if(c===Nr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=_h(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Tt.error(l)}}}r&&yO(t,r),fh(t);let n=t.toJSON();gt=Mo(n);let s=t.getIn(["rootPath"]),i=pn.join(s,yr.HDB_CONFIG_FILE);er.createFileSync(i),er.writeFileSync(i,String(t)),Tt.trace(`Config file written to ${i}`)}a(xk,"createConfigFile");function yO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ct.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(tc.TABLES))for(let i in n[s][tc.TABLES])for(let o in n[s][tc.TABLES][i]){let c=n[s][tc.TABLES][i][o],u=[Nr.DATABASES,s,tc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Nr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Tt.error("Error parsing schemas CLI/env config arguments",n)}}a(yO,"setSchemasConfig");function Fk(e){if(Fl===void 0){let r=$s(NO);Fl=Mo(r.toJSON())}let t=Sn[e.toLowerCase()];if(t!==void 0)return Fl[t.toLowerCase()]}a(Fk,"getDefaultConfig");function wO(e){if(e==null){Tt.error(Bk);return}if(gt===void 0){Tt.trace(Uk);return}let t=Sn[e.toLowerCase()];if(t!==void 0)return gt[t.toLowerCase()]}a(wO,"getConfigValue");function wi(e=Ct.getPropsFilePath()){let t=Ct.getEnvCliRootPath();return t?pn.join(t,yr.HDB_CONFIG_FILE):bO(e).get(yr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(wi,"getConfigFilePath");function dh(e=!1){if(gt===void 0||e){let t;if(!Ct.noBootFile()){t=Ct.getPropsFilePath();try{er.accessSync(t,er.constants.F_OK|er.constants.R_OK)}catch(i){throw Tt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=wi(t),n;if(r.includes("config/settings.js"))try{CO(r);return}catch(i){if(i.code!==yr.NODE_ERROR_CODES.ENOENT)throw i}try{n=$s(r)}catch(i){if(i.code===yr.NODE_ERROR_CODES.ENOENT){Tt.trace(`HarperDB config file not found at ${r}.
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Tt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}qk(n,r),fh(n);let s=n.toJSON();if(Mk.config=s,gt=Mo(s),gt.logging_rotation_rotate)for(let i in OO)gt[i]&&Tt.error(`Config ${OO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Tt.trace(Pk)}}a(dh,"initConfig");function qk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],pn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],pn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],pn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Tt.trace("Updating config file with missing config params"),er.writeFileSync(t,String(e)))}a(qk,"checkForUpdatedConfig");function fh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=yk(t);if(r.error)throw xl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),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),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(fh,"validateConfig");function Gk(e,t){gt===void 0&&(gt={});let r=Sn[e.toLowerCase()];if(r===void 0){Tt.trace(`Unable to update config object because config param '${e}' does not exist`);return}gt[r.toLowerCase()]=t}a(Gk,"updateConfigObject");function IO(e,t,r=void 0,n=!1,s=!1,i=!1){gt===void 0&&dh();let o=wO(Sn.hdb_root),c=pn.join(o,yr.HDB_CONFIG_FILE),u=$s(c),_;if(r===void 0&&e.toLowerCase()===Nr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Sn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=_h(f,t);u.setIn([...E],h)}else for(let f in r){let E=Sn[f.toLowerCase()];if(E===Nr.HTTP_SECUREPORT&&r[f]===gt[Nr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Nr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===gt[Nr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Nr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=yr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=_h(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Tt.error(T)}}}_&&yO(u,_),fh(u);let l=u.getIn(["rootPath"]),d=pn.join(l,yr.HDB_CONFIG_FILE);n===!0&&kk(c,l),er.writeFileSync(d,String(u)),s&&(gt=Mo(u.toJSON())),Tt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(IO,"updateConfigValue");function kk(e,t){try{let r=pn.join(t,"backup",`${yr.HDB_CONFIG_FILE}.bak`);er.copySync(e,r),Tt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Tt.error(vk),Tt.error(r)}}a(kk,"backupConfigFile");var Vk=["databases"];function Mo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),ql=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!Vk.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Nr[u.toUpperCase()]&&Sn[u]&&(s[Sn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Mo,"flattenConfig");function _h(e,t){if(e===Nr.CLUSTERING_NODENAME||e===Nr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(Ik(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ct.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 Ct.autoCast(t)}a(_h,"castConfigValue");function $k(){let e=Ct.getPropsFilePath(),t=wi(e);return $s(t).toJSON()}a($k,"getConfiguration");async function Yk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return IO(void 0,void 0,s,!0),Hk}catch(i){throw typeof i=="string"||i instanceof String?Dk(i,i,Lk.BAD_REQUEST,void 0,void 0,!0):i}}a(Yk,"setConfiguration");function Eh(){let e=Ct.getPropsFilePath();try{er.accessSync(e,er.constants.F_OK|er.constants.R_OK)}catch(n){if(!Ct.noBootFile())throw Tt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=wi(e);return $s(t).toJSON()}a(Eh,"readConfigFile");function $s(e){return wk.parseDocument(er.readFileSync(e,"utf8"),{simpleKeys:!0})}a($s,"parseYamlDoc");function Kk(){let e=Eh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ct.isEmptyOrZeroLength(t)?[]:t;let r=AO(t);if(r)throw xl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ct.isEmptyOrZeroLength(n)?[]:n;let s=AO(n);if(s)throw xl.CONFIG_VALIDATION(s.message);if(!Ct.isEmptyOrZeroLength(n)&&!Ct.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ct.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Kk,"getClusteringRoutes");function CO(e){let t=bO(e);gt={};for(let r in Sn){let n=t.get(r.toUpperCase());if(Ct.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Sn[r].toLowerCase();s===Nr.LOGGING_ROOT?gt[s]=pn.dirname(n):gt[s]=n}return gt}a(CO,"initOldConfig");function Wk(e){let t=Eh();return Ck.get(t,e.replaceAll("_","."))}a(Wk,"getConfigFromFile");async function Qk(e,t){let r=$s(wi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await er.writeFile(wi(),String(r))}a(Qk,"addConfig");function zk(e){let t=wi(Ct.getPropsFilePath()),r=$s(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=pn.join(n,yr.HDB_CONFIG_FILE);er.writeFileSync(s,String(r))}a(zk,"deleteConfigFromFile");function Jk(){return ql||(dh(),ql)}a(Jk,"getConfigObj")});var Z=g((roe,PO)=>{"use strict";var hh=require("fs-extra"),Ii=require("path"),LO=require("os"),Xk=require("properties-reader"),nc=Y(),rc=J(),ue=M(),Gl=wr(),jk="Error initializing environment manager",kl="BOOT_PROPS_FILE_PATH",MO=!1,Zk={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_s={};PO.exports={BOOT_PROPS_FILE_PATH:kl,getHdbBasePath:eV,setHdbBasePath:tV,get:UO,initSync:nV,setProperty:Le,initTestEnvironment:sV};function eV(){return _s[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(eV,"getHdbBasePath");function tV(e){_s[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(tV,"setHdbBasePath");function UO(e){let t=Gl.getConfigValue(e);return t===void 0?_s[e]:t}a(UO,"get");function Le(e,t){Zk[e]&&(_s[e]=t),Gl.updateConfigObject(e,t)}a(Le,"setProperty");function rV(){let e;try{e=rc.getPropsFilePath(),hh.accessSync(e,hh.constants.F_OK|hh.constants.R_OK),MO=!0;let t=Xk(e);return _s[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),_s[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_s[kl]=e,!0}catch{return nc.trace(`Environment manager found no properties file at ${e}`),!1}}a(rV,"doesPropFileExist");function nV(e=!1){try{(MO||rV()||rc.noBootFile())&&(Gl.initConfig(e),_s[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Gl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){nc.error(jk),nc.error(t),console.error(t),process.exit(1)}}a(nV,"initSync");function sV(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ii.join(__dirname,"../../","unitTests");_s[kl]=Ii.join(u,"hdb_boot_properties.file"),Le(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ii.join(u,"settings.test")),Le(ue.HDB_SETTINGS_NAMES.INSTALL_USER,LO.userInfo()?LO.userInfo().username:void 0),Le(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Le(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ii.join(u,"envDir","log")),Le(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Le(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Le(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Le(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ii.join(u,"envDir")),Le(ue.CONFIG_PARAMS.STORAGE_PATH,Ii.join(u,"envDir")),s&&(Le(ue.CONFIG_PARAMS.HTTP_SECUREPORT,UO(ue.CONFIG_PARAMS.HTTP_PORT)),Le(ue.CONFIG_PARAMS.HTTP_PORT,null)),Le(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Le(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Le(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rc.isEmpty(i)?!1:i),Le(ue.CONFIG_PARAMS.HTTP_CORS,rc.isEmpty(i)?!1:i),Le(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Le(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Le(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Le(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Le(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ii.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Le(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rc.isEmpty(c)?!1:c),o&&(Le("CORS_ACCESSLIST",o),Le(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Le(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Le(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Le(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Le(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Le(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Le(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${kl}. Please check your boot props and settings files`;nc.fatal(r),nc.error(t)}}a(sV,"initTestEnvironment")});var Ke=g((soe,GO)=>{"use strict";var cc=M(),iV=J(),tr=Z(),uc=require("path"),oV=require("minimist"),vO=require("fs-extra"),BO=require("lodash");tr.initSync();var{CONFIG_PARAMS:Ys,DATABASES_PARAM_CONFIG:sc,SYSTEM_SCHEMA_NAME:Vl}=cc,ic,oc,ac;function HO(){if(ic!==void 0)return ic;if(tr.getHdbBasePath()!==void 0)return ic=tr.get(Ys.STORAGE_PATH)||uc.join(tr.getHdbBasePath(),cc.DATABASES_DIR_NAME),ic}a(HO,"getBaseSchemaPath");function xO(){if(oc!==void 0)return oc;if(tr.getHdbBasePath()!==void 0)return oc=qO(Vl),oc}a(xO,"getSystemSchemaPath");function FO(){if(ac!==void 0)return ac;if(tr.getHdbBasePath()!==void 0)return ac=tr.get(cc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||uc.join(tr.getHdbBasePath(),cc.TRANSACTIONS_DIR_NAME),ac}a(FO,"getTransactionAuditStoreBasePath");function aV(e,t){let r=tr.get(Ys.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||uc.join(FO(),e.toString())}a(aV,"getTransactionAuditStorePath");function qO(e,t){e=e.toString(),t=t&&t.toString();let r=tr.get(cc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||uc.join(HO(),e)}a(qO,"getSchemaPath");function cV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,oV(process.argv));let n=r[Ys.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!iV.isObject(n))throw o;i=n}for(let o of i){let c=o[Vl];if(!c)continue;let u=tr.get(Ys.DATABASES);u=u??{};let _=c?.tables?.[t]?.[sc.PATH];if(_)return BO.set(u,[Vl,sc.TABLES,t,sc.PATH],_),tr.setProperty(Ys.DATABASES,u),_;let l=c?.[sc.PATH];if(l)return BO.set(u,[Vl,sc.PATH],l),tr.setProperty(Ys.DATABASES,u),l}}let s=r[Ys.STORAGE_PATH.toUpperCase()];if(s){if(!vO.pathExistsSync(s))throw new Error(s+" does not exist");let i=uc.join(s,e);return vO.mkdirsSync(i),tr.setProperty(Ys.STORAGE_PATH,s),i}return xO()}a(cV,"initSystemSchemaPaths");function uV(){ic=void 0,oc=void 0,ac=void 0}a(uV,"resetPaths");GO.exports={getBaseSchemaPath:HO,getSystemSchemaPath:xO,getTransactionAuditStorePath:aV,getTransactionAuditStoreBasePath:FO,getSchemaPath:qO,initSystemSchemaPaths:cV,resetPaths:uV}});var Ir=g((coe,KO)=>{"use strict";var lV=Or().LMDB_ERRORS_ENUM,ooe=require("lmdb"),_V=lt(),aoe=require("buffer").Buffer,{OVERFLOW_MARKER:kO,MAX_SEARCH_KEY_LENGTH:$l}=_V,VO=["number","string","symbol","boolean","bigint"];function dV(e){if(e=e?.primaryStore||e,!e)throw new Error(lV.ENV_REQUIRED)}a(dV,"validateEnv");function fV(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(fV,"stringifyData");function EV(e){return e instanceof Date?e.valueOf():e}a(EV,"convertKeyValueToWrite");function hV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(VO.includes(typeof e))return e.length>$l?[e.slice(0,$l)+kO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(VO.includes(typeof i))i.length>$l?r.push(i.slice(0,$l)+kO):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(hV,"getIndexedValues");var Yl=0,$O=0;function YO(){$O=Date.now()-performance.now()}a(YO,"adjustStartTime");YO();var mV=6e4;setInterval(YO,mV).unref();function pV(){let e=performance.now()+$O;return e>Yl?(Yl=e,e):(Yl+=488e-6,Yl)}a(pV,"getNextMonotonicTime");KO.exports={validateEnv:dV,stringifyData:fV,convertKeyValueToWrite:EV,getNextMonotonicTime:pV,getIndexedValues:hV}});var WO,Tn,mh,lc=Oe(()=>{WO=require("events"),Tn=class extends WO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new mh;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)}},mh=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}}}});var Sh={};Ve(Sh,{loadGQLSchema:()=>gV,start:()=>ph,startOnMainThread:()=>TV});function ph({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let F=function(v){if(v.kind==="NonNullType"){let W=F(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:F(v.type)};let z={type:v.name?.value};return Object.defineProperty(z,"location",{value:v.loc.startToken}),z};a(F,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};f.set(T,b);for(let v of S.directives){if(v.name.value==="table"){for(let P of v.arguments)b[P.name.value]=P.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let P of v.arguments)P.name.value==="name"&&(b.export={name:P.value.value})}}let H=!1;for(let v of S.fields){let P=F(v.type);P.name=v.name.value,A.push(P);for(let z of v.directives)if(z.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,H=!0);else if(z.name.value==="indexed")P.indexed=!0;else if(z.name.value==="relationship"){let W={};for(let Q of z.arguments)W[Q.name.value]=Q.value.value;P.relationship=W}else if(z.name.value==="createdTime")P.assignCreatedTime=!0;else if(z.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(z.name.value==="expiresAt")P.expiresAt=!0;else if(z.name.value==="allow"){let W=P.authorizedRoles=[];for(let Q of z.arguments)Q.name.value==="role"&&W.push(Q.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):SV.includes(S.type)||(0,QO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Kl.dirname)(n),S.tableClass):i.set((0,Kl.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let T=f.get(S.type);if(!T)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Kl.dirname)(n)+"/"+S.name,T.tableClass)}}}var Kl,QO,SV,TV,gV,zO=Oe(()=>{Kl=require("path");be();QO=B(Ze()),SV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(ph,"start");TV=ph,gV=ph({ensureTable:ot}).handleFile});async function Wl(e){return RV?(_c||(_c=AV(bV)),(await(await _c).import(e)).namespace):import(e)}async function AV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),_c=new Compartment({console,Math,Date,fetch:OV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,XO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Bt,tables:Cr,databases:et})}};let n=await(0,JO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),_c}function OV(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 bV(){return{Resource:Bt,tables:Cr}}var JO,XO,RV,_c,Th=Oe(()=>{gn();be();JO=require("fs/promises"),XO=require("path"),RV=!1;a(Wl,"secureImport");a(AV,"getCompartment");a(OV,"secureOnlyFetch");a(bV,"getGlobalVars")});var Rh={};Ve(Rh,{handleFile:()=>NV});async function NV(e,t,r,n){let s=new Map,i=(0,jO.pathToFileURL)(r).toString(),o=await Wl(i);u(o.default)&&n.set((0,gh.dirname)(t),o.default),c(o,(0,gh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var jO,gh,ZO=Oe(()=>{jO=require("url");Th();gh=require("path");a(NV,"handleFile")});var Oh={};Ve(Oh,{start:()=>yV});function yV({resources:e}){e.set("login",Ah),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ah,eb=Oe(()=>{gn();a(yV,"start");Ah=class extends Bt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var ab={};Ve(ab,{parse:()=>Nh,streamAsJSON:()=>dc,stringify:()=>Ci});function dc(e){return new bh({value:e})}function tb(e){return console.error(e),JSON.stringify(e.toString())}function rb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ci(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===ib)return ob(e);if(t.resolution)return t.resolution.then(()=>Ci(e));throw t}}function ob(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=ob(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Ci(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Nh(e){return CV.test(e)?wV.parse(e):JSON.parse(e)}var nb,sb,wV,IV,ib,bh,CV,yh=Oe(()=>{nb=require("stream"),sb=B(require("json-bigint-fixes")),wV=(0,sb.default)({useNativeBigInt:!0}),IV=1e4,ib={};BigInt.prototype.toJSON=function(){throw ib};a(dc,"streamAsJSON");bh=class extends nb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),tb)}catch(s){yield tb(s)}else yield Ci(t)}else yield Ci(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);rb(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>IV?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 rb(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(tb,"handleError");a(rb,"when");a(Ci,"stringify");a(ob,"jsStringify");CV=/-?\d{16,}/;a(Nh,"parse")});var gb=g((boe,Tb)=>{"use strict";var wh=require("recursive-iterator"),DV=require("alasql"),Ih=require("clone"),cb=J(),{handleHDBError:ub,hdb_errors:LV}=ee(),{HDB_ERROR_MSGS:lb,HTTP_STATUS_CODES:_b}=LV,{getDatabases:MV}=(be(),te(Fe)),UV=["DISTINCT_ARRAY"],db=Symbol("validateTables"),Ch=Symbol("validateTable"),Ooe=Symbol("getAllColumns"),fb=Symbol("validateAllColumns"),Ql=Symbol("findColumn"),Eb=Symbol("validateOrderBy"),fc=Symbol("validateSegment"),Dh=Symbol("validateColumn"),hb=Symbol("setColumnsForTable"),mb=Symbol("checkColumnsForAsterisk"),pb=Symbol("validateGroupBy"),Sb=Symbol("hasColumns"),Lh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[db](),this[mb](),this[fb]()}[db](){if(this[Sb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ch](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ch](t.table)})}}[Sb](){let t=!1,r=new wh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ch](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=MV();if(!r[t.databaseid])throw ub(new Error,lb.SCHEMA_NOT_FOUND(t.databaseid),_b.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ub(new Error,lb.TABLE_NOT_FOUND(t.databaseid,t.tableid),_b.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ih(s);i.table=Ih(t),this.attributes.push(i)})}[Ql](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)}[mb](){let t=new wh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[hb](r.tableid)}[hb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new DV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[fb](){this[fc](this.statement.columns,!1),this[fc](this.statement.joins,!1),this[fc](this.statement.where,!1),this[pb](this.statement.group,!1),this[fc](this.statement.order,!0)}[fc](t,r){if(!t)return;let n=new wh(t),s=[];for(let{node:i,path:o}of n)!cb.isEmpty(i)&&!cb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Eb](i):s.push(this[Dh](i)));return s}[pb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&UV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ih(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ql](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Ql](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[Eb](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Dh](t)}[Dh](t){let r=this[Ql](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Tb.exports=Lh});var Ab=g((yoe,Rb)=>{"use strict";var Mh=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")}};Rb.exports=Mh});var bb=g((Ioe,Ob)=>{"use strict";var Uh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Ob.exports=Uh});var Ib={};Ve(Ib,{HAS_EXPIRATION:()=>Gh,LAST_TIMESTAMP_PLACEHOLDER:()=>mc,LOCAL_TIMESTAMP:()=>PV,METADATA:()=>Ec,NO_TIMESTAMP:()=>vh,PENDING_LOCAL_TIME:()=>kh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>qh,RecordEncoder:()=>xh,TIMESTAMP_ASSIGN_LAST:()=>BV,TIMESTAMP_ASSIGN_NEW:()=>yb,TIMESTAMP_ASSIGN_PREVIOUS:()=>wb,TIMESTAMP_PLACEHOLDER:()=>zl,TIMESTAMP_RECORD_PREVIOUS:()=>Bh,fromResource:()=>Zl,getUpdateRecord:()=>Vh,handleLocalTimeForGets:()=>e_});function xV(){return hc[0]=hc[0]^64,vV.getFloat64(0)}function Zl(e){Fh=!0;try{return e()}finally{Fh=!1}}function e_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Ec];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Ec]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Ec];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,Di.push(new WeakRef(this))),!Fh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Di.length;u++){let _=Di[u].deref();(!_||_.isDone||_.isCommitted)&&Di.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Vh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Uo=i?.localTime?Bh|wb:vh:Uo=u?i?.localTime?Bh|16384:yb|16384:vh,l>0&&(c|=Gh),Xl=c,Hh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Uo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(E&&(Jl=e.encoder.encode(E)),f&&i?.localTime){let A=i?.localTime,b=r.get(A);if(b){let H=Dt(b).previousLocalTime;return r.put(A,jl(o,t,n,H,T,d,Jl),{ifVersion:p}),S}}r.put(mc,jl(o,t,n,i?.localTime?1:0,T,d,Jl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Nb,Ph,zl,mc,qh,PV,Ec,hc,vV,vh,yb,BV,wb,Bh,Gh,kh,HV,Jl,Uo,Xl,Hh,xh,Loe,Fh,Di,Po=Oe(()=>{Nb=require("msgpackr");Li();Ph=B(Y()),zl=new Uint8Array([1,1,1,1,4,64,0,0]),mc=new Uint8Array([1,1,1,1,1,0,0,0]),qh=new Uint8Array([1,1,1,1,3,64,0,0]),PV=Symbol("local-timestamp"),Ec=Symbol("metadata"),hc=new Uint8Array(8),vV=new DataView(hc.buffer,0,8),vh=0,yb=0,BV=1,wb=3,Bh=4,Gh=16,kh=1,Uo=0,Xl=-1,Hh=0,xh=class extends Nb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Uo||Xl>=0){let i=0,o=Uo;o&&(i+=8,Uo=0);let c=Xl,u=Hh;c>=0&&(i+=2,Xl=-1,u&&(i+=8,Hh=0));let _=HV=r.call(this,n,s|2048|i);Jl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(zl[4]=o,zl[5]=o>>8,_.set(zl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(hc,0,c),c+=8;else for(let d=0;d<8;d++)hc[d]=t[c++];u=xV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Gh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Ec]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(xV,"getTimestamp");Loe=Map.prototype.get;a(Zl,"fromResource");a(e_,"handleLocalTimeForGets");Di=[];setInterval(()=>{for(let e=0;e<Di.length;e++){let t=Di[e].deref();!t||t.isDone||t.isCommitted?Di.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Ph.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Ph.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(Vh,"getUpdateRecord")});var t_=g((Uoe,Cb)=>{"use strict";var Yh=Z(),Kh=M(),{RecordEncoder:FV}=(Po(),te(Ib));Yh.initSync();var qV=Yh.get(Kh.CONFIG_PARAMS.STORAGE_COMPRESSION),GV=Yh.get(Kh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,kV=Kh.UPDATES_PROPERTY,$h=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=qV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=GV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:FV},this.alwaysLazyProperty=n=>n===kV)}};Cb.exports=$h});var n_=g((voe,Lb)=>{"use strict";var vo=Z(),pc=M();vo.initSync();var VV=vo.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||vo.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||vo.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Db=vo.get(pc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),$V=vo.get(pc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),r_=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=VV,this.noFSAccess=!0,Db!==void 0&&(this.overlappingSync=Db),this.noReadAhead=$V}};Lb.exports=r_;r_.MAX_DBS=1e4});var $e=g((Hoe,Gb)=>{"use strict";var Qh=require("lmdb"),Rn=require("fs-extra"),Dr=require("path"),s_=Ir(),Pb=Y(),rr=Or().LMDB_ERRORS_ENUM,i_=bb(),zh=t_(),vb=n_(),Ks=lt(),Mb=M(),{table:YV,resetDatabases:KV}=(be(),te(Fe)),Ub=Z(),An=Ks.INTERNAL_DBIS_NAME,Bb=Ks.DBI_DEFINITION_NAME,WV="data.mdb",QV="lock.mdb",Sc=".mdb",zV="-lock",Wh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Jr(t,r),this.key_type=this.dbi[Ks.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ks.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Qh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function o_(e,t){if(e===void 0)throw new Error(rr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(rr.ENV_NAME_REQUIRED)}a(o_,"pathEnvNameValidation");async function Jh(e,t,r=!0){try{await Rn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(rr.INVALID_BASE_PATH):n}try{let n=Dr.join(e,t+Sc);return await Rn.access(n,Rn.constants.R_OK|Rn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Rn.access(Dr.join(e,t,WV),Rn.constants.R_OK|Rn.constants.F_OK),Dr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(rr.INVALID_ENVIRONMENT)}else throw new Error(rr.INVALID_ENVIRONMENT);throw n}}a(Jh,"validateEnvironmentPath");function a_(e,t){if(s_.validateEnv(e),t===void 0)throw new Error(rr.DBI_NAME_REQUIRED)}a(a_,"validateEnvDBIName");async function JV(e,t,r=!1,n=!1){o_(e,t);let s=Dr.basename(e);t=t.toString();let i=Ub.get(Mb.CONFIG_PARAMS.DATABASES);i||Ub.setProperty(Mb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Jh(e,t,n),Hb(e,t,r)}catch(o){if(o.message===rr.INVALID_ENVIRONMENT){let c=Dr.join(e,t);await Rn.mkdirp(n?c:e);let u=new vb(n?c:c+Sc,!1),_=Qh.open(u);_.dbis=Object.create(null);let l=new zh(!1);_.openDB(An,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Xh(e,t,r);return _[Ks.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(JV,"createEnvironment");async function XV(e,t,r,n=!0){o_(e,t),t=t.toString();let s=Dr.join(e,t);return YV({table:t,database:Dr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(XV,"copyEnvironment");async function Hb(e,t,r=!1){o_(e,t),t=t.toString();let n=Xh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Jh(e,t),i=Dr.join(e,t+Sc),o=s!=i,c=new vb(s,o),u=Qh.open(c);u.dbis=Object.create(null);let _=Fb(u);for(let l=0;l<_.length;l++)Jr(u,_[l]);return u[Ks.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(Hb,"openEnvironment");async function jV(e,t,r=!1){o_(e,t),t=t.toString();let n=Dr.join(e,t+Sc),s=await Jh(e,t);if(global.lmdb_map!==void 0){let i=Xh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await xb(o),delete global.lmdb_map[i]}}await Rn.remove(s),await Rn.remove(s===n?s+zV:Dr.join(Dr.dirname(s),QV))}a(jV,"deleteEnvironment");async function xb(e){s_.validateEnv(e);let t=e[Ks.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(xb,"closeEnvironment");function Xh(e,t,r=!1){let s=`${Dr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Xh,"getCachedEnvironmentName");function ZV(e){s_.validateEnv(e);let t=Object.create(null),r=Jr(e,An);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==An)try{t[n]=Object.assign(new i_,s)}catch{Pb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(ZV,"listDBIDefinitions");function Fb(e){s_.validateEnv(e);let t=[],r=Jr(e,An);for(let{key:n}of r.getRange({start:!1}))n!==An&&t.push(n);return t}a(Fb,"listDBIs");function e$(e,t){let n=Jr(e,An).getEntry(t),s=new i_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Pb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(e$,"getDBIDefinition");function qb(e,t,r,n=!r){if(a_(e,t),t=t.toString(),t===An)throw new Error(rr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Jr(e,t)}catch(s){if(s.message===rr.DBI_DOES_NOT_EXIST){let i=new zh(r,n===!0),o=e.openDB(t,i),c=new i_(r===!0,n);return o[Bb]=c,Jr(e,An).putSync(t,c),e.dbis[t]=o,o}throw s}}a(qb,"createDBI");function Jr(e,t){if(a_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==An?r=e$(e,t):r=new i_,r===void 0)throw new Error(rr.DBI_DOES_NOT_EXIST);let n;try{let s=new zh(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(rr.DBI_DOES_NOT_EXIST):s}return n[Bb]=r,e.dbis[t]=n,n}a(Jr,"openDBI");function t$(e,t){a_(e,t),t=t.toString();let r=Jr(e,t),n=r.getStats();return r[Ks.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(t$,"statDBI");async function r$(e,t){try{let r=Dr.join(e,t+Sc);return(await Rn.stat(r)).size}catch{throw new Error(rr.INVALID_ENVIRONMENT)}}a(r$,"environmentDataSize");function n$(e,t){if(a_(e,t),t=t.toString(),t===An)throw new Error(rr.CANNOT_DROP_INTERNAL_DBIS_NAME);Jr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Jr(e,An).removeSync(t)}a(n$,"dropDBI");function s$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Jr(e,i)}catch(o){if(o.message===rr.DBI_DOES_NOT_EXIST)qb(e,i,i!==t,i===t),n=!0;else throw o}}n&&KV()}a(s$,"initializeDBIs");Gb.exports={openDBI:Jr,openEnvironment:Hb,createEnvironment:JV,listDBIs:Fb,listDBIDefinitions:ZV,createDBI:qb,dropDBI:n$,statDBI:t$,deleteEnvironment:jV,initializeDBIs:s$,TransactionCursor:Wh,environmentDataSize:r$,copyEnvironment:XV,closeEnvironment:xb}});var Vb=g((Foe,kb)=>{"use strict";var jh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};kb.exports=jh});var Yb=g((Goe,$b)=>{"use strict";var Zh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};$b.exports=Zh});var Wb=g((Voe,Kb)=>{"use strict";var em=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Kb.exports=em});var Bo=g((Qoe,Jb)=>{"use strict";var i$=$e(),o$=Vb(),a$=Yb(),c$=Wb(),qn=Ir(),Tc=Or().LMDB_ERRORS_ENUM,u$=lt(),ds=M(),l$=J(),_$=require("uuid"),Yoe=require("lmdb"),{handleHDBError:d$,hdb_errors:f$}=ee(),{OVERFLOW_MARKER:Koe,MAX_SEARCH_KEY_LENGTH:Woe}=u$,Qb=Z();Qb.initSync();var c_=Qb.get(ds.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tm=ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Mi=ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E$(e,t,r,n,s=qn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new o$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];zb(_,!0,s);let l=h$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return nm(o,c,n,i,s)}a(E$,"insertRecords");function h$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][ds.FUNC_VAL],n[o]=c)}let u=qn.getIndexedValues(c),_=e.dbis[o];if(u){c_&&_.prefetch(u.map(l=>({key:l,value:s})),u_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}c_&&e.dbis[t].prefetch([s],u_),e.dbis[t].put(s,n,n[Mi])})}a(h$,"insertRecord");function m$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(m$,"removeSkippedRecords");function zb(e,t,r){let n=r>0;(n||!Number.isInteger(e[Mi]))&&(e[Mi]=r||(r=qn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tm]))&&(e[tm]=r||qn.getNextMonotonicTime()):delete e[tm]}a(zb,"setTimestamps");function rm(e,t,r){r.indexOf(ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),i$.initializeDBIs(e,t,r)}a(rm,"initializeTransaction");async function p$(e,t,r,n,s=qn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new a$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=sm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return nm(c,u,n,i,s,o)}a(p$,"updateRecords");async function S$(e,t,r,n,s=qn.getNextMonotonicTime()){try{im(e,t,r,n)}catch(u){throw d$(u,u.message,f$.HTTP_STATUS_CODES.BAD_REQUEST)}rm(e,t,r);let i=new c$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;l$.isEmpty(_[t])?(l=_$.v4(),_[t]=l):l=_[t];let d=sm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return nm(o,c,n,i,s)}a(S$,"upsertRecords");async function nm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||qn.getNextMonotonicTime(),m$(r,i),n}a(nm,"finalizeWrite");function sm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(zb(r,!l,o),Number.isInteger(r[Mi])&&_[Mi]>r[Mi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][ds.FUNC_VAL],r[h]=p)}if(p===T)continue;let A=qn.getIndexedValues(T);if(A){c_&&S.prefetch(A.map(b=>({key:b,value:n})),u_);for(let b=0,H=A.length;b<H;b++)S.remove(A[b],n)}if(A=qn.getIndexedValues(p),A){c_&&S.prefetch(A.map(b=>({key:b,value:n})),u_);for(let b=0,H=A.length;b<H;b++)S.put(A[b],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Mi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:sm(e,t,r,n,s,i,o))}a(sm,"updateUpsertRecord");function T$(e,t,r){if(qn.validateEnv(e),t===void 0)throw new Error(Tc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tc.WRITE_ATTRIBUTES_REQUIRED):new Error(Tc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(T$,"validateBasic");function im(e,t,r,n){if(T$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Tc.RECORDS_REQUIRED):new Error(Tc.RECORDS_MUST_BE_ARRAY)}a(im,"validateWrite");function u_(){}a(u_,"noop");Jb.exports={insertRecords:E$,updateRecords:p$,upsertRecords:S$}});var Ui=g((Joe,g$)=>{g$.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",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var kn=g((Xoe,Zb)=>{"use strict";var jb=J(),Xb=M(),Ho=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Gn=require("joi"),Ws={schema_format:{pattern:Ho,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},R$=Gn.alternatives(Gn.string().min(1).max(Ws.schema_length.maximum).pattern(Ho).messages({"string.pattern.base":"{:#label} "+Ws.schema_format.message}),Gn.number(),Gn.array()).required(),A$=Gn.alternatives(Gn.string().min(1).max(Ws.schema_length.maximum).pattern(Ho).messages({"string.pattern.base":"{:#label} "+Ws.schema_format.message}),Gn.number()),O$=Gn.alternatives(Gn.string().min(1).max(Ws.schema_length.maximum).pattern(Ho).messages({"string.pattern.base":"{:#label} "+Ws.schema_format.message}),Gn.number()).required();function b$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ws.schema_length.maximum?`'${e}' maximum of 250 characters`:Ho.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(b$,"checkValidTable");function N$(e,t){return jb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(N$,"validateSchemaExists");function y$(e,t){let r=t.state.ancestors[0].schema;return jb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(y$,"validateTableExists");function w$(e,t){return e.toLowerCase()===Xb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Xb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(w$,"validateSchemaName");Zb.exports={common_validators:Ws,schema_regex:Ho,hdb_schema_table:R$,validateSchemaExists:N$,validateTableExists:y$,validateSchemaName:w$,checkValidTable:b$,hdb_database:A$,hdb_table:O$}});var l_=g((Zoe,eN)=>{var{common_validators:Vn}=kn(),Rc=Xe(),gc="is required",_t={database:{presence:!1,format:Vn.schema_format,length:Vn.schema_length},schema:{presence:!1,format:Vn.schema_format,length:Vn.schema_length},table:{presence:!0,format:Vn.schema_format,length:Vn.schema_length},attribute:{presence:!0,format:Vn.schema_format,length:Vn.schema_length},hash_attribute:{presence:!0,format:Vn.schema_format,length:Vn.schema_length}};function Ac(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(Ac,"makeAttributesStrings");function I$(e){return e=Ac(e),_t.table.presence=!1,_t.attribute.presence=!1,_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(I$,"schema_object");function C$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(C$,"table_object");function D$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence=!1,Rc.validateObject(e,_t)}a(D$,"create_table_object");function L$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence={message:gc},_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(L$,"attribute_object");function M$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(M$,"describe_table");function U$(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(U$,"validateTableResidence");eN.exports={schema_object:I$,create_table_object:D$,table_object:C$,attribute_object:L$,describe_table:M$,validateTableResidence:U$}});var rN=g((tae,tN)=>{"use strict";var P$=require("uuid"),om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||P$.v4(),this.schema_table=`${this.schema}.${this.table}`}};tN.exports=om});var __=g((nae,nN)=>{"use strict";var v$=rN(),am=class extends v${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};nN.exports=am});var iN=g((iae,sN)=>{"use strict";sN.exports=H$;var B$="inserted";function H$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===B$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(H$,"returnObject")});var d_=g((aae,lN)=>{"use strict";var x$=M(),cm=$e(),F$=Bo(),{getSystemSchemaPath:q$,getSchemaPath:G$}=Ke(),k$=Ui(),V$=l_(),$$=__(),Y$=iN(),{handleHDBError:oN,hdb_errors:cN}=ee(),aN=J(),{HTTP_STATUS_CODES:K$}=cN,um=k$.hdb_attribute,uN=[];for(let e=0;e<um.attributes.length;e++)uN.push(um.attributes[e].attribute);var W$="inserted";lN.exports=Q$;async function Q$(e){let t=V$.attribute_object(e);if(t)throw oN(new Error,t.message,cN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&aN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oN(new Error,r,K$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aN.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new $$(e.schema,e.table,e.attribute,e.id);try{let i=await cm.openEnvironment(G$(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}`);cm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cm.openEnvironment(q$(),x$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await F$.insertRecords(o,um.hash_attribute,uN,[s]);return Y$(W$,c,{records:[s]},u)}catch(i){throw i}}a(Q$,"lmdbCreateAttribute")});var _m=g((uae,dN)=>{var{hdb_table:z$,hdb_database:_N}=kn(),J$=Xe(),lm=require("joi"),X$={undefined:"undefined",null:"null"},j$=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||X$[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Z$=lm.object({database:_N,schema:_N,table:z$,records:lm.array().items(lm.object().custom(j$)).required()});dN.exports=function(e){return J$.validateBySchema(e,Z$)}});var Oc=g((dae,EN)=>{"use strict";var Es=J(),fN=Y(),_ae=_m(),{getDatabases:e1}=(be(),te(Fe)),{ClientError:Pi}=ee();EN.exports=t1;function t1(e){if(Es.isEmpty(e))throw new Pi("invalid update parameters defined.");if(Es.isEmptyOrZeroLength(e.schema))throw new Pi("invalid schema specified.");if(Es.isEmptyOrZeroLength(e.table))throw new Pi("invalid table specified.");if(!Array.isArray(e.records))throw new Pi("records must be an array");let t=e1()[e.schema]?.[e.table];if(Es.isEmpty(t))throw new Pi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Es.isEmptyOrZeroLength(o[r]))throw fN.error("a valid hash attribute must be provided with update record:",o),new Pi("a valid hash attribute must be provided with update record, check log for more info");if(!Es.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Es.isEmpty(o[r])&&o[r]!==""&&n.has(Es.autoCast(o[r]))&&(o.skip=!0),n.add(Es.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(t1,"insertUpdateValidate")});var bc=g((Eae,hN)=>{"use strict";var r1=M().OPERATIONS_ENUM,dm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=r1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};hN.exports=dm});var Ic=g((pae,mN)=>{"use strict";var mae=bc(),f_=M(),Em=J(),fm=Y(),n1=require("uuid"),{handleHDBError:Nc,hdb_errors:s1}=ee(),{HDB_ERROR_MSGS:yc,HTTP_STATUS_CODES:wc}=s1;mN.exports=i1;function i1(e,t,r){for(let s=0;s<t.length;s++)o1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];a1(i,r,e.operation)}}a(i1,"processRows");function o1(e){if(Buffer.byteLength(String(e))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Nc(new Error,yc.ATTR_NAME_LENGTH_ERR(e),wc.BAD_REQUEST,void 0,void 0,!0);if(Em.isEmptyOrZeroLength(e)||Em.isEmpty(e.trim()))throw Nc(new Error,yc.ATTR_NAME_NULLISH_ERR,wc.BAD_REQUEST,void 0,void 0,!0)}a(o1,"validateAttribute");function a1(e,t,r){if(!e.hasOwnProperty(t)||Em.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=n1.v4();return}throw fm.error("Update transaction aborted due to record with no hash value:",e),Nc(new Error,yc.RECORD_MISSING_HASH_ERR,wc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw fm.error(e),Nc(new Error,yc.HASH_VAL_LENGTH_ERR,wc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw fm.error(e),Nc(new Error,yc.INVALID_FORWARD_SLASH_IN_HASH_ERR,wc.BAD_REQUEST,void 0,void 0,!0)}a(a1,"validateHash")});var SN=g((Tae,pN)=>{"use strict";var hm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pN.exports=hm});var RN=g((Rae,gN)=>{"use strict";var mm=$e(),c1=Y(),TN=Or().LMDB_ERRORS_ENUM;gN.exports=u1;async function u1(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 mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==TN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mm.closeEnvironment(global.lmdb_map[n]),await mm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==TN.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){c1.error(t)}}a(u1,"cleanLMDBMap")});var hs=g((Oae,NN)=>{"use strict";var Cc=require("crypto"),l1=Z(),{CONFIG_PARAMS:_1}=M(),ON="aes-256-cbc",d1=32,f1=16,pm=64,bN=32,E1=pm+bN,AN=new Map;NN.exports={encrypt:h1,decrypt:m1,createNatsTableStreamName:p1};function h1(e){let t=Cc.randomBytes(d1),r=Cc.randomBytes(f1),n=Cc.createCipheriv(ON,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(h1,"encrypt");function m1(e){let t=e.substr(0,pm),r=e.substr(pm,bN),n=e.substr(E1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Cc.createDecipheriv(ON,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(m1,"decrypt");function p1(e,t){let r=l1.get(_1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=AN.get(r);return n||(n=Cc.createHash("md5").update(r).digest("hex"),AN.set(r,n)),n}a(p1,"createNatsTableStreamName")});var vi=g((yae,wN)=>{"use strict";var Nae=Xr(),E_=Y(),yN=l_(),S1=hs(),h_=J(),{handleHDBError:m_,hdb_errors:T1}=ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:Sm}=T1,g1=Z();g1.initSync();var{getDatabases:Tm}=(be(),te(Fe));wN.exports={describeAll:R1,describeTable:S_,describeSchema:A1};async function R1(e){try{let t=h_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Tm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await S_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await S_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){E_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return E_.error("Got an error in describeAll"),E_.error(t),m_(new Error,p_.DESCRIBE_ALL_ERR)}}a(R1,"describeAll");async function S_(e,t){h_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=yN.describe_table(e);if(i)throw i;let c=Tm()[r];if(!c)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let u=c[n];if(!u)throw m_(new Error,p_.TABLE_NOT_FOUND(e.schema,e.table),Sm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=S1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){E_.warn(`unable to stat table dbi due to ${f}`)}return d}a(S_,"descTable");async function A1(e){h_.transformReq(e);let t=yN.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 n=e.schema.toString(),i=Tm()[n];if(!i)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),h_.isEmpty(u)||u.describe){let _=await S_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(A1,"describeSchema")});var Qs=g((Dae,MN)=>{var O1=Ui(),{callbackify:CN,promisify:b1}=require("util"),{getDatabases:DN}=(be(),te(Fe));MN.exports={setSchemaDataToGlobal:IN,getTableSchema:N1,getSystemSchema:y1,setSchemaDataToGlobalAsync:b1(IN)};var LN=vi(),Iae=CN(LN.describeAll),Cae=CN(LN.describeTable);function IN(e){global.hdb_schema=DN(),e&&e()}a(IN,"setSchemaDataToGlobal");function N1(e,t,r){let n=DN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(N1,"getTableSchema");function y1(){return O1}a(y1,"getSystemSchema")});var jr=g((Mae,BN)=>{"use strict";var g_=_m(),Ht=J(),w1=require("util"),R_=On(),I1=Qs(),UN=Y(),{handleHDBError:Bi,hdb_errors:C1}=ee(),{HTTP_STATUS_CODES:Hi}=C1,D1=w1.promisify(I1.getTableSchema),L1="updated",PN="inserted",vN="upserted";BN.exports={insert:U1,update:P1,upsert:v1,validation:M1,flush:B1};async function M1(e){if(Ht.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ht.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ht.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await D1(e.schema,e.table),r=g_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ht.isEmptyOrZeroLength(c[n]))throw UN.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(!Ht.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw UN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ht.isEmpty(c[n])&&c[n]!==""&&s.has(Ht.autoCast(c[n]))&&(c.skip=!0),s.add(Ht.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(M1,"validation");async function U1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=g_(e);if(t)throw Bi(new Error,t.message,Hi.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.BAD_REQUEST);let n=await R_.createRecords(e);return T_(PN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(U1,"insertData");async function P1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=g_(e);if(t)throw Bi(new Error,t.message,Hi.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.BAD_REQUEST);let n=await R_.updateRecords(e);return Ht.isEmpty(n.existing_rows)?T_(L1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):T_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(P1,"updateData");async function v1(e){if(e.operation!=="upsert")throw Bi(new Error,"invalid operation, must be upsert",Hi.INTERNAL_SERVER_ERROR);let t=g_(e);if(t)throw Bi(new Error,t.message,Hi.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.BAD_REQUEST);let n=await R_.upsertRecords(e);return T_(vN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(v1,"upsertData");function T_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===PN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===vN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(T_,"returnObject");function B1(e){return Ht.transformReq(e),R_.flush(e.schema,e.table)}a(B1,"flush")});var Rm=g((Pae,FN)=>{var H1=Xe(),gm=require("joi"),{hdb_table:x1,hdb_database:HN}=kn(),xN={schema:HN,database:HN,table:x1},F1={date:gm.date().iso().required()},q1={timestamp:gm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};FN.exports=function(e,t){let r=t==="timestamp"?{...xN,...q1}:{...xN,...F1},n=gm.object(r);return H1.validateBySchema(e,n)}});var kN=g((vae,GN)=>{var G1=Xe(),Am=require("joi"),{hdb_table:k1,hdb_database:qN}=kn(),V1=Am.object({schema:qN,database:qN,table:k1,hash_values:Am.array().required(),ids:Am.array()});GN.exports=function(e){return G1.validateBySchema(e,V1)}});var $N=g((Bae,VN)=>{"use strict";var Om=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},bm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},Nm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VN.exports={InsertObject:Om,NoSQLSeachObject:bm,DeleteResponseObject:Nm}});var qi=g((xae,zN)=>{"use strict";var KN=Rm(),$1=kN(),xi=J(),YN=require("moment"),WN=Y(),{promisify:Y1,callbackify:K1}=require("util"),Fi=M(),W1=Qs(),ym=Y1(W1.getTableSchema),wm=On(),{DeleteResponseObject:Q1}=$N(),{handleHDBError:zs,hdb_errors:z1}=ee(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:Js}=z1,J1="records successfully deleted",X1=K1(QN);zN.exports={delete:X1,deleteRecord:QN,deleteFilesBefore:j1,deleteAuditLogsBefore:Z1};async function j1(e){let t=KN(e,"date");if(t)throw zs(t,t.message,Js.BAD_REQUEST,void 0,void 0,!0);if(xi.transformReq(e),!YN(e.date,YN.ISO_8601).isValid())throw zs(new Error,A_.INVALID_DATE,Js.BAD_REQUEST,Fi.LOG_LEVELS.ERROR,A_.INVALID_DATE,!0);let n=xi.checkSchemaTableExist(e.schema,e.table);if(n)throw zs(new Error,n,Js.NOT_FOUND,Fi.LOG_LEVELS.ERROR,n,!0);let s=await wm.deleteRecordsBefore(e);if(await ym(e.schema,e.table),WN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(j1,"deleteFilesBefore");async function Z1(e){let t=KN(e,"timestamp");if(t)throw zs(t,t.message,Js.BAD_REQUEST,void 0,void 0,!0);if(xi.transformReq(e),isNaN(e.timestamp))throw zs(new Error,A_.INVALID_VALUE("Timestamp"),Js.BAD_REQUEST,Fi.LOG_LEVELS.ERROR,A_.INVALID_VALUE("Timestamp"),!0);let r=xi.checkSchemaTableExist(e.schema,e.table);if(r)throw zs(new Error,r,Js.NOT_FOUND,Fi.LOG_LEVELS.ERROR,r,!0);let n=await wm.deleteAuditLogsBefore(e);return await ym(e.schema,e.table),WN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Z1,"deleteAuditLogsBefore");async function QN(e){e.ids&&(e.hash_values=e.ids);let t=$1(e);if(t)throw zs(t,t.message,Js.BAD_REQUEST,void 0,void 0,!0);xi.transformReq(e);let r=xi.checkSchemaTableExist(e.schema,e.table);if(r)throw zs(new Error,r,Js.NOT_FOUND,Fi.LOG_LEVELS.ERROR,r,!0);try{await ym(e.schema,e.table);let n=await wm.deleteRecords(e);return xi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${J1}`),n}catch(n){if(n.message===Fi.SEARCH_NOT_FOUND_MESSAGE){let s=new Q1;return s.message=Fi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(QN,"deleteRecord")});var O_=g((qae,jN)=>{var eY=require("crypto"),JN=9;function tY(e){let t=nY(JN),r=XN(e+t);return t+r}a(tY,"createHash");function rY(e,t){let r=e?.substr(0,JN),n=r+XN(t+r);return e===n}a(rY,"validateHash");function nY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(nY,"generateSalt");function XN(e){return eY.createHash("md5").update(e).digest("hex")}a(XN,"md5");jN.exports={hash:tY,validate:rY}});var ey=g((kae,ZN)=>{var Im=Xe(),$t={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 sY(e){return $t.password.presence=!0,$t.username.presence=!0,$t.role.presence=!0,$t.active.presence=!0,Im.validateObject(e,$t)}a(sY,"addUserValidation");function iY(e){return $t.password.presence=!1,$t.username.presence=!0,$t.role.presence=!1,$t.active.presence=!1,Im.validateObject(e,$t)}a(iY,"alterUserValidation");function oY(e){return $t.password.presence=!1,$t.username.presence=!0,$t.role.presence=!1,$t.active.presence=!1,Im.validateObject(e,$t)}a(oY,"dropUserValidation");ZN.exports={addUserValidation:sY,alterUserValidation:iY,dropUserValidation:oY}});var tt=g((Yae,ry)=>{"use strict";var{platform:$ae}=require("os"),aY="nats-server.zip",Cm="nats-server",cY=process.platform==="win32"?`${Cm}.exe`:Cm,Dm="HDB",uY=/^[^\s.,*>]+$/,ty="__request__",lY=a(e=>`${e}.${ty}`,"REQUEST_SUBJECT"),_Y={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},dY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},fY={HUB:"hub.pid",LEAF:"leaf.pid"},EY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},hY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Dm,deliver_subject:"__HDB__.WORKQUEUE"},mY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Dm,deliver_subject:"HDB.SCHEMAQUEUE"},pY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Dm,deliver_subject:"HDB.USERQUEUE"},SY={SUCCESS:"success",ERROR:"error"},TY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},gY={TXN:"txn",MSGID:"msgid"},xo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},RY={[xo.ERR]:1,[xo.WRN]:2,[xo.INF]:3,[xo.DBG]:4,[xo.TRC]:5},AY={debug:"-D",trace:"-DVV"};ry.exports={NATS_SERVER_ZIP:aY,NATS_SERVER_NAME:Cm,NATS_BINARY_NAME:cY,PID_FILES:fY,NATS_CONFIG_FILES:dY,SERVER_SUFFIX:EY,WORK_QUEUE_CONSUMER_NAMES:hY,SCHEMA_QUEUE_CONSUMER_NAMES:mY,USER_QUEUE_CONSUMER_NAMES:pY,NATS_TERM_CONSTRAINTS_RX:uY,REQUEST_SUFFIX:ty,UPDATE_REMOTE_RESPONSE_STATUSES:SY,CLUSTER_STATUS_STATUSES:TY,REQUEST_SUBJECT:lY,SUBJECT_PREFIXES:gY,MSG_HEADERS:_Y,LOG_LEVELS:xo,LOG_LEVEL_FLAGS:AY,LOG_LEVEL_HIERARCHY:RY}});var sy=g((Wae,ny)=>{"use strict";var b_=M(),N_=class{static{a(this,"BaseLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Lm=class extends N_{static{a(this,"ExtendedLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ny.exports={BaseLicense:N_,ExtendedLicense:Lm}});var Gi=g((zae,ly)=>{"use strict";var qo=require("fs-extra"),oy=O_(),ay=require("crypto"),OY=require("moment"),bY=require("uuid").v4,Yt=Y(),Um=require("path"),NY=J(),Xs=M(),{totalmem:iy}=require("os"),yY=sy().ExtendedLicense,Fo="invalid license key format",wY="061183",IY="mofi25",CY="aes-256-cbc",DY=16,LY=32,cy=Z();cy.initSync();var Mm;ly.exports={validateLicense:uy,generateFingerPrint:UY,licenseSearch:Bm,getLicense:BY,checkMemoryLimit:HY};function Pm(){return Um.join(cy.getHdbBasePath(),Xs.LICENSE_KEY_DIR_NAME,Xs.LICENSE_FILE_NAME)}a(Pm,"getLicenseDirPath");function MY(){let e=Pm();return Um.join(e,Xs.LICENSE_FILE_NAME)}a(MY,"getLicenseFilePath");function vm(){let e=Pm();return Um.join(e,Xs.REG_KEY_FILE_NAME)}a(vm,"getFingerPrintFilePath");async function UY(){let e=vm();try{return await qo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await PY();throw Yt.error(`Error writing fingerprint file to ${e}`),Yt.error(t),new Error("There was an error generating the fingerprint")}}a(UY,"generateFingerPrint");async function PY(){let e=bY(),t=oy.hash(e),r=vm();try{await qo.mkdirp(Pm()),await qo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yt.error(`Error writing fingerprint file to ${r}`),Yt.error(n),new Error("There was an error generating the fingerprint")}return t}a(PY,"writeFingerprint");function uy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Xs.RAM_ALLOCATION_ENUM.DEFAULT,version:Xs.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yt.error("empty license key passed to validate."),r;let n=vm(),s=!1;try{s=qo.statSync(n)}catch(i){Yt.error(i)}if(s){let i;try{i=qo.readFileSync(n,"utf8")}catch{Yt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(IY),c=o[1];c=Buffer.concat([Buffer.from(c)],DY);let u=Buffer.concat([Buffer.from(i)],LY),_=ay.createDecipheriv(CY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=vY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fo),Yt.error(Fo),new Error(Fo)}let d;if(isNaN(l))try{d=JSON.parse(l),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(Fo),Yt.error(Fo),new Error(Fo)}else r.exp_date=l;r.exp_date<OY().valueOf()&&(r.valid_date=!1),oy.validate(o[1],`${wY}${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||Yt.error("Invalid licence"),r}a(uy,"validateLicense");function vY(e,t){try{let r=ay.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yt.warn("Check old license failed")}}a(vY,"checkOldLicense");function Bm(){let e=new yY,t=[];try{t=qo.readFileSync(MY(),"utf-8").split(Xs.NEW_LINE)}catch(r){r.code==="ENOENT"?Yt.info("no license file found"):Yt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(NY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=uy(s.license_key,s.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(s){Yt.error("There was an error parsing the license string."),Yt.error(s),e.ram_allocation=Xs.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Mm=e,e}a(Bm,"licenseSearch");async function BY(){return Mm||await Bm(),Mm}a(BY,"getLicense");function HY(){let e=Bm().ram_allocation,t=process.constrainedMemory?.()||iy();if(t=Math.round(Math.min(t,iy())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(HY,"checkMemoryLimit")});var Zr=g((ece,yy)=>{"use strict";var Ey="username is required",hy="nothing to update, must supply active, role or password to update",my="password cannot be an empty string",py="If role is specified, it cannot be empty.",Sy="active must be true or false";yy.exports={addUser:KY,alterUser:WY,dropUser:zY,getSuperUser:ZY,userInfo:JY,listUsers:w_,listUsersExternal:XY,setUsersToGlobal:ko,findAndValidateUser:by,getClusterUser:eK,USERNAME_REQUIRED:Ey,ALTERUSER_NOTHING_TO_UPDATE:hy,EMPTY_PASSWORD:my,EMPTY_ROLE:py,ACTIVE_BOOLEAN:Sy};var Ty=jr(),xY=qi(),Fm=O_(),gy=ey(),Ry=Xr(),qm=ms(),Lr=J(),Ay=require("validate.js"),Ae=Y(),{promisify:FY}=require("util"),Gm=hs(),_y=M(),dy=tt(),qY=wr(),Xae=Z(),jae=Gi(),GY=Ui(),{table:Zae}=(be(),te(Fe)),{handleHDBError:$n,hdb_errors:kY}=ee(),{HTTP_STATUS_CODES:Yn,AUTHENTICATION_ERROR_MSGS:Hm,HDB_ERROR_MSGS:Go}=kY,{UserEventMsg:km}=bn(),xm=require("lodash"),{server:Vm}=(Zt(),te(yi)),VY=Y();Vm.getUser=(e,t)=>by(e,t,t!=null);var Oy={username:!0,active:!0,role:!0,password:!0},fy=new Map,y_=Ry.searchByValue,$Y=Ry.searchByHash,YY=FY(xY.delete);async function KY(e){let t=Ay.cleanAttributes(e,Oy),r=gy.addUserValidation(t);if(r)throw $n(new Error,r.message,Yn.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await y_(n),s=s&&Array.from(s)}catch(u){throw Ae.error("There was an error searching for a role in add user"),Ae.error(u),u}if(!s||s.length<1)throw $n(new Error,Go.ROLE_NAME_NOT_FOUND(t.role),Yn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw $n(new Error,Go.DUP_ROLES_FOUND(t.role),Yn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Ty.insert(i)}catch(u){throw Ae.error("There was an error searching for a user."),Ae.error(u),u}Ae.debug(o);try{await ko()}catch(u){throw Ae.error("Got an error setting users to global"),Ae.error(u),u}if(o.skipped_hashes.length===1)throw $n(new Error,Go.USER_ALREADY_EXISTS(t.username),Yn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],qm.signalUserChange(new km(process.pid)),`${c.username} successfully added`}a(KY,"addUser");async function WY(e){let t=Ay.cleanAttributes(e,Oy);if(Lr.isEmptyOrZeroLength(t.username))throw new Error(Ey);if(Lr.isEmptyOrZeroLength(t.password)&&Lr.isEmptyOrZeroLength(t.role)&&Lr.isEmptyOrZeroLength(t.active))throw new Error(hy);if(!Lr.isEmpty(t.password)&&Lr.isEmptyOrZeroLength(t.password.trim()))throw new Error(my);if(!Lr.isEmpty(t.active)&&!Lr.isBoolean(t.active))throw new Error(Sy);let r=QY(t.username);if(!Lr.isEmpty(t.password)&&!Lr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password)),t.role==="")throw new Error(py);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 y_(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Go.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),$n(new Error,c,Yn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Go.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),$n(new Error,c,Yn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await Ty.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await ko()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return qm.signalUserChange(new km(process.pid)),s}a(WY,"alterUser");function QY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(QY,"isClusterUser");async function zY(e){try{let t=gy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Lr.isEmpty(global.hdb_users.get(e.username)))throw $n(new Error,Go.USER_NOT_EXIST(e.username),Yn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await YY(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await ko()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return qm.signalUserChange(new km(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(zY,"dropUser");async function JY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=xm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await $Y(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(JY,"userInfo");async function XY(){let e;try{e=await w_()}catch(t){throw Ae.error("Got an error listing users."),Ae.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(XY,"listUsersExternal");async function w_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await y_(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=xm.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await y_(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=xm.cloneDeep(o),o.role=r[o.role],jY(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),Lr.errorizeMessage(e)}return null}a(w_,"listUsers");function jY(e){try{if(!e){Ae.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(GY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(jY,"appendSystemTablesToRole");async function ko(){try{let e=await w_();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(ko,"setUsersToGlobal");async function by(e,t,r=!0){global.hdb_users||await ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw $n(new Error,Hm.GENERIC_AUTH_FAIL,Yn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw $n(new Error,Hm.USER_INACTIVE,Yn.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(fy.get(t)===n.password)return s;if(Fm.validate(n.password,t))fy.set(t,n.password);else throw $n(new Error,Hm.GENERIC_AUTH_FAIL,Yn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(by,"findAndValidateUser");async function ZY(){global.hdb_users||await ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(ZY,"getSuperUser");async function eK(){let e=await w_(),t=qY.getConfigFromFile(_y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Lr.isEmpty(r)&&r?.role?.role===_y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+dy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+dy.SERVER_SUFFIX.ADMIN,r}a(eK,"getClusterUser");var Ny=[];Vm.invalidateUser=function(e){for(let t of Ny)try{t(e)}catch(r){VY.error("Error invalidating user",r)}};Vm.onInvalidatedUser=function(e){Ny.push(e)}});var Lc=g((sce,Dy)=>{"use strict";var ki=Y(),Mr=M(),tK=RN(),rce=Qs(),nce=vi(),rK=Zr(),{validateEvent:wy}=bn(),Dc=On(),nK=require("process"),{resetDatabases:sK}=(be(),te(Fe)),iK={[Mr.ITC_EVENT_TYPES.SCHEMA]:oK,[Mr.ITC_EVENT_TYPES.USER]:Cy};async function oK(e){let t=wy(e);if(t){ki.error(t);return}ki.trace("ITC schemaHandler received schema event:",e),await tK(e.message),await aK(e.message)}a(oK,"schemaHandler");async function aK(e){try{Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=sK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ki.error(t)}}a(aK,"syncSchemaMetadata");var Iy=[];async function Cy(e){try{try{Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ki.warn(r)}let t=wy(e);if(t){ki.error(t);return}ki.trace(`ITC userHandler ${Mr.HDB_ITC_CLIENT_PREFIX}${nK.pid} received user event:`,e),await rK.setUsersToGlobal();for(let r of Iy)r()}catch(t){ki.error(t)}}a(Cy,"userHandler");Cy.addListener=function(e){Iy.push(e)};Dy.exports=iK});var bn=g((lce,My)=>{"use strict";var oce=Y(),$m=J(),cK=M(),{ITC_ERRORS:Mc}=Or(),{parentPort:ace,threadId:uK,isMainThread:lK,workerData:cce}=require("worker_threads"),{onMessageFromWorkers:_K,broadcast:uce,broadcastWithAcknowledgement:dK}=Ze();My.exports={sendItcEvent:fK,validateEvent:Ly,SchemaEventMsg:EK,UserEventMsg:hK};var I_;_K(async(e,t)=>{I_=I_||Lc(),Ly(e),I_[e.type]&&await I_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function fK(e){return!lK&&e.message&&(e.message.originator=uK),dK(e)}a(fK,"sendItcEvent");function Ly(e){if(typeof e!="object")return Mc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$m.isEmpty(e.type))return Mc.MISSING_TYPE;if(!e.hasOwnProperty("message")||$m.isEmpty(e.message))return Mc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$m.isEmpty(e.message.originator))return Mc.MISSING_ORIGIN;if(cK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Mc.INVALID_EVENT(e.type)}a(Ly,"validateEvent");function EK(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(EK,"SchemaEventMsg");function hK(e){this.originator=e}a(hK,"UserEventMsg")});var ms=g((fce,By)=>{"use strict";var Uy=M(),dce=J(),C_=Y(),Py=SN(),Vo,{sendItcEvent:vy}=bn();function mK(e){try{C_.trace("signalSchemaChange called with message:",e),Vo=Vo||Lc();let t=new Py(Uy.ITC_EVENT_TYPES.SCHEMA,e);return Vo.schema(t),vy(t)}catch(t){C_.error(t)}}a(mK,"signalSchemaChange");function pK(e){try{C_.trace("signalUserChange called with message:",e),Vo=Vo||Lc();let t=new Py(Uy.ITC_EVENT_TYPES.USER,e);return Vo.user(t),vy(t)}catch(t){C_.error(t)}}a(pK,"signalUserChange");By.exports={signalSchemaChange:mK,signalUserChange:pK}});var D_=g((hce,xy)=>{"use strict";var Hy=J(),SK=M(),TK=Y(),gK=d_(),RK=__(),AK=ms(),{SchemaEventMsg:OK}=bn(),bK="already exists in";xy.exports=NK;async function NK(e,t,r){if(Hy.isEmptyOrZeroLength(r))return r;let n=[];Hy.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await yK(e,t.schema,t.name,i)})),s}a(NK,"lmdbCheckForNewAttributes");async function yK(e,t,r,n){let s=new RK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await wK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(bK))TK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(yK,"createNewAttribute");async function wK(e){let t;return t=await gK(e),AK.signalSchemaChange(new OK(process.pid,SK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(wK,"createAttribute")});var $o=g((pce,Fy)=>{"use strict";var Ym=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Fy.exports=Ym});var Gy=g((Tce,qy)=>{"use strict";var IK=$o(),CK=M().OPERATIONS_ENUM,Km=class extends IK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(CK.INSERT,r,n,s,i),this.records=t}};qy.exports=Km});var Vy=g((Rce,ky)=>{"use strict";var DK=$o(),LK=M().OPERATIONS_ENUM,Wm=class extends DK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(LK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};ky.exports=Wm});var Yy=g((Oce,$y)=>{"use strict";var MK=$o(),UK=M().OPERATIONS_ENUM,Qm=class extends MK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(UK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};$y.exports=Qm});var Wy=g((Nce,Ky)=>{"use strict";var PK=$o(),vK=M().OPERATIONS_ENUM,zm=class extends PK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(vK.DELETE,n,s,t,i),this.original_records=r}};Ky.exports=zm});var Uc=g((Ice,Xy)=>{"use strict";var wce=require("path"),Qy=$e(),BK=Gy(),HK=Vy(),xK=Yy(),FK=Wy(),Yo=lt(),zy=J(),{CONFIG_PARAMS:qK}=M(),Jy=Z();Jy.initSync();var L_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:GK}=Ke();Xy.exports=kK;async function kK(e,t){if(Jy.get(qK.LOGGING_AUDITLOG)===!1)return;let r=GK(e.schema,e.table),n=await Qy.openEnvironment(r,e.table,!0),s=VK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Qy.initializeDBIs(n,Yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),zy.isEmpty(s.user_name)||n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(kK,"writeTransaction");function VK(e,t){let r=zy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===L_.INSERT)return new BK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPDATE)return new HK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPSERT)return new xK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.DELETE)return new FK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(VK,"createTransactionObject")});var Jm=g((Lce,jy)=>{"use strict";var $K=Oc(),Dce=bc(),Pc=M(),YK=Ic(),KK=Bo().insertRecords,WK=$e(),QK=Y(),zK=D_(),{getSchemaPath:JK}=Ke(),XK=Uc();jy.exports=jK;async function jK(e){try{let{schema_table:t,attributes:r}=$K(e);YK(e,r,t.hash_attribute),e.schema!==Pc.SYSTEM_SCHEMA_NAME&&(r.includes(Pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await zK(e.hdb_auth_header,t,r),s=JK(e.schema,e.table),i=await WK.openEnvironment(s,e.table),o=await KK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await XK(e,o)}catch(c){QK.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(jK,"lmdbCreateRecords")});var tw=g((Uce,ew)=>{"use strict";var Zy=M(),ZK=Jm(),eW=bc(),tW=require("fs-extra"),{getSchemaPath:rW}=Ke();ew.exports=nW;async function nW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new eW(Zy.SYSTEM_SCHEMA_NAME,Zy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await ZK(r),await tW.mkdirp(rW(e.schema))}a(nW,"lmdbCreateSchema")});var nw=g((vce,rw)=>{"use strict";var Xm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};rw.exports=Xm});var aw=g((qce,ow)=>{"use strict";var sw=$e(),jm=Ir(),Zm=Or().LMDB_ERRORS_ENUM,sW=lt(),iw=Y(),Hce=J(),iW=require("lmdb"),oW=nw(),aW=M(),{OVERFLOW_MARKER:xce,MAX_SEARCH_KEY_LENGTH:Fce}=sW,cW=aW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function uW(e,t,r,n){if(jm.validateEnv(e),t===void 0)throw new Error(Zm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zm.IDS_REQUIRED):new Error(Zm.IDS_MUST_BE_ITERABLE);try{let s=sw.listDBIs(e);sw.initializeDBIs(e,t,s);let i=new oW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[cW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,iW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],b=h[T];if(b!=null)try{let H=jm.getIndexedValues(b);if(H)for(let F=0,v=H.length;F<v;F++)A.remove(H[F],o)}catch{iw.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){iw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=jm.getNextMonotonicTime(),i}catch(s){throw s}}a(uW,"deleteRecords");ow.exports={deleteRecords:uW}});var vc=g((kce,uw)=>{"use strict";var Ko=J(),lW=aw(),_W=$e(),{getSchemaPath:dW}=Ke(),fW=Uc(),EW=Y();uw.exports=hW;async function hW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ko.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ko.isEmptyOrZeroLength(e.hash_values)&&!Ko.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Ko.isEmpty(u)||e.hash_values.push(u)}}if(Ko.isEmptyOrZeroLength(e.hash_values))return cw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ko.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=dW(e.schema,e.table),i=await _W.openEnvironment(s,e.table),o=await lW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await fW(e,o)}catch(c){EW.error(`unable to write transaction due to ${c.message}`)}return cw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(hW,"lmdbDeleteRecords");function cw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(cw,"createDeleteResponse")});var tp=g((Yce,lw)=>{"use strict";var mW=M(),$ce=Ir();function ep(e,t){let r=Object.create(null);if(t.length===1&&mW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(ep,"parseRow");function pW(e,t,r,n){let s=ep(r,e);n.push(s)}a(pW,"searchAll");function SW(e,t,r,n){let s=ep(r,e);n[t]=s}a(SW,"searchAllToMap");function TW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(TW,"iterateDBI");function Vi(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Vi,"pushResults");function gW(e,t,r,n,s,i){t.toString().endsWith(e)&&Vi(t,r,n,s,i)}a(gW,"endsWith");function RW(e,t,r,n,s,i){t.toString().includes(e)&&Vi(t,r,n,s,i)}a(RW,"contains");function AW(e,t,r,n,s,i){t>e&&Vi(t,r,n,s,i)}a(AW,"greaterThanCompare");function OW(e,t,r,n,s,i){t>=e&&Vi(t,r,n,s,i)}a(OW,"greaterThanEqualCompare");function bW(e,t,r,n,s,i){t<e&&Vi(t,r,n,s,i)}a(bW,"lessThanCompare");function NW(e,t,r,n,s,i){t<=e&&Vi(t,r,n,s,i)}a(NW,"lessThanEqualCompare");lw.exports={parseRow:ep,searchAll:pW,searchAllToMap:SW,iterateDBI:TW,endsWith:gW,contains:RW,greaterThanCompare:AW,greaterThanEqualCompare:OW,lessThanCompare:bW,lessThanEqualCompare:NW,pushResults:Vi}});var Wo=g((Jce,pw)=>{"use strict";var js=$e(),Wce=Y(),Ur=Ir(),M_=lt(),at=Or().LMDB_ERRORS_ENUM,Qce=J(),yW=M(),U_=tp(),{parseRow:wW}=U_,zce=require("lmdb"),{OVERFLOW_MARKER:_w,MAX_SEARCH_KEY_LENGTH:IW}=M_;function dw(e,t,r,n=!1,s=void 0,i=void 0){return $i(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(dw,"iterateFullIndex");function Bc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return $i(e,t,r,(l,d,f,E)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(Bc,"iterateRangeBetween");function $i(e,t,r,n){let s=e.database||e,i=js.openDBI(s,r);i[M_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&js.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a($i,"setupTransaction");function fw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(_w)){if(!s)if(r)s=js.openDBI(e,r);else{let u=js.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=js.openDBI(e,u[_]),!s[M_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(fw,"getOverflowCheck");function CW(e,t,r,n=!1,s=void 0,i=void 0){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return $i(e,t,t,(o,c,u)=>(P_(r),r=Hc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>wW(_.value,r))))}a(CW,"searchAll");function DW(e,t,r,n=!1,s=void 0,i=void 0){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);P_(r),r=Hc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of dw(e,t,t,n,s,i))o.set(c,U_.parseRow(u,r));return o}a(DW,"searchAllToMap");function LW(e,t,r=!1,n=void 0,s=void 0){if(Ur.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=dw(e,void 0,t,r,n,s),c=o.transaction,u=fw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(LW,"iterateDBI");function MW(e,t){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return js.statDBI(e,t).entryCount}a(MW,"countAll");function UW(e,t,r,n,s=!1,i=void 0,o=void 0){return Zs(e,r,n),$i(e,t,r,(c,u,_,l)=>(n=Ur.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(UW,"equals");function PW(e,t,r){return Zs(e,t,r),js.openDBI(e,t).getValuesCount(r)}a(PW,"count");function vW(e,t,r,n,s=!1,i=void 0,o=void 0){return Zs(e,r,n),$i(e,null,r,(c,u)=>{n=Ur.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(vW,"startsWith");function BW(e,t,r,n,s=!1,i=void 0,o=void 0){return Ew(e,t,r,n,s,i,o,!0)}a(BW,"endsWith");function Ew(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zs(e,r,n),$i(e,null,r,(u,_,l,d)=>{let f=fw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(_w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[M_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ew,"contains");function HW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Bc(e,t,r,n,u,s,i,o,!0,!1)}a(HW,"greaterThan");function xW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Bc(e,t,r,n,u,s,i,o,!1,!1)}a(xW,"greaterThanEqual");function FW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Bc(e,t,r,u,n,s,i,o,!1,!0)}a(FW,"lessThan");function qW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Bc(e,t,r,u,n,s,i,o,!1,!1)}a(qW,"lessThanEqual");function GW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Ur.validateEnv(e),r===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(at.START_VALUE_REQUIRED);if(s===void 0)throw new Error(at.END_VALUE_REQUIRED);if(n=Ur.convertKeyValueToWrite(n),s=Ur.convertKeyValueToWrite(s),n>s)throw new Error(at.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Bc(e,t,r,n,s,i,o,c)}a(GW,"between");function kW(e,t,r,n){Ur.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),r=Hc(s,r),n===void 0)throw new Error(at.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=U_.parseRow(c,r)),o}a(kW,"searchByHash");function VW(e,t,r){Ur.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(VW,"checkHashExists");function $W(e,t,r,n,s=[]){return mw(e,t,r,n,s),hw(e,t,r,n,s).map(i=>i[1])}a($W,"batchSearchByHash");function YW(e,t,r,n,s=[]){mw(e,t,r,n,s);let i=new Map;for(let[o,c]of hw(e,t,r,n,s))i.set(o,c);return i}a(YW,"batchSearchByHashToMap");function hw(e,t,r,n,s=[]){return $i(e,t,t,(i,o,c)=>{r=Hc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,U_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(hw,"batchHashSearch");function mw(e,t,r,n,s){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),n==null)throw new Error(at.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(at.IDS_MUST_BE_ITERABLE)}a(mw,"initializeBatchSearchByHash");function P_(e){if(!Array.isArray(e))throw e===void 0?new Error(at.FETCH_ATTRIBUTES_REQUIRED):new Error(at.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(P_,"validateFetchAttributes");function Zs(e,t,r){if(Ur.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.SEARCH_VALUE_REQUIRED);if(r?.length>IW)throw new Error(at.SEARCH_VALUE_TOO_LARGE)}a(Zs,"validateComparisonFunctions");function Hc(e,t){return t.length===1&&yW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=js.listDBIs(e)),t}a(Hc,"setGetWholeRowAttributes");pw.exports={searchAll:CW,searchAllToMap:DW,count:PW,countAll:MW,equals:UW,startsWith:vW,endsWith:BW,contains:Ew,searchByHash:kW,setGetWholeRowAttributes:Hc,batchSearchByHash:$W,batchSearchByHashToMap:YW,checkHashExists:VW,iterateDBI:LW,greaterThan:HW,greaterThanEqual:xW,lessThan:FW,lessThanEqual:qW,between:GW}});var Qo=g((jce,Aw)=>{var Sw=require("lodash"),Tw=Xe(),Ee=require("joi"),KW=J(),{hdb_schema_table:xc,checkValidTable:gw,hdb_table:Rw,hdb_database:v_}=kn(),{handleHDBError:WW,hdb_errors:QW}=ee(),{getDatabases:zW}=(be(),te(Fe)),{HTTP_STATUS_CODES:JW}=QW,XW=Ee.object({database:v_,schema:v_,table:Rw,search_attribute:xc,search_value:Ee.any().required(),get_attributes:Ee.array().min(1).items(Ee.alternatives(xc,Ee.object())).optional(),desc:Ee.bool(),limit:Ee.number().integer().min(1),offset:Ee.number().integer().min(0)}),jW=Ee.object({database:v_,schema:v_,table:Rw,operator:Ee.string().valid("and","or").default("and").lowercase(),offset:Ee.number().integer().min(0),limit:Ee.number().integer().min(1),get_attributes:Ee.array().min(1).items(Ee.alternatives(xc,Ee.object())).optional(),sort:Ee.object({attribute:Ee.alternatives(xc,Ee.array().min(1)),descending:Ee.bool().optional()}).optional(),conditions:Ee.array().min(1).items(Ee.alternatives(Ee.object({operator:Ee.string().valid("and","or").default("and").lowercase(),conditions:Ee.array()}),Ee.object({search_attribute:Ee.alternatives(xc,Ee.array().min(1)),search_type:Ee.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ee.when("search_type",{switch:[{is:"equals",then:Ee.any()},{is:"between",then:Ee.array().items(Ee.alternatives([Ee.string(),Ee.number()])).length(2)}],otherwise:Ee.alternatives(Ee.string(),Ee.number())}).required()}))).required()});Aw.exports=function(e,t){let r=null;switch(t){case"value":r=Tw.validateBySchema(e,XW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(gw("database",e.schema)),i(gw("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=Tw.validateBySchema(e,jW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=KW.checkGlobalSchemaTable(e.schema,e.table);if(s)return WW(new Error,s,JW.NOT_FOUND);let o=zW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Sw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!Sw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var rp=g((eue,Ow)=>{"use strict";var ZW=$e(),eQ=Qo(),{getSchemaPath:tQ}=Ke();Ow.exports=rQ;function rQ(e){let t=eQ(e,"hashes");if(t)throw t;let r=tQ(e.schema,e.table);return ZW.openEnvironment(r,e.table)}a(rQ,"initialize")});var np=g((rue,bw)=>{"use strict";var nQ=Wo(),sQ=rp();bw.exports=iQ;async function iQ(e){let t=await sQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return nQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(iQ,"lmdbGetDataByHash")});var zo=g((sue,Nw)=>{"use strict";var sp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Nw.exports=sp});var ww=g((aue,yw)=>{"use strict";var oue=zo(),oQ=Wo(),aQ=rp();yw.exports=cQ;async function cQ(e){let t=await aQ(e),r=global.hdb_schema[e.schema][e.table];return oQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(cQ,"lmdbSearchByHash")});var Kn=g((uue,Iw)=>{"use strict";var ip=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Iw.exports=ip});var B_=g((_ue,Pw)=>{"use strict";var Kt=Wo(),uQ=$e(),lQ=J(),he=lt(),Yi=M(),_Q=Ui(),Cw=Or().LMDB_ERRORS_ENUM,{getSchemaPath:dQ}=Ke(),ps=Yi.SEARCH_WILDCARDS;async function fQ(e,t,r){let n;e.schema===Yi.SYSTEM_SCHEMA_NAME?n=_Q[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Uw(e,n.hash_attribute,r,t);return Lw(e,s,n.hash_attribute,r)}a(fQ,"prepSearch");async function Lw(e,t,r,n){let s=dQ(e.schema,e.table),i=await uQ.openEnvironment(s,e.table),o=Mw(i,e,t,r),c=o.transaction||i;if([he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,he.SEARCH_TYPES.SEARCH_ALL,he.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(EQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Dw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?Dw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Kt.batchSearchByHashToMap(c,r,e.get_attributes,_):Kt.batchSearchByHash(c,r,e.get_attributes,_)}a(Lw,"executeSearch");function Mw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 he.SEARCH_TYPES.EQUALS:s=Kt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.CONTAINS:s=Kt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.ENDS_WITH:case he.SEARCH_TYPES._ENDS_WITH:s=Kt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.STARTS_WITH:case he.SEARCH_TYPES._STARTS_WITH:s=Kt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Kt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Kt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.SEARCH_ALL:return Kt.searchAll(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Kt.searchAllToMap(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.BETWEEN:s=Kt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN:case he.SEARCH_TYPES._GREATER_THAN:s=Kt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN_EQUAL:case he.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Kt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN:case he.SEARCH_TYPES._LESS_THAN:s=Kt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN_EQUAL:case he.SEARCH_TYPES._LESS_THAN_EQUAL:s=Kt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Mw,"searchByType");function Dw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Dw,"createMapFromIterable");function EQ(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(EQ,"checkToFetchMore");function Uw(e,t,r,n){if(lQ.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ps.indexOf(s)>-1)return r===!0?he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:he.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ps[0])<0&&s.indexOf(ps[1])<0)return c===!0?r===!0?he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:he.SEARCH_TYPES.EQUALS;if(ps.indexOf(i)>=0&&ps.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),he.SEARCH_TYPES.CONTAINS;if(ps.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),he.SEARCH_TYPES.ENDS_WITH;if(ps.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),he.SEARCH_TYPES.STARTS_WITH;if(s.includes(ps[0])||s.includes(ps[1]))return he.SEARCH_TYPES.EQUALS;throw new Error(Cw.UNKNOWN_SEARCH_TYPE)}else switch(n){case Yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return he.SEARCH_TYPES.BETWEEN;case Yi.VALUE_SEARCH_COMPARATORS.GREATER:return he.SEARCH_TYPES.GREATER_THAN;case Yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return he.SEARCH_TYPES.GREATER_THAN_EQUAL;case Yi.VALUE_SEARCH_COMPARATORS.LESS:return he.SEARCH_TYPES.LESS_THAN;case Yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return he.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Cw.UNKNOWN_SEARCH_TYPE)}}a(Uw,"createSearchTypeFromSearchObject");Pw.exports={executeSearch:Lw,createSearchTypeFromSearchObject:Uw,prepSearch:fQ,searchByType:Mw}});var Bw=g((Eue,vw)=>{"use strict";var fue=Kn(),hQ=Qo(),mQ=J(),pQ=M(),SQ=B_();vw.exports=TQ;function TQ(e,t){if(!mQ.isEmpty(t)&&pQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=hQ(e,"value");if(n)throw n;return SQ.prepSearch(e,t,!0)}a(TQ,"lmdbGetDataByValue")});var Fc=g((pue,Hw)=>{"use strict";var mue=Kn(),gQ=Qo(),RQ=J(),AQ=M(),OQ=B_();Hw.exports=bQ;async function bQ(e,t){if(!RQ.isEmpty(t)&&AQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=gQ(e,"value");if(n)throw n;return OQ.prepSearch(e,t,!1)}a(bQ,"lmdbSearchByValue")});var Fw=g((gue,xw)=>{"use strict";var Tue=lt(),op=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},ap=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};xw.exports={SearchByConditionsObject:op,SearchCondition:ap,SortAttribute:cp}});var $w=g((bue,Vw)=>{"use strict";var Aue=Fw().SearchByConditionsObject,NQ=Kn(),yQ=Qo(),up=Wo(),H_=lt(),{Resource:Oue}=(gn(),te(lp)),kw=B_(),wQ=tp(),IQ=require("lodash"),{getSchemaPath:CQ}=Ke(),qw=$e(),{handleHDBError:DQ,hdb_errors:LQ}=ee(),{HTTP_STATUS_CODES:MQ}=LQ,UQ=1e8;Vw.exports=PQ;async function PQ(e){let t=yQ(e,"conditions");if(t)throw DQ(t,t.message,MQ.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=CQ(e.schema,e.table),n=await qw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)qw.openDBI(n,_.search_attribute);let i=IQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===H_.SEARCH_TYPES.EQUALS?_.estimated_count=up.count(n,_.search_attribute,_.search_value):l===H_.SEARCH_TYPES.CONTAINS||l===H_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=UQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Gw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(kw.filterByType),d=l.length,f=up.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))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(E=>wQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Gw(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=up.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(PQ,"lmdbSearchByConditions");async function Gw(e,t,r,n){let s=new NQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===H_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,kw.searchByType(e,s,i,n).map(o=>o.value)}a(Gw,"executeConditionSearch")});var qc=g((yue,Yw)=>{"use strict";var vQ=M().OPERATIONS_ENUM,_p=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=vQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Yw.exports=_p});var dp=g((Iue,Zw)=>{"use strict";var zw=Kn(),Jw=qc(),Xw=Fc(),jw=vc(),nr=M(),Kw=J(),Ww=$e(),{getTransactionAuditStorePath:BQ,getSchemaPath:HQ}=Ke(),Qw=Y();Zw.exports=xQ;async function xQ(e){try{if(Kw.isEmpty(global.hdb_schema[e.schema])||Kw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await FQ(e),await qQ(e);let t=HQ(e.schema,e.table);try{await Ww.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=BQ(e.schema,e.table);await Ww.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(xQ,"lmdbDropTable");async function FQ(e){let t=new zw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Xw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Jw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await jw(s)}a(FQ,"deleteAttributesFromSystem");async function qQ(e){let t=new zw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Xw(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Jw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await jw(s)}catch(i){throw i}}a(qQ,"dropTableFromSystem")});var tI=g((Due,eI)=>{"use strict";var GQ=require("fs-extra"),kQ=Kn(),VQ=zo(),$Q=qc(),YQ=dp(),KQ=vc(),WQ=np(),QQ=Fc(),Ss=M(),{getSchemaPath:zQ}=Ke(),{handleHDBError:JQ,hdb_errors:XQ}=ee(),{HDB_ERROR_MSGS:jQ,HTTP_STATUS_CODES:ZQ}=XQ;eI.exports=ez;async function ez(e){let t;try{t=await tz(e.schema);let r=new kQ(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await QQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await YQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new $Q(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await KQ(s);let i=zQ(t);await GQ.remove(i)}catch(r){throw r}}a(ez,"lmdbDropSchema");async function tz(e){let t=new VQ(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await WQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw JQ(new Error,jQ.SCHEMA_NOT_FOUND(e),ZQ.NOT_FOUND,void 0,void 0,!0);return n}a(tz,"validateDropSchema")});var Ep=g((Mue,rI)=>{"use strict";var fp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};rI.exports=fp});var sI=g((vue,nI)=>{"use strict";var rz=require("fs-extra"),x_=$e(),{getTransactionAuditStorePath:nz}=Ke(),hp=lt(),Pue=Ep();nI.exports=sz;async function sz(e){let t;try{let r=nz(e.schema,e.table);await rz.mkdirp(r),t=await x_.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{x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),x_.createDBI(t,hp.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(sz,"createTransactionsAuditEnvironment")});var cI=g((Hue,aI)=>{"use strict";var mp=M(),iI=$e(),iz=Bo(),{getSystemSchemaPath:oz,getSchemaPath:az}=Ke(),cz=Ui(),uz=d_(),pp=__(),lz=Y(),_z=sI(),Tp=cz.hdb_table,oI=[];for(let e=0;e<Tp.attributes.length;e++)oI.push(Tp.attributes[e].attribute);aI.exports=dz;async function dz(e,t){let r=az(t.schema,t.table),n=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new pp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iI.createEnvironment(r,t.table),e!==void 0){let o=await iI.openEnvironment(oz(),mp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await iz.insertRecords(o,Tp.hash_attribute,oI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Sp(n),await Sp(s),await Sp(i)}await _z(t)}catch(o){throw o}}a(dz,"lmdbCreateTable");async function Sp(e){try{await uz(e)}catch(t){lz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sp,"createAttribute")});var lI=g((Fue,uI)=>{"use strict";var fz=Oc(),Ez=Ic(),hz=D_(),Gc=M(),mz=Bo().updateRecords,pz=$e(),{getSchemaPath:Sz}=Ke(),Tz=Uc(),gz=Y();uI.exports=Rz;async function Rz(e){try{let{schema_table:t,attributes:r}=fz(e);Ez(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await hz(e.hdb_auth_header,t,r),s=Sz(e.schema,e.table),i=await pz.openEnvironment(s,e.table),o=await mz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Tz(e,o)}catch(c){gz.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(Rz,"lmdbUpdateRecords")});var dI=g((Gue,_I)=>{"use strict";var Az=M().OPERATIONS_ENUM,gp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Az.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};_I.exports=gp});var EI=g(($ue,fI)=>{"use strict";var Vue=dI(),Oz=Oc(),bz=Ic(),Nz=D_(),kc=M(),yz=Bo().upsertRecords,wz=$e(),{getSchemaPath:Iz}=Ke(),Cz=Uc(),Dz=Y(),{handleHDBError:Lz,hdb_errors:Mz}=ee();fI.exports=Uz;async function Uz(e){let t;try{t=Oz(e)}catch(u){throw Lz(u,u.message,Mz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;bz(e,n,r.hash_attribute),e.schema!==kc.SYSTEM_SCHEMA_NAME&&(n.includes(kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nz(e.hdb_auth_header,r,n),i=Iz(e.schema,e.table),o=await wz.openEnvironment(i,e.table),c=await yz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Cz(e,c)}catch(u){Dz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Uz,"lmdbUpsertRecords")});var mI=g((Kue,hI)=>{"use strict";var Rp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};hI.exports=Rp});var SI=g((Que,pI)=>{"use strict";var Ap=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};pI.exports=Ap});var RI=g((Xue,gI)=>{"use strict";var Op=$e(),{getTransactionAuditStorePath:Pz}=Ke(),Jue=mI(),Vc=lt(),vz=J(),TI=SI(),Bz=require("util").promisify,Hz=Bz(setTimeout),xz=1e4,Fz=100;gI.exports=qz;async function qz(e){let t=Pz(e.schema,e.table),r=await Op.openEnvironment(t,e.table,!0),n=Op.listDBIs(r);Op.initializeDBIs(r,Vc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new TI;do s=await Gz(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await Hz(Fz);while(s.transactions_deleted>0);return i}a(qz,"deleteAuditLogsBefore");async function Gz(e,t){let r=new TI;try{let n=e.dbis[Vc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Vc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];vz.isEmpty(c)||(s=e.dbis[Vc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Vc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>xz)break}return await s,r}catch(n){throw n}}a(Gz,"deleteTransactions")});var OI=g((Zue,AI)=>{"use strict";var bp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};AI.exports=bp});var NI=g((rle,bI)=>{"use strict";var kz=Kn(),Vz=qc(),tle=OI(),Wn=M(),$z=J(),Np=$e(),Yz=Ui(),Kz=Fc(),Wz=vc(),{getSchemaPath:Qz}=Ke();bI.exports=zz;async function zz(e,t=!0){let r;e.schema===Wn.SYSTEM_SCHEMA_NAME?r=Yz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Xz(e),s=Qz(e.schema,e.table),i=await Np.openEnvironment(s,e.table);return t===!0&&await Jz(e,i,r.hash_attribute),Np.dropDBI(i,e.attribute),n}a(zz,"lmdbDropAttribute");async function Jz(e,t,r){let n=Np.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(Jz,"removeAttributeFromAllObjects");async function Xz(e){let t=new kz(Wn.SYSTEM_SCHEMA_NAME,Wn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Kz(t)).filter(o=>o[Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if($z.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Vz(Wn.SYSTEM_SCHEMA_NAME,Wn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Wz(i)}a(Xz,"dropAttributeFromSystem")});var LI=g((ile,DI)=>{"use strict";var yp=$e(),Jo=lt(),sle=Ir(),wp=M(),yI=J(),{getTransactionAuditStorePath:jz}=Ke(),Zz=Wo(),F_=$o(),eJ=Y();DI.exports=tJ;async function tJ(e){let t=jz(e.schema,e.table),r=await yp.openEnvironment(t,e.table,!0),n=yp.listDBIs(r);yp.initializeDBIs(r,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return wI(r,e.search_values);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,nJ(r,e.search_values,s);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rJ(r,e.search_values);default:return wI(r)}}a(tJ,"readAuditLog");function wI(e,t=[0,Date.now()]){yI.isEmpty(t[0])&&(t[0]=0),yI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new F_,s))}a(wI,"searchTransactionsByTimestamp");function rJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,CI(e,i))}return Object.fromEntries(r)}a(rJ,"searchTransactionsByUsername");function nJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Zz.equals(e,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=CI(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);II(u,"records",r,l,o),II(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(nJ,"searchTransactionsByHashValues");function II(e,t,r,n,s){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(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new F_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new F_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(II,"loopRecords");function CI(e,t){let r=[];try{let n=e.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new F_,i);r.push(o)}}catch(i){eJ.warn(i)}return r}catch(n){throw n}}a(CI,"batchSearchTransactions")});var UI=g((ule,MI)=>{"use strict";var{getSchemaPath:ale}=Ke(),cle=$e(),{database:sJ}=(be(),te(Fe));MI.exports={writeTransaction:iJ};async function iJ(e,t,r){return sJ({database:e,table:t}).transaction(r)}a(iJ,"writeTransaction")});var HI=g((_le,BI)=>{"use strict";var{getSchemaPath:PI}=Ke(),vI=$e();BI.exports={flush:oJ,resetReadTxn:aJ};async function oJ(e,t){return(await vI.openEnvironment(PI(e,t),t.toString())).flushed}a(oJ,"flush");async function aJ(e,t){try{(await vI.openEnvironment(PI(e,t),t.toString())).resetReadTxn()}catch{}}a(aJ,"resetReadTxn")});var GI=g((fle,qI)=>{"use strict";var{Readable:cJ}=require("stream"),{getDatabases:uJ}=(be(),te(Fe)),{readSync:lJ,openSync:_J,createReadStream:xI}=require("fs"),{open:dJ}=require("lmdb"),FI=t_(),fJ=n_(),{AUDIT_STORE_OPTIONS:EJ}=(Li(),te(kI)),{INTERNAL_DBIS_NAME:hJ,AUDIT_STORE_NAME:mJ}=lt();qI.exports=SJ;var Ip=32768,pJ=100;async function SJ(e){let t=e.database||e.schema||"data",r=uJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=dJ({noSync:!0,maxDbs:fJ.MAX_DBS}),f,E=d.openDB(hJ,new FI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let H=d.openDB(A,b),F=l.openDB(A,b);for(let{key:v,version:P,value:z}of F.getRange({transaction:h,versions:F.useVersions}))f=H.put(v,z,P),p++%pJ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(H=>A.startsWith?.(H+"/"))){E.put(A,b);let[,H]=A.split("/"),F=!H,v=new FI(!F,F);await S(A,v)}e.include_audit&&await S(mJ,Object.assign({},EJ)),await f;let T=xI(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=_J(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ip);lJ(c,_,0,Ip),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=xI(null,{fd:c,start:Ip}),f=new cJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(SJ,"getBackup")});var YI=g((hle,$I)=>{"use strict";var TJ=Y(),{handleHDBError:gJ}=ee(),RJ=Ab(),AJ=d_(),OJ=Jm(),bJ=tw(),NJ=vc(),yJ=np(),wJ=ww(),IJ=Bw(),CJ=Fc(),DJ=$w(),LJ=tI(),MJ=cI(),UJ=lI(),PJ=EI(),vJ=RI(),BJ=dp(),HJ=NI(),xJ=LI(),FJ=UI(),VI=HI(),qJ=GI(),Cp=class extends RJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return DJ(t)}async getDataByHash(t){return await yJ(t)}async searchByHash(t){return await wJ(t)}async getDataByValue(t,r){return await IJ(t,r)}async searchByValue(t){return await CJ(t)}async createSchema(t){return await bJ(t)}async dropSchema(t){return await LJ(t)}async createTable(t,r){return await MJ(t,r)}async dropTable(t){return await BJ(t)}async createAttribute(t){return await AJ(t)}async createRecords(t){return await OJ(t)}async updateRecords(t){return await UJ(t)}async upsertRecords(t){try{return await PJ(t)}catch(r){throw gJ(r,null,null,TJ.ERR,r)}}async deleteRecords(t){return await NJ(t)}async dropAttribute(t){return await HJ(t)}async deleteAuditLogsBefore(t){return await vJ(t)}async readAuditLog(t){return await xJ(t)}writeTransaction(t,r,n){return FJ.writeTransaction(t,r,n)}flush(t,r){return VI.flush(t,r)}resetReadTxn(t,r){return VI.resetReadTxn(t,r)}getBackup(t){return qJ(t)}};$I.exports=Cp});function $J(){VJ=setInterval(function(){for(let e of Dp)if(e.stale){let t=e[Ne]?.url;KI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},kJ).unref()}var Lp,KI,GJ,Dp,Ki,q_,kJ,VJ,Mp=Oe(()=>{Lp=B(Ir()),KI=B(Y());gn();Po();GJ=100,Dp=new Set,Ki=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,Zl(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Dp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Zl(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Dp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Lp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<GJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},q_=class extends Ki{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Lp.getNextMonotonicTime)())}getReadTxn(){}},kJ=3e4;a($J,"startMonitoringTxns");$J()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new Ki;e.timestamp&&(n.timestamp=e.timestamp),n[Ne]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WI,Wi=Oe(()=>{WI=require("../../index");gn();Mp();a(We,"transaction");(0,WI._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var rC={};Ve(rC,{ResourceBridge:()=>vp});function Bp({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 zI(e,t){let r=Qn(e),n=Bp(e,r);if(!r)throw new Nn.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;We(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&k_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Qn(e){let t=e.database||e.schema||KJ,r=yn()[t];if(!r)throw(0,Nn.handleHDBError)(new Error,YJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JI(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*XI(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var jI,G_,Nn,ZI,eC,wn,Up,Pp,tC,YJ,KJ,WJ,QJ,QI,vp,nC=Oe(()=>{"use strict";jI=B(YI()),G_=B(Qo()),Nn=B(ee());be();ZI=B(Oc()),eC=B(Ic()),wn=B(M()),Up=B(ms()),Pp=B(bn()),tC=B(J());Wi();V_();({HDB_ERROR_MSGS:YJ}=Nn.hdb_errors),KJ="data",WJ=1e4,QJ=10,vp=class extends jI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QI=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,G_.default)(t,"conditions");if(r)throw(0,Nn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Qn(t);if(!n)throw new Nn.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bp(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Nn.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ot({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Qn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Qn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Qn(t).dropTable()}createSchema(t){return $c({database:t.schema,table:null}),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,wn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Hp(t.schema),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,wn.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,QI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZI.default)(t);(0,eC.default)(t,n,r.primaryKey);let s,i=yn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=k_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=yn()[t.schema][t.table],n={user:t.hdb_user};return We(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JI(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=yn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Nn.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:wn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,tC.async_set_timeout)(QJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%WJ===0&&await _();return u.length>0&&await _(),s?JI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,G_.default)(t,"hashes");if(r)throw r;return zI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zI(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&wn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,G_.default)(t,"value");if(n)throw n;let s=Qn(t);if(!s)throw new Nn.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===wn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bp(t,s)})}async getDataByValue(t,r){let n=new Map,s=Qn(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Qn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Qn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Qn(t),n={};switch(t.search_type){case wn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case wn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of XI(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return XI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Bp,"getSelect");a(zI,"getRecords");a(Qn,"getTable");a(JI,"createDeleteResponse");a(XI,"groupRecordsInHistory")});var On=g((Dle,sC)=>{"use strict";var{ResourceBridge:zJ}=(nC(),te(rC)),JJ=Z();JJ.initSync();var $_;function XJ(){return $_||($_=new zJ,$_)}a(XJ,"getBridge");sC.exports=XJ()});var cC=g((Mle,aC)=>{"use strict";var iC=require("lodash"),Yc=require("mathjs"),jJ=require("jsonata"),oC=J();aC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?iC.uniqWith(e,iC.isEqual):e,searchJSON:ZJ,mad:Kc.bind(null,Yc.mad),mean:Kc.bind(null,Yc.mean),mode:Kc.bind(null,Yc.mode),prod:Kc.bind(null,Yc.prod),median:Kc.bind(null,Yc.median)};function Kc(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Kc,"aggregateFunction");function ZJ(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(oC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),oC.isEmpty(this.__ala__.res[r])){let n=jJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(ZJ,"searchJSON")});var lC=g((Ple,uC)=>{"use strict";var dt=require("moment"),xp="YYYY-MM-DDTHH:mm:ss.SSSZZ";dt.suppressDeprecationWarnings=!0;uC.exports={current_date:()=>dt().utc().format("YYYY-MM-DD"),current_time:()=>dt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return dt(e).utc().format("YYYY");case"month":return dt(e).utc().format("MM");case"day":return dt(e).utc().format("DD");case"hour":return dt(e).utc().format("HH");case"minute":return dt(e).utc().format("mm");case"second":return dt(e).utc().format("ss");case"millisecond":return dt(e).utc().format("SSS");default:break}},date:e=>dt(e).utc().format(xp),date_format:(e,t)=>dt(e).utc().format(t),date_add:(e,t,r)=>dt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>dt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=dt(e).utc(),s=dt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>dt().utc().valueOf(),get_server_time:()=>dt().format(xp),offset_utc:(e,t)=>dt(e).utc().utcOffset(t).format(xp)}});var EC=g((vle,fC)=>{"use strict";var e2=require("@turf/area"),t2=require("@turf/length"),r2=require("@turf/circle"),n2=require("@turf/difference"),s2=require("@turf/distance"),i2=require("@turf/boolean-contains"),o2=require("@turf/boolean-equal"),a2=require("@turf/boolean-disjoint"),c2=require("@turf/helpers"),_C=M(),Te=J(),Ts=Y();fC.exports={geoArea:u2,geoLength:l2,geoCircle:_2,geoDifference:d2,geoDistance:dC,geoNear:f2,geoContains:E2,geoEqual:h2,geoCrosses:m2,geoConvert:p2};function u2(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return e2.default(e)}catch(t){return Ts.trace(t,e),NaN}}a(u2,"geoArea");function l2(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return t2.default(e,{units:t||"kilometers"})}catch(r){return Ts.trace(r,e),NaN}}a(l2,"geoLength");function _2(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return r2.default(e,t,{units:r||"kilometers"})}catch(n){return Ts.trace(n,e,t),NaN}}a(_2,"geoCircle");function d2(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return n2(e,t)}catch(r){return Ts.trace(r,e,t),NaN}}a(d2,"geoDifference");function dC(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return s2.default(e,t,{units:r||"kilometers"})}catch(n){return Ts.trace(n,e,t),NaN}}a(dC,"geoDistance");function f2(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return dC(e,t,n)<=r}catch(s){return Ts.trace(s,e,t),!1}}a(f2,"geoNear");function E2(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return i2.default(e,t)}catch(r){return Ts.trace(r,e,t),!1}}a(E2,"geoContains");function h2(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return o2.default(e,t)}catch(r){return Ts.trace(r,e,t),!1}}a(h2,"geoEqual");function m2(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!a2.default(e,t)}catch(r){return Ts.trace(r,e,t),!1}}a(m2,"geoCrosses");function p2(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(_C.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(_C.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),c2[t](e,r)}a(p2,"geoConvert")});var Y_=g((Hle,hC)=>{var Qi=cC(),Pr=lC(),zn=EC();hC.exports=e=>{e.aggr.mad=e.aggr.MAD=Qi.mad,e.aggr.mean=e.aggr.MEAN=Qi.mean,e.aggr.mode=e.aggr.MODE=Qi.mode,e.aggr.prod=e.aggr.PROD=Qi.prod,e.aggr.median=e.aggr.MEDIAN=Qi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pr.current_time,e.fn.extract=e.fn.EXTRACT=Pr.extract,e.fn.date=e.fn.DATE=Pr.date,e.fn.date_format=e.fn.DATE_FORMAT=Pr.date_format,e.fn.date_add=e.fn.DATE_ADD=Pr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pr.date_diff,e.fn.now=e.fn.NOW=Pr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pr.get_server_time,e.fn.getdate=e.fn.GETDATE=Pr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zn.geoNear}});var TC=g((xle,SC)=>{"use strict";var Wc=require("lodash"),sr=require("alasql");sr.options.cache=!1;var S2=Y_(),mC=require("clone"),K_=require("recursive-iterator"),fe=Y(),Ce=J(),Xo=On(),T2=M(),{hdb_errors:g2}=ee(),{getDatabases:pC}=(be(),te(Fe)),R2="IS NULL",In="There was a problem performing this search. Please check the logs and try again.";S2(sr);var Fp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.isEmpty(t))throw fe.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(In)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(In)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(In)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(In)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(In)}}_getColumns(){let t=new K_(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(mC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Wc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=pC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ce.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new K_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new sr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new sr.yy.LogicValue({value:i}):n instanceof sr.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new sr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new K_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ce.isEmpty(T2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.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(Ce.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"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.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 _=0;_<u.length;_++)if(u[_].value)n.add(u[_].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,...n])}}}_setAliasesForColumns(){if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Wc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await sr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(mC(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Ce.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(R2)>-1&&this.tables.forEach(s=>{let i={columnid:pC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Wc.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Xo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(In)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Xo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(In)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Xo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(In)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await Xo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(In)}}}_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 sr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new sr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new sr.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 s=t.is_func?new sr.yy.FuncValue:new sr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await sr.promise(h,t),t=null}catch(E){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Wc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new K_(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Wc.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(In)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await Xo.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.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 s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await sr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(g2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Xo.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(In)}}return Object.values(Object.values(this.data)[0].__merged_data)}};SC.exports=Fp});var Xr=g((qle,gC)=>{"use strict";var A2=gb();gC.exports={searchByConditions:b2,searchByHash:N2,searchByValue:y2,search:w2};var qp=On(),{transformReq:Gp}=J(),O2=TC();async function b2(e){return Gp(e),qp.searchByConditions(e)}a(b2,"searchByConditions");async function N2(e){Gp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qp.searchByHash(e))r&&t.push(r);return t}a(N2,"searchByHash");async function y2(e){Gp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qp.searchByValue(e))t.push(r);return t}a(y2,"searchByValue");function w2(e,t){try{let r=new A2(e);r.validate(),new O2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(w2,"search")});var W_=g((kle,RC)=>{"use strict";var I2=On();RC.exports={writeTransaction:C2};function C2(e,t,r){return I2.writeTransaction(e,t,r)}a(C2,"writeTransaction")});var NC=g((Yle,bC)=>{"use strict";var D2=Xr(),L2=Qs(),AC=Y(),M2=jr(),$le=W_(),U2=require("clone"),Vp=require("alasql"),P2=Y_(),OC=require("util"),v2=OC.promisify(L2.getTableSchema),B2=OC.promisify(D2.search),H2=M(),kp=J();P2(Vp);bC.exports={update:F2};var x2="There was a problem performing this update. Please check the logs and try again.";async function F2({statement:e,hdb_user:t}){let r=await v2(e.table.databaseid,e.table.tableid),n=q2(e.columns);kp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=U2(s),c=kp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Vp.parse(u).statements[0],l=await B2(_),d=G2(n,l);return k2(o,d,t)}a(F2,"update");function q2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Vp.compile(`SELECT ${r.expression.toString()} AS [${H2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw AC.error(t),new Error(x2)}}a(q2,"createUpdateRecord");function G2(e,t){return kp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(G2,"buildUpdateRecords");async function k2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await M2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){AC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(k2,"updateRecords")});var wC=g((zle,yC)=>{var V2=require("alasql"),$2=Xr(),Y2=Y(),K2=On(),Yp=require("util"),$p=J(),W2=M(),Q2=Qs(),Wle=W_(),Qle=jr(),z2="record",J2="successfully deleted",X2=Yp.callbackify(t4),j2=Yp.promisify($2.search),Z2=Yp.promisify(Q2.getTableSchema);yC.exports={convertDelete:X2};function e4(e){return`${e.deleted_hashes.length} ${z2}${e.deleted_hashes.length===1?"":"s"} ${J2}`}a(e4,"generateReturnMessage");async function t4({statement:e,hdb_user:t}){let r=await Z2(e.table.databaseid,e.table.tableid);$p.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$p.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=V2.parse(o).statements[0],u={operation:W2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await j2(c);let _=await K2.deleteRecords(u);return $p.isEmptyOrZeroLength(_.message)&&(_.message=e4(_)),delete _.txn_time,_}catch(_){throw Y2.error(_),_.hdb_code?_.message:_}}a(t4,"convertDelete")});var MC=g((Xle,LC)=>{"use strict";var r4=vi(),{hdb_errors:IC}=ee(),{getDatabases:CC}=(be(),te(Fe));LC.exports={checkSchemaExists:DC,checkSchemaTableExists:n4,schema_describe:r4};async function DC(e){if(!CC()[e])return IC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(DC,"checkSchemaExists");async function n4(e,t){let r=await DC(e);if(r)return r;if(!CC()[e][t])return IC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(n4,"checkSchemaTableExists")});var Qc=g((Zle,s4)=>{s4.exports={name:"harperdb",version:"4.3.0-beta.2",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:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},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":"pm2 kill && 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:resources && 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:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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":"pm2 kill && 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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.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:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.3-beta.5-debug",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",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:"^5.3.3","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 jc={};Ve(jc,{addAnalyticsListener:()=>Xc,recordAction:()=>vr,recordActionBinary:()=>en,setAnalyticsEnabled:()=>i4});function i4(e){kC=e}function vr(e,t,r,n,s){if(!kC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=J_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},J_.set(i,o)}Q_||o4()}function en(e,t,r,n,s){vr(!!e,t,r,n,s)}function Xc(e){YC.push(e)}function o4(){Q_=performance.now(),setTimeout(async()=>{let e=performance.now()-Q_;Q_=0;let t=[],r={time:Date.now(),period:e,threadId:zi.threadId,metrics:t};for(let[s,i]of J_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of KC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await WC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:zi.threadId,byThread:!0,...n});for(let s of YC)s(t);J_=new Map,zi.parentPort?zi.parentPort.postMessage({type:$C,report:r}):JC({report:r})},VC).unref()}async function a4(e,t=6e4){let r=Qp(),n=QC(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:T}=p;for(let A of S||[]){let{path:b,method:H,type:F,metric:v,count:P,total:z,distribution:W,threads:Q,...se}=A;P||(P=1);let pe=v+(b?"-"+b:"");H!==void 0&&(pe+="-"+H),F!==void 0&&(pe+="-"+F);let oe=o.get(pe);if(oe){if(oe.threads){let le=oe.threads[T];if(le)oe=le;else{oe.threads[T]=Object.assign({},se);continue}}oe.count||(oe.count=1);let xe=oe.count;for(let le in se){let wt=se[le];typeof wt=="number"&&(oe[le]=(oe[le]*xe+wt*P)/(xe+P))}oe.count+=P,z>=0&&(oe.total+=z,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},A),delete oe.distribution,o.set(pe,oe),oe.byThread&&(oe.threads=[],oe.threads[T]=Object.assign({},se),u.push(oe));if(W){W=W.map(le=>typeof le=="number"?{value:le,count:1}:le);let xe=c.get(pe);xe?xe.push(...W):c.set(pe,W)}}await WC()}for(let h of u){let{path:p,method:S,type:T,metric:A,count:b,total:H,distribution:F,threads:v,...P}=h;v=v.filter(z=>z);for(let z in P){if(typeof h[z]!="number")continue;let W=0;for(let Q of v){let se=Q[z];typeof se=="number"&&(W+=se)}h[z]=W}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((le,wt)=>le.value>wt.value?1:-1);let T=S.count-1,A=[],b=0,H=0,F;for(let le of KC){let wt=T*le;for(;b<wt;)F=p[H++],b+=F.count,H===1&&b--;let Ol=p[H>1?H-2:0];F||(F=p[0]),A.push(F.value-(F.value-Ol.value)*(b-wt)/F.count)}let[v,P,z,W,Q,se,pe,oe,xe]=A;Object.assign(S,{p1:v,p10:P,p25:z,median:W,p75:Q,p90:se,p95:pe,p99:oe,p999:xe})}let l;for(let[h,p]of o)p.id=(0,z_.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,z_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-UC,active:E-PC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}UC=f,PC=E}async function vC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Qp(){return BC||(BC=ot({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function QC(){return HC||(HC=ot({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function l4(){zC=!0;let e=(0,Jc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await a4(VC,e),await vC(Qp(),c4),await vC(QC(),u4)},Math.min(e/2,2147483647)).unref()}function JC(e,t){let r=e.report;r.threadId=t?.threadId||zi.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xC+=n.mean*n.count);r.totalBytesProcessed=xC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(FC.get(t))}),FC.set(t,t.performance.eventLoopUtilization())),r.id=(0,z_.getNextMonotonicTime)(),Qp().primaryStore.put(r.id,r),zC||l4(),_4&&(XC=f4(r))}async function f4(e){if(await XC,!ei){let r=(0,zc.dirname)((0,GC.getLogFilePath)());try{ei=await(0,Kp.open)((0,zc.join)(r,"analytics.log"),"r+")}catch{ei=await(0,Kp.open)((0,zc.join)(r,"analytics.log"),"w+")}}let t=(await ei.stat()).size;if(t>d4){let r=Buffer.alloc(t);await ei.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ei.write(r,{position:0}),await ei.truncate(r.length),t=r.length}await ei.write(JSON.stringify(e)+`
8
+ `,t)}var zi,qC,GC,zc,Kp,z_,Jc,Wp,J_,kC,Q_,VC,$C,YC,KC,UC,PC,WC,c4,u4,BC,HC,zC,xC,FC,_4,XC,ei,d4,gs=Oe(()=>{zi=require("worker_threads"),qC=B(Ze());be();GC=B(Y()),zc=require("path"),Kp=require("fs/promises"),z_=B(Ir()),Jc=B(Z()),Wp=B(M());Zt();(0,Jc.initSync)();J_=new Map,kC=(0,Jc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(i4,"setAnalyticsEnabled");a(vr,"recordAction");je.recordAnalytics=vr;a(en,"recordActionBinary");Q_=0,VC=1e3,$C="analytics-report",YC=[];a(Xc,"addAnalyticsListener");KC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(o4,"sendAnalytics");a(a4,"aggregation");UC=0,PC=0,WC=a(()=>new Promise(setImmediate),"rest");a(vC,"cleanup");c4=36e5,u4=31536e6;a(Qp,"getRawAnalyticsTable");a(QC,"getAnalyticsTable");(0,qC.setChildListenerByType)($C,JC);a(l4,"startScheduledTasks");xC=0,FC=new Map,_4=!1;a(JC,"recordAnalytics");d4=1e6;a(f4,"logAnalytics")});var Rt=g((f_e,pD)=>{"use strict";var xt=Z();xt.initSync();var E4=require("fs-extra"),h4=require("semver"),tu=require("path"),{monotonicFactory:m4}=require("ulidx"),ZC=m4(),p4=require("util"),eD=require("child_process"),S4=p4.promisify(eD.exec),T4=eD.spawn,ye=tt(),Pe=M(),jp=J(),Br=Y(),X_=hs(),g4=W_(),Zc=wr(),{onMessageByType:R4}=Ze(),{isMainThread:A4}=require("worker_threads"),{Encoder:O4,decode:Zp}=require("msgpackr"),tD=new O4,{isEmpty:Zi}=jp,rD=Zr(),b4=48*36e11,N4=5e9;A4&&R4(Pe.ITC_EVENT_TYPES.RESTART,()=>{tn=void 0,ji=void 0});var{connect:y4,StorageType:nD,RetentionPolicy:sD,AckPolicy:j_,DeliverPolicy:Z_,DiscardPolicy:w4,NatsConnection:u_e,JetStreamManager:l_e,JetStreamClient:__e,StringCodec:d_e,JSONCodec:I4,createInbox:eS,headers:C4,ErrorCode:jC}=require("nats"),{PACKAGE_ROOT:D4}=M(),L4=Qc(),{recordAction:M4}=(gs(),te(jc)),iD=I4(),U4="clustering",P4=L4.engines[ye.NATS_SERVER_NAME],v4=tu.join(D4,"dependencies"),Xp=tu.join(v4,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),zp,Jp,eu,Ji,Xi;pD.exports={runCommand:oD,checkNATSServerInstalled:B4,createConnection:tS,getConnection:ed,getJetStreamManager:ru,getJetStream:cD,getNATSReferences:ir,getServerList:x4,createLocalStream:rS,listStreams:uD,deleteLocalStream:F4,getServerConfig:nu,listRemoteStreams:q4,viewStream:G4,viewStreamIterator:k4,publishToStream:V4,createWorkQueueStream:$4,addSourceToWorkStream:_D,request:K4,removeSourceFromWorkStream:fD,reloadNATS:nS,reloadNATSHub:W4,reloadNATSLeaf:Q4,extractServerName:dD,requestErrorHandler:z4,updateWorkStream:J4,createLocalTableStream:hD,createTableStreams:X4,purgeTableStream:mD,purgeSchemaTableStreams:j4,getStreamInfo:Z4,updateLocalStreams:t3,closeConnection:H4,getJsmServerName:su,addNatsMsgHeader:lD,updateIngestStreamConsumer:Y4,clearClientCache:aD};async function oD(e,t=void 0){let{stdout:r,stderr:n}=await S4(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(ZC,"runCommand");async function g4(){try{await j2.access(Qp)}catch{return!1}let e=await ZC(`${Qp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Z2.eq(t,S4)}a(g4,"checkNATSServerInstalled");async function jp(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await zC.getClusterUser();if(ro(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Fr.trace("create nats connection called");let i=await l4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Fr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Fr.error("Error with Nats client connection, connection closed",o),eL()}),i}a(jp,"createConnection");function eL(){sn=void 0,Zi=void 0,eo=void 0,to=void 0}a(eL,"clearClientCache");async function R4(){sn&&(await sn.drain(),sn=void 0,Zi=void 0,eo=void 0,to=void 0)}a(R4,"closeConnection");var sn,to;async function sd(){return to||(to=jp(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),sn=await to),sn||to}a(sd,"getConnection");async function ou(){if(Zi)return Zi;ro(sn)&&await sd();let{domain:e}=au(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ro(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Zi=await sn.jetstreamManager({domain:e,timeout:6e4}),Zi}a(ou,"getJetStreamManager");async function tL(){if(eo)return eo;ro(sn)&&await sd();let{domain:e}=au(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ro(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return eo=sn.jetstream({domain:e,timeout:6e4}),eo}a(tL,"getJetStream");async function ur(){let e=sn||await sd(),t=Zi||await ou(),r=eo||await tL();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function A4(e){let t=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await zC.getClusterUser(),s=await jp(t,r,n),i=Xp(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=jC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await zp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(A4,"getServerList");async function Zp(e,t){let{jsm:r}=await ur(),n=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:JC.File,retention:XC.Limits,subjects:t,discard:_4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Zp,"createLocalStream");async function rL(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(rL,"listStreams");async function O4(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(O4,"deleteLocalStream");async function b4(e){let{connection:t}=await ur(),r=[],n=Xp(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(jC.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(b4,"listRemoteStreams");async function N4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=KC(),o={durable_name:i,ack_policy:rd.Explicit};t&&(o.deliver_policy=nd.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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 _=[];for await(let l of u){let d=Jp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(N4,"viewStream");async function*y4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=KC(),o={durable_name:i,ack_policy:rd.Explicit};t&&(o.deliver_policy=nd.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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 _ of u){let l=Jp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(y4,"viewStreamIterator");async function I4(e,t,r,n){Fr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=nL(n,r);let{js:s}=await ur(),i=await cu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:QC.encode(n);try{Fr.trace(`publishToStream publishing to subject: ${o}`),m4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return aL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Fr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Zp(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(I4,"publishToStream");function nL(e,t){t===void 0&&(t=f4());let r=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(nL,"addNatsMsgHeader");function au(e){e=e.toLowerCase();let t=iu.join(Gt.get(Me.CONFIG_PARAMS.ROOTPATH),p4);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ro(Wp)&&(Wp={port:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:iu.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),Wp;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ro(Kp)&&(Kp={port:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:iu.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),Kp;Fr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(au,"getServerConfig");async function w4(e){let{jsm:t}=await ur(),r=await cu();try{await t.streams.add({name:e.stream_name,storage:JC.File,retention:XC.Limits,max_age:c4,max_bytes:u4,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:rd.Explicit,durable_name:e.durable_name,deliver_policy:nd.All,max_ack_pending:1e4});else throw n}}a(w4,"createWorkQueueStream");async function C4(){let{jsm:e}=await ur();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Fr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Fr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:rd.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:nd.All,max_ack_pending:1e4}))}a(C4,"updateIngestStreamConsumer");async function sL(e,t,r){let{jsm:n}=await ur(),s=await n.streams.info(t),i=iL(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=td.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(sL,"addSourceToWorkStream");function iL(e){return e.split(".")[1]}a(iL,"extractServerName");async function oL(e,t,r){let{jsm:n}=await ur(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=td.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(oL,"removeSourceFromWorkStream");async function L4(e,t,r=6e4,n=Xp()){if(!zp.isObject(t))throw new Error("data param must be an object");let s=QC.encode(t),{connection:i}=await ur(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Jp(c.data)}a(L4,"request");function eS(e){return new Promise(async(t,r)=>{let n=n4(Qp,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(eS,"reloadNATS");async function D4(){let{pid_file_path:e}=au(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eS(e)}a(D4,"reloadNATSHub");async function M4(){let{pid_file_path:e}=au(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eS(e)}a(M4,"reloadNATSLeaf");function U4(e,t,r){let n;switch(e.code){case YC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case YC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(U4,"requestErrorHandler");async function P4(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await aL(async()=>{e.subscribe===!0?await sL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await oL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(P4,"updateWorkStream");function aL(e){return s4.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(aL,"exclusiveLock");async function cL(e,t){let r=td.createNatsTableStreamName(e,t),n=await cu(),s=x4(e,t,n);await Zp(r,[s])}a(cL,"createLocalTableStream");async function v4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await cL(n,s)}}a(v4,"createTableStreams");async function uL(e,t,r=!1){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=td.createNatsTableStreamName(e,t),{jsm:s}=await ur();r?await s.streams.purge(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Fr.warn(n);else throw n}}a(uL,"purgeTableStream");async function B4(e,t){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await uL(e,t[r])}a(B4,"purgeSchemaTableStreams");async function H4(e){return(await ou()).streams.info(e)}a(H4,"getStreamInfo");function x4(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(x4,"createSubjectName");async function cu(){if(su)return su;if(su=(await ou())?.nc?.info?.server_name,su===void 0)throw new Error("Unable to get jetstream manager server name");return su}a(cu,"getJsmServerName");async function F4(){let e=await ou(),t=await cu(),r=await rL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=q4(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Fr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(F4,"updateLocalStreams");function q4(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(q4,"updateStreamLimits")});var cd=T((Wle,EL)=>{"use strict";var ta=E_(),ra=NC(),G4=V(),k4=require("uuid").v4,Kle=require("clone"),od=Rs(),na=M(),V4=require("util"),si=Cn(),{handleHDBError:lr,hdb_errors:$4}=Z(),{HDB_ERROR_MSGS:id,HTTP_STATUS_CODES:_r}=$4,{SchemaEventMsg:ad}=Ln(),_L=It(),{getDatabases:Y4}=(ge(),ee(xe)),{transformReq:sa}=J();EL.exports={createSchema:K4,createSchemaStructure:dL,createTable:W4,createTableStructure:fL,createAttribute:j4,dropSchema:Q4,dropTable:z4,dropAttribute:J4,getBackup:Z4};async function K4(e){let t=await dL(e);return od.signalSchemaChange(new ad(process.pid,e.operation,e.schema)),t}a(K4,"createSchema");async function dL(e){let t=ta.schema_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(sa(e),!await ra.checkSchemaExists(e.schema))throw lr(new Error,id.SCHEMA_EXISTS_ERR(e.schema),_r.BAD_REQUEST,na.LOG_LEVELS.ERROR,id.SCHEMA_EXISTS_ERR(e.schema),!0);return await si.createSchema(e),`database '${e.schema}' successfully created`}a(dL,"createSchemaStructure");async function W4(e){return sa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await fL(e)}a(W4,"createTable");async function fL(e){let t=ta.create_table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(ta.validateTableResidence(e.residence),!await ra.checkSchemaTableExists(e.schema,e.table))throw lr(new Error,id.TABLE_EXISTS_ERR(e.schema,e.table),_r.BAD_REQUEST,na.LOG_LEVELS.ERROR,id.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:k4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await si.createTable(n,e);else throw lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",_r.BAD_REQUEST);else await si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(fL,"createTableStructure");async function Q4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ta.schema_object(e),n=t??r;if(n)throw lr(n,n.message,_r.BAD_REQUEST,void 0,void 0,!0);sa(e);let s=await ra.checkSchemaExists(e.schema);if(s)throw lr(new Error,s,_r.NOT_FOUND,na.LOG_LEVELS.ERROR,s,!0);let i=await ra.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await si.dropSchema(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema)),await _L.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Q4,"dropSchema");async function z4(e){let t=ta.table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);return await si.dropTable(e),await _L.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(z4,"dropTable");async function J4(e){let t=ta.attribute_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw lr(new Error,"You cannot drop a hash attribute",_r.BAD_REQUEST,void 0,void 0,!0);if(na.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw lr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,_r.BAD_REQUEST,void 0,void 0,!0);try{return await si.dropAttribute(e),X4(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw G4.error(`Got an error deleting attribute ${V4.inspect(e)}.`),n}}a(J4,"dropAttribute");function X4(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(X4,"dropAttributeFromGlobal");async function j4(e){sa(e);let t=Y4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw lr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,_r.BAD_REQUEST,void 0,void 0,!0);return await si.createAttribute(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(j4,"createAttribute");function Z4(e){return si.getBackup(e)}a(Z4,"getBackup")});var mL=T((zle,hL)=>{"use strict";var{OPERATIONS_ENUM:e3}=M(),tS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=e3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};hL.exports=tS});var rS=T((jle,RL)=>{"use strict";var t3=Cn(),Xle=mL(),ud=J(),ld=M(),r3=j(),{handleHDBError:pL,hdb_errors:n3}=Z(),{HDB_ERROR_MSGS:SL,HTTP_STATUS_CODES:TL}=n3,s3=Object.values(ld.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),gL="To use this operation audit log must be enabled in harperdb-config.yaml";RL.exports=i3;async function i3(e){if(ud.isEmpty(e.schema))throw new Error(SL.SCHEMA_REQUIRED_ERR);if(ud.isEmpty(e.table))throw new Error(SL.TABLE_REQUIRED_ERR);if(!r3.get(ld.CONFIG_PARAMS.LOGGING_AUDITLOG))throw pL(new Error,gL,TL.BAD_REQUEST,ld.LOG_LEVELS.ERROR,gL,!0);let t=ud.checkSchemaTableExist(e.schema,e.table);if(t)throw pL(new Error,t,TL.NOT_FOUND,ld.LOG_LEVELS.ERROR,t,!0);if(!ud.isEmpty(e.search_type)&&s3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await t3.readAuditLog(e)}a(i3,"readAuditLog")});var OL=T((e_e,AL)=>{"use strict";var{OPERATIONS_ENUM:o3}=M(),nS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=o3.GET_BACKUP,this.schema=t,this.table=r}};AL.exports=nS});var yL=T((s_e,NL)=>{"use strict";var a3=Cn(),r_e=OL(),sS=J(),c3=M(),n_e=j(),{handleHDBError:u3,hdb_errors:l3}=Z(),{HDB_ERROR_MSGS:bL,HTTP_STATUS_CODES:_3}=l3;NL.exports=d3;async function d3(e){if(sS.isEmpty(e.schema))throw new Error(bL.SCHEMA_REQUIRED_ERR);if(sS.isEmpty(e.table))throw new Error(bL.TABLE_REQUIRED_ERR);let t=sS.checkSchemaTableExist(e.schema,e.table);if(t)throw u3(new Error,t,_3.NOT_FOUND,c3.LOG_LEVELS.ERROR,t,!0);return await a3.getBackup(read_audit_log_object)}a(d3,"getBackup")});var ML=T((o_e,DL)=>{var ii=require("validate.js"),wL=et(),ia=M(),{handleHDBError:f3,hdb_errors:E3}=Z(),{HDB_ERROR_MSGS:ft,HTTP_STATUS_CODES:h3}=E3,iS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),m3={STRUCTURE_USER:"structure_user"},IL=Object.values(ia.ROLE_TYPES_ENUM),p3="attribute_permissions",S3="attribute_name",{PERMS_CRUD_ENUM:oa}=ia,T3=[p3,...Object.values(oa)],CL=[oa.READ,oa.INSERT,oa.UPDATE],g3=[S3,...CL];function R3(e){let t=iS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,LL(e,t)}a(R3,"addRoleValidation");function A3(e){let t=iS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,LL(e,t)}a(A3,"alterRoleValidation");function O3(e){let t=iS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,wL.validateObject(e,t)}a(O3,"dropRoleValidation");var b3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function LL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)b3.includes(n[o])||s.push(n[o]);s.length>0&&St(ft.INVALID_ROLE_JSON_KEYS(s),r);let i=wL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{St(o,r)}),e.permission){let o=N3(e);o&&St(o,r),IL.forEach(c=>{e.permission[c]&&!ii.isBoolean(e.permission[c])&&St(ft.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(IL.indexOf(o)<0){if(o===m3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||St(ft.SCHEMA_NOT_FOUND(d),r)}continue}St(ft.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){St(ft.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){St(ft.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{T3.includes(l)||St(ft.INVALID_PERM_KEY(l),r,o,u)}),Object.values(oa).forEach(l=>{ii.isDefined(_[l])?ii.isBoolean(_[l])||St(ft.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):St(ft.TABLE_PERM_MISSING(l),r,o,u)}),ii.isDefined(_.attribute_permissions)){if(!ii.isArray(_.attribute_permissions)){St(ft.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{St(ft.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!g3.includes(p)&&p!==oa.DELETE&&St(ft.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ii.isDefined(E.attribute_name)){St(ft.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){St(ft.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}CL.forEach(p=>{ii.isDefined(E[p])?ii.isBoolean(E[p])||St(ft.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):St(ft.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;St(ft.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return y3(r)}a(LL,"customValidate");DL.exports={addRoleValidation:R3,alterRoleValidation:A3,dropRoleValidation:O3};function N3(e){let{operation:t,permission:r}=e;if(t===ia.OPERATIONS_ENUM.ADD_ROLE||t===ia.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return ft.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ia.ROLE_TYPES_ENUM.SUPER_USER:ia.ROLE_TYPES_ENUM.CLUSTER_USER;return ft.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(N3,"validateNoSUPerms");function y3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ft.ROLE_PERMS_ERROR,...e};return f3(new Error,n,h3.BAD_REQUEST)}else return null}a(y3,"generateRolePermResponse");function St(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(St,"addPermError")});var _S=T((c_e,BL)=>{"use strict";var UL=tn(),PL=en(),I3=Vi(),aS=ML(),cS=Rs(),w3=require("uuid").v4,C3=require("util"),_d=M(),L3=J(),uS=PL.searchByValue,D3=PL.searchByHash,M3=C3.promisify(I3.delete),U3=Jn(),P3=jo(),{hdb_errors:v3,handleHDBError:no}=Z(),{HDB_ERROR_MSGS:vL,HTTP_STATUS_CODES:uu}=v3,{UserEventMsg:lS}=Ln();BL.exports={addRole:B3,alterRole:H3,dropRole:x3,listRoles:F3};function oS(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(oS,"scrubRoleDetails");async function B3(e){let t=aS.addRoleValidation(e);if(t)throw t;e=oS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await uS(r)||[])}catch(i){throw no(i)}if(n&&n.length>0)throw no(new Error,vL.ROLE_ALREADY_EXISTS(e.role),uu.CONFLICT,void 0,void 0,!0);e.id||(e.id=w3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await UL.insert(s),cS.signalUserChange(new lS(process.pid)),e=oS(e),e}a(B3,"addRole");async function H3(e){let t=aS.alterRoleValidation(e);if(t)throw t;e=oS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await UL.update(r)}catch(s){throw no(s)}if(n&&n?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",uu.BAD_REQUEST,void 0,void 0,!0);return await cS.signalUserChange(new lS(process.pid)),e}a(H3,"alterRole");async function x3(e){let t=aS.dropRoleValidation(e);if(t)throw no(new Error,t,uu.BAD_REQUEST,void 0,void 0,!0);let r=new P3(_d.SYSTEM_SCHEMA_NAME,_d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await D3(r));if(n.length===0)throw no(new Error,vL.ROLE_NOT_FOUND,uu.NOT_FOUND,void 0,void 0,!0);let s=new U3(_d.SYSTEM_SCHEMA_NAME,_d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await uS(s)),o=!1;if(L3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw no(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,uu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await M3(c),cS.signalUserChange(new lS(process.pid)),`${n[0].role} successfully deleted`}a(x3,"dropRole");async function F3(){return uS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(F3,"listRoles")});var qL=T((l_e,FL)=>{"use strict";var q3=j(),oi=require("joi"),G3=et(),HL=require("moment"),k3=require("fs-extra"),dS=require("path"),V3=require("lodash"),lu=M(),{LOG_LEVELS:so}=M(),$3="YYYY-MM-DD hh:mm:ss",Y3=dS.resolve(__dirname,"../logs");FL.exports=function(e){return G3.validateBySchema(e,K3)};var K3=oi.object({from:oi.custom(xL),until:oi.custom(xL),level:oi.valid(so.NOTIFY,so.FATAL,so.ERROR,so.WARN,so.INFO,so.DEBUG,so.TRACE),order:oi.valid("asc","desc"),limit:oi.number().min(1),start:oi.number().min(0),log_name:oi.custom(W3)});function xL(e,t){if(HL(e,HL.ISO_8601).format($3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(xL,"validateDatetime");function W3(e,t){if(V3.invert(lu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=q3.get(lu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?lu.LOG_NAMES.HDB:e,i=s===lu.LOG_NAMES.INSTALL?dS.join(Y3,lu.LOG_NAMES.INSTALL):dS.join(n,s);return k3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(W3,"validateReadLogPath")});var ES=T((d_e,kL)=>{"use strict";var dd=M(),Q3=V(),z3=j(),J3=qL(),fS=require("path"),GL=require("fs-extra"),{once:X3}=require("events"),{handleHDBError:j3,hdb_errors:Z3}=Z(),{PACKAGE_ROOT:eX}=M(),tX=fS.join(eX,"logs"),rX=1e3,nX=200;kL.exports=sX;async function sX(e){let t=J3(e);if(t)throw j3(t,t.message,Z3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=z3.get(dd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?dd.LOG_NAMES.HDB:e.log_name,s=n===dd.LOG_NAMES.INSTALL?fS.join(tX,dd.LOG_NAMES.INSTALL):fS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?rX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(GL.statSync(s).size-(h+5)*nX,0));let S=GL.createReadStream(s,{start:p});S.on("error",F=>{Q3.error(F)});let A=0,I=[],w="",B;S.on("data",F=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=w+F;let Q=0,Y;for(;(Y=P.exec(F))&&!S.destroyed;){B&&(B.message=F.slice(Q,Y.index),K(B));let[z,re,Ie]=Y,ne=Ie.split("] ["),ct=ne[0],de=ne[1];ne.splice(0,2),B={timestamp:re,thread:ct,level:de,tags:ne,message:""},Q=Y.index+z.length}w=F.slice(Q)}),S.on("end",F=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(F){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(F.timestamp),Q=new Date(u),Y=new Date(l),F.level===o&&P>=Q&&P<=Y&&A<E?A++:F.level===o&&P>=Q&&P<=Y&&(ai(F,f,I),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(F.timestamp),Q=new Date(u),F.level===o&&P>=Q&&A<E?A++:F.level===o&&P>=Q&&(ai(F,f,I),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(F.timestamp),Y=new Date(l),F.level===o&&P<=Y&&A<E?A++:F.level===o&&P<=Y&&(ai(F,f,I),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(F.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&A<E?A++:P>=Q&&P<=Y&&(ai(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(ai(F,f,I),A++,A===h&&S.destroy());break;case c:P=new Date(F.timestamp),Q=new Date(u),P>=Q&&A<E?A++:P>=Q&&A>=E&&(ai(F,f,I),A++,A===h&&S.destroy());break;case _:P=new Date(F.timestamp),Y=new Date(l),P<=Y&&A<E?A++:P<=Y&&A>=E&&(ai(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(ai(F,f,I),A++,A===h&&S.destroy())}}return a(K,"onLogMessage"),await X3(S,"close"),I}a(sX,"readLog");function ai(e,t,r){t==="desc"?iX(e,r):t==="asc"?oX(e,r):r.push(e)}a(ai,"pushLineToResult");function iX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(iX,"insertDescending");function oX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(oX,"insertAscending")});var fd=T((p_e,KL)=>{"use strict";var hS=require("joi"),{string:_u,boolean:VL,date:aX}=hS.types(),cX=et(),{validateSchemaExists:E_e,validateTableExists:h_e,validateSchemaName:m_e}=Kn(),uX=M(),lX=nt(),$L=j();$L.initSync();var _X=_u.invalid($L.get(uX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lX.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(),YL={operation:_u.valid("add_node","update_node","set_node_replication"),node_name:_X,subscriptions:hS.array().items({table:_u.optional(),schema:_u.optional(),database:_u.optional(),subscribe:VL.required(),publish:VL.required().custom(fX),start_time:aX.iso()}).min(1).required()};function dX(e){return cX.validateBySchema(e,hS.object(YL))}a(dX,"addUpdateNodeValidator");function fX(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(fX,"checkForFalsy");KL.exports={addUpdateNodeValidator:dX,validation_schema:YL}});var QL=T((T_e,WL)=>{var EX=et(),hX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};WL.exports=function(e){return EX.validateObject(e,hX)}});var pS=T((g_e,zL)=>{"use strict";var mX=M().OPERATIONS_ENUM,mS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=mX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};zL.exports=mS});var XL=T((A_e,JL)=>{"use strict";var pX={OPERATION:"operation",REFRESH:"refresh"},SS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},TS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};JL.exports={JWTTokens:SS,TOKEN_TYPE_ENUM:pX,JWTRSAKeys:TS}});var Eu=T((b_e,tD)=>{"use strict";var fu=require("jsonwebtoken"),gS=require("fs-extra"),RS=J(),on=M(),{handleHDBError:dr,hdb_errors:SX}=Z(),{HTTP_STATUS_CODES:fr,AUTHENTICATION_ERROR_MSGS:Er}=SX,du=V(),jL=I_(),bS=rn(),TX=tn().update,gX=pS(),RX=Rs(),{UserEventMsg:AX}=Ln(),ci=j();ci.initSync();var AS=require("path"),{JWTTokens:OX,JWTRSAKeys:bX,TOKEN_TYPE_ENUM:Ed}=XL(),NX=ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",yX=ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",hd="RS256",OS;tD.exports={createTokens:IX,validateOperationToken:CX,refreshOperationToken:wX,validateRefreshToken:eD};async function IX(e){if(RS.isEmpty(e)||typeof e!="object")throw dr(new Error,Er.INVALID_AUTH_OBJECT,fr.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmpty(e.username))throw dr(new Error,Er.USERNAME_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmpty(e.password))throw dr(new Error,Er.PASSWORD_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await bS.findAndValidateUser(e.username,e.password),!t)throw dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw du.error(f),dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await md(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await ZL(i,r.private_key,r.passphrase),c=await fu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:yX,algorithm:hd,subject:Ed.REFRESH}),u=jL.hash(c),_=new gX(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await TX(_)}catch(f){du.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw dr(new Error,Er.REFRESH_TOKEN_SAVE_FAILED,fr.INTERNAL_SERVER_ERROR);return RX.signalUserChange(new AX(process.pid)),new OX(o,c)}a(IX,"createTokens");async function ZL(e,t,r){return await fu.sign(e,{key:t,passphrase:r},{expiresIn:NX,algorithm:hd,subject:Ed.OPERATION})}a(ZL,"signOperationToken");async function md(){if(OS===void 0)try{let e=AS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PASSPHRASE_NAME),t=AS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=AS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await gS.readFile(e)).toString(),s=(await gS.readFile(t)).toString(),i=(await gS.readFile(r)).toString();OS=new bX(i,s,n)}catch(e){throw du.error(e),dr(new Error,Er.NO_ENCRYPTION_KEYS,fr.INTERNAL_SERVER_ERROR)}return OS}a(md,"getJWTRSAKeys");async function wX(e){if(!e)throw dr(new Error,Er.INVALID_BODY,fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw dr(new Error,Er.REFRESH_TOKEN_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);await eD(e.refresh_token);let t=await md(),r=await fu.decode(e.refresh_token);return{operation_token:await ZL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(wX,"refreshOperationToken");async function CX(e){try{let t=await md(),r=await fu.verify(e,t.public_key,{algorithms:hd,subject:Ed.OPERATION});return await bS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw du.warn(t),t.name&&t.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}}a(CX,"validateOperationToken");async function eD(e){let t;try{let r=await md(),n=await fu.verify(e,r.public_key,{algorithms:hd,subject:Ed.REFRESH});t=await bS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw du.warn(r),r.name&&r.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}if(!jL.validate(t.refresh_token,e))throw dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED);return t}a(eD,"validateRefreshToken")});var NS=T((I_e,sD)=>{"use strict";var LX=QL(),aa=require("passport"),DX=require("passport-local").Strategy,MX=require("passport-http").BasicStrategy,UX=require("util"),PX=rn(),nD=UX.callbackify(PX.findAndValidateUser),y_e=Ir(),vX=M(),rD=Eu();aa.use(new DX(function(e,t,r){nD(e,t,r)}));aa.use(new MX(function(e,t,r){nD(e,t,r)}));aa.serializeUser(function(e,t){t(null,e)});aa.deserializeUser(function(e,t){t(null,e)});function BX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===vX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?rD.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):rD.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:aa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(BX,"authorize");function HX(e,t){let r=LX(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(HX,"checkPermissions");sD.exports={authorize:BX,checkPermissions:HX}});var ca=T((C_e,iD)=>{"use strict";var yS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},IS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};iD.exports={Node:yS,NodeSubscription:IS}});var aD=T((D_e,oD)=>{"use strict";var xX=M().OPERATIONS_ENUM,wS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=xX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};oD.exports=wS});var hu=T((U_e,cD)=>{"use strict";var CS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},LS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};cD.exports={RemotePayloadObject:CS,RemotePayloadSubscription:LS}});var lD=T((v_e,uD)=>{"use strict";var DS=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};uD.exports=DS});var fD=T((q_e,dD)=>{"use strict";var FX=lD(),H_e=ht(),_D=$e(),qX=V(),{getSchemaPath:x_e,getTransactionAuditStorePath:F_e}=We(),{getDatabases:GX}=(ge(),ee(xe));dD.exports=kX;async function kX(e){let t=new FX;try{let r=GX()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await _D.environmentDataSize(schema_path,e.name),o=await _D.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){qX.warn(`unable to stat table dbi due to ${r}`)}return t}a(kX,"lmdbGetTableSize")});var hD=T((k_e,ED)=>{"use strict";var MS=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};ED.exports=MS});var ua=T((K_e,TD)=>{"use strict";var VX=require("fs-extra"),$X=require("path"),Xt=require("systeminformation"),ui=V(),YX=It(),US=nt(),Sd=M(),KX=fD(),SD=xi(),{getThreadInfo:mD}=tt(),VS=j();VS.initSync();var WX=hD(),{openEnvironment:$_e}=$e(),{getSchemaPath:Y_e}=We(),{database:QX}=(ge(),ee(xe)),pd;TD.exports={getHDBProcessInfo:HS,getNetworkInfo:FS,getDiskInfo:xS,getMemoryInfo:BS,getCPUInfo:vS,getTimeInfo:PS,getSystemInformation:qS,systemInformation:zX,getTableSize:GS,getMetrics:kS};function PS(){return Xt.time()}a(PS,"getTimeInfo");async function vS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Xt.currentLoad();return I.cpus=[],A.forEach(w=>{let{raw_load:B,raw_load_idle:K,raw_load_irq:F,raw_load_nice:P,raw_load_system:Q,raw_load_user:Y,...z}=w;I.cpus.push(z)}),l.current_load=I,l}catch(e){return ui.error(`error in getCPUInfo: ${e}`),{}}}a(vS,"getCPUInfo");async function BS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Xt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ui.error(`error in getMemoryInfo: ${e}`),{}}}a(BS,"getMemoryInfo");async function HS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await VX.readFile($X.join(VS.get(Sd.CONFIG_PARAMS.ROOTPATH),Sd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Sd.NODE_ERROR_CODES.ENOENT)ui.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ui.error(`error in getHDBProcessInfo: ${t}`),e}}a(HS,"getHDBProcessInfo");async function xS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return ui.error(`error in getDiskInfo: ${t}`),e}}a(xS,"getDiskInfo");async function FS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ui.error(`error in getNetworkInfo: ${t}`),e}}a(FS,"getNetworkInfo");async function qS(){if(pd!==void 0)return pd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,pd=e,pd}catch(t){return ui.error(`error in getSystemInformation: ${t}`),e}}a(qS,"getSystemInformation");async function GS(){let e=[],t=await SD.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await KX(n));return e}a(GS,"getTableSize");async function kS(){let e=await SD.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=QX({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){ui.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(kS,"getMetrics");async function pD(){if(VS.get(Sd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await YX.getNATSReferences(),r=await t.streams.info(US.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(US.WORK_QUEUE_CONSUMER_NAMES.stream_name,US.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(pD,"getNatsStreamInfo");async function zX(e){let t=new WX;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await qS(),t.time=PS(),t.cpu=await vS(),t.memory=await BS(),t.disk=await xS(),t.network=await FS(),t.harperdb_processes=await HS(),t.table_size=await GS(),t.metrics=await kS(),t.threads=await mD(),t.replication=await pD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await qS();break;case"time":t.time=PS();break;case"cpu":t.cpu=await vS();break;case"memory":t.memory=await BS();break;case"disk":t.disk=await xS();break;case"network":t.network=await FS();break;case"harperdb_processes":t.harperdb_processes=await HS();break;case"table_size":t.table_size=await GS();break;case"database_metrics":case"metrics":t.metrics=await kS();break;case"threads":t.threads=await mD();break;case"replication":t.replication=await pD();break;default:break}return t}a(zX,"systemInformation")});var $S=T((Q_e,gD)=>{"use strict";gD.exports={version:JX,printVersion:XX};var Td=jc();function JX(){if(Td)return Td.version}a(JX,"version");function XX(){Td&&console.log(`HarperDB Version ${Td.version}`)}a(XX,"printVersion")});var ys=T((j_e,bD)=>{"use strict";var jX=tn(),YS=J(),ZX=require("util"),io=M(),RD=j();RD.initSync();var ej=NS(),AD=en(),{Node:J_e,NodeSubscription:X_e}=ca(),tj=jo(),rj=aD(),{RemotePayloadObject:nj,RemotePayloadSubscription:sj}=hu(),{handleHDBError:ij,hdb_errors:oj}=Z(),{HTTP_STATUS_CODES:aj,HDB_ERROR_MSGS:cj}=oj,uj=Jn(),lj=ua(),_j=$S(),{getDatabases:dj}=(ge(),ee(xe)),fj=ZX.promisify(ej.authorize),Ej=AD.searchByHash,hj=AD.searchByValue;bD.exports={authHeaderToUser:mj,isEmpty:pj,getNodeRecord:Sj,upsertNodeRecord:Tj,buildNodePayloads:gj,checkClusteringEnabled:Rj,getAllNodeRecords:Aj,getSystemInfo:Oj,reverseSubscription:OD};async function mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await fj(t,null),e}a(mj,"authHeaderToUser");function pj(e){return e==null}a(pj,"isEmpty");async function Sj(e){let t=new tj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ej(t)}a(Sj,"getNodeRecord");async function Tj(e){let t=new rj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return jX.upsert(t)}a(Tj,"upsertNodeRecord");function OD(e){if(YS.isEmpty(e.subscribe)||YS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(OD,"reverseSubscription");function gj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=YS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=OD(c),E=dj()[u]?.[_],h=new sj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new nj(r,t,s,n)}a(gj,"buildNodePayloads");function Rj(){if(!RD.get(io.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ij(new Error,cj.CLUSTERING_NOT_ENABLED,aj.BAD_REQUEST,void 0,void 0,!0)}a(Rj,"checkClusteringEnabled");async function Aj(){let e=new uj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await hj(e))}a(Aj,"getAllNodeRecords");async function Oj(){let e=await lj.getSystemInformation();return{hdb_version:_j.version(),node_version:e.node_version,platform:e.platform}}a(Oj,"getSystemInfo")});var KS=T((ede,MD)=>{"use strict";var gd=It(),ND=J(),yD=nt(),ID=M(),Rd=V(),wD=cd(),bj=_p(),{RemotePayloadObject:Nj}=hu(),{handleHDBError:CD,hdb_errors:yj}=Z(),{HTTP_STATUS_CODES:LD}=yj,{NodeSubscription:DD}=ca();MD.exports=Ij;async function Ij(e,t){let r;try{r=await gd.request(`${t}.${yD.REQUEST_SUFFIX}`,new Nj(ID.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Rd.trace("Response from remote describe all request:",r)}catch(o){Rd.error(`addNode received error from describe all request to remote node: ${o}`);let c=gd.requestErrorHandler(o,"add_node",t);throw CD(new Error,c,LD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===yD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw CD(new Error,o,LD.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===ID.SYSTEM_SCHEMA_NAME){await gd.createLocalTableStream(u,c);let h=new DD(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=ND.doesSchemaExist(u),l=n[u]!==void 0,d=c?ND.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Rd.trace(`addNode creating schema: ${u}`),await wD.createSchema({operation:"create_schema",schema:u})),!d&&f){Rd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new bj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await wD.createTable(h)}await gd.createLocalTableStream(u,c);let E=new DD(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Ij,"reviewSubscriptions")});var bd=T((rde,vD)=>{"use strict";var{handleHDBError:Ad,hdb_errors:wj}=Z(),{HTTP_STATUS_CODES:Od}=wj,{addUpdateNodeValidator:Cj}=fd(),mu=V(),PD=M(),UD=nt(),Lj=J(),WS=It(),pu=ys(),Dj=j(),Mj=KS(),{Node:Uj,NodeSubscription:Pj}=ca(),{broadcast:vj}=tt(),Bj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Hj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",xj=Dj.get(PD.CONFIG_PARAMS.CLUSTERING_NODENAME);vD.exports=Fj;async function Fj(e,t=!1){mu.trace("addNode called with:",e),pu.checkClusteringEnabled();let r=Cj(e);if(r)throw Ad(r,r.message,Od.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await pu.getNodeRecord(n);if(!Lj.isEmptyOrZeroLength(d))throw Ad(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Od.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Mj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Bj,o;let c=pu.buildNodePayloads(s,xj,PD.OPERATIONS_ENUM.ADD_NODE,await pu.getSystemInfo());mu.trace("addNode sending remote payload:",c);let u;try{u=await WS.request(`${n}.${UD.REQUEST_SUFFIX}`,c)}catch(d){mu.error(`addNode received error from request: ${d}`);let f=WS.requestErrorHandler(d,"add_node",n);throw Ad(new Error,f,Od.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===UD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Ad(new Error,d,Od.INTERNAL_SERVER_ERROR,"error",d)}mu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];mu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await WS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Pj(E.schema,E.table,E.publish,E.subscribe))}let l=new Uj(n,_,u.system_info);return await pu.upsertNodeRecord(l),vj({type:"nats_update"}),i.length>0?o.message=Hj:o.message=`Successfully added '${n}' to manifest`,o}a(Fj,"addNode")});var XS=T((ide,xD)=>{"use strict";var{handleHDBError:QS,hdb_errors:qj}=Z(),{HTTP_STATUS_CODES:zS}=qj,{addUpdateNodeValidator:Gj}=fd(),Su=V(),HD=M(),BD=nt(),sde=J(),JS=It(),Tu=ys(),kj=j(),{cloneDeep:Vj}=require("lodash"),$j=KS(),{Node:Yj,NodeSubscription:Kj}=ca(),{broadcast:Wj}=tt(),Qj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jj=kj.get(HD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=Xj;async function Xj(e){Su.trace("updateNode called with:",e),Tu.checkClusteringEnabled();let t=Gj(e);if(t)throw QS(t,t.message,zS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Tu.getNodeRecord(r);s.length>0&&(n=Vj(s));let{added:i,skipped:o}=await $j(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Qj,c;let u=Tu.buildNodePayloads(i,Jj,HD.OPERATIONS_ENUM.UPDATE_NODE,await Tu.getSystemInfo());Su.trace("updateNode sending remote payload:",u);let _;try{_=await JS.request(`${r}.${BD.REQUEST_SUFFIX}`,u)}catch(l){Su.error(`updateNode received error from request: ${l}`);let d=JS.requestErrorHandler(l,"update_node",r);throw QS(new Error,d,zS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===BD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw QS(new Error,l,zS.INTERNAL_SERVER_ERROR,"error",l)}Su.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Su.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await JS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new Yj(r,[],_.system_info)]),await jj(n[0],i,_.system_info),o.length>0?c.message=zj:c.message=`Successfully updated '${r}'`,c}a(Xj,"updateNode");async function jj(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Kj(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Tu.upsertNodeRecord(n),Wj({type:"nats_update"})}a(jj,"updateNodeTable")});var VD=T((ade,kD)=>{"use strict";var GD=require("joi"),{string:FD}=GD.types(),Zj=et(),qD=M(),eZ=j(),tZ=nt();kD.exports=rZ;function rZ(e){let t=FD.invalid(eZ.get(qD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(tZ.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=GD.object({operation:FD.valid(qD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Zj.validateBySchema(e,r)}a(rZ,"removeNodeValidator")});var yd=T((ude,zD)=>{"use strict";var{handleHDBError:$D,hdb_errors:nZ}=Z(),{HTTP_STATUS_CODES:YD}=nZ,sZ=VD(),gu=V(),KD=ys(),iZ=J(),Nd=M(),WD=nt(),QD=It(),oZ=j(),{RemotePayloadObject:aZ}=hu(),{NodeSubscription:cZ}=ca(),uZ=$c(),lZ=Vi(),{broadcast:_Z}=tt(),dZ=oZ.get(Nd.CONFIG_PARAMS.CLUSTERING_NODENAME);zD.exports=fZ;async function fZ(e){gu.trace("removeNode called with:",e),KD.checkClusteringEnabled();let t=sZ(e);if(t)throw $D(t,t.message,YD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await KD.getNodeRecord(r);if(iZ.isEmptyOrZeroLength(n))throw $D(new Error,`Node '${r}' was not found.`,YD.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new aZ(Nd.OPERATIONS_ENUM.REMOVE_NODE,dZ,[]),i,o=!1;try{i=await QD.request(`${r}.${WD.REQUEST_SUFFIX}`,s),gu.trace("Remove node reply from remote node:",r,i)}catch(u){gu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];gu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new cZ(l.schema,l.table,!1,!1);await QD.updateWorkStream(d,r)}let c=new uZ(Nd.SYSTEM_SCHEMA_NAME,Nd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await lZ.deleteRecord(c),_Z({type:"nats_update"}),i?.status===WD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(gu.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(fZ,"removeNode")});var jD=T((_de,XD)=>{"use strict";var JD=require("joi"),{string:EZ,array:hZ}=JD.types(),mZ=et(),pZ=fd();XD.exports=SZ;function SZ(e){let t=JD.object({operation:EZ.valid("configure_cluster").required(),connections:hZ.items(pZ.validation_schema).required()});return mZ.validateBySchema(e,t)}a(SZ,"configureClusterValidator")});var jS=T((fde,nM)=>{"use strict";var TZ=M(),Id=V(),gZ=J(),RZ=yd(),AZ=bd(),ZD=ys(),OZ=jD(),{handleHDBError:eM,hdb_errors:bZ}=Z(),{HTTP_STATUS_CODES:tM}=bZ,NZ="Configure cluster complete.",yZ="Failed to configure the cluster. Check the logs for more details.",IZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";nM.exports=wZ;async function wZ(e){Id.trace("configure cluster called with:",e),ZD.checkClusteringEnabled();let t=OZ(e);if(t)throw eM(t,t.message,tM.BAD_REQUEST,void 0,void 0,!0);let r=await ZD.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(rM(RZ,{operation:TZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Id.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(rM(AZ,E,E.node_name))}let c=await Promise.allSettled(i);Id.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Id.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(gZ.isEmptyOrZeroLength(u))return{message:NZ,connections:_};if(l)return{message:IZ,failed_nodes:u,connections:_};throw eM(new Error,yZ,tM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(wZ,"configureCluster");async function rM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(rM,"functionWrapper")});var iM=T((hde,sM)=>{"use strict";var wd=require("joi"),CZ=et(),{validateSchemaExists:LZ,validateTableExists:DZ,validateSchemaName:MZ}=Kn(),UZ=wd.object({operation:wd.string().valid("purge_stream"),schema:wd.string().custom(LZ).custom(MZ).required(),table:wd.string().custom(DZ).required()});function PZ(e){return CZ.validateBySchema(e,UZ)}a(PZ,"purgeStreamValidator");sM.exports=PZ});var ZS=T((pde,oM)=>{"use strict";var{handleHDBError:vZ,hdb_errors:BZ}=Z(),{HTTP_STATUS_CODES:HZ}=BZ,xZ=iM(),FZ=It(),qZ=ys();oM.exports=GZ;async function GZ(e){if(e.purge_ingest!==!0){let s=xZ(e);if(s)throw vZ(s,s.message,HZ.BAD_REQUEST,void 0,void 0,!0)}qZ.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await FZ.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(GZ,"purgeStream")});var rT=T((Tde,dM)=>{"use strict";var tT=ys(),kZ=It(),uM=j(),Cd=M(),oo=nt(),VZ=J(),eT=V(),{RemotePayloadObject:$Z}=hu(),{ErrorCode:aM}=require("nats"),cM=uM.get(Cd.CONFIG_PARAMS.CLUSTERING_ENABLED),lM=uM.get(Cd.CONFIG_PARAMS.CLUSTERING_NODENAME);dM.exports={clusterStatus:YZ,buildNodeStatus:_M};async function YZ(){let e={node_name:lM,is_enabled:cM,connections:[]};if(!cM)return e;let t=await tT.getAllNodeRecords();if(VZ.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(_M(t[n],e.connections));return await Promise.allSettled(r),e}a(YZ,"clusterStatus");async function _M(e,t){let r=e.name,n=new $Z(Cd.OPERATIONS_ENUM.CLUSTER_STATUS,lM,void 0,await tT.getSystemInfo()),s,i,o=oo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await kZ.request(oo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===oo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=oo.CLUSTER_STATUS_STATUSES.CLOSED,eT.error(`Error getting node status from ${r} `,s))}catch(u){eT.warn(`Error getting node status from ${r}`,u),u.code===aM.NoResponders?o=oo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===aM.Timeout?o=oo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=oo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new KZ(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Cd.PRE_4_0_0_VERSION&&await tT.upsertNodeRecord(u)}catch(u){eT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(_M,"buildNodeStatus");function KZ(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(KZ,"NodeStatusObject")});var sT=T((Rde,fM)=>{"use strict";var{handleHDBError:WZ,hdb_errors:QZ}=Z(),{HTTP_STATUS_CODES:zZ}=QZ,JZ=It(),XZ=ys(),nT=J(),Ld=require("joi"),jZ=et(),ZZ=2e3,e5=Ld.object({timeout:Ld.number().min(1),connected_nodes:Ld.boolean(),routes:Ld.boolean()});fM.exports=t5;async function t5(e){XZ.checkClusteringEnabled();let t=jZ.validateBySchema(e,e5);if(t)throw WZ(t,t.message,zZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||nT.autoCastBoolean(n),o=s===void 0||nT.autoCastBoolean(s),c={nodes:[]},u=await JZ.getServerList(r??ZZ),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:nT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(t5,"clusterNetwork")});var pM=T((Ode,mM)=>{"use strict";var iT=require("joi"),EM=et(),{route_constraints:hM}=uh();mM.exports={setRoutesValidator:r5,deleteRoutesValidator:n5};function r5(e){let t=iT.object({server:iT.valid("hub","leaf").required(),routes:hM.required()});return EM.validateBySchema(e,t)}a(r5,"setRoutesValidator");function n5(e){let t=iT.object({routes:hM.required()});return EM.validateBySchema(e,t)}a(n5,"deleteRoutesValidator")});var aT=T((Nde,RM)=>{"use strict";var ao=Lr(),oT=J(),Dd=M(),SM=pM(),{handleHDBError:TM,hdb_errors:s5}=Z(),{HTTP_STATUS_CODES:gM}=s5,i5="cluster routes successfully set",o5="cluster routes successfully deleted";RM.exports={setRoutes:a5,getRoutes:c5,deleteRoutes:u5};function a5(e){let t=SM.setRoutesValidator(e);if(t)throw TM(t,t.message,gM.BAD_REQUEST,void 0,void 0,!0);let r=ao.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=oT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:i5,set:o,skipped:i}}a(a5,"setRoutes");function c5(){let e=ao.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(c5,"getRoutes");function u5(e){let t=SM.deleteRoutesValidator(e);if(t)throw TM(t,t.message,gM.BAD_REQUEST,void 0,void 0,!0);let r=ao.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=oT.isEmptyOrZeroLength(n)?null:n,ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=oT.isEmptyOrZeroLength(s)?null:s,ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:o5,deleted:i,skipped:o}}a(u5,"deleteRoutes")});var OM=T((Ide,AM)=>{"use strict";var Ru=require("alasql"),co=require("recursive-iterator"),vn=V(),l5=J(),Au=M(),cT=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,d5(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(s=>Au.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Au.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Au.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=_5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Au.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Ru.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function _5(e){return e.filter(t=>t[Au.PERMS_CRUD_ENUM.READ])}a(_5,"filterReadRestrictedAttrs");function d5(e,t,r,n,s){f5(e,t,r,n,s)}a(d5,"interpretAST");function Ou(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Ou,"addSchemaTableToMap");function f5(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ru.yy.Insert?p5(e,t,r):e instanceof Ru.yy.Select?E5(e,t,r,n,s):e instanceof Ru.yy.Update?h5(e,t,r):e instanceof Ru.yy.Delete?m5(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(f5,"getRecordAttributesAST");function E5(e,t,r,n,s){if(!e){vn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(l5.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{Ou(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ou(c.table,t,r,n,s)});let o=new co(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{vn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new co(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{vn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new co(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{vn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new co(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{vn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(E5,"getSelectAttributes");function h5(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.table.databaseid;Ou(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uT(e.table.tableid,s,i.columnid,t,r)}a(h5,"getUpdateAttributes");function m5(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new co(e.where),s=e.table.databaseid;Ou(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uT(e.table.tableid,s,i.columnid,t,r)}a(m5,"getDeleteAttributes");function p5(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.into.databaseid;Ou(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&uT(e.into.tableid,s,i.columnid,t,r)}a(p5,"getInsertAttributes");function uT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(uT,"pushAttribute");AM.exports=cT});var dT=T((Cde,IM)=>{var Md=$i(),bM=require("chalk"),qr=V(),NM=require("prompt"),{promisify:S5}=require("util"),lT=M(),T5=require("fs-extra"),g5=require("path"),R5=J(),A5=$S(),yM=j();yM.initSync();var O5=require("moment"),b5=S5(NM.get),N5=g5.join(yM.getHdbBasePath(),lT.LICENSE_KEY_DIR_NAME,lT.LICENSE_FILE_NAME,lT.LICENSE_FILE_NAME);IM.exports={getFingerprint:I5,setLicense:y5,parseLicense:_T,register:w5,getRegistrationInfo:L5};async function y5(e){if(e&&e.key&&e.company){try{qr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await _T(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw qr.error(r),qr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(y5,"setLicense");async function I5(){let e={};try{e=await Md.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw qr.error(r),qr.error(t),new Error(r)}return e}a(I5,"getFingerprint");async function _T(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");qr.info("Validating license input...");let r=Md.validateLicense(e,t);if(qr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(qr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(qr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{qr.info("writing license to disk"),await T5.writeFile(N5,JSON.stringify({license_key:e,company:t}))}catch(n){throw qr.error("Failed to write License"),n}return"Registration successful."}a(_T,"parseLicense");async function w5(){let e=await C5();return _T(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(w5,"register");async function C5(){let e=await Md.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:bM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:bM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{NM.start()}catch(n){qr.error(n)}let r;try{r=await b5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(C5,"promptForRegistration");async function L5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Md.getLicense()}catch(r){throw qr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(R5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=A5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=O5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(L5,"getRegistrationInfo")});var CM=T((Dde,wM)=>{"use strict";var D5=nt(),fT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+D5.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};wM.exports=fT});var MM=T((Ude,DM)=>{"use strict";var LM=nt(),ET=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+LM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+LM.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,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"}};DM.exports=ET});var PM=T((vde,UM)=>{"use strict";var hT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};UM.exports=hT});var BM=T((Hde,vM)=>{"use strict";var M5=nt(),mT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+M5.SERVER_SUFFIX.ADMIN,this.password=r}};vM.exports=mT});var TT=T((Fde,FM)=>{"use strict";var la=require("path"),vd=require("fs-extra"),U5=CM(),P5=MM(),v5=PM(),B5=BM(),pT=rn(),da=J(),hr=Lr(),Pd=M(),bu=nt(),{CONFIG_PARAMS:Et}=Pd,Nu=V(),yu=j(),HM=gs(),ST=It(),_a="clustering",H5=1e4,xM=5;FM.exports={generateNatsConfig:F5,removeNatsConfig:q5,getHubConfigPath:x5};function x5(){let e=yu.get(Et.ROOTPATH);return la.join(e,_a,bu.NATS_CONFIG_FILES.HUB_SERVER)}a(x5,"getHubConfigPath");async function F5(e=!1,t=void 0){yu.initSync();let r=yu.get(Et.ROOTPATH),n=la.join(r,_a,bu.PID_FILES.HUB),s=la.join(r,_a,bu.PID_FILES.LEAF),i=hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=la.join(r,_a,bu.NATS_CONFIG_FILES.HUB_SERVER),c=la.join(r,_a,bu.NATS_CONFIG_FILES.LEAF_SERVER),u=hr.getConfigFromFile(Et.CLUSTERING_TLS_CERTIFICATE),_=hr.getConfigFromFile(Et.CLUSTERING_TLS_PRIVATEKEY),l=hr.getConfigFromFile(Et.CLUSTERING_TLS_CERT_AUTH),d=hr.getConfigFromFile(Et.CLUSTERING_TLS_INSECURE),f=hr.getConfigFromFile(Et.CLUSTERING_TLS_VERIFY),E=hr.getConfigFromFile(Et.CLUSTERING_NODENAME),h=hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ST.checkNATSServerInstalled()||Bd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await pT.listUsers(),S=hr.getConfigFromFile(Et.CLUSTERING_USER),A=await pT.getClusterUser();(da.isEmpty(A)||A.active!==!0)&&Bd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ud(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ud(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ud(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ud(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[z,re]of p.entries())re.role.role===Pd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new B5(re.username,HM.decrypt(re.hash))),w.push(new v5(re.username,HM.decrypt(re.hash))));let B=[],{hub_routes:K}=hr.getClusteringRoutes();if(!da.isEmptyOrZeroLength(K))for(let z of K)B.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let F=new U5(hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NAME),hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,I,w);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=da.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Pd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await vd.writeJson(o,F),Nu.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new P5(hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[Q],I,w,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===Pd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await vd.writeJson(c,Y),Nu.trace(`Leaf server config written to ${c}`))}a(F5,"generateNatsConfig");async function Ud(e){let t=yu.get(e);return da.isEmpty(t)&&Bd(`port undefined for '${e}'`),await da.isPortTaken(t)&&Bd(`'${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(Ud,"isPortAvailable");function Bd(e){let t=`Error generating clustering config: ${e}`;Nu.error(t),console.error(t),process.exit(1)}a(Bd,"generateNatsConfigError");async function q5(e){let{port:t,config_file:r}=ST.getServerConfig(e),{username:n,decrypt_hash:s}=await pT.getClusterUser(),i=0,o=2e3;for(;i<xM;){try{let _=await ST.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Nu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=xM)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await da.async_set_timeout(o*(i*2))}let c="0".repeat(H5),u=la.join(yu.get(Et.ROOTPATH),_a,r);await vd.writeFile(u,c),await vd.remove(u),Nu.notify(e,"started.")}a(q5,"removeNatsConfig")});var qd=T((Gde,KM)=>{"use strict";var G5=require("minimist"),{isMainThread:AT,parentPort:kM}=require("worker_threads"),st=M(),{PROCESS_DESCRIPTORS_VALIDATE:Iu}=st,es=V(),OT=J(),Hd=TT(),fa=It(),gT=nt(),VM=Lr(),ts=NT(),qM=ua(),k5=jE(),{restartWorkers:xd,onMessageByType:V5}=tt(),{handleHDBError:$5,hdb_errors:Y5}=Z(),{HTTP_STATUS_CODES:K5}=Y5,Fd=j();Fd.initSync();var wu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,W5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",GM="Clustering is not enabled so cannot be restarted",Q5="Invalid service",Ea,an;KM.exports={restart:$M,restartService:bT};AT&&V5(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?bT({service:e.workerType}):$M({operation:"restart"})});async function $M(e){an=Object.keys(e).length===0,Ea=await ts.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=G5(process.argv);if(t.service){await bT(t);return}if(an&&!Ea){console.error(W5);return}if(an&&console.log(wu),Ea){ts.enterPM2Mode(),es.notify(wu);let r=k5(Object.keys(st.CONFIG_PARAM_MAP),!0);return OT.isEmptyOrZeroLength(Object.keys(r))||VM.updateConfigValue(void 0,void 0,r,!0,!0),J5(),wu}return AT?(es.notify(wu),setTimeout(()=>{xd()},50)):kM.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),wu}a($M,"restart");async function bT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw $5(new Error,Q5,K5.BAD_REQUEST,void 0,void 0,!0);if(Ea=await ts.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!AT)return kM.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Iu.clustering:if(!Fd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GM;break}an&&console.log("Restarting clustering"),es.notify("Restarting clustering"),await YM();break;case Iu.clustering_config:case Iu["clustering config"]:if(!Fd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GM;break}an&&console.log("Restarting clustering_config"),es.notify("Restarting clustering_config"),await ts.reloadClustering();break;case"custom_functions":case"custom functions":case Iu.harperdb:case Iu.http_workers:if(an&&!Ea){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}an&&console.log("Restarting http_workers"),es.notify("Restarting http_workers"),an?await ts.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{xd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(es.error(r),an&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(bT,"restartService");async function z5(){await fa.publishToStream(`${gT.SUBJECT_PREFIXES.TXN}.${gT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,gT.WORK_QUEUE_CONSUMER_NAMES.stream_name,fa.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(z5,"postDummyNatsMsg");async function J5(){await YM(),await ts.restart(st.HDB_PROC_DESCRIPTOR),await OT.async_set_timeout(2e3),Fd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await RT(),an&&(await fa.closeConnection(),process.exit(0))}a(J5,"restartPM2Mode");async function YM(){if(!VM.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await qM.getHDBProcessInfo()).clustering.length===0)es.trace("Clustering not running, restart will start clustering services"),await Hd.generateNatsConfig(!0),await ts.startClusteringProcesses(),await ts.startClusteringThreads(),await RT(),an&&await fa.closeConnection();else{await z5(),await Hd.generateNatsConfig(!0),Ea?(es.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ts.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ts.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await qM.getHDBProcessInfo()).clustering.forEach(s=>{es.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await OT.async_set_timeout(3e3),await RT(),await fa.updateLocalStreams(),an&&await fa.closeConnection(),es.trace("Restart clustering restarting ingest and reply service threads");let t=xd(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xd(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(YM,"restartClustering");async function RT(){await Hd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Hd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(RT,"removeNatsConfig")});var nU=T(($de,rU)=>{"use strict";var Vde=require("lodash"),mr=M(),{handleHDBError:WM,hdb_errors:X5}=Z(),{HDB_ERROR_MSGS:j5,HTTP_STATUS_CODES:Z5}=X5,yT=V();rU.exports={getRolePermissions:t8};var uo=Object.create(null),e8=a(e=>({key:e,perms:{}}),"perms_template_obj"),XM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),jM=a((e=!1,t=!1,r=!1,n=!1)=>({[mr.PERMS_CRUD_ENUM.READ]:e,[mr.PERMS_CRUD_ENUM.INSERT]:t,[mr.PERMS_CRUD_ENUM.UPDATE]:r,[mr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),IT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...jM(t,r,n,s)}),"table_perms_template"),QM=a((e,t=jM())=>({attribute_name:e,describe:tU(t),[Cu]:t[Cu],[wT]:t[wT],[CT]:t[CT]}),"attr_perms_template"),zM=a((e,t=!1)=>({attribute_name:e,describe:t,[Cu]:t}),"timestamp_attr_perms_template"),{READ:Cu,INSERT:wT,UPDATE:CT}=mr.PERMS_CRUD_ENUM,ZM=Object.values(mr.PERMS_CRUD_ENUM),eU=[Cu,wT,CT];function t8(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[mr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(uo[t]&&uo[t].key===n)return uo[t].perms;let s=r8(e,r);return uo[t]?uo[t].key=n:uo[t]=e8(n),uo[t].perms=s,s}catch(r){if(!e[mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<mr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw yT.error(n),yT.debug(r),WM(new Error,j5.OUTDATED_PERMS_TRANSLATION_ERROR,Z5.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw yT.error(n),WM(new Error)}}}a(t8,"getRolePermissions");function r8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[mr.SYSTEM_SCHEMA_NAME]=n[mr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=n8(t[i]);return}r[i]=XM(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=s8(c,u);r[i].describe||ZM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=IT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=IT()})}),r}a(r8,"translateRolePermissions");function n8(e){let t=XM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=IT(!0,!0,!0,!0,!0)}),t}a(n8,"createStructureUserPermissions");function s8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return mr.TIME_STAMP_NAMES.includes(d)&&(f=zM(d,l[Cu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=QM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=tU(l),s.attribute_permissions.push(l),c||i8(l,u)}else if(_!==o){let l;mr.TIME_STAMP_NAMES.includes(_)?l=zM(_):l=QM(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=JM(s),s}else return e.describe=JM(e),e}a(s8,"getTableAttrPerms");function JM(e){return ZM.filter(t=>e[t]).length>0}a(JM,"getSchemaTableDescribePerm");function tU(e){return eU.filter(t=>e[t]).length>0}a(tU,"getAttributeDescribePerm");function i8(e,t){eU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(i8,"checkForHashPerms")});var sU={};Ve(sU,{Resources:()=>Gd,keyArrayToString:()=>ha,resetResources:()=>o8,resources:()=>li});function o8(){return li=new Gd}function ha(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Gd,li,Lu=Ae(()=>{Ji();Gd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Qe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(o8,"resetResources");a(ha,"keyArrayToString")});var iU={};Ve(iU,{Headers:()=>_i});var _i,kd=Ae(()=>{_i=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Du={};Ve(Du,{authentication:()=>fU,bypassAuth:()=>f8,login:()=>h8,logout:()=>m8,start:()=>E8});function f8(){dU=!0}async function fU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?l8?u8:[]:c8?a8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new _i([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Vd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Vd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Vd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await aU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Yd.AuthAuditLog(E,h,kt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===kt.AUTH_AUDIT_STATUS.SUCCESS?oU.notify(S):oU.error(S)},"authAuditLog"),d;if(n){if(d=lo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,$d.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,$d.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return d8&&(lo.get(h)||(lo.set(h,h),l(p,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:di({error:A.message},e)})}lo.set(n,d),_8&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,e):(dU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,uU.getSuperUser)());Vd&&(e.session.update=function(E){if(!u){u=(0,lU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,aU.put(E)},e.login=async function(E,h){e.user=await lt.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&li.loginPath?(f.status=302,f.headers.set("Location",li.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new _i);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function E8({server:e,port:t}){e.request(fU,{port:t||"all"}),cU||(cU=!0,setInterval(()=>{lo=new Map},cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),_U.user.addListener(()=>{lo=new Map}))}async function h8(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function m8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var uU,$d,lU,cn,kt,Yd,_U,oU,a8,c8,u8,l8,aU,Vd,dU,_8,d8,lo,cU,Kd=Ae(()=>{uU=v(rn());nr();Lu();$d=v(Eu());ge();lU=require("uuid"),cn=v(j()),kt=v(M()),Yd=v(V()),_U=v(vc());kd();ma();oU=(0,Yd.loggerWithTag)("auth-event");cn.initSync();a8=cn.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),c8=cn.get(kt.CONFIG_PARAMS.HTTP_CORS),u8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),l8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),aU=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Vd=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,dU=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,_8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,d8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,lo=new Map;lt.onInvalidatedUser(()=>{lo=new Map});a(f8,"bypassAuth");a(fU,"authentication");a(E8,"start");a(h8,"login");a(m8,"logout")});var gU=T((tfe,TU)=>{"use strict";var be=require("joi"),EU=require("fs-extra"),hU=require("path"),ws=et(),mU=j(),pU=M(),SU=V(),{hdb_errors:p8}=Z(),{HDB_ERROR_MSGS:jt}=p8,Is=/^[a-zA-Z0-9-_]+$/;TU.exports={getDropCustomFunctionValidator:T8,setCustomFunctionValidator:g8,addComponentValidator:b8,dropCustomFunctionProjectValidator:N8,packageComponentValidator:y8,deployComponentValidator:I8,setComponentFileValidator:R8,getComponentFileValidator:O8,dropComponentFileValidator:A8};function Wd(e,t,r){try{let n=mU.get(pU.CONFIG_PARAMS.COMPONENTSROOT),s=hU.join(n,t);return EU.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return SU.error(n),r.message(jt.VALIDATION_ERR)}}a(Wd,"checkProjectExists");function Mu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Mu,"checkFilePath");function S8(e,t,r,n){try{let s=mU.get(pU.CONFIG_PARAMS.COMPONENTSROOT),i=hU.join(s,e,t,r+".js");return EU.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return SU.error(s),n.message(jt.VALIDATION_ERR)}}a(S8,"checkFileExists");function T8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().pattern(Is).custom(S8.bind(null,e.project,e.type)).custom(Mu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return ws.validateBySchema(e,t)}a(T8,"getDropCustomFunctionValidator");function g8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().custom(Mu).required(),function_content:be.string().required()});return ws.validateBySchema(e,t)}a(g8,"setCustomFunctionValidator");function R8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:be.string().custom(Mu).required(),payload:be.string().allow("").optional(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ws.validateBySchema(e,t)}a(R8,"setComponentFileValidator");function A8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:be.string().custom(Mu).optional()});return ws.validateBySchema(e,t)}a(A8,"dropComponentFileValidator");function O8(e){let t=be.object({project:be.string().required(),file:be.string().custom(Mu).required(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ws.validateBySchema(e,t)}a(O8,"getComponentFileValidator");function b8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return ws.validateBySchema(e,t)}a(b8,"addComponentValidator");function N8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return ws.validateBySchema(e,t)}a(N8,"dropCustomFunctionProjectValidator");function y8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:be.boolean()});return ws.validateBySchema(e,t)}a(y8,"packageComponentValidator");function I8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:be.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:be.string().optional()});return ws.validateBySchema(e,t)}a(I8,"deployComponentValidator")});var Xd=T((nfe,IU)=>{"use strict";var Qd=require("joi"),zd=require("path"),RU=require("fs-extra"),{exec:w8}=require("child_process"),C8=require("util"),AU=C8.promisify(w8),Uu=M(),{handleHDBError:pa,hdb_errors:L8}=Z(),{HTTP_STATUS_CODES:Sa}=L8,Pu=j(),D8=et(),Ta=V();Pu.initSync();var LT=Pu.get(Uu.CONFIG_PARAMS.COMPONENTSROOT),OU="npm install --omit=dev --json",M8=`${OU} --dry-run`;IU.exports={installModules:B8,auditModules:H8,installAllRootModules:U8,uninstallRootModule:P8,linkHarperdb:v8};async function U8(e=!1){await Jd(),await vu(e?"npm install --ignore-scripts":"npm install",Pu.get(Uu.CONFIG_PARAMS.ROOTPATH))}a(U8,"installAllRootModules");async function P8(e){await vu(`npm uninstall ${e}`,Pu.get(Uu.CONFIG_PARAMS.ROOTPATH))}a(P8,"uninstallRootModule");async function v8(){await Jd(),await vu(`npm link ${Uu.PACKAGE_ROOT}`,Pu.get(Uu.CONFIG_PARAMS.ROOTPATH))}a(v8,"linkHarperdb");async function vu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await AU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
- `,""))}return n&&!n.includes("Debugger listening")&&Ta.error("Error running NPM command:",e,n),Ta.trace(r,n),r?.replace(`
13
- `,"")}a(vu,"runCommand");async function B8(e){Ta.info(`starting installModules for request: ${e}`);let t=yU(e);if(t)throw pa(t,t.message,Sa.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?M8:OU;await Jd(),await NU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=zd.join(LT,u),l,d=null;try{let{stdout:f,stderr:E}=await AU(s,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(oD,"runCommand");async function B4(){try{await E4.access(Xp)}catch{return!1}let e=await oD(`${Xp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return h4.eq(t,P4)}a(B4,"checkNATSServerInstalled");async function tS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await rD.getClusterUser();if(Zi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Br.trace("create nats connection called");let i=await y4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Br.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Br.error("Error with Nats client connection, connection closed",o),aD()}),i}a(tS,"createConnection");function aD(){tn=void 0,Ji=void 0,Xi=void 0,ji=void 0}a(aD,"clearClientCache");async function H4(){tn&&(await tn.drain(),tn=void 0,Ji=void 0,Xi=void 0,ji=void 0)}a(H4,"closeConnection");var tn,ji;async function ed(){return ji||(ji=tS(xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),tn=await ji),tn||ji}a(ed,"getConnection");async function ru(){if(Ji)return Ji;Zi(tn)&&await ed();let{domain:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Zi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ji=await tn.jetstreamManager({domain:e,timeout:6e4}),Ji}a(ru,"getJetStreamManager");async function cD(){if(Xi)return Xi;Zi(tn)&&await ed();let{domain:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Zi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Xi=tn.jetstream({domain:e,timeout:6e4}),Xi}a(cD,"getJetStream");async function ir(){let e=tn||await ed(),t=Ji||await ru(),r=Xi||await cD();return{connection:e,jsm:t,js:r}}a(ir,"getNATSReferences");async function x4(e){let t=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await rD.getClusterUser(),s=await tS(t,r,n),i=eS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=iD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await jp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(x4,"getServerList");async function rS(e,t){let{jsm:r}=await ir(),n=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:nD.File,retention:sD.Limits,subjects:t,discard:w4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(rS,"createLocalStream");async function uD(){let{jsm:e}=await ir(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(uD,"listStreams");async function F4(e){let{jsm:t}=await ir();await t.streams.delete(e)}a(F4,"deleteLocalStream");async function q4(e){let{connection:t}=await ir(),r=[],n=eS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(iD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(q4,"listRemoteStreams");async function G4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ir(),i=ZC(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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 _=[];for await(let l of u){let d=Zp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ye.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(G4,"viewStream");async function*k4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ir(),i=ZC(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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 _ of u){let l=Zp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ye.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(k4,"viewStreamIterator");async function V4(e,t,r,n){Br.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=lD(n,r);let{js:s}=await ir(),i=await su(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:tD.encode(n);try{Br.trace(`publishToStream publishing to subject: ${o}`),M4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return ED(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Br.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await rS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(V4,"publishToStream");function lD(e,t){t===void 0&&(t=C4());let r=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ye.MSG_HEADERS.ORIGIN)&&r&&t.append(ye.MSG_HEADERS.ORIGIN,r),t}a(lD,"addNatsMsgHeader");function nu(e){e=e.toLowerCase();let t=tu.join(xt.get(Pe.CONFIG_PARAMS.ROOTPATH),U4);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Zi(Jp)&&(Jp={port:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.HUB,config_file:ye.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:tu.join(t,ye.PID_FILES.HUB),hdb_nats_path:t}),Jp;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Zi(zp)&&(zp={port:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,config_file:ye.NATS_CONFIG_FILES.LEAF_SERVER,domain:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,pid_file_path:tu.join(t,ye.PID_FILES.LEAF),hdb_nats_path:t}),zp;Br.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(nu,"getServerConfig");async function $4(e){let{jsm:t}=await ir(),r=await su();try{await t.streams.add({name:e.stream_name,storage:nD.File,retention:sD.Limits,max_age:b4,max_bytes:N4,subjects:[`${ye.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:j_.Explicit,durable_name:e.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4});else throw n}}a($4,"createWorkQueueStream");async function Y4(){let{jsm:e}=await ir();(await e.consumers.info(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Br.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name),Br.info("Adding pull consumer to ingest stream"),await e.consumers.add(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:j_.Explicit,durable_name:ye.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4}))}a(Y4,"updateIngestStreamConsumer");async function _D(e,t,r){let{jsm:n}=await ir(),s=await n.streams.info(t),i=dD(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=X_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${ye.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(_D,"addSourceToWorkStream");function dD(e){return e.split(".")[1]}a(dD,"extractServerName");async function fD(e,t,r){let{jsm:n}=await ir(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=X_.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(fD,"removeSourceFromWorkStream");async function K4(e,t,r=6e4,n=eS()){if(!jp.isObject(t))throw new Error("data param must be an object");let s=tD.encode(t),{connection:i}=await ir(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Zp(c.data)}a(K4,"request");function nS(e){return new Promise(async(t,r)=>{let n=T4(Xp,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(nS,"reloadNATS");async function W4(){let{pid_file_path:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nS(e)}a(W4,"reloadNATSHub");async function Q4(){let{pid_file_path:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nS(e)}a(Q4,"reloadNATSLeaf");function z4(e,t,r){let n;switch(e.code){case jC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case jC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(z4,"requestErrorHandler");async function J4(e,t){let r=t+ye.SERVER_SUFFIX.LEAF;await ED(async()=>{e.subscribe===!0?await _D(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await fD(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(J4,"updateWorkStream");function ED(e){return g4.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ED,"exclusiveLock");async function hD(e,t){let r=X_.createNatsTableStreamName(e,t),n=await su(),s=e3(e,t,n);await rS(r,[s])}a(hD,"createLocalTableStream");async function X4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await hD(n,s)}}a(X4,"createTableStreams");async function mD(e,t,r=!1){if(xt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=X_.createNatsTableStreamName(e,t),{jsm:s}=await ir();r?await s.streams.purge(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Br.warn(n);else throw n}}a(mD,"purgeTableStream");async function j4(e,t){if(xt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await mD(e,t[r])}a(j4,"purgeSchemaTableStreams");async function Z4(e){return(await ru()).streams.info(e)}a(Z4,"getStreamInfo");function e3(e,t,r){return`${ye.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(e3,"createSubjectName");async function su(){if(eu)return eu;if(eu=(await ru())?.nc?.info?.server_name,eu===void 0)throw new Error("Unable to get jetstream manager server name");return eu}a(su,"getJsmServerName");async function t3(){let e=await ru(),t=await su(),r=await uD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=r3(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Br.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Br.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Br.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(t3,"updateLocalStreams");function r3(e){let{config:t}=e,r=!1;if(t.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(r3,"updateStreamLimits")});var sd=g((m_e,RD)=>{"use strict";var jo=l_(),Zo=MC(),n3=Y(),s3=require("uuid").v4,h_e=require("clone"),rd=ms(),ea=M(),i3=require("util"),ti=On(),{handleHDBError:or,hdb_errors:o3}=ee(),{HDB_ERROR_MSGS:td,HTTP_STATUS_CODES:ar}=o3,{SchemaEventMsg:nd}=bn(),SD=Rt(),{getDatabases:a3}=(be(),te(Fe)),{transformReq:ta}=J();RD.exports={createSchema:c3,createSchemaStructure:TD,createTable:u3,createTableStructure:gD,createAttribute:E3,dropSchema:l3,dropTable:_3,dropAttribute:d3,getBackup:h3};async function c3(e){let t=await TD(e);return rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(c3,"createSchema");async function TD(e){let t=jo.schema_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);if(ta(e),!await Zo.checkSchemaExists(e.schema))throw or(new Error,td.SCHEMA_EXISTS_ERR(e.schema),ar.BAD_REQUEST,ea.LOG_LEVELS.ERROR,td.SCHEMA_EXISTS_ERR(e.schema),!0);return await ti.createSchema(e),`database '${e.schema}' successfully created`}a(TD,"createSchemaStructure");async function u3(e){return ta(e),e.hash_attribute=e.primary_key??e.hash_attribute,await gD(e)}a(u3,"createTable");async function gD(e){let t=jo.create_table_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);if(jo.validateTableResidence(e.residence),!await Zo.checkSchemaTableExists(e.schema,e.table))throw or(new Error,td.TABLE_EXISTS_ERR(e.schema,e.table),ar.BAD_REQUEST,ea.LOG_LEVELS.ERROR,td.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:s3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ti.createTable(n,e);else throw or(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ar.BAD_REQUEST);else await ti.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(gD,"createTableStructure");async function l3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=jo.schema_object(e),n=t??r;if(n)throw or(n,n.message,ar.BAD_REQUEST,void 0,void 0,!0);ta(e);let s=await Zo.checkSchemaExists(e.schema);if(s)throw or(new Error,s,ar.NOT_FOUND,ea.LOG_LEVELS.ERROR,s,!0);let i=await Zo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ti.dropSchema(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await SD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(l3,"dropSchema");async function _3(e){let t=jo.table_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);ta(e);let r=await Zo.checkSchemaTableExists(e.schema,e.table);if(r)throw or(new Error,r,ar.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);return await ti.dropTable(e),await SD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(_3,"dropTable");async function d3(e){let t=jo.attribute_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);ta(e);let r=await Zo.checkSchemaTableExists(e.schema,e.table);if(r)throw or(new Error,r,ar.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw or(new Error,"You cannot drop a hash attribute",ar.BAD_REQUEST,void 0,void 0,!0);if(ea.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw or(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ar.BAD_REQUEST,void 0,void 0,!0);try{return await ti.dropAttribute(e),f3(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw n3.error(`Got an error deleting attribute ${i3.inspect(e)}.`),n}}a(d3,"dropAttribute");function f3(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(f3,"dropAttributeFromGlobal");async function E3(e){ta(e);let t=a3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw or(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ar.BAD_REQUEST,void 0,void 0,!0);return await ti.createAttribute(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(E3,"createAttribute");function h3(e){return ti.getBackup(e)}a(h3,"getBackup")});var OD=g((S_e,AD)=>{"use strict";var{OPERATIONS_ENUM:m3}=M(),sS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=m3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};AD.exports=sS});var iS=g((R_e,ID)=>{"use strict";var p3=On(),g_e=OD(),id=J(),od=M(),S3=Z(),{handleHDBError:bD,hdb_errors:T3}=ee(),{HDB_ERROR_MSGS:ND,HTTP_STATUS_CODES:yD}=T3,g3=Object.values(od.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wD="To use this operation audit log must be enabled in harperdb-config.yaml";ID.exports=R3;async function R3(e){if(id.isEmpty(e.schema))throw new Error(ND.SCHEMA_REQUIRED_ERR);if(id.isEmpty(e.table))throw new Error(ND.TABLE_REQUIRED_ERR);if(!S3.get(od.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bD(new Error,wD,yD.BAD_REQUEST,od.LOG_LEVELS.ERROR,wD,!0);let t=id.checkSchemaTableExist(e.schema,e.table);if(t)throw bD(new Error,t,yD.NOT_FOUND,od.LOG_LEVELS.ERROR,t,!0);if(!id.isEmpty(e.search_type)&&g3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await p3.readAuditLog(e)}a(R3,"readAuditLog")});var DD=g((O_e,CD)=>{"use strict";var{OPERATIONS_ENUM:A3}=M(),oS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=A3.GET_BACKUP,this.schema=t,this.table=r}};CD.exports=oS});var UD=g((w_e,MD)=>{"use strict";var O3=On(),N_e=DD(),aS=J(),b3=M(),y_e=Z(),{handleHDBError:N3,hdb_errors:y3}=ee(),{HDB_ERROR_MSGS:LD,HTTP_STATUS_CODES:w3}=y3;MD.exports=I3;async function I3(e){if(aS.isEmpty(e.schema))throw new Error(LD.SCHEMA_REQUIRED_ERR);if(aS.isEmpty(e.table))throw new Error(LD.TABLE_REQUIRED_ERR);let t=aS.checkSchemaTableExist(e.schema,e.table);if(t)throw N3(new Error,t,w3.NOT_FOUND,b3.LOG_LEVELS.ERROR,t,!0);return await O3.getBackup(read_audit_log_object)}a(I3,"getBackup")});var FD=g((C_e,xD)=>{var ri=require("validate.js"),vD=Xe(),ra=M(),{handleHDBError:C3,hdb_errors:D3}=ee(),{HDB_ERROR_MSGS:ct,HTTP_STATUS_CODES:L3}=D3,cS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),M3={STRUCTURE_USER:"structure_user"},PD=Object.values(ra.ROLE_TYPES_ENUM),U3="attribute_permissions",P3="attribute_name",{PERMS_CRUD_ENUM:na}=ra,v3=[U3,...Object.values(na)],BD=[na.READ,na.INSERT,na.UPDATE],B3=[P3,...BD];function H3(e){let t=cS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,HD(e,t)}a(H3,"addRoleValidation");function x3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,HD(e,t)}a(x3,"alterRoleValidation");function F3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,vD.validateObject(e,t)}a(F3,"dropRoleValidation");var q3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function HD(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)q3.includes(n[o])||s.push(n[o]);s.length>0&&ft(ct.INVALID_ROLE_JSON_KEYS(s),r);let i=vD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ft(o,r)}),e.permission){let o=G3(e);o&&ft(o,r),PD.forEach(c=>{e.permission[c]&&!ri.isBoolean(e.permission[c])&&ft(ct.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(PD.indexOf(o)<0){if(o===M3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ft(ct.SCHEMA_NOT_FOUND(d),r)}continue}ft(ct.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ft(ct.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ft(ct.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{v3.includes(l)||ft(ct.INVALID_PERM_KEY(l),r,o,u)}),Object.values(na).forEach(l=>{ri.isDefined(_[l])?ri.isBoolean(_[l])||ft(ct.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ft(ct.TABLE_PERM_MISSING(l),r,o,u)}),ri.isDefined(_.attribute_permissions)){if(!ri.isArray(_.attribute_permissions)){ft(ct.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ft(ct.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!B3.includes(p)&&p!==na.DELETE&&ft(ct.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ri.isDefined(E.attribute_name)){ft(ct.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ft(ct.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}BD.forEach(p=>{ri.isDefined(E[p])?ri.isBoolean(E[p])||ft(ct.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ft(ct.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ft(ct.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return k3(r)}a(HD,"customValidate");xD.exports={addRoleValidation:H3,alterRoleValidation:x3,dropRoleValidation:F3};function G3(e){let{operation:t,permission:r}=e;if(t===ra.OPERATIONS_ENUM.ADD_ROLE||t===ra.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return ct.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ra.ROLE_TYPES_ENUM.SUPER_USER:ra.ROLE_TYPES_ENUM.CLUSTER_USER;return ct.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(G3,"validateNoSUPerms");function k3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ct.ROLE_PERMS_ERROR,...e};return C3(new Error,n,L3.BAD_REQUEST)}else return null}a(k3,"generateRolePermResponse");function ft(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(ft,"addPermError")});var ES=g((L_e,VD)=>{"use strict";var qD=jr(),GD=Xr(),V3=qi(),lS=FD(),_S=ms(),$3=require("uuid").v4,Y3=require("util"),ad=M(),K3=J(),dS=GD.searchByValue,W3=GD.searchByHash,Q3=Y3.promisify(V3.delete),z3=Kn(),J3=zo(),{hdb_errors:X3,handleHDBError:eo}=ee(),{HDB_ERROR_MSGS:kD,HTTP_STATUS_CODES:iu}=X3,{UserEventMsg:fS}=bn();VD.exports={addRole:j3,alterRole:Z3,dropRole:eX,listRoles:tX};function uS(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(uS,"scrubRoleDetails");async function j3(e){let t=lS.addRoleValidation(e);if(t)throw t;e=uS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await dS(r)||[])}catch(i){throw eo(i)}if(n&&n.length>0)throw eo(new Error,kD.ROLE_ALREADY_EXISTS(e.role),iu.CONFLICT,void 0,void 0,!0);e.id||(e.id=$3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await qD.insert(s),_S.signalUserChange(new fS(process.pid)),e=uS(e),e}a(j3,"addRole");async function Z3(e){let t=lS.alterRoleValidation(e);if(t)throw t;e=uS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await qD.update(r)}catch(s){throw eo(s)}if(n&&n?.message==="updated 0 of 1 records")throw eo(new Error,"Invalid role id",iu.BAD_REQUEST,void 0,void 0,!0);return await _S.signalUserChange(new fS(process.pid)),e}a(Z3,"alterRole");async function eX(e){let t=lS.dropRoleValidation(e);if(t)throw eo(new Error,t,iu.BAD_REQUEST,void 0,void 0,!0);let r=new J3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await W3(r));if(n.length===0)throw eo(new Error,kD.ROLE_NOT_FOUND,iu.NOT_FOUND,void 0,void 0,!0);let s=new z3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await dS(s)),o=!1;if(K3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw eo(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,iu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Q3(c),_S.signalUserChange(new fS(process.pid)),`${n[0].role} successfully deleted`}a(eX,"dropRole");async function tX(){return dS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(tX,"listRoles")});var WD=g((U_e,KD)=>{"use strict";var rX=Z(),ni=require("joi"),nX=Xe(),$D=require("moment"),sX=require("fs-extra"),hS=require("path"),iX=require("lodash"),ou=M(),{LOG_LEVELS:to}=M(),oX="YYYY-MM-DD hh:mm:ss",aX=hS.resolve(__dirname,"../logs");KD.exports=function(e){return nX.validateBySchema(e,cX)};var cX=ni.object({from:ni.custom(YD),until:ni.custom(YD),level:ni.valid(to.NOTIFY,to.FATAL,to.ERROR,to.WARN,to.INFO,to.DEBUG,to.TRACE),order:ni.valid("asc","desc"),limit:ni.number().min(1),start:ni.number().min(0),log_name:ni.custom(uX)});function YD(e,t){if($D(e,$D.ISO_8601).format(oX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(YD,"validateDatetime");function uX(e,t){if(iX.invert(ou.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=rX.get(ou.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ou.LOG_NAMES.HDB:e,i=s===ou.LOG_NAMES.INSTALL?hS.join(aX,ou.LOG_NAMES.INSTALL):hS.join(n,s);return sX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(uX,"validateReadLogPath")});var pS=g((v_e,zD)=>{"use strict";var cd=M(),lX=Y(),_X=Z(),dX=WD(),mS=require("path"),QD=require("fs-extra"),{once:fX}=require("events"),{handleHDBError:EX,hdb_errors:hX}=ee(),{PACKAGE_ROOT:mX}=M(),pX=mS.join(mX,"logs"),SX=1e3,TX=200;zD.exports=gX;async function gX(e){let t=dX(e);if(t)throw EX(t,t.message,hX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=_X.get(cd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?cd.LOG_NAMES.HDB:e.log_name,s=n===cd.LOG_NAMES.INSTALL?mS.join(pX,cd.LOG_NAMES.INSTALL):mS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?SX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(QD.statSync(s).size-(h+5)*TX,0));let S=QD.createReadStream(s,{start:p});S.on("error",v=>{lX.error(v)});let T=0,A=[],b="",H;S.on("data",v=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let z=0,W;for(;(W=P.exec(v))&&!S.destroyed;){H&&(H.message=v.slice(z,W.index),F(H));let[Q,se,pe]=W,oe=pe.split("] ["),xe=oe[0],le=oe[1];oe.splice(0,2),H={timestamp:se,thread:xe,level:le,tags:oe,message:""},z=W.index+Q.length}b=v.slice(z)}),S.on("end",v=>{S.destroyed||H&&(H.message=b.trim(),F(H))}),S.resume();function F(v){let P,z,W;switch(!0){case(i&&c&&_):P=new Date(v.timestamp),z=new Date(u),W=new Date(l),v.level===o&&P>=z&&P<=W&&T<E?T++:v.level===o&&P>=z&&P<=W&&(si(v,f,A),T++,T===h&&S.destroy());break;case(i&&c):P=new Date(v.timestamp),z=new Date(u),v.level===o&&P>=z&&T<E?T++:v.level===o&&P>=z&&(si(v,f,A),T++,T===h&&S.destroy());break;case(i&&_):P=new Date(v.timestamp),W=new Date(l),v.level===o&&P<=W&&T<E?T++:v.level===o&&P<=W&&(si(v,f,A),T++,T===h&&S.destroy());break;case(c&&_):P=new Date(v.timestamp),z=new Date(u),W=new Date(l),P>=z&&P<=W&&T<E?T++:P>=z&&P<=W&&(si(v,f,A),T++,T===h&&S.destroy());break;case i:v.level===o&&T<E?T++:v.level===o&&(si(v,f,A),T++,T===h&&S.destroy());break;case c:P=new Date(v.timestamp),z=new Date(u),P>=z&&T<E?T++:P>=z&&T>=E&&(si(v,f,A),T++,T===h&&S.destroy());break;case _:P=new Date(v.timestamp),W=new Date(l),P<=W&&T<E?T++:P<=W&&T>=E&&(si(v,f,A),T++,T===h&&S.destroy());break;default:T<E?T++:(si(v,f,A),T++,T===h&&S.destroy())}}return a(F,"onLogMessage"),await fX(S,"close"),A}a(gX,"readLog");function si(e,t,r){t==="desc"?RX(e,r):t==="asc"?AX(e,r):r.push(e)}a(si,"pushLineToResult");function RX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(RX,"insertDescending");function AX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(AX,"insertAscending")});var ud=g((q_e,ZD)=>{"use strict";var SS=require("joi"),{string:au,boolean:JD,date:OX}=SS.types(),bX=Xe(),{validateSchemaExists:H_e,validateTableExists:x_e,validateSchemaName:F_e}=kn(),NX=M(),yX=tt(),XD=Z();XD.initSync();var wX=au.invalid(XD.get(NX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(yX.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(),jD={operation:au.valid("add_node","update_node","set_node_replication"),node_name:wX,subscriptions:SS.array().items({table:au.optional(),schema:au.optional(),database:au.optional(),subscribe:JD.required(),publish:JD.required().custom(CX),start_time:OX.iso()}).min(1).required()};function IX(e){return bX.validateBySchema(e,SS.object(jD))}a(IX,"addUpdateNodeValidator");function CX(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(CX,"checkForFalsy");ZD.exports={addUpdateNodeValidator:IX,validation_schema:jD}});var tL=g((k_e,eL)=>{var DX=Xe(),LX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};eL.exports=function(e){return DX.validateObject(e,LX)}});var gS=g((V_e,rL)=>{"use strict";var MX=M().OPERATIONS_ENUM,TS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=MX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rL.exports=TS});var sL=g((Y_e,nL)=>{"use strict";var UX={OPERATION:"operation",REFRESH:"refresh"},RS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},AS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};nL.exports={JWTTokens:RS,TOKEN_TYPE_ENUM:UX,JWTRSAKeys:AS}});var lu=g((W_e,cL)=>{"use strict";var uu=require("jsonwebtoken"),OS=require("fs-extra"),bS=J(),rn=M(),{handleHDBError:cr,hdb_errors:PX}=ee(),{HTTP_STATUS_CODES:ur,AUTHENTICATION_ERROR_MSGS:lr}=PX,cu=Y(),iL=O_(),wS=Zr(),vX=jr().update,BX=gS(),HX=ms(),{UserEventMsg:xX}=bn(),ii=Z();ii.initSync();var NS=require("path"),{JWTTokens:FX,JWTRSAKeys:qX,TOKEN_TYPE_ENUM:ld}=sL(),GX=ii.get(rn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ii.get(rn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kX=ii.get(rn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ii.get(rn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",_d="RS256",yS;cL.exports={createTokens:VX,validateOperationToken:YX,refreshOperationToken:$X,validateRefreshToken:aL};async function VX(e){if(bS.isEmpty(e)||typeof e!="object")throw cr(new Error,lr.INVALID_AUTH_OBJECT,ur.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.username))throw cr(new Error,lr.USERNAME_REQUIRED,ur.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.password))throw cr(new Error,lr.PASSWORD_REQUIRED,ur.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await wS.findAndValidateUser(e.username,e.password),!t)throw cr(new Error,lr.INVALID_CREDENTIALS,ur.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw cu.error(f),cr(new Error,lr.INVALID_CREDENTIALS,ur.UNAUTHORIZED,void 0,void 0,!0)}let r=await dd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await oL(i,r.private_key,r.passphrase),c=await uu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kX,algorithm:_d,subject:ld.REFRESH}),u=iL.hash(c),_=new BX(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await vX(_)}catch(f){cu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw cr(new Error,lr.REFRESH_TOKEN_SAVE_FAILED,ur.INTERNAL_SERVER_ERROR);return HX.signalUserChange(new xX(process.pid)),new FX(o,c)}a(VX,"createTokens");async function oL(e,t,r){return await uu.sign(e,{key:t,passphrase:r},{expiresIn:GX,algorithm:_d,subject:ld.OPERATION})}a(oL,"signOperationToken");async function dd(){if(yS===void 0)try{let e=NS.join(ii.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=NS.join(ii.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=NS.join(ii.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await OS.readFile(e)).toString(),s=(await OS.readFile(t)).toString(),i=(await OS.readFile(r)).toString();yS=new qX(i,s,n)}catch(e){throw cu.error(e),cr(new Error,lr.NO_ENCRYPTION_KEYS,ur.INTERNAL_SERVER_ERROR)}return yS}a(dd,"getJWTRSAKeys");async function $X(e){if(!e)throw cr(new Error,lr.INVALID_BODY,ur.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw cr(new Error,lr.REFRESH_TOKEN_REQUIRED,ur.BAD_REQUEST,void 0,void 0,!0);await aL(e.refresh_token);let t=await dd(),r=await uu.decode(e.refresh_token);return{operation_token:await oL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a($X,"refreshOperationToken");async function YX(e){try{let t=await dd(),r=await uu.verify(e,t.public_key,{algorithms:_d,subject:ld.OPERATION});return await wS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw cu.warn(t),t.name&&t.name==="TokenExpiredError"?cr(new Error,lr.TOKEN_EXPIRED,ur.FORBIDDEN):cr(new Error,lr.INVALID_TOKEN,ur.UNAUTHORIZED)}}a(YX,"validateOperationToken");async function aL(e){let t;try{let r=await dd(),n=await uu.verify(e,r.public_key,{algorithms:_d,subject:ld.REFRESH});t=await wS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw cu.warn(r),r.name&&r.name==="TokenExpiredError"?cr(new Error,lr.TOKEN_EXPIRED,ur.FORBIDDEN):cr(new Error,lr.INVALID_TOKEN,ur.UNAUTHORIZED)}if(!iL.validate(t.refresh_token,e))throw cr(new Error,lr.INVALID_TOKEN,ur.UNAUTHORIZED);return t}a(aL,"validateRefreshToken")});var IS=g((J_e,_L)=>{"use strict";var KX=tL(),sa=require("passport"),WX=require("passport-local").Strategy,QX=require("passport-http").BasicStrategy,zX=require("util"),JX=Zr(),lL=zX.callbackify(JX.findAndValidateUser),z_e=Or(),XX=M(),uL=lu();sa.use(new WX(function(e,t,r){lL(e,t,r)}));sa.use(new QX(function(e,t,r){lL(e,t,r)}));sa.serializeUser(function(e,t){t(null,e)});sa.deserializeUser(function(e,t){t(null,e)});function jX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":sa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===XX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):uL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:sa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(jX,"authorize");function ZX(e,t){let r=KX(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(ZX,"checkPermissions");_L.exports={authorize:jX,checkPermissions:ZX}});var ia=g((j_e,dL)=>{"use strict";var CS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};dL.exports={Node:CS,NodeSubscription:DS}});var EL=g((ede,fL)=>{"use strict";var ej=M().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=ej.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};fL.exports=LS});var _u=g((rde,hL)=>{"use strict";var MS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},US=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};hL.exports={RemotePayloadObject:MS,RemotePayloadSubscription:US}});var pL=g((sde,mL)=>{"use strict";var PS=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};mL.exports=PS});var gL=g((ude,TL)=>{"use strict";var tj=pL(),ode=lt(),SL=$e(),rj=Y(),{getSchemaPath:ade,getTransactionAuditStorePath:cde}=Ke(),{getDatabases:nj}=(be(),te(Fe));TL.exports=sj;async function sj(e){let t=new tj;try{let r=nj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await SL.environmentDataSize(schema_path,e.name),o=await SL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){rj.warn(`unable to stat table dbi due to ${r}`)}return t}a(sj,"lmdbGetTableSize")});var AL=g((_de,RL)=>{"use strict";var vS=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};RL.exports=vS});var oa=g((hde,yL)=>{"use strict";var ij=require("fs-extra"),oj=require("path"),Wt=require("systeminformation"),oi=Y(),aj=Rt(),BS=tt(),Ed=M(),cj=gL(),NL=vi(),{getThreadInfo:OL}=Ze(),KS=Z();KS.initSync();var uj=AL(),{openEnvironment:fde}=$e(),{getSchemaPath:Ede}=Ke(),{database:lj}=(be(),te(Fe)),fd;yL.exports={getHDBProcessInfo:qS,getNetworkInfo:kS,getDiskInfo:GS,getMemoryInfo:FS,getCPUInfo:xS,getTimeInfo:HS,getSystemInformation:VS,systemInformation:_j,getTableSize:$S,getMetrics:YS};function HS(){return Wt.time()}a(HS,"getTimeInfo");async function xS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Wt.cpu();l.cpu_speed=await Wt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...A}=await Wt.currentLoad();return A.cpus=[],T.forEach(b=>{let{raw_load:H,raw_load_idle:F,raw_load_irq:v,raw_load_nice:P,raw_load_system:z,raw_load_user:W,...Q}=b;A.cpus.push(Q)}),l.current_load=A,l}catch(e){return oi.error(`error in getCPUInfo: ${e}`),{}}}a(xS,"getCPUInfo");async function FS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Wt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return oi.error(`error in getMemoryInfo: ${e}`),{}}}a(FS,"getMemoryInfo");async function qS(){let e={core:[],clustering:[]};try{let t=await Wt.processes(),r;try{r=Number.parseInt(await ij.readFile(oj.join(KS.get(Ed.CONFIG_PARAMS.ROOTPATH),Ed.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ed.NODE_ERROR_CODES.ENOENT)oi.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return oi.error(`error in getHDBProcessInfo: ${t}`),e}}a(qS,"getHDBProcessInfo");async function GS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Wt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Wt.fsStats();return e.read_write=_,e.size=await Wt.fsSize(),e}catch(t){return oi.error(`error in getDiskInfo: ${t}`),e}}a(GS,"getDiskInfo");async function kS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Wt.networkInterfaceDefault(),e.latency=await Wt.inetChecksite("google.com"),(await Wt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Wt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return oi.error(`error in getNetworkInfo: ${t}`),e}}a(kS,"getNetworkInfo");async function VS(){if(fd!==void 0)return fd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Wt.osInfo();e=c;let u=await Wt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,fd=e,fd}catch(t){return oi.error(`error in getSystemInformation: ${t}`),e}}a(VS,"getSystemInformation");async function $S(){let e=[],t=await NL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await cj(n));return e}a($S,"getTableSize");async function YS(){let e=await NL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=lj({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){oi.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(YS,"getMetrics");async function bL(){if(KS.get(Ed.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await aj.getNATSReferences(),r=await t.streams.info(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name,BS.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(bL,"getNatsStreamInfo");async function _j(e){let t=new uj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VS(),t.time=HS(),t.cpu=await xS(),t.memory=await FS(),t.disk=await GS(),t.network=await kS(),t.harperdb_processes=await qS(),t.table_size=await $S(),t.metrics=await YS(),t.threads=await OL(),t.replication=await bL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await VS();break;case"time":t.time=HS();break;case"cpu":t.cpu=await xS();break;case"memory":t.memory=await FS();break;case"disk":t.disk=await GS();break;case"network":t.network=await kS();break;case"harperdb_processes":t.harperdb_processes=await qS();break;case"table_size":t.table_size=await $S();break;case"database_metrics":case"metrics":t.metrics=await YS();break;case"threads":t.threads=await OL();break;case"replication":t.replication=await bL();break;default:break}return t}a(_j,"systemInformation")});var md=g((pde,wL)=>{"use strict";wL.exports={version:dj,printVersion:fj};var hd=Qc();function dj(){if(hd)return hd.version}a(dj,"version");function fj(){hd&&console.log(`HarperDB Version ${hd.version}`)}a(fj,"printVersion")});var Rs=g((Rde,LL)=>{"use strict";var Ej=jr(),WS=J(),hj=require("util"),ro=M(),IL=Z();IL.initSync();var mj=IS(),CL=Xr(),{Node:Tde,NodeSubscription:gde}=ia(),pj=zo(),Sj=EL(),{RemotePayloadObject:Tj,RemotePayloadSubscription:gj}=_u(),{handleHDBError:Rj,hdb_errors:Aj}=ee(),{HTTP_STATUS_CODES:Oj,HDB_ERROR_MSGS:bj}=Aj,Nj=Kn(),yj=oa(),wj=md(),{getDatabases:Ij}=(be(),te(Fe)),Cj=hj.promisify(mj.authorize),Dj=CL.searchByHash,Lj=CL.searchByValue;LL.exports={authHeaderToUser:Mj,isEmpty:Uj,getNodeRecord:Pj,upsertNodeRecord:vj,buildNodePayloads:Bj,checkClusteringEnabled:Hj,getAllNodeRecords:xj,getSystemInfo:Fj,reverseSubscription:DL};async function Mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cj(t,null),e}a(Mj,"authHeaderToUser");function Uj(e){return e==null}a(Uj,"isEmpty");async function Pj(e){let t=new pj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Dj(t)}a(Pj,"getNodeRecord");async function vj(e){let t=new Sj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ej.upsert(t)}a(vj,"upsertNodeRecord");function DL(e){if(WS.isEmpty(e.subscribe)||WS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(DL,"reverseSubscription");function Bj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=WS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=DL(c),E=Ij()[u]?.[_],h=new gj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Tj(r,t,s,n)}a(Bj,"buildNodePayloads");function Hj(){if(!IL.get(ro.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Rj(new Error,bj.CLUSTERING_NOT_ENABLED,Oj.BAD_REQUEST,void 0,void 0,!0)}a(Hj,"checkClusteringEnabled");async function xj(){let e=new Nj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Lj(e))}a(xj,"getAllNodeRecords");async function Fj(){let e=await yj.getSystemInformation();return{hdb_version:wj.version(),node_version:e.node_version,platform:e.platform}}a(Fj,"getSystemInfo")});var QS=g((Ode,FL)=>{"use strict";var pd=Rt(),ML=J(),UL=tt(),PL=M(),Sd=Y(),vL=sd(),qj=Ep(),{RemotePayloadObject:Gj}=_u(),{handleHDBError:BL,hdb_errors:kj}=ee(),{HTTP_STATUS_CODES:HL}=kj,{NodeSubscription:xL}=ia();FL.exports=Vj;async function Vj(e,t){let r;try{r=await pd.request(`${t}.${UL.REQUEST_SUFFIX}`,new Gj(PL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Sd.trace("Response from remote describe all request:",r)}catch(o){Sd.error(`addNode received error from describe all request to remote node: ${o}`);let c=pd.requestErrorHandler(o,"add_node",t);throw BL(new Error,c,HL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw BL(new Error,o,HL.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===PL.SYSTEM_SCHEMA_NAME){await pd.createLocalTableStream(u,c);let h=new xL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=ML.doesSchemaExist(u),l=n[u]!==void 0,d=c?ML.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Sd.trace(`addNode creating schema: ${u}`),await vL.createSchema({operation:"create_schema",schema:u})),!d&&f){Sd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new qj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await vL.createTable(h)}await pd.createLocalTableStream(u,c);let E=new xL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Vj,"reviewSubscriptions")});var Rd=g((Nde,kL)=>{"use strict";var{handleHDBError:Td,hdb_errors:$j}=ee(),{HTTP_STATUS_CODES:gd}=$j,{addUpdateNodeValidator:Yj}=ud(),du=Y(),GL=M(),qL=tt(),Kj=J(),zS=Rt(),fu=Rs(),Wj=Z(),Qj=QS(),{Node:zj,NodeSubscription:Jj}=ia(),{broadcast:Xj}=Ze(),jj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",eZ=Wj.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);kL.exports=tZ;async function tZ(e,t=!1){du.trace("addNode called with:",e),fu.checkClusteringEnabled();let r=Yj(e);if(r)throw Td(r,r.message,gd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await fu.getNodeRecord(n);if(!Kj.isEmptyOrZeroLength(d))throw Td(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,gd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Qj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=jj,o;let c=fu.buildNodePayloads(s,eZ,GL.OPERATIONS_ENUM.ADD_NODE,await fu.getSystemInfo());du.trace("addNode sending remote payload:",c);let u;try{u=await zS.request(`${n}.${qL.REQUEST_SUFFIX}`,c)}catch(d){du.error(`addNode received error from request: ${d}`);let f=zS.requestErrorHandler(d,"add_node",n);throw Td(new Error,f,gd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Td(new Error,d,gd.INTERNAL_SERVER_ERROR,"error",d)}du.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];du.trace("Add node updating work stream for node:",n,"subscriptions:",E),await zS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Jj(E.schema,E.table,E.publish,E.subscribe))}let l=new zj(n,_,u.system_info);return await fu.upsertNodeRecord(l),Xj({type:"nats_update"}),i.length>0?o.message=Zj:o.message=`Successfully added '${n}' to manifest`,o}a(tZ,"addNode")});var ZS=g((Ide,YL)=>{"use strict";var{handleHDBError:JS,hdb_errors:rZ}=ee(),{HTTP_STATUS_CODES:XS}=rZ,{addUpdateNodeValidator:nZ}=ud(),Eu=Y(),$L=M(),VL=tt(),wde=J(),jS=Rt(),hu=Rs(),sZ=Z(),{cloneDeep:iZ}=require("lodash"),oZ=QS(),{Node:aZ,NodeSubscription:cZ}=ia(),{broadcast:uZ}=Ze(),lZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",_Z="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dZ=sZ.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME);YL.exports=fZ;async function fZ(e){Eu.trace("updateNode called with:",e),hu.checkClusteringEnabled();let t=nZ(e);if(t)throw JS(t,t.message,XS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await hu.getNodeRecord(r);s.length>0&&(n=iZ(s));let{added:i,skipped:o}=await oZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=lZ,c;let u=hu.buildNodePayloads(i,dZ,$L.OPERATIONS_ENUM.UPDATE_NODE,await hu.getSystemInfo());Eu.trace("updateNode sending remote payload:",u);let _;try{_=await jS.request(`${r}.${VL.REQUEST_SUFFIX}`,u)}catch(l){Eu.error(`updateNode received error from request: ${l}`);let d=jS.requestErrorHandler(l,"update_node",r);throw JS(new Error,d,XS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===VL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw JS(new Error,l,XS.INTERNAL_SERVER_ERROR,"error",l)}Eu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Eu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await jS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new aZ(r,[],_.system_info)]),await EZ(n[0],i,_.system_info),o.length>0?c.message=_Z:c.message=`Successfully updated '${r}'`,c}a(fZ,"updateNode");async function EZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new cZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await hu.upsertNodeRecord(n),uZ({type:"nats_update"})}a(EZ,"updateNodeTable")});var JL=g((Dde,zL)=>{"use strict";var QL=require("joi"),{string:KL}=QL.types(),hZ=Xe(),WL=M(),mZ=Z(),pZ=tt();zL.exports=SZ;function SZ(e){let t=KL.invalid(mZ.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(pZ.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=QL.object({operation:KL.valid(WL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return hZ.validateBySchema(e,r)}a(SZ,"removeNodeValidator")});var Od=g((Mde,rM)=>{"use strict";var{handleHDBError:XL,hdb_errors:TZ}=ee(),{HTTP_STATUS_CODES:jL}=TZ,gZ=JL(),mu=Y(),ZL=Rs(),RZ=J(),Ad=M(),eM=tt(),tM=Rt(),AZ=Z(),{RemotePayloadObject:OZ}=_u(),{NodeSubscription:bZ}=ia(),NZ=qc(),yZ=qi(),{broadcast:wZ}=Ze(),IZ=AZ.get(Ad.CONFIG_PARAMS.CLUSTERING_NODENAME);rM.exports=CZ;async function CZ(e){mu.trace("removeNode called with:",e),ZL.checkClusteringEnabled();let t=gZ(e);if(t)throw XL(t,t.message,jL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await ZL.getNodeRecord(r);if(RZ.isEmptyOrZeroLength(n))throw XL(new Error,`Node '${r}' was not found.`,jL.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new OZ(Ad.OPERATIONS_ENUM.REMOVE_NODE,IZ,[]),i,o=!1;try{i=await tM.request(`${r}.${eM.REQUEST_SUFFIX}`,s),mu.trace("Remove node reply from remote node:",r,i)}catch(u){mu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];mu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new bZ(l.schema,l.table,!1,!1);await tM.updateWorkStream(d,r)}let c=new NZ(Ad.SYSTEM_SCHEMA_NAME,Ad.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await yZ.deleteRecord(c),wZ({type:"nats_update"}),i?.status===eM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(mu.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(CZ,"removeNode")});var iM=g((Pde,sM)=>{"use strict";var nM=require("joi"),{string:DZ,array:LZ}=nM.types(),MZ=Xe(),UZ=ud();sM.exports=PZ;function PZ(e){let t=nM.object({operation:DZ.valid("configure_cluster").required(),connections:LZ.items(UZ.validation_schema).required()});return MZ.validateBySchema(e,t)}a(PZ,"configureClusterValidator")});var eT=g((Bde,lM)=>{"use strict";var vZ=M(),bd=Y(),BZ=J(),HZ=Od(),xZ=Rd(),oM=Rs(),FZ=iM(),{handleHDBError:aM,hdb_errors:qZ}=ee(),{HTTP_STATUS_CODES:cM}=qZ,GZ="Configure cluster complete.",kZ="Failed to configure the cluster. Check the logs for more details.",VZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";lM.exports=$Z;async function $Z(e){bd.trace("configure cluster called with:",e),oM.checkClusteringEnabled();let t=FZ(e);if(t)throw aM(t,t.message,cM.BAD_REQUEST,void 0,void 0,!0);let r=await oM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(uM(HZ,{operation:vZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);bd.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(uM(xZ,E,E.node_name))}let c=await Promise.allSettled(i);bd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(bd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(BZ.isEmptyOrZeroLength(u))return{message:GZ,connections:_};if(l)return{message:VZ,failed_nodes:u,connections:_};throw aM(new Error,kZ,cM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a($Z,"configureCluster");async function uM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(uM,"functionWrapper")});var dM=g((xde,_M)=>{"use strict";var Nd=require("joi"),YZ=Xe(),{validateSchemaExists:KZ,validateTableExists:WZ,validateSchemaName:QZ}=kn(),zZ=Nd.object({operation:Nd.string().valid("purge_stream"),schema:Nd.string().custom(KZ).custom(QZ).required(),table:Nd.string().custom(WZ).required()});function JZ(e){return YZ.validateBySchema(e,zZ)}a(JZ,"purgeStreamValidator");_M.exports=JZ});var tT=g((qde,fM)=>{"use strict";var{handleHDBError:XZ,hdb_errors:jZ}=ee(),{HTTP_STATUS_CODES:ZZ}=jZ,e5=dM(),t5=Rt(),r5=Rs();fM.exports=n5;async function n5(e){if(e.purge_ingest!==!0){let s=e5(e);if(s)throw XZ(s,s.message,ZZ.BAD_REQUEST,void 0,void 0,!0)}r5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await t5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(n5,"purgeStream")});var sT=g((kde,TM)=>{"use strict";var nT=Rs(),s5=Rt(),mM=Z(),yd=M(),no=tt(),i5=J(),rT=Y(),{RemotePayloadObject:o5}=_u(),{ErrorCode:EM}=require("nats"),hM=mM.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED),pM=mM.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);TM.exports={clusterStatus:a5,buildNodeStatus:SM};async function a5(){let e={node_name:pM,is_enabled:hM,connections:[]};if(!hM)return e;let t=await nT.getAllNodeRecords();if(i5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(SM(t[n],e.connections));return await Promise.allSettled(r),e}a(a5,"clusterStatus");async function SM(e,t){let r=e.name,n=new o5(yd.OPERATIONS_ENUM.CLUSTER_STATUS,pM,void 0,await nT.getSystemInfo()),s,i,o=no.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await s5.request(no.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===no.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=no.CLUSTER_STATUS_STATUSES.CLOSED,rT.error(`Error getting node status from ${r} `,s))}catch(u){rT.warn(`Error getting node status from ${r}`,u),u.code===EM.NoResponders?o=no.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===EM.Timeout?o=no.CLUSTER_STATUS_STATUSES.TIMEOUT:o=no.CLUSTER_STATUS_STATUSES.CLOSED}let c=new c5(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==yd.PRE_4_0_0_VERSION&&await nT.upsertNodeRecord(u)}catch(u){rT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(SM,"buildNodeStatus");function c5(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(c5,"NodeStatusObject")});var oT=g(($de,gM)=>{"use strict";var{handleHDBError:u5,hdb_errors:l5}=ee(),{HTTP_STATUS_CODES:_5}=l5,d5=Rt(),f5=Rs(),iT=J(),wd=require("joi"),E5=Xe(),h5=2e3,m5=wd.object({timeout:wd.number().min(1),connected_nodes:wd.boolean(),routes:wd.boolean()});gM.exports=p5;async function p5(e){f5.checkClusteringEnabled();let t=E5.validateBySchema(e,m5);if(t)throw u5(t,t.message,_5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||iT.autoCastBoolean(n),o=s===void 0||iT.autoCastBoolean(s),c={nodes:[]},u=await d5.getServerList(r??h5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:iT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(p5,"clusterNetwork")});var bM=g((Kde,OM)=>{"use strict";var aT=require("joi"),RM=Xe(),{route_constraints:AM}=lh();OM.exports={setRoutesValidator:S5,deleteRoutesValidator:T5};function S5(e){let t=aT.object({server:aT.valid("hub","leaf").required(),routes:AM.required()});return RM.validateBySchema(e,t)}a(S5,"setRoutesValidator");function T5(e){let t=aT.object({routes:AM.required()});return RM.validateBySchema(e,t)}a(T5,"deleteRoutesValidator")});var uT=g((Qde,IM)=>{"use strict";var so=wr(),cT=J(),Id=M(),NM=bM(),{handleHDBError:yM,hdb_errors:g5}=ee(),{HTTP_STATUS_CODES:wM}=g5,R5="cluster routes successfully set",A5="cluster routes successfully deleted";IM.exports={setRoutes:O5,getRoutes:b5,deleteRoutes:N5};function O5(e){let t=NM.setRoutesValidator(e);if(t)throw yM(t,t.message,wM.BAD_REQUEST,void 0,void 0,!0);let r=so.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=cT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:R5,set:o,skipped:i}}a(O5,"setRoutes");function b5(){let e=so.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(b5,"getRoutes");function N5(e){let t=NM.deleteRoutesValidator(e);if(t)throw yM(t,t.message,wM.BAD_REQUEST,void 0,void 0,!0);let r=so.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=cT.isEmptyOrZeroLength(n)?null:n,so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=cT.isEmptyOrZeroLength(s)?null:s,so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:A5,deleted:i,skipped:o}}a(N5,"deleteRoutes")});var DM=g((Jde,CM)=>{"use strict";var pu=require("alasql"),io=require("recursive-iterator"),Cn=Y(),y5=J(),Su=M(),lT=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,I5(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(s=>Su.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Su.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Su.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=w5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Su.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new pu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function w5(e){return e.filter(t=>t[Su.PERMS_CRUD_ENUM.READ])}a(w5,"filterReadRestrictedAttrs");function I5(e,t,r,n,s){C5(e,t,r,n,s)}a(I5,"interpretAST");function Tu(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Tu,"addSchemaTableToMap");function C5(e,t,r,n,s){if(!e){Cn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof pu.yy.Insert?U5(e,t,r):e instanceof pu.yy.Select?D5(e,t,r,n,s):e instanceof pu.yy.Update?L5(e,t,r):e instanceof pu.yy.Delete?M5(e,t,r):Cn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(C5,"getRecordAttributesAST");function D5(e,t,r,n,s){if(!e){Cn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(y5.isEmptyOrZeroLength(i)){Cn.error("No schema specified");return}e.from.forEach(c=>{Tu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Tu(c.table,t,r,n,s)});let o=new io(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Cn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new io(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Cn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new io(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Cn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new io(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Cn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(D5,"getSelectAttributes");function L5(e,t,r){if(!e){Cn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new io(e.columns),s=e.table.databaseid;Tu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(L5,"getUpdateAttributes");function M5(e,t,r){if(!e){Cn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new io(e.where),s=e.table.databaseid;Tu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(M5,"getDeleteAttributes");function U5(e,t,r){if(!e){Cn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new io(e.columns),s=e.into.databaseid;Tu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.into.tableid,s,i.columnid,t,r)}a(U5,"getInsertAttributes");function _T(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(_T,"pushAttribute");CM.exports=lT});var ET=g((jde,PM)=>{var Cd=Gi(),LM=require("chalk"),Hr=Y(),MM=require("prompt"),{promisify:P5}=require("util"),dT=M(),v5=require("fs-extra"),B5=require("path"),H5=J(),x5=md(),UM=Z();UM.initSync();var F5=require("moment"),q5=P5(MM.get),G5=B5.join(UM.getHdbBasePath(),dT.LICENSE_KEY_DIR_NAME,dT.LICENSE_FILE_NAME,dT.LICENSE_FILE_NAME);PM.exports={getFingerprint:V5,setLicense:k5,parseLicense:fT,register:$5,getRegistrationInfo:K5};async function k5(e){if(e&&e.key&&e.company){try{Hr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Hr.error(r),Hr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(k5,"setLicense");async function V5(){let e={};try{e=await Cd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Hr.error(r),Hr.error(t),new Error(r)}return e}a(V5,"getFingerprint");async function fT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Hr.info("Validating license input...");let r=Cd.validateLicense(e,t);if(Hr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Hr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Hr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Hr.info("writing license to disk"),await v5.writeFile(G5,JSON.stringify({license_key:e,company:t}))}catch(n){throw Hr.error("Failed to write License"),n}return"Registration successful."}a(fT,"parseLicense");async function $5(){let e=await Y5();return fT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a($5,"register");async function Y5(){let e=await Cd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{MM.start()}catch(n){Hr.error(n)}let r;try{r=await q5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Y5,"promptForRegistration");async function K5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Cd.getLicense()}catch(r){throw Hr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(H5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=x5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=F5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(K5,"getRegistrationInfo")});var BM=g((efe,vM)=>{"use strict";var W5=tt(),hT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+W5.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};vM.exports=hT});var FM=g((rfe,xM)=>{"use strict";var HM=tt(),mT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+HM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+HM.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,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"}};xM.exports=mT});var GM=g((sfe,qM)=>{"use strict";var pT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};qM.exports=pT});var VM=g((ofe,kM)=>{"use strict";var Q5=tt(),ST=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Q5.SERVER_SUFFIX.ADMIN,this.password=r}};kM.exports=ST});var RT=g((cfe,KM)=>{"use strict";var aa=require("path"),Md=require("fs-extra"),z5=BM(),J5=FM(),X5=GM(),j5=VM(),TT=Zr(),ua=J(),_r=wr(),Ld=M(),gu=tt(),{CONFIG_PARAMS:ut}=Ld,Ru=Y(),Au=Z(),$M=hs(),gT=Rt(),ca="clustering",Z5=1e4,YM=5;KM.exports={generateNatsConfig:t8,removeNatsConfig:r8,getHubConfigPath:e8};function e8(){let e=Au.get(ut.ROOTPATH);return aa.join(e,ca,gu.NATS_CONFIG_FILES.HUB_SERVER)}a(e8,"getHubConfigPath");async function t8(e=!1,t=void 0){Au.initSync();let r=Au.get(ut.ROOTPATH),n=aa.join(r,ca,gu.PID_FILES.HUB),s=aa.join(r,ca,gu.PID_FILES.LEAF),i=_r.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=aa.join(r,ca,gu.NATS_CONFIG_FILES.HUB_SERVER),c=aa.join(r,ca,gu.NATS_CONFIG_FILES.LEAF_SERVER),u=_r.getConfigFromFile(ut.CLUSTERING_TLS_CERTIFICATE),_=_r.getConfigFromFile(ut.CLUSTERING_TLS_PRIVATEKEY),l=_r.getConfigFromFile(ut.CLUSTERING_TLS_CERT_AUTH),d=_r.getConfigFromFile(ut.CLUSTERING_TLS_INSECURE),f=_r.getConfigFromFile(ut.CLUSTERING_TLS_VERIFY),E=_r.getConfigFromFile(ut.CLUSTERING_NODENAME),h=_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await gT.checkNATSServerInstalled()||Ud("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await TT.listUsers(),S=_r.getConfigFromFile(ut.CLUSTERING_USER),T=await TT.getClusterUser();(ua.isEmpty(T)||T.active!==!0)&&Ud(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Dd(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),await Dd(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[Q,se]of p.entries())se.role.role===Ld.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(A.push(new j5(se.username,$M.decrypt(se.hash))),b.push(new X5(se.username,$M.decrypt(se.hash))));let H=[],{hub_routes:F}=_r.getClusteringRoutes();if(!ua.isEmptyOrZeroLength(F))for(let Q of F)H.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let v=new z5(_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NAME),_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),H,A,b);l==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=ua.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Md.writeJson(o,v),Ru.trace(`Hub server config written to ${o}`));let P=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new J5(_r.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[z],A,b,u,_,l,d);l==null&&delete W.tls.ca_file,(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Md.writeJson(c,W),Ru.trace(`Leaf server config written to ${c}`))}a(t8,"generateNatsConfig");async function Dd(e){let t=Au.get(e);return ua.isEmpty(t)&&Ud(`port undefined for '${e}'`),await ua.isPortTaken(t)&&Ud(`'${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(Dd,"isPortAvailable");function Ud(e){let t=`Error generating clustering config: ${e}`;Ru.error(t),console.error(t),process.exit(1)}a(Ud,"generateNatsConfigError");async function r8(e){let{port:t,config_file:r}=gT.getServerConfig(e),{username:n,decrypt_hash:s}=await TT.getClusterUser(),i=0,o=2e3;for(;i<YM;){try{let _=await gT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Ru.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=YM)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await ua.async_set_timeout(o*(i*2))}let c="0".repeat(Z5),u=aa.join(Au.get(ut.ROOTPATH),ca,r);await Md.writeFile(u,c),await Md.remove(u),Ru.notify(e,"started.")}a(r8,"removeNatsConfig")});var Hd=g((lfe,ZM)=>{"use strict";var n8=require("minimist"),{isMainThread:bT,parentPort:zM}=require("worker_threads"),rt=M(),{PROCESS_DESCRIPTORS_VALIDATE:Ou}=rt,Jn=Y(),NT=J(),Pd=RT(),la=Rt(),AT=tt(),JM=wr(),Xn=wT(),WM=oa(),s8=ZE(),{restartWorkers:vd,onMessageByType:i8}=Ze(),{handleHDBError:o8,hdb_errors:a8}=ee(),{HTTP_STATUS_CODES:c8}=a8,Bd=Z();Bd.initSync();var bu=`Restarting HarperDB. This may take up to ${rt.RESTART_TIMEOUT_MS/1e3} seconds.`,u8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",QM="Clustering is not enabled so cannot be restarted",l8="Invalid service",_a,nn;ZM.exports={restart:XM,restartService:yT};bT&&i8(rt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?yT({service:e.workerType}):XM({operation:"restart"})});async function XM(e){nn=Object.keys(e).length===0,_a=await Xn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR);let t=n8(process.argv);if(t.service){await yT(t);return}if(nn&&!_a){console.error(u8);return}if(nn&&console.log(bu),_a){Xn.enterPM2Mode(),Jn.notify(bu);let r=s8(Object.keys(rt.CONFIG_PARAM_MAP),!0);return NT.isEmptyOrZeroLength(Object.keys(r))||JM.updateConfigValue(void 0,void 0,r,!0,!0),d8(),bu}return bT?(Jn.notify(bu),setTimeout(()=>{vd()},50)):zM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART}),bu}a(XM,"restart");async function yT(e){let{service:t}=e;if(rt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw o8(new Error,l8,c8.BAD_REQUEST,void 0,void 0,!0);if(_a=await Xn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR),!bT)return zM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Ou.clustering:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=QM;break}nn&&console.log("Restarting clustering"),Jn.notify("Restarting clustering"),await jM();break;case Ou.clustering_config:case Ou["clustering config"]:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=QM;break}nn&&console.log("Restarting clustering_config"),Jn.notify("Restarting clustering_config"),await Xn.reloadClustering();break;case"custom_functions":case"custom functions":case Ou.harperdb:case Ou.http_workers:if(nn&&!_a){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}nn&&console.log("Restarting http_workers"),Jn.notify("Restarting http_workers"),nn?await Xn.restart(rt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Jn.error(r),nn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(yT,"restartService");async function _8(){await la.publishToStream(`${AT.SUBJECT_PREFIXES.TXN}.${AT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AT.WORK_QUEUE_CONSUMER_NAMES.stream_name,la.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_8,"postDummyNatsMsg");async function d8(){await jM(),await Xn.restart(rt.HDB_PROC_DESCRIPTOR),await NT.async_set_timeout(2e3),Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OT(),nn&&(await la.closeConnection(),process.exit(0))}a(d8,"restartPM2Mode");async function jM(){if(!JM.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await WM.getHDBProcessInfo()).clustering.length===0)Jn.trace("Clustering not running, restart will start clustering services"),await Pd.generateNatsConfig(!0),await Xn.startClusteringProcesses(),await Xn.startClusteringThreads(),await OT(),nn&&await la.closeConnection();else{await _8(),await Pd.generateNatsConfig(!0),_a?(Jn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Xn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Xn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await WM.getHDBProcessInfo()).clustering.forEach(s=>{Jn.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await NT.async_set_timeout(3e3),await OT(),await la.updateLocalStreams(),nn&&await la.closeConnection(),Jn.trace("Restart clustering restarting ingest and reply service threads");let t=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(jM,"restartClustering");async function OT(){await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OT,"removeNatsConfig")});var lU=g((ffe,uU)=>{"use strict";var dfe=require("lodash"),dr=M(),{handleHDBError:eU,hdb_errors:f8}=ee(),{HDB_ERROR_MSGS:E8,HTTP_STATUS_CODES:h8}=f8,IT=Y();uU.exports={getRolePermissions:p8};var oo=Object.create(null),m8=a(e=>({key:e,perms:{}}),"perms_template_obj"),sU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),iU=a((e=!1,t=!1,r=!1,n=!1)=>({[dr.PERMS_CRUD_ENUM.READ]:e,[dr.PERMS_CRUD_ENUM.INSERT]:t,[dr.PERMS_CRUD_ENUM.UPDATE]:r,[dr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),CT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...iU(t,r,n,s)}),"table_perms_template"),tU=a((e,t=iU())=>({attribute_name:e,describe:cU(t),[Nu]:t[Nu],[DT]:t[DT],[LT]:t[LT]}),"attr_perms_template"),rU=a((e,t=!1)=>({attribute_name:e,describe:t,[Nu]:t}),"timestamp_attr_perms_template"),{READ:Nu,INSERT:DT,UPDATE:LT}=dr.PERMS_CRUD_ENUM,oU=Object.values(dr.PERMS_CRUD_ENUM),aU=[Nu,DT,LT];function p8(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[dr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(oo[t]&&oo[t].key===n)return oo[t].perms;let s=S8(e,r);return oo[t]?oo[t].key=n:oo[t]=m8(n),oo[t].perms=s,s}catch(r){if(!e[dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<dr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw IT.error(n),IT.debug(r),eU(new Error,E8.OUTDATED_PERMS_TRANSLATION_ERROR,h8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw IT.error(n),eU(new Error)}}}a(p8,"getRolePermissions");function S8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[dr.SYSTEM_SCHEMA_NAME]=n[dr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=T8(t[i]);return}r[i]=sU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=g8(c,u);r[i].describe||oU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=CT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=CT()})}),r}a(S8,"translateRolePermissions");function T8(e){let t=sU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CT(!0,!0,!0,!0,!0)}),t}a(T8,"createStructureUserPermissions");function g8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return dr.TIME_STAMP_NAMES.includes(d)&&(f=rU(d,l[Nu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=tU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=cU(l),s.attribute_permissions.push(l),c||R8(l,u)}else if(_!==o){let l;dr.TIME_STAMP_NAMES.includes(_)?l=rU(_):l=tU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=nU(s),s}else return e.describe=nU(e),e}a(g8,"getTableAttrPerms");function nU(e){return oU.filter(t=>e[t]).length>0}a(nU,"getSchemaTableDescribePerm");function cU(e){return aU.filter(t=>e[t]).length>0}a(cU,"getAttributeDescribePerm");function R8(e,t){aU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(R8,"checkForHashPerms")});var _U={};Ve(_U,{Resources:()=>xd,keyArrayToString:()=>da,resetResources:()=>A8,resources:()=>ai});function A8(){return ai=new xd}function da(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var xd,ai,yu=Oe(()=>{Wi();xd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return We(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(A8,"resetResources");a(da,"keyArrayToString")});var dU={};Ve(dU,{Headers:()=>ci});var ci,Fd=Oe(()=>{ci=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var wu={};Ve(wu,{authentication:()=>gU,bypassAuth:()=>C8,login:()=>L8,logout:()=>M8,start:()=>D8});function C8(){TU=!0}async function gU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?y8?N8:[]:b8?O8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ci([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return qd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),qd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(qd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await EU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new kd.AuthAuditLog(E,h,Ft.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ft.AUTH_AUDIT_STATUS.SUCCESS?fU.notify(S):fU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await je.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=ao.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await je.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Gd.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,Gd.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return I8&&(ao.get(h)||(ao.set(h,h),l(p,Ft.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ui({error:T.message},e)})}ao.set(n,d),w8&&l(d.username,Ft.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await je.getUser(_.user,null,e):(TU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,mU.getSuperUser)());qd&&(e.session.update=function(E){if(!u){u=(0,pU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,EU.put(E)},e.login=async function(E,h){e.user=await je.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&ai.loginPath?(f.status=302,f.headers.set("Location",ai.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new ci);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function D8({server:e,port:t}){e.request(gU,{port:t||"all"}),hU||(hU=!0,setInterval(()=>{ao=new Map},sn.get(Ft.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),SU.user.addListener(()=>{ao=new Map}))}async function L8(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function M8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var mU,Gd,pU,sn,Ft,kd,SU,fU,O8,b8,N8,y8,EU,qd,TU,w8,I8,ao,hU,Vd=Oe(()=>{mU=B(Zr());Zt();yu();Gd=B(lu());be();pU=require("uuid"),sn=B(Z()),Ft=B(M()),kd=B(Y()),SU=B(Lc());Fd();fa();fU=(0,kd.loggerWithTag)("auth-event");sn.initSync();O8=sn.get(Ft.CONFIG_PARAMS.HTTP_CORSACCESSLIST),b8=sn.get(Ft.CONFIG_PARAMS.HTTP_CORS),N8=sn.get(Ft.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),y8=sn.get(Ft.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),EU=ot({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),qd=sn.get(Ft.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,TU=sn.get(Ft.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,w8=sn.get(Ft.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,I8=sn.get(Ft.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ao=new Map;je.onInvalidatedUser(()=>{ao=new Map});a(C8,"bypassAuth");a(gU,"authentication");a(D8,"start");a(L8,"login");a(M8,"logout")});var wU=g((bfe,yU)=>{"use strict";var we=require("joi"),RU=require("fs-extra"),AU=require("path"),Os=Xe(),OU=Z(),bU=M(),NU=Y(),{hdb_errors:U8}=ee(),{HDB_ERROR_MSGS:Qt}=U8,As=/^[a-zA-Z0-9-_]+$/;yU.exports={getDropCustomFunctionValidator:v8,setCustomFunctionValidator:B8,addComponentValidator:q8,dropCustomFunctionProjectValidator:G8,packageComponentValidator:k8,deployComponentValidator:V8,setComponentFileValidator:H8,getComponentFileValidator:F8,dropComponentFileValidator:x8};function $d(e,t,r){try{let n=OU.get(bU.CONFIG_PARAMS.COMPONENTSROOT),s=AU.join(n,t);return RU.existsSync(s)?e?t:r.message(Qt.PROJECT_EXISTS):e?r.message(Qt.NO_PROJECT):t}catch(n){return NU.error(n),r.message(Qt.VALIDATION_ERR)}}a($d,"checkProjectExists");function Iu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Iu,"checkFilePath");function P8(e,t,r,n){try{let s=OU.get(bU.CONFIG_PARAMS.COMPONENTSROOT),i=AU.join(s,e,t,r+".js");return RU.existsSync(i)?r:n.message(Qt.NO_FILE)}catch(s){return NU.error(s),n.message(Qt.VALIDATION_ERR)}}a(P8,"checkFileExists");function v8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(As).custom(P8.bind(null,e.project,e.type)).custom(Iu).required().messages({"string.pattern.base":Qt.BAD_FILE_NAME})});return Os.validateBySchema(e,t)}a(v8,"getDropCustomFunctionValidator");function B8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Iu).required(),function_content:we.string().required()});return Os.validateBySchema(e,t)}a(B8,"setCustomFunctionValidator");function H8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),file:we.string().custom(Iu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Os.validateBySchema(e,t)}a(H8,"setComponentFileValidator");function x8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),file:we.string().custom(Iu).optional()});return Os.validateBySchema(e,t)}a(x8,"dropComponentFileValidator");function F8(e){let t=we.object({project:we.string().required(),file:we.string().custom(Iu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Os.validateBySchema(e,t)}a(F8,"getComponentFileValidator");function q8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!1)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME})});return Os.validateBySchema(e,t)}a(q8,"addComponentValidator");function G8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME})});return Os.validateBySchema(e,t)}a(G8,"dropCustomFunctionProjectValidator");function k8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Os.validateBySchema(e,t)}a(k8,"packageComponentValidator");function V8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":Qt.BAD_PACKAGE}),package:we.string().optional()});return Os.validateBySchema(e,t)}a(V8,"deployComponentValidator")});var Qd=g((yfe,PU)=>{"use strict";var Yd=require("joi"),Kd=require("path"),IU=require("fs-extra"),{exec:$8}=require("child_process"),Y8=require("util"),CU=Y8.promisify($8),Cu=M(),{handleHDBError:Ea,hdb_errors:K8}=ee(),{HTTP_STATUS_CODES:ha}=K8,Du=Z(),W8=Xe(),ma=Y();Du.initSync();var MT=Du.get(Cu.CONFIG_PARAMS.COMPONENTSROOT),DU="npm install --omit=dev --json",Q8=`${DU} --dry-run`;PU.exports={installModules:j8,auditModules:Z8,installAllRootModules:z8,uninstallRootModule:J8,linkHarperdb:X8};async function z8(e=!1){await Wd(),await Lu(e?"npm install --ignore-scripts":"npm install",Du.get(Cu.CONFIG_PARAMS.ROOTPATH))}a(z8,"installAllRootModules");async function J8(e){await Lu(`npm uninstall ${e}`,Du.get(Cu.CONFIG_PARAMS.ROOTPATH))}a(J8,"uninstallRootModule");async function X8(){await Wd(),await Lu(`npm link ${Cu.PACKAGE_ROOT}`,Du.get(Cu.CONFIG_PARAMS.ROOTPATH))}a(X8,"linkHarperdb");async function Lu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await CU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
+ `,""))}return n&&!n.includes("Debugger listening")&&ma.error("Error running NPM command:",e,n),ma.trace(r,n),r?.replace(`
13
+ `,"")}a(Lu,"runCommand");async function j8(e){ma.info(`starting installModules for request: ${e}`);let t=UU(e);if(t)throw Ea(t,t.message,ha.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Q8:DU;await Wd(),await MU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Kd.join(MT,u),l,d=null;try{let{stdout:f,stderr:E}=await CU(s,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=bU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Ta.info(`finished installModules with response ${i}`),i}a(B8,"installModules");function bU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(bU,"parseNPMStdErr");async function H8(e){Ta.info(`starting auditModules for request: ${e}`);let t=yU(e);if(t)throw pa(t,t.message,Sa.BAD_REQUEST);let{projects:r}=e;await Jd(),await NU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=zd.join(LT,o);n[o]={npm_output:null,npm_error:null};try{let u=await vu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=bU(u.stderr)}}return Ta.info(`finished auditModules with response ${n}`),n}a(H8,"auditModules");async function Jd(){try{return await vu("npm -v"),!0}catch{throw pa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Sa.BAD_REQUEST,void 0,void 0,!0)}}a(Jd,"checkNPMInstalled");async function NU(e){if(!Array.isArray(e)||e.length===0)throw pa(new Error,"projects argument must be an array with at least 1 element",Sa.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=zd.join(LT,i.toString());if(!await RU.pathExists(o)){t.push(i);continue}let u=zd.join(o,"package.json");await RU.pathExists(u)||r.push(i)}if(t.length>0)throw pa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Sa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw pa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Sa.BAD_REQUEST,void 0,void 0,!0)}a(NU,"checkProjectPaths");function yU(e){let t=Qd.object({projects:Qd.array().min(1).items(Qd.string()).required(),dry_run:Qd.boolean().default(!1)});return D8.validateBySchema(e,t)}a(yU,"modulesValidator")});var MT=T((ife,MU)=>{"use strict";var ga=require("fs-extra"),DT=require("path"),jd=V(),wU=J(),Zd=M(),DU=j(),x8=Lr();MU.exports=F8;async function F8(){let e=q8(),t=DU.get(Zd.CONFIG_PARAMS.ROOTPATH),r=DT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Zd.PACKAGE_ROOT}},s=DT.join(t,"node_modules");await ga.ensureDir(s);let i,o=!0,c=!1;try{i=await ga.readJson(r)}catch(u){if(wU.isEmptyOrZeroLength(e))return;if(u.code!==Zd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!wU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await CU(_);n.dependencies[u]=l+_}if(!o){jd.notify("Installing components"),await LU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await CU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(jd.notify("Removing component",u),c=!0);c&&(jd.notify("Updating components."),await LU(r,n,i))}a(F8,"installComponents");function q8(){let e=x8.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(q8,"getComponentsConfig");async function CU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":DT.extname(e)||await ga.pathExists(e)?"file:":"github:"}a(CU,"getPkgPrefix");async function LU(e,t,r){jd.trace("npm installing components package.json",t),await ga.writeFile(e,JSON.stringify(t,null," "));try{await Xd().installAllRootModules(DU.get(Zd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await ga.writeFile(e,JSON.stringify(r,null," ")):await ga.unlink(e),n}}a(LU,"installPackages")});var vT=T((cfe,BU)=>{"use strict";var Fe=require("fs-extra"),UT=require("fast-glob"),pe=require("path"),PU=require("tar-fs"),afe=require("uuid").v4,PT=require("normalize-path"),rs=gU(),wt=V(),Ye=M(),Tt=j(),Bu=Lr(),G8=J(),{PACKAGE_ROOT:k8}=M(),{handleHDBError:Ht,hdb_errors:V8}=Z(),{basename:$8}=require("path"),Y8=MT(),vU=j(),K8=M(),{Readable:W8}=require("stream"),{isMainThread:Q8}=require("worker_threads"),{HDB_ERROR_MSGS:_o,HTTP_STATUS_CODES:xt}=V8,z8=pe.join(k8,"application-template"),UU=pe.join(Tt.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function J8(){wt.trace("getting custom api status");let e={};try{e={port:Tt.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ht(new Error,_o.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(J8,"customFunctionsStatus");function X8(){wt.trace("getting custom api endpoints");let e={},t=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{UT.sync(PT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:UT.sync(PT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:UT.sync(PT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ht(new Error,_o.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(X8,"getCustomFunctions");function j8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=rs.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=pe.join(r,n,s,i+".js");try{return Fe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,_o.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(j8,"getCustomFunction");function Z8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=rs.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Fe.outputFileSync(pe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ht(new Error,_o.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(Z8,"setCustomFunction");function e6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=rs.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Fe.unlinkSync(pe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ht(new Error,_o.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(e6,"dropCustomFunction");function t6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=pe.join(r,n);return Fe.mkdirSync(s,{recursive:!0}),Fe.copySync(z8,s),`Successfully added project: ${n}`}catch(s){throw Ht(new Error,_o.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,s)}}a(t6,"addComponent");function r6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tt.get(Ye.CONFIG_PARAMS.APPS);if(!G8.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return Bu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=pe.join(r,n);return Fe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Ht(new Error,_o.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(r6,"dropCustomFunctionProject");async function n6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;wt.trace("packaging component",n);let s;try{s=await Fe.realpath(pe.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await Fe.realpath(pe.join(Tt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ye.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Fe.ensureDir(UU);let i=pe.join(UU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(s,"node_modules"))}),PU.pack(s,o).pipe(Fe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Fe.readFileSync(i,{encoding:"base64"});return await Fe.remove(i),{project:n,payload:c}}a(n6,"packageComponent");async function s6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(wt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=pe.join(r,n),i="file:"+o,await Fe.ensureDir(o);let f=W8.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(PU.extract(o,{finish:h})).on("error",p)});let E=await Fe.readdir(o);E.length===1&&E[0]==="package"&&(await Fe.copy(pe.join(o,"package"),o),await Fe.remove(pe.join(o,"package")))}if(await Bu.addConfig(n,{package:i}),!s){await Y8();let f=vU.get(K8.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",n)}if(Q8)return;let c=new Map;c.isWorker=!0;let u=(tf(),ee(ef)),_;u.setErrorReporter(f=>_=f);let l=$8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return wt.info("Installed component"),`Successfully deployed: ${n}`}a(s6,"deployComponent");async function i6(){let e=Bu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Fe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=pe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Fe.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return wt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(pe.join(Tt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(tf(),ee(ef)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(i6,"getComponents");async function o6(e){let t=rs.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let n=Bu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(vU.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Fe.stat(pe.join(n,e.project,e.file));return{message:await Fe.readFile(pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ye.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(o6,"getComponentFile");async function a6(e){let t=rs.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=pe.join(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Fe.ensureFile(n),await Fe.outputFile(n,e.payload,r)):await Fe.ensureDir(n),"Successfully set component: "+e.file}a(a6,"setComponentFile");async function c6(e){let t=rs.dropComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,n=pe.join(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await Fe.pathExists(n)&&await Fe.remove(n),Bu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(c6,"dropComponent");BU.exports={customFunctionsStatus:J8,getCustomFunctions:X8,getCustomFunction:j8,setCustomFunction:Z8,dropCustomFunction:e6,addComponent:t6,dropCustomFunctionProject:r6,packageComponent:n6,deployComponent:s6,getComponents:i6,getComponentFile:o6,setComponentFile:a6,dropComponent:c6}});var BT=T((lfe,xU)=>{"use strict";var ns=require("joi"),HU=et();xU.exports={readTransactionLogValidator:u6,deleteTransactionLogsBeforeValidator:l6};function u6(e){let t=ns.object({schema:ns.string().required(),table:ns.string().required(),from:ns.date().timestamp(),to:ns.date().timestamp(),limit:ns.number().min(1)});return HU.validateBySchema(e,t)}a(u6,"readTransactionLogValidator");function l6(e){let t=ns.object({schema:ns.string().required(),table:ns.string().required(),timestamp:ns.date().timestamp().required()});return HU.validateBySchema(e,t)}a(l6,"deleteTransactionLogsBeforeValidator")});var nf=T((dfe,VU)=>{"use strict";var HT=M(),rf=It(),FU=J(),qU=j(),GU=gs(),{handleHDBError:Ra,hdb_errors:_6}=Z(),{HTTP_STATUS_CODES:Aa}=_6,{readTransactionLogValidator:d6,deleteTransactionLogsBeforeValidator:f6}=BT(),kU="This operation relies on clustering and cannot run with it disable.",E6="Logs successfully deleted from transaction log.",h6="All logs successfully deleted from transaction log.";VU.exports={readTransactionLog:m6,deleteTransactionLogsBefore:p6};async function*m6(e){let t=d6(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST,void 0,void 0,!0);if(!qU.get(HT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ra(new Error,kU,Aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=FU.checkSchemaTableExist(r,n);if(s)throw Ra(new Error,s,Aa.NOT_FOUND,void 0,void 0,!0);let i=GU.createNatsTableStreamName(r,n),o=await rf.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===HT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(m6,"readTransactionLog");async function p6(e){let t=f6(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST,void 0,void 0,!0);if(!qU.get(HT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ra(new Error,kU,Aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=FU.checkSchemaTableExist(r,n);if(i)throw Ra(new Error,i,Aa.NOT_FOUND,void 0,void 0,!0);let o=GU.createNatsTableStreamName(r,n),{jsm:c}=await rf.getNATSReferences(),u=await rf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=E6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=h6):d=(await rf.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(p6,"deleteTransactionLogsBefore")});var YU=T((Efe,$U)=>{"use strict";var xT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};$U.exports=xT});var WU=T((mfe,KU)=>{"use strict";var FT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};KU.exports=FT});var GT=T((Sfe,zU)=>{"use strict";var QU=YU(),S6=WU(),{HDB_ERROR_MSGS:T6}=Ir(),qT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=T6.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new QU(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new S6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new QU(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};zU.exports=qT});var cf=T((gfe,_P)=>{"use strict";var kT=tn(),sf=en(),ln=cd(),Fu=xi(),VT=Vi(),g6=rS(),R6=yL(),qu=rn(),of=_S(),Ct=V(),A6=ES(),O6=bd(),b6=XS(),N6=yd(),y6=jS(),I6=ZS(),w6=rT(),C6=sT(),$T=aT(),Cs=J(),L6=OM(),YT=dT(),jU=qd(),un=M(),ZU=nU(),D6=ua(),eP=Eu(),tP=(Kd(),ee(Du)),rP=Lr(),Gr=vT(),M6=require("alasql"),nP=nf(),sP=Xd(),iP=GT(),{handleHDBError:pr,hdb_errors:oP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Hu}=oP,q=new Map,aP="delete",fi="insert",Ls="read",fo="update",xu="describe",JU=Fu.describeSchema.name,XU=Fu.describeTable.name,cP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},U6="catchup",P6="handleGetJob",v6="handleGetJobsByStartDate",af={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},B6=[ln.createTable.name,ln.createAttribute.name,ln.dropTable.name,ln.dropAttribute.name],uP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},$=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};q.set(kT.insert.name,new $(!1,[fi]));q.set(kT.update.name,new $(!1,[fo]));q.set(kT.upsert.name,new $(!1,[fi,fo]));q.set(sf.searchByConditions.name,new $(!1,[Ls]));q.set(sf.searchByHash.name,new $(!1,[Ls]));q.set(sf.searchByValue.name,new $(!1,[Ls]));q.set(sf.search.name,new $(!1,[Ls]));q.set(ln.createSchema.name,new $(!0,[]));q.set(ln.createTable.name,new $(!0,[]));q.set(ln.createAttribute.name,new $(!1,[fi]));q.set(ln.dropSchema.name,new $(!0,[]));q.set(ln.dropTable.name,new $(!0,[]));q.set(ln.dropAttribute.name,new $(!0,[]));q.set(Fu.describeSchema.name,new $(!1,[Ls]));q.set(Fu.describeTable.name,new $(!1,[Ls]));q.set(VT.deleteRecord.name,new $(!1,[aP]));q.set(qu.addUser.name,new $(!0,[]));q.set(qu.alterUser.name,new $(!0,[]));q.set(qu.dropUser.name,new $(!0,[]));q.set(qu.listUsersExternal.name,new $(!0,[]));q.set(of.listRoles.name,new $(!0,[]));q.set(of.addRole.name,new $(!0,[]));q.set(of.alterRole.name,new $(!0,[]));q.set(of.dropRole.name,new $(!0,[]));q.set(A6.name,new $(!0,[]));q.set(O6.name,new $(!0,[]));q.set(b6.name,new $(!0,[]));q.set(N6.name,new $(!0,[]));q.set(y6.name,new $(!0,[]));q.set(I6.name,new $(!0,[]));q.set($T.setRoutes.name,new $(!0,[]));q.set($T.getRoutes.name,new $(!0,[]));q.set($T.deleteRoutes.name,new $(!0,[]));q.set(rP.setConfiguration.name,new $(!0,[]));q.set(w6.clusterStatus.name,new $(!0,[]));q.set(C6.name,new $(!0,[]));q.set(YT.getFingerprint.name,new $(!0,[]));q.set(YT.setLicense.name,new $(!0,[]));q.set(VT.deleteFilesBefore.name,new $(!0,[]));q.set(VT.deleteAuditLogsBefore.name,new $(!0,[]));q.set(jU.restart.name,new $(!0,[]));q.set(jU.restartService.name,new $(!0,[]));q.set(g6.name,new $(!0,[]));q.set(R6.name,new $(!0,[Ls]));q.set(D6.systemInformation.name,new $(!0,[]));q.set(rP.getConfiguration.name,new $(!0,[]));q.set(nP.readTransactionLog.name,new $(!0,[]));q.set(nP.deleteTransactionLogsBefore.name,new $(!0,[]));q.set(sP.installModules.name,new $(!0,[]));q.set(sP.auditModules.name,new $(!0,[]));q.set(eP.createTokens.name,new $(!1,[]));q.set(eP.refreshOperationToken.name,new $(!1,[]));q.set(tP.login.name,new $(!1,[]));q.set(tP.logout.name,new $(!1,[]));q.set(Gr.customFunctionsStatus.name,new $(!0,[]));q.set(Gr.getCustomFunctions.name,new $(!0,[]));q.set(Gr.getComponents.name,new $(!0,[]));q.set(Gr.getComponentFile.name,new $(!0,[]));q.set(Gr.setComponentFile.name,new $(!0,[]));q.set(Gr.dropComponent.name,new $(!0,[]));q.set(Gr.getCustomFunction.name,new $(!0,[]));q.set(Gr.setCustomFunction.name,new $(!0,[]));q.set(Gr.dropCustomFunction.name,new $(!0,[]));q.set(Gr.addComponent.name,new $(!0,[]));q.set(Gr.dropCustomFunctionProject.name,new $(!0,[]));q.set(Gr.packageComponent.name,new $(!0,[]));q.set(Gr.deployComponent.name,new $(!0,[]));q.set(YT.getRegistrationInfo.name,new $(!1,[]));q.set(qu.userInfo.name,new $(!1,[]));q.set(Fu.describeAll.name,new $(!1,[]));q.set(P6,new $(!1,[]));q.set(v6,new $(!0,[]));q.set(U6,new $(!0,[]));q.set(af.CSV_DATA_LOAD,new $(!1,[fi,fo]));q.set(af.CSV_URL_LOAD,new $(!1,[fi,fo]));q.set(af.CSV_FILE_LOAD,new $(!1,[fi,fo]));q.set(af.IMPORT_FROM_S3,new $(!1,[fi,fo]));q.set(uP.EXPORT_TO_S3,new $(!0,[]));q.set(uP.EXPORT_LOCAL,new $(!0,[]));q.set(un.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[aP]));q.set(un.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Ls]));q.set(un.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[fi]));q.set(un.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[fo]));_P.exports={verifyPerms:x6,verifyPermsAst:H6,verifyBulkLoadAttributePerms:q6};function H6(e,t,r){if(Cs.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),pr(new Error);if(Cs.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),pr(new Error);if(Cs.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),pr(new Error);try{let n=new iP,s=new L6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ct.info("No schemas defined in verifyPermsAst(), will not continue."),pr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&cP[r])throw pr(new Error,Vt.DROP_SYSTEM,Hu.FORBIDDEN);if(c&&!u)return null;let _=ZU.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof M6.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=lP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=WT(t.role.permission,f,d[E]);KT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw pr(n)}}a(H6,"verifyPermsAst");function x6(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),pr(new Error,Vt.DEFAULT_INVALID_REQUEST,Hu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new iP;if(Cs.isEmptyOrZeroLength(e.hdb_user.role)||Cs.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Vt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(un.SYSTEM_SCHEMA_NAME)||s===un.SYSTEM_SCHEMA_NAME;if(l&&cP[r])throw pr(new Error,Vt.DROP_SYSTEM,Hu.FORBIDDEN);if(u&&!l||_===!0&&(r===ln.createSchema.name||r===ln.dropSchema.name))return null;if(B6.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=ZU.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===JU||r===XU){if(s===un.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===JU&&(!d[s]||!d[s][xu]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(s));if(r===XU&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][xu]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(s,i))}}let f=lP(e.hdb_user,r,o,c,n);if(f)return f;if(q.get(r)&&q.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&un.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[un.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[un.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=F6(e),h=WT(e.hdb_user.role.permission,s,i);return KT(E,h,r,i,s,c,n),c.getPermsResponse()}a(x6,"verifyPerms");function lP(e,t,r,n,s){if(Cs.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),pr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||q.get(t).requires_su))return null;if(!q.get(t))throw Ct.info(`operation ${t} not found.`),pr(new Error,Vt.OP_NOT_FOUND(t),Hu.BAD_REQUEST);if(q.get(t)&&q.get(t).requires_su)return Ct.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Vt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][xu]===!1){n.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[xu]===!1)n.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=q.get(t).perms;!Cs.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ct.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=Vt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ct.error(E),Ct.error(f),pr(oP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(lP,"hasPermissions");function KT(e,t,r,n,s,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),pr(new Error);let c=q.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),pr(new Error);if(Cs.isEmptyOrZeroLength(t))return Ct.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[xu]===!1){i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(un.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ls)throw pr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Hu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(KT,"checkAttributePerms");function F6(e){let t=new Set;try{if(e.action)return t;if(e.operation===un.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Ct.info(r)}return t}a(F6,"getRecordAttributes");function WT(e,t,r){let n=new Map;if(Cs.isEmpty(e))return Ct.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(WT,"getAttributePermissions");function q6(e,t,r,n,s,i,o){let c=new Set(i),u=WT(e,n,s);KT(c,u,t,s,n,o,r)}a(q6,"verifyBulkLoadAttributePerms")});var lf=T((Afe,mP)=>{"use strict";mP.exports={evaluateSQL:Z6,processAST:hP,convertSQLToAST:EP,checkASTPermissions:fP};var G6=tn(),dP=require("util"),k6=dP.callbackify(G6.insert),V6=en().search,$6=SC().update,Y6=dP.callbackify($6),K6=gC().convertDelete,Ei=require("alasql"),W6=cf(),uf=V(),Q6=z_(),z6=J(),Gu=M(),{hdb_errors:J6,handleHDBError:QT}=Z(),{HTTP_STATUS_CODES:zT}=J6;Q6(Ei);var X6=403,j6="There was a problem performing this insert. Please check the logs and try again.",JT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Z6(e,t){let r=e.parsed_sql_object;if(!r){r=EP(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ei.yy.Insert?n=s.into.databaseid:s instanceof Ei.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ei.yy.Update||s instanceof Ei.yy.Delete?n=s.table.databaseid:uf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ei.yy.Select)&&z6.isEmptyOrZeroLength(n))return t("No schema specified",null)}hP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Z6,"evaluateSQL");function fP(e,t){let r;try{r=W6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(fP,"checkASTPermissions");function EP(e){let t=new JT;if(!e)throw QT(new Error,"The 'sql' parameter is missing from the request body",zT.BAD_REQUEST);try{let r=e.trim(),n=Ei.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
- `);throw n[1]?QT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,zT.BAD_REQUEST):QT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",zT.BAD_REQUEST)}return t}a(EP,"convertSQLToAST");function hP(e,t,r){try{let n=e9;if(!e.bypass_auth&&!t.permissions_checked){let i=fP(e,t);if(i&&i.length>0)return r(X6,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Gu.VALID_SQL_OPS_ENUM.SELECT:n=V6,s=t.ast.statements[0];break;case Gu.VALID_SQL_OPS_ENUM.INSERT:n=t9;break;case Gu.VALID_SQL_OPS_ENUM.UPDATE:n=Y6;break;case Gu.VALID_SQL_OPS_ENUM.DELETE:n=K6;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(hP,"processAST");function e9(e,t){uf.info(e),t("unknown sql statement")}a(e9,"nullFunction");function t9({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=r9(i,e.values)}catch(o){return r(o)}k6(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){uf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(t9,"convertInsert");function r9(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Ei.compile(`SELECT ${s.toString()} AS [${Gu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw uf.error(r),new Error(j6)}}a(r9,"createDataObjects")});var XT=T((bfe,SP)=>{"use strict";var{S3:n9,GetObjectCommand:s9}=require("@aws-sdk/client-s3");SP.exports={getFileStreamFromS3:i9,getS3AuthObj:pP};async function i9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await pP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new s9(r))).Body}a(i9,"getFileStreamFromS3");function pP(e,t,r){return new n9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(pP,"getS3AuthObj")});var _f=T((yfe,IP)=>{"use strict";var ZT=en(),o9=lf(),a9=XT(),{AsyncParser:c9,Transform:u9}=require("json2csv"),Vu=require("stream"),kr=J(),jT=require("fs-extra"),l9=require("path"),_n=V(),{promisify:RP}=require("util"),ku=J(),{handleHDBError:gt,hdb_errors:_9}=Z(),{HDB_ERROR_MSGS:Sr,HTTP_STATUS_CODES:Rt}=_9,{streamAsJSON:d9}=(Nh(),ee(ZO)),{Upload:f9}=require("@aws-sdk/lib-storage"),TP=["search_by_value","search_by_hash","sql","search_by_conditions"],gP=["json","csv"],AP="json",OP="csv",E9="Successfully exported JSON locally.",h9="Successfully exported CSV locally.",m9=1e3,p9=ZT.searchByHash,S9=ZT.searchByValue,T9=RP(o9.evaluateSQL),g9=RP(Vu.finished);IP.exports={export_to_s3:b9,export_local:R9,toCsvStream:bP};async function R9(e){_n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=NP(e);if(!kr.isEmpty(t))throw _n.error(t),gt(new Error,t,Rt.BAD_REQUEST,void 0,void 0,!0);if(kr.isEmpty(e.path))throw _n.error(Sr.MISSING_VALUE("path")),gt(new Error,Sr.MISSING_VALUE("path"),Rt.BAD_REQUEST,void 0,void 0,!0);let r=(kr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(l9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=kr.buildFolderPath(e.path,r);await A9(e.path);let s=await yP(e);return await O9(n,e.format,s)}a(R9,"export_local");async function A9(e){if(_n.trace("in confirmPath"),kr.isEmptyOrZeroLength(e))throw gt(new Error,`Invalid path: ${e}`,Rt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await jT.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,_n.error(n),gt(new Error,n,Rt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw _n.error(r),gt(new Error,r,Rt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(A9,"confirmPath");async function O9(e,t,r){if(_n.trace("in saveToLocal"),ku.isEmptyOrZeroLength(e))throw gt(new Error,Sr.INVALID_VALUE("file_path"),Rt.BAD_REQUEST,void 0,void 0,!0);if(ku.isEmptyOrZeroLength(t))throw gt(new Error,Sr.INVALID_VALUE("Source format"),Rt.BAD_REQUEST,void 0,void 0,!0);if(ku.isEmpty(r))throw gt(new Error,Sr.NOT_FOUND("Data"),Rt.BAD_REQUEST,void 0,void 0,!0);if(t===AP){let n=jT.createWriteStream(e);return d9(r).pipe(n),await g9(n),{message:E9,path:e}}else if(t===OP){let n=jT.createWriteStream(e),s=Vu.Readable.from(r),i={},o={objectMode:!0};return await new c9(i,o).fromInput(s).toOutput(n).promise(!1),{message:h9,path:e}}throw gt(new Error,Sr.INVALID_VALUE("format"),Rt.BAD_REQUEST)}a(O9,"saveToLocal");async function b9(e){if(!e.s3||Object.keys(e.s3).length===0)throw gt(new Error,Sr.MISSING_VALUE("S3 object"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw gt(new Error,Sr.MISSING_VALUE("aws_access_key_id"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw gt(new Error,Sr.MISSING_VALUE("aws_secret_access_key"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.bucket))throw gt(new Error,Sr.MISSING_VALUE("bucket"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.key))throw gt(new Error,Sr.MISSING_VALUE("key"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.region))throw gt(new Error,Sr.MISSING_VALUE("region"),Rt.BAD_REQUEST);let t=NP(e);if(!kr.isEmpty(t))throw gt(new Error,t,Rt.BAD_REQUEST);_n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await yP(e)}catch(u){throw _n.error(u),u}let n,s=await a9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Vu.PassThrough;if(e.format===OP){i=e.s3.key+".csv";let u=bP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===AP){i=e.s3.key+".json";let u=new Vu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%m9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw gt(new Error,Sr.INVALID_VALUE("format"),Rt.BAD_REQUEST);return new f9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(b9,"export_to_s3");function bP(e){let t=Vu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new u9(r,n);return t.pipe(s)}a(bP,"toCsvStream");function NP(e){if(_n.trace("in exportCoreValidation"),kr.isEmpty(e.format))return"format missing";if(gP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gP.join(", ")}`;let t=e.search_operation.operation;if(kr.isEmpty(t))return"search_operation.operation missing";if(TP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${TP.join(", ")}`}a(NP,"exportCoreValidation");async function yP(e){_n.trace("in getRecords");let t,r;if(ku.isEmpty(e.search_operation)||ku.isEmptyOrZeroLength(e.search_operation.operation))throw gt(new Error,Sr.INVALID_VALUE("Search operation"),Rt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=S9;break;case"search_by_hash":t=p9;break;case"search_by_conditions":t=ZT.searchByConditions;break;case"sql":t=T9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_n.error(r),gt(new Error,r,Rt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(yP,"getRecords")});var PP={};Ve(PP,{contentTypes:()=>sg,findBestSerializer:()=>ff,getDeserializer:()=>ho,registerContentHandlers:()=>ig,serialize:()=>Ef,serializeMessage:()=>di});function N9(e){try{return e?.[0]===123?ng(e):e}catch{return e}}function ig(e){e.register(I9,{serializers:[{regex:/^application\/json$/,serializer:hc},{regex:/^application\/cbor$/,serializer:function(t){return new Eo.EncoderStream(Yu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?df.Readable.from((0,ss.encodeIter)(t,Yu)):(0,ss.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,eg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ss.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Eo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function ff(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=$t.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from($t.keys()).join(", "))}};n=$t.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Ef(e,t,r){let n=CP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=ff(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Ds.createBrotliCompress)({params:{[Ds.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ds.constants.BROTLI_MODE_TEXT:Ds.constants.BROTLI_MODE_GENERIC,[Ds.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>CP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ds.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function di(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $u(e);let r=t.serialize;if(r)return r(e);let n=ff(t);return r=t.serialize=n.serializer.serialize,r(e)}function w9(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function ho(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=$t.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=$t.get(e)?.deserialize||LP(e,n);return o=>w9(o).then(i)}return e&&$t.get(e)?.deserialize||LP(e,n)}function LP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return ng(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function C9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var eg,ss,Eo,Ds,df,DP,tg,rg,MP,$u,ng,Yu,$t,sg,wP,UP,y9,I9,CP,ma=Ae(()=>{Nh();eg=v(_f()),ss=require("msgpackr"),Eo=require("cbor-x"),Ds=require("zlib"),df=require("stream");nr();DP=require("../../index"),tg=v(j()),rg=v(M()),MP=tg.default.get(rg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$u=MP?Mi:JSON.stringify,ng=MP?bh:JSON.parse,Yu={useRecords:!1,useToJSON:!0},$t=new Map,sg=$t;lt.contentTypes=sg;(0,DP._assignPackageExport)("contentTypes",sg);$t.set("application/json",{serializeStream:hc,serialize:$u,deserialize:ng,q:.8});wP=new Eo.Encoder(Yu);$t.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Eo.EncoderStream(Yu).end(e)},serialize:wP.encode,deserialize:wP.decode,q:1});$t.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?df.Readable.from((0,ss.encodeIter)(e,Yu)):(0,ss.pack)(e)},serialize:ss.pack,deserialize:ss.unpack,q:.9});$t.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,eg.toCsvStream)(e)},q:.1});$t.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});$t.set("text/event-stream",{serializeStream:function(e){return df.Readable.from(C9(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
- `),e.data){let r=e.data;typeof r=="object"&&(r=$u(r)),t+="data: "+r+`
15
+ `,""):null}catch(f){f.stderr?i[u].npm_error=LU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return ma.info(`finished installModules with response ${i}`),i}a(j8,"installModules");function LU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(LU,"parseNPMStdErr");async function Z8(e){ma.info(`starting auditModules for request: ${e}`);let t=UU(e);if(t)throw Ea(t,t.message,ha.BAD_REQUEST);let{projects:r}=e;await Wd(),await MU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Kd.join(MT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Lu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=LU(u.stderr)}}return ma.info(`finished auditModules with response ${n}`),n}a(Z8,"auditModules");async function Wd(){try{return await Lu("npm -v"),!0}catch{throw Ea(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ha.BAD_REQUEST,void 0,void 0,!0)}}a(Wd,"checkNPMInstalled");async function MU(e){if(!Array.isArray(e)||e.length===0)throw Ea(new Error,"projects argument must be an array with at least 1 element",ha.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Kd.join(MT,i.toString());if(!await IU.pathExists(o)){t.push(i);continue}let u=Kd.join(o,"package.json");await IU.pathExists(u)||r.push(i)}if(t.length>0)throw Ea(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ha.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ea(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ha.BAD_REQUEST,void 0,void 0,!0)}a(MU,"checkProjectPaths");function UU(e){let t=Yd.object({projects:Yd.array().min(1).items(Yd.string()).required(),dry_run:Yd.boolean().default(!1)});return W8.validateBySchema(e,t)}a(UU,"modulesValidator")});var PT=g((Ife,FU)=>{"use strict";var pa=require("fs-extra"),UT=require("path"),zd=Y(),vU=J(),Jd=M(),xU=Z(),e6=wr();FU.exports=t6;async function t6(){let e=r6(),t=xU.get(Jd.CONFIG_PARAMS.ROOTPATH),r=UT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Jd.PACKAGE_ROOT}},s=UT.join(t,"node_modules");await pa.ensureDir(s);let i,o=!0,c=!1;try{i=await pa.readJson(r)}catch(u){if(vU.isEmptyOrZeroLength(e))return;if(u.code!==Jd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!vU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await BU(_);n.dependencies[u]=l+_}if(!o){zd.notify("Installing components"),await HU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await BU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(zd.notify("Removing component",u),c=!0);c&&(zd.notify("Updating components."),await HU(r,n,i))}a(t6,"installComponents");function r6(){let e=e6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(r6,"getComponentsConfig");async function BU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":UT.extname(e)||await pa.pathExists(e)?"file:":"github:"}a(BU,"getPkgPrefix");async function HU(e,t,r){zd.trace("npm installing components package.json",t),await pa.writeFile(e,JSON.stringify(t,null," "));try{await Qd().installAllRootModules(xU.get(Jd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await pa.writeFile(e,JSON.stringify(r,null," ")):await pa.unlink(e),n}}a(HU,"installPackages")});var HT=g((Lfe,VU)=>{"use strict";var qe=require("fs-extra"),vT=require("fast-glob"),ge=require("path"),GU=require("tar-fs"),Dfe=require("uuid").v4,BT=require("normalize-path"),jn=wU(),At=Y(),Ye=M(),Et=Z(),Mu=wr(),n6=J(),{PACKAGE_ROOT:s6}=M(),{handleHDBError:Lt,hdb_errors:i6}=ee(),{basename:o6}=require("path"),a6=PT(),kU=Z(),c6=M(),{Readable:u6}=require("stream"),{isMainThread:l6}=require("worker_threads"),{HDB_ERROR_MSGS:co,HTTP_STATUS_CODES:Mt}=i6,_6=ge.join(s6,"application-template"),qU=ge.join(Et.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function d6(){At.trace("getting custom api status");let e={};try{e={port:Et.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Lt(new Error,co.FUNCTION_STATUS,Mt.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(d6,"customFunctionsStatus");function f6(){At.trace("getting custom api endpoints");let e={},t=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{vT.sync(BT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:vT.sync(BT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:vT.sync(BT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Lt(new Error,co.GET_FUNCTIONS,Mt.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(f6,"getCustomFunctions");function E6(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=jn.getDropCustomFunctionValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Lt(new Error,co.GET_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(E6,"getCustomFunction");function h6(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=jn.setCustomFunctionValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("setting custom function file content");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Lt(new Error,co.SET_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(h6,"setCustomFunction");function m6(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=jn.getDropCustomFunctionValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("dropping custom function file");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Lt(new Error,co.DROP_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(m6,"dropCustomFunction");function p6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.addComponentValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("adding component");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(_6,s),`Successfully added project: ${n}`}catch(s){throw Lt(new Error,co.ADD_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,s)}}a(p6,"addComponent");function S6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.dropCustomFunctionProjectValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("dropping custom function project");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Et.get(Ye.CONFIG_PARAMS.APPS);if(!n6.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return Mu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Lt(new Error,co.DROP_FUNCTION_PROJECT,Mt.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(S6,"dropCustomFunctionProject");async function T6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.packageComponentValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;At.trace("packaging component",n);let s;try{s=await qe.realpath(ge.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(ge.join(Et.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ye.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await qe.ensureDir(qU);let i=ge.join(qU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(ge.join(s,"node_modules"))}),GU.pack(s,o).pipe(qe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=qe.readFileSync(i,{encoding:"base64"});return await qe.remove(i),{project:n,payload:c}}a(T6,"packageComponent");async function g6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.deployComponentValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(At.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await qe.ensureDir(o);let f=u6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(GU.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(ge.join(o,"package"),o),await qe.remove(ge.join(o,"package")))}if(await Mu.addConfig(n,{package:i}),!s){await a6();let f=kU.get(c6.CONFIG_PARAMS.ROOTPATH);o=ge.join(f,"node_modules",n)}if(l6)return;let c=new Map;c.isWorker=!0;let u=(jd(),te(Xd)),_;u.setErrorReporter(f=>_=f);let l=o6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return At.info("Installed component"),`Successfully deployed: ${n}`}a(g6,"deployComponent");async function R6(){let e=Mu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await qe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=ge.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await qe.stat(d),E={name:ge.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return At.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Et.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(jd(),te(Xd)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(R6,"getComponents");async function A6(e){let t=jn.getComponentFileValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let n=Mu.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(kU.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(ge.join(n,e.project,e.file));return{message:await qe.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ye.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(A6,"getComponentFile");async function O6(e){let t=jn.setComponentFileValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await qe.ensureFile(n),await qe.outputFile(n,e.payload,r)):await qe.ensureDir(n),"Successfully set component: "+e.file}a(O6,"setComponentFile");async function b6(e){let t=jn.dropComponentFileValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),Mu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(b6,"dropComponent");VU.exports={customFunctionsStatus:d6,getCustomFunctions:f6,getCustomFunction:E6,setCustomFunction:h6,dropCustomFunction:m6,addComponent:p6,dropCustomFunctionProject:S6,packageComponent:T6,deployComponent:g6,getComponents:R6,getComponentFile:A6,setComponentFile:O6,dropComponent:b6}});var xT=g((Ufe,YU)=>{"use strict";var Zn=require("joi"),$U=Xe();YU.exports={readTransactionLogValidator:N6,deleteTransactionLogsBeforeValidator:y6};function N6(e){let t=Zn.object({schema:Zn.string().required(),table:Zn.string().required(),from:Zn.date().timestamp(),to:Zn.date().timestamp(),limit:Zn.number().min(1)});return $U.validateBySchema(e,t)}a(N6,"readTransactionLogValidator");function y6(e){let t=Zn.object({schema:Zn.string().required(),table:Zn.string().required(),timestamp:Zn.date().timestamp().required()});return $U.validateBySchema(e,t)}a(y6,"deleteTransactionLogsBeforeValidator")});var ef=g((vfe,JU)=>{"use strict";var FT=M(),Zd=Rt(),KU=J(),WU=Z(),QU=hs(),{handleHDBError:Sa,hdb_errors:w6}=ee(),{HTTP_STATUS_CODES:Ta}=w6,{readTransactionLogValidator:I6,deleteTransactionLogsBeforeValidator:C6}=xT(),zU="This operation relies on clustering and cannot run with it disable.",D6="Logs successfully deleted from transaction log.",L6="All logs successfully deleted from transaction log.";JU.exports={readTransactionLog:M6,deleteTransactionLogsBefore:U6};async function*M6(e){let t=I6(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST,void 0,void 0,!0);if(!WU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Sa(new Error,zU,Ta.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=KU.checkSchemaTableExist(r,n);if(s)throw Sa(new Error,s,Ta.NOT_FOUND,void 0,void 0,!0);let i=QU.createNatsTableStreamName(r,n),o=await Zd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(M6,"readTransactionLog");async function U6(e){let t=C6(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST,void 0,void 0,!0);if(!WU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Sa(new Error,zU,Ta.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=KU.checkSchemaTableExist(r,n);if(i)throw Sa(new Error,i,Ta.NOT_FOUND,void 0,void 0,!0);let o=QU.createNatsTableStreamName(r,n),{jsm:c}=await Zd.getNATSReferences(),u=await Zd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=D6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=L6):d=(await Zd.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(U6,"deleteTransactionLogsBefore")});var jU=g((Hfe,XU)=>{"use strict";var qT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};XU.exports=qT});var eP=g((Ffe,ZU)=>{"use strict";var GT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};ZU.exports=GT});var VT=g((Gfe,rP)=>{"use strict";var tP=jU(),P6=eP(),{HDB_ERROR_MSGS:v6}=Or(),kT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=v6.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new tP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new P6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new tP(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};rP.exports=kT});var sf=g((Vfe,SP)=>{"use strict";var $T=jr(),tf=Xr(),an=sd(),vu=vi(),YT=qi(),B6=iS(),H6=UD(),Bu=Zr(),rf=ES(),Ot=Y(),x6=pS(),F6=Rd(),q6=ZS(),G6=Od(),k6=eT(),V6=tT(),$6=sT(),Y6=oT(),KT=uT(),bs=J(),K6=DM(),WT=ET(),iP=Hd(),on=M(),oP=lU(),W6=oa(),aP=lu(),cP=(Vd(),te(wu)),uP=wr(),xr=HT(),Q6=require("alasql"),lP=ef(),_P=Qd(),dP=VT(),{handleHDBError:fr,hdb_errors:fP}=ee(),{HDB_ERROR_MSGS:qt,HTTP_STATUS_CODES:Uu}=fP,G=new Map,EP="delete",li="insert",Ns="read",uo="update",Pu="describe",nP=vu.describeSchema.name,sP=vu.describeTable.name,hP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},z6="catchup",J6="handleGetJob",X6="handleGetJobsByStartDate",nf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},j6=[an.createTable.name,an.createAttribute.name,an.dropTable.name,an.dropAttribute.name],mP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},K=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};G.set($T.insert.name,new K(!1,[li]));G.set($T.update.name,new K(!1,[uo]));G.set($T.upsert.name,new K(!1,[li,uo]));G.set(tf.searchByConditions.name,new K(!1,[Ns]));G.set(tf.searchByHash.name,new K(!1,[Ns]));G.set(tf.searchByValue.name,new K(!1,[Ns]));G.set(tf.search.name,new K(!1,[Ns]));G.set(an.createSchema.name,new K(!0,[]));G.set(an.createTable.name,new K(!0,[]));G.set(an.createAttribute.name,new K(!1,[li]));G.set(an.dropSchema.name,new K(!0,[]));G.set(an.dropTable.name,new K(!0,[]));G.set(an.dropAttribute.name,new K(!0,[]));G.set(vu.describeSchema.name,new K(!1,[Ns]));G.set(vu.describeTable.name,new K(!1,[Ns]));G.set(YT.deleteRecord.name,new K(!1,[EP]));G.set(Bu.addUser.name,new K(!0,[]));G.set(Bu.alterUser.name,new K(!0,[]));G.set(Bu.dropUser.name,new K(!0,[]));G.set(Bu.listUsersExternal.name,new K(!0,[]));G.set(rf.listRoles.name,new K(!0,[]));G.set(rf.addRole.name,new K(!0,[]));G.set(rf.alterRole.name,new K(!0,[]));G.set(rf.dropRole.name,new K(!0,[]));G.set(x6.name,new K(!0,[]));G.set(F6.name,new K(!0,[]));G.set(q6.name,new K(!0,[]));G.set(G6.name,new K(!0,[]));G.set(k6.name,new K(!0,[]));G.set(V6.name,new K(!0,[]));G.set(KT.setRoutes.name,new K(!0,[]));G.set(KT.getRoutes.name,new K(!0,[]));G.set(KT.deleteRoutes.name,new K(!0,[]));G.set(uP.setConfiguration.name,new K(!0,[]));G.set($6.clusterStatus.name,new K(!0,[]));G.set(Y6.name,new K(!0,[]));G.set(WT.getFingerprint.name,new K(!0,[]));G.set(WT.setLicense.name,new K(!0,[]));G.set(YT.deleteFilesBefore.name,new K(!0,[]));G.set(YT.deleteAuditLogsBefore.name,new K(!0,[]));G.set(iP.restart.name,new K(!0,[]));G.set(iP.restartService.name,new K(!0,[]));G.set(B6.name,new K(!0,[]));G.set(H6.name,new K(!0,[Ns]));G.set(W6.systemInformation.name,new K(!0,[]));G.set(uP.getConfiguration.name,new K(!0,[]));G.set(lP.readTransactionLog.name,new K(!0,[]));G.set(lP.deleteTransactionLogsBefore.name,new K(!0,[]));G.set(_P.installModules.name,new K(!0,[]));G.set(_P.auditModules.name,new K(!0,[]));G.set(aP.createTokens.name,new K(!1,[]));G.set(aP.refreshOperationToken.name,new K(!1,[]));G.set(cP.login.name,new K(!1,[]));G.set(cP.logout.name,new K(!1,[]));G.set(xr.customFunctionsStatus.name,new K(!0,[]));G.set(xr.getCustomFunctions.name,new K(!0,[]));G.set(xr.getComponents.name,new K(!0,[]));G.set(xr.getComponentFile.name,new K(!0,[]));G.set(xr.setComponentFile.name,new K(!0,[]));G.set(xr.dropComponent.name,new K(!0,[]));G.set(xr.getCustomFunction.name,new K(!0,[]));G.set(xr.setCustomFunction.name,new K(!0,[]));G.set(xr.dropCustomFunction.name,new K(!0,[]));G.set(xr.addComponent.name,new K(!0,[]));G.set(xr.dropCustomFunctionProject.name,new K(!0,[]));G.set(xr.packageComponent.name,new K(!0,[]));G.set(xr.deployComponent.name,new K(!0,[]));G.set(WT.getRegistrationInfo.name,new K(!1,[]));G.set(Bu.userInfo.name,new K(!1,[]));G.set(vu.describeAll.name,new K(!1,[]));G.set(J6,new K(!1,[]));G.set(X6,new K(!0,[]));G.set(z6,new K(!0,[]));G.set(nf.CSV_DATA_LOAD,new K(!1,[li,uo]));G.set(nf.CSV_URL_LOAD,new K(!1,[li,uo]));G.set(nf.CSV_FILE_LOAD,new K(!1,[li,uo]));G.set(nf.IMPORT_FROM_S3,new K(!1,[li,uo]));G.set(mP.EXPORT_TO_S3,new K(!0,[]));G.set(mP.EXPORT_LOCAL,new K(!0,[]));G.set(on.VALID_SQL_OPS_ENUM.DELETE,new K(!1,[EP]));G.set(on.VALID_SQL_OPS_ENUM.SELECT,new K(!1,[Ns]));G.set(on.VALID_SQL_OPS_ENUM.INSERT,new K(!1,[li]));G.set(on.VALID_SQL_OPS_ENUM.UPDATE,new K(!1,[uo]));SP.exports={verifyPerms:e9,verifyPermsAst:Z6,verifyBulkLoadAttributePerms:r9};function Z6(e,t,r){if(bs.isEmptyOrZeroLength(e))throw Ot.info("verify_perms_ast has an empty user parameter"),fr(new Error);if(bs.isEmptyOrZeroLength(t))throw Ot.info("verify_perms_ast has an empty user parameter"),fr(new Error);if(bs.isEmptyOrZeroLength(r))throw Ot.info("verify_perms_ast has a null operation parameter"),fr(new Error);try{let n=new dP,s=new K6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ot.info("No schemas defined in verifyPermsAst(), will not continue."),fr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&hP[r])throw fr(new Error,qt.DROP_SYSTEM,Uu.FORBIDDEN);if(c&&!u)return null;let _=oP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Q6.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=pP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=zT(t.role.permission,f,d[E]);QT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw fr(n)}}a(Z6,"verifyPermsAst");function e9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ot.info("null required parameter in verifyPerms"),fr(new Error,qt.DEFAULT_INVALID_REQUEST,Uu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new dP;if(bs.isEmptyOrZeroLength(e.hdb_user.role)||bs.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ot.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(qt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(on.SYSTEM_SCHEMA_NAME)||s===on.SYSTEM_SCHEMA_NAME;if(l&&hP[r])throw fr(new Error,qt.DROP_SYSTEM,Uu.FORBIDDEN);if(u&&!l||_===!0&&(r===an.createSchema.name||r===an.dropSchema.name))return null;if(j6.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=oP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===nP||r===sP){if(s===on.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(qt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===nP&&(!d[s]||!d[s][Pu]))return c.handleInvalidItem(qt.SCHEMA_NOT_FOUND(s));if(r===sP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Pu]))return c.handleInvalidItem(qt.TABLE_NOT_FOUND(s,i))}}let f=pP(e.hdb_user,r,o,c,n);if(f)return f;if(G.get(r)&&G.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&on.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[on.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(A=>A[on.PERMS_CRUD_ENUM.READ]).forEach(A=>{p.push(A.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let E=t9(e),h=zT(e.hdb_user.role.permission,s,i);return QT(E,h,r,i,s,c,n),c.getPermsResponse()}a(e9,"verifyPerms");function pP(e,t,r,n,s){if(bs.arrayHasEmptyValues([e,t,r]))throw Ot.info("hasPermissions has an invalid parameter"),fr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||G.get(t).requires_su))return null;if(!G.get(t))throw Ot.info(`operation ${t} not found.`),fr(new Error,qt.OP_NOT_FOUND(t),Uu.BAD_REQUEST);if(G.get(t)&&G.get(t).requires_su)return Ot.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(qt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Pu]===!1){n.addInvalidItem(qt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(qt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Pu]===!1)n.addInvalidItem(qt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=G.get(t).perms;!bs.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ot.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=qt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ot.error(E),Ot.error(f),fr(fP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(pP,"hasPermissions");function QT(e,t,r,n,s,i,o){if(!e||!t)throw Ot.info("no attributes specified in checkAttributePerms."),fr(new Error);let c=G.get(r).perms;if(!c||c==="")throw Ot.info(`no permissions found for ${r} in checkAttributePerms().`),fr(new Error);if(bs.isEmptyOrZeroLength(t))return Ot.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Pu]===!1){i.addInvalidItem(qt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(on.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ns)throw fr(new Error,qt.SYSTEM_TIMESTAMP_PERMS_ERR,Uu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(qt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(QT,"checkAttributePerms");function t9(e){let t=new Set;try{if(e.action)return t;if(e.operation===on.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Ot.info(r)}return t}a(t9,"getRecordAttributes");function zT(e,t,r){let n=new Map;if(bs.isEmpty(e))return Ot.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Ot.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(zT,"getAttributePermissions");function r9(e,t,r,n,s,i,o){let c=new Set(i),u=zT(e,n,s);QT(c,u,t,s,n,o,r)}a(r9,"verifyBulkLoadAttributePerms")});var af=g((Yfe,OP)=>{"use strict";OP.exports={evaluateSQL:h9,processAST:AP,convertSQLToAST:RP,checkASTPermissions:gP};var n9=jr(),TP=require("util"),s9=TP.callbackify(n9.insert),i9=Xr().search,o9=NC().update,a9=TP.callbackify(o9),c9=wC().convertDelete,_i=require("alasql"),u9=sf(),of=Y(),l9=Y_(),_9=J(),Hu=M(),{hdb_errors:d9,handleHDBError:JT}=ee(),{HTTP_STATUS_CODES:XT}=d9;l9(_i);var f9=403,E9="There was a problem performing this insert. Please check the logs and try again.",jT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function h9(e,t){let r=e.parsed_sql_object;if(!r){r=RP(e.sql);let n,s=r.ast.statements[0];if(s instanceof _i.yy.Insert?n=s.into.databaseid:s instanceof _i.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof _i.yy.Update||s instanceof _i.yy.Delete?n=s.table.databaseid:of.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof _i.yy.Select)&&_9.isEmptyOrZeroLength(n))return t("No schema specified",null)}AP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(h9,"evaluateSQL");function gP(e,t){let r;try{r=u9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(gP,"checkASTPermissions");function RP(e){let t=new jT;if(!e)throw JT(new Error,"The 'sql' parameter is missing from the request body",XT.BAD_REQUEST);try{let r=e.trim(),n=_i.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
+ `);throw n[1]?JT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XT.BAD_REQUEST):JT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XT.BAD_REQUEST)}return t}a(RP,"convertSQLToAST");function AP(e,t,r){try{let n=m9;if(!e.bypass_auth&&!t.permissions_checked){let i=gP(e,t);if(i&&i.length>0)return r(f9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Hu.VALID_SQL_OPS_ENUM.SELECT:n=i9,s=t.ast.statements[0];break;case Hu.VALID_SQL_OPS_ENUM.INSERT:n=p9;break;case Hu.VALID_SQL_OPS_ENUM.UPDATE:n=a9;break;case Hu.VALID_SQL_OPS_ENUM.DELETE:n=c9;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(AP,"processAST");function m9(e,t){of.info(e),t("unknown sql statement")}a(m9,"nullFunction");function p9({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=S9(i,e.values)}catch(o){return r(o)}s9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){of.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(p9,"convertInsert");function S9(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=_i.compile(`SELECT ${s.toString()} AS [${Hu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw of.error(r),new Error(E9)}}a(S9,"createDataObjects")});var ZT=g((Wfe,NP)=>{"use strict";var{S3:T9,GetObjectCommand:g9}=require("@aws-sdk/client-s3");NP.exports={getFileStreamFromS3:R9,getS3AuthObj:bP};async function R9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await bP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new g9(r))).Body}a(R9,"getFileStreamFromS3");function bP(e,t,r){return new T9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(bP,"getS3AuthObj")});var cf=g((zfe,PP)=>{"use strict";var tg=Xr(),A9=af(),O9=ZT(),{AsyncParser:b9,Transform:N9}=require("json2csv"),Fu=require("stream"),Fr=J(),eg=require("fs-extra"),y9=require("path"),cn=Y(),{promisify:IP}=require("util"),xu=J(),{handleHDBError:ht,hdb_errors:w9}=ee(),{HDB_ERROR_MSGS:Er,HTTP_STATUS_CODES:mt}=w9,{streamAsJSON:I9}=(yh(),te(ab)),{Upload:C9}=require("@aws-sdk/lib-storage"),yP=["search_by_value","search_by_hash","sql","search_by_conditions"],wP=["json","csv"],CP="json",DP="csv",D9="Successfully exported JSON locally.",L9="Successfully exported CSV locally.",M9=1e3,U9=tg.searchByHash,P9=tg.searchByValue,v9=IP(A9.evaluateSQL),B9=IP(Fu.finished);PP.exports={export_to_s3:q9,export_local:H9,toCsvStream:LP};async function H9(e){cn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=MP(e);if(!Fr.isEmpty(t))throw cn.error(t),ht(new Error,t,mt.BAD_REQUEST,void 0,void 0,!0);if(Fr.isEmpty(e.path))throw cn.error(Er.MISSING_VALUE("path")),ht(new Error,Er.MISSING_VALUE("path"),mt.BAD_REQUEST,void 0,void 0,!0);let r=(Fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(y9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Fr.buildFolderPath(e.path,r);await x9(e.path);let s=await UP(e);return await F9(n,e.format,s)}a(H9,"export_local");async function x9(e){if(cn.trace("in confirmPath"),Fr.isEmptyOrZeroLength(e))throw ht(new Error,`Invalid path: ${e}`,mt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,cn.error(n),ht(new Error,n,mt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw cn.error(r),ht(new Error,r,mt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(x9,"confirmPath");async function F9(e,t,r){if(cn.trace("in saveToLocal"),xu.isEmptyOrZeroLength(e))throw ht(new Error,Er.INVALID_VALUE("file_path"),mt.BAD_REQUEST,void 0,void 0,!0);if(xu.isEmptyOrZeroLength(t))throw ht(new Error,Er.INVALID_VALUE("Source format"),mt.BAD_REQUEST,void 0,void 0,!0);if(xu.isEmpty(r))throw ht(new Error,Er.NOT_FOUND("Data"),mt.BAD_REQUEST,void 0,void 0,!0);if(t===CP){let n=eg.createWriteStream(e);return I9(r).pipe(n),await B9(n),{message:D9,path:e}}else if(t===DP){let n=eg.createWriteStream(e),s=Fu.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new b9(i,c).fromInput(s).toOutput(n).promise(!1),{message:L9,path:e}}throw ht(new Error,Er.INVALID_VALUE("format"),mt.BAD_REQUEST)}a(F9,"saveToLocal");async function q9(e){if(!e.s3||Object.keys(e.s3).length===0)throw ht(new Error,Er.MISSING_VALUE("S3 object"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ht(new Error,Er.MISSING_VALUE("aws_access_key_id"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ht(new Error,Er.MISSING_VALUE("aws_secret_access_key"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.bucket))throw ht(new Error,Er.MISSING_VALUE("bucket"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.key))throw ht(new Error,Er.MISSING_VALUE("key"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.region))throw ht(new Error,Er.MISSING_VALUE("region"),mt.BAD_REQUEST);let t=MP(e);if(!Fr.isEmpty(t))throw ht(new Error,t,mt.BAD_REQUEST);cn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await UP(e)}catch(u){throw cn.error(u),u}let n,s=await O9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Fu.PassThrough;if(e.format===DP){i=e.s3.key+".csv";let u=LP(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===CP){i=e.s3.key+".json";let u=new Fu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%M9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ht(new Error,Er.INVALID_VALUE("format"),mt.BAD_REQUEST);return new C9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(q9,"export_to_s3");function LP(e,t){let r=Fu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new N9(n,s);return r.pipe(i)}a(LP,"toCsvStream");function MP(e){if(cn.trace("in exportCoreValidation"),Fr.isEmpty(e.format))return"format missing";if(wP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${wP.join(", ")}`;let t=e.search_operation.operation;if(Fr.isEmpty(t))return"search_operation.operation missing";if(yP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${yP.join(", ")}`}a(MP,"exportCoreValidation");async function UP(e){cn.trace("in getRecords");let t,r;if(xu.isEmpty(e.search_operation)||xu.isEmptyOrZeroLength(e.search_operation.operation))throw ht(new Error,Er.INVALID_VALUE("Search operation"),mt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=P9;break;case"search_by_hash":t=U9;break;case"search_by_conditions":t=tg.searchByConditions;break;case"sql":t=v9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,cn.error(r),ht(new Error,r,mt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(UP,"getRecords")});var kP={};Ve(kP,{contentTypes:()=>og,findBestSerializer:()=>lf,getDeserializer:()=>_o,registerContentHandlers:()=>ag,serialize:()=>_f,serializeMessage:()=>ui});function G9(e){try{return e?.[0]===123?ig(e):e}catch{return e}}function ag(e){e.register(V9,{serializers:[{regex:/^application\/json$/,serializer:dc},{regex:/^application\/cbor$/,serializer:function(t){return new lo.EncoderStream(Gu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uf.Readable.from((0,es.encodeIter)(t,Gu)):(0,es.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,es.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,lo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function lf(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Ut.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ut.keys()).join(", "))}};n=Ut.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function _f(e,t,r){let n=BP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=lf(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ys.createBrotliCompress)({params:{[ys.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ys.constants.BROTLI_MODE_TEXT:ys.constants.BROTLI_MODE_GENERIC,[ys.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>BP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ys.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function ui(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return qu(e);let r=t.serialize;if(r)return r(e);let n=lf(t);return r=t.serialize=n.serializer.serialize,r(e)}function $9(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function _o(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Ut.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Ut.get(e)?.deserialize||HP(e,n);return o=>$9(o).then(i)}return e&&Ut.get(e)?.deserialize||HP(e,n)}function HP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return ig(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Y9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var rg,es,lo,ys,uf,xP,ng,sg,FP,qP,qu,ig,Gu,Ut,og,vP,GP,k9,V9,BP,fa=Oe(()=>{yh();rg=B(cf()),es=require("msgpackr"),lo=require("cbor-x"),ys=require("zlib"),uf=require("stream");Zt();xP=require("../../index"),ng=B(Z()),sg=B(M()),FP=B(require("yaml")),qP=ng.default.get(sg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,qu=qP?Ci:JSON.stringify,ig=qP?Nh:JSON.parse,Gu={useRecords:!1,useToJSON:!0},Ut=new Map,og=Ut;je.contentTypes=og;(0,xP._assignPackageExport)("contentTypes",og);Ut.set("application/json",{serializeStream:dc,serialize:qu,deserialize:ig,q:.8});vP=new lo.Encoder(Gu);Ut.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new lo.EncoderStream(Gu).end(e)},serialize:vP.encode,deserialize:vP.decode,q:1});Ut.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uf.Readable.from((0,es.encodeIter)(e,Gu)):(0,es.pack)(e)},serialize:es.pack,deserialize:es.unpack,q:.9});Ut.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(e,e?.getColumns?.())},q:.1});Ut.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ut.set("text/yaml",{serialize(e){return FP.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Ut.set("text/event-stream",{serializeStream:function(e){return uf.Readable.from(Y9(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
+ `),e.data){let r=e.data;typeof r=="object"&&(r=qu(r)),t+="data: "+r+`
19
19
  `}return e.id&&(t+="id: "+e.id+`
20
20
  `),e.retry&&(t+="retry: "+e.retry+`
21
21
  `),t+`
22
- `}else return typeof e=="object"?`data: ${$u(e)}
22
+ `}else return typeof e=="object"?`data: ${qu(e)}
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});$t.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});UP={type:"application/json",serializeStream:hc,serialize:$u,deserialize:N9,q:.8};$t.set("*/*",UP);$t.set("",UP);a(N9,"tryJSONParse");a(ig,"registerContentHandlers");y9=require("fastify-plugin"),I9=y9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ff(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(ff,"findBestSerializer");CP=tg.default.get(rg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Ef,"serialize");a(di,"serializeMessage");a(w9,"streamToBuffer");a(ho,"getDeserializer");a(LP,"deserializerUnknownType");a(C9,"transformIterable")});function Qu(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let A=o[0],I=Ms(n.attributes,A);if(I.relationship){if(o.length<2)throw new mo.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=I.definition?.tableClass||I.elements?.definition?.tableClass,B=new Map,K=Qu({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,w,s,B);if(I.relationship.to){i[o[0]]=B;let F=!!Ms(w.attributes,I.relationship.to)?.elements;K=U9(K,I,w.primaryStore,F,B)}if(I.relationship.from){let F=a(P=>Qu({attribute:I.relationship.from,value:P},t,r,n,s,B),"searchEntry");I.elements?(i[o[0]]=B,K=P9(K,I,w.primaryStore,B,F)):K=K.flatMap(F)}return K}else if(o.length===1)o=o[0];else throw new mo.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(BP[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=os.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case ze.SEARCH_TYPES.EQUALS:case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new mo.ClientError(`Unknown query comparator "${u}"`)}if(r){let A=_;_=l,l=A,A=!f,f=!d,d=A}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new mo.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let A=zu(e);if(!A)throw new mo.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:I,value:w})=>new Promise((B,K)=>setImmediate(()=>{try{B(w&&A(w)?I:og.SKIP)}catch(F){K(F)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(I=>I.value==null?og.SKIP:I);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function Ms(e,t){if(Array.isArray(t))if(t.length>1){let r=Ms(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ms(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function U9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=mi(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?s:s.keys())[Symbol.iterator](),this.next()})()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function P9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let u=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(mi(d)));let _=0;for await(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(f=>!f(d)))continue}u.set(mi(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function zu(e,t,r,n){if(e.conditions){let c=e.conditions.map(zu);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let s=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],u=Ms(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=n?.[c],d=zu({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:s},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),BP[s]||s){case ze.SEARCH_TYPES.EQUALS:case void 0:return is(i,c=>c===o);case ze.SEARCH_TYPES.CONTAINS:return is(i,c=>c?.toString().includes(o));case ze.SEARCH_TYPES.ENDS_WITH:case ze.SEARCH_TYPES._ENDS_WITH:return is(i,c=>c?.toString().endsWith(o));case ze.SEARCH_TYPES.STARTS_WITH:case ze.SEARCH_TYPES._STARTS_WITH:return is(i,c=>typeof c=="string"&&c.startsWith(o));case ze.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),is(i,c=>(0,os.compareKeys)(c,o[0])>=0&&(0,os.compareKeys)(c,o[1])<=0);case"gt":case ze.SEARCH_TYPES.GREATER_THAN:case ze.SEARCH_TYPES._GREATER_THAN:return is(i,c=>(0,os.compareKeys)(c,o)>0);case"ge":case ze.SEARCH_TYPES.GREATER_THAN_EQUAL:case ze.SEARCH_TYPES._GREATER_THAN_EQUAL:return is(i,c=>(0,os.compareKeys)(c,o)>=0);case ze.SEARCH_TYPES.LESS_THAN:case"lt":case ze.SEARCH_TYPES._LESS_THAN:return is(i,c=>(0,os.compareKeys)(c,o)<0);case"le":case ze.SEARCH_TYPES.LESS_THAN_EQUAL:case ze.SEARCH_TYPES._LESS_THAN_EQUAL:return is(i,c=>(0,os.compareKeys)(c,o)<=0);case"ne":return is(i,c=>(0,os.compareKeys)(c,o)!==0);default:throw new mo.ClientError(`Unknown query comparator "${s}"`)}}function is(e,t){return r=>{let n=r[e];return typeof n!="object"||!n?t(n):Array.isArray(n)?n.some(t):n instanceof Date?t(n.getTime()):!1}}function ag(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let n;if(t.operator==="or"){n=0;for(let s of t.conditions)n+=s.estimated_count}else{n=1/0;for(let s of t.conditions)n=1/(1/n+1/s.estimated_count)}return t.estimated_count=n,t.estimated_count}let r=t.comparator||t.search_type;if(r===ze.SEARCH_TYPES.EQUALS){let n=t[0]??t.attribute;if(n==null||n===e.primaryKey)t.estimated_count=1;else if(Array.isArray(n)){let s=Ms(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=ag(i)({value:t.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[s.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let s=e.indices[n];t.estimated_count=s?s.getValuesCount(t[1]??t.value):1/0}}else r===ze.SEARCH_TYPES.CONTAINS||r===ze.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=vP:t.estimated_count=1/0:r===ze.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=vP:r===ze.SEARCH_TYPES.BETWEEN?t.estimated_count=D9:t.estimated_count=L9;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function hf(e){if(e)if(hi=e,Oa.lastIndex=0,v9.test(e))try{let t=Ku(new ba,"");if(Tr!==hi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Tr} in '${hi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ku(e,t){let r=Oa,n,s,i,o,c;for(;n=r.exec(hi);){Tr=r.lastIndex;let[,u,_]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(s)if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Wu(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=M9[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Wu(u);break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:s,value:decodeURIComponent(u)})}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Wu(u)),s=void 0;break;case"(":Oa.lastIndex=Tr;let d=Ku(u?[]:new ba,")");switch(u){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=HP(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}hi[Tr]===","?r.lastIndex=++Tr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");Oa.lastIndex=Tr,l=Ku([],"}"),l.name=u,e.push(l),hi[Tr]===","?r.lastIndex=++Tr:o=!0;break;case"[":Oa.lastIndex=Tr,u?(l=Ku(new ba,"]"),l.name=u):l=Ku(e.conditions?new ba:[],"]"),e.conditions?(e.conditions.push(l),s=null):e.push(l),hi[Tr]===","?r.lastIndex=++Tr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s)e.conditions.push({comparator:i||"equals",attribute:s,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Wu(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?B9:Oa,r.lastIndex=Tr),Tr===hi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Wu(e){return e.indexOf(".")>-1?e.split(".").map(Wu):decodeURIComponent(e)}function HP(e){let t=xP(e[0]);return e.length>1&&(t.next=HP(e.slice(1))),t}function xP(e){if(Array.isArray(e)){let t=xP(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function mi(e){return Array.isArray(e)?e.join("\0"):e}var mo,ze,os,og,L9,D9,vP,M9,BP,v9,Oa,B9,Tr,hi,ba,mf=Ae(()=>{mo=v(Z()),ze=v(ht()),os=require("ordered-binary"),og=require("lmdb"),L9=1e8,D9=15e6,vP=1e7,M9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(Qu,"searchByIndex");a(Ms,"findAttribute");a(U9,"joinTo");a(P9,"joinFrom");BP={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",sw:"starts_with",ew:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(zu,"filterByType");a(is,"attributeComparator");a(ag,"estimateCondition");v9=/[()[\]|!<>.]|(=\w+=)/,Oa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,B9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(hf,"parseQuery");a(Ku,"parseBlock");a(Wu,"decodeProperty");a(HP,"toSortObject");a(xP,"toSortEntry");ba=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(mi,"flattenKey")});var pf={};Ve(pf,{start:()=>F9});async function x9(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hf(e);let s=new _i;try{e.responseHeaders=s;let i=e.url.slice(1),o=ug.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Qe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=ho(r["content-type"],!0)(e.body)}catch(p){throw new Xu.ClientError(p,400)}switch(e.authorize=!0,n){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new Xu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Xu.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(l==null)d=n==="GET"||n==="HEAD"?404:204,cg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){H9[0]=f;let p=String.fromCharCode(34,(Yt[0]&63)+62,(Yt[0]>>6)+(Yt[1]<<2&63)+62,(Yt[1]>>4)+(Yt[2]<<4&63)+62,(Yt[2]>>2)+62,(Yt[3]&63)+62,(Yt[3]>>6)+(Yt[4]<<2&63)+62,(Yt[4]>>4)+(Yt[5]<<4&63)+62,(Yt[5]>>2)+62,(Yt[6]&63)+62,(Yt[6]>>6)+(Yt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):s.setIfNone("ETag",p),cg.lastModified&&s.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:d,headers:s,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Ef(l,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?po.warn(i):po.info(i):po.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Ef(i.contentType?i:i.toString(),e,o),o}}function F9(e){cg=e,!FP&&(FP=!0,ug=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return x9(t,r)}),e.server.ws(async(t,r,n)=>{Ju++;let s=new Nn;qP||(qP=!0,tu(l=>{Ju>0&&l.push({metric:"ws-connections",connections:Ju,byThread:!0})}));let i;t.on("error",l=>{i=!0,po.warn(l)});let o;t.on("message",a(function(d){o||(o=ho(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Ju--,nn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=ug.getMatch(u);if(nn(!!_,"connection","ws","connect"),!_)t.send(di(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,xr(h=>({count:h.count,total:Ju}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Qe(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=di(E.value,r);t.send(h),xr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var po,Xu,Yt,H9,cg,FP,ug,qP,Ju,GP=Ae(()=>{ma();Ns();po=v(V()),Xu=v(Z());mf();fc();Ji();kd();Yt=new Uint8Array(8),H9=new Float64Array(Yt.buffer,0,1),cg={};a(x9,"http");Ju=0;a(F9,"start")});var lg=T((Gfe,kP)=>{var{recordAction:Sf,recordActionBinary:q9}=(Ns(),ee(ru)),G9=require("fastify-plugin"),k9=200;kP.exports=G9(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Sf(o,"duration",_,d,l),q9(s.raw.statusCode<400,"success",_,d,l);let f=k9;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Sf(performance.now()-c,"transfer",_,d,l),Sf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Sf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Eg=T((kfe,WP)=>{var Of=require("clone"),bf=et(),V9=J(),Rf=M(),$9=V(),Tf=require("fs"),_g=require("joi"),{string:Af}=_g.types(),{hdb_errors:Y9,handleHDBError:ju}=Z(),{HDB_ERROR_MSGS:K9,HTTP_STATUS_CODES:gf}=Y9,{common_validators:Na}=Kn(),VP=1e9,$P=" is required",W9=["insert","update","upsert"],dg={database:{presence:!1,format:Na.schema_format,length:Na.schema_length},schema:{presence:!1,format:Na.schema_format,length:Na.schema_length},table:{presence:!0,format:Na.schema_format,length:Na.schema_length},action:{inclusion:{within:W9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Q9={schema:Af.required(),table:Af.required(),action:Af.valid("insert","update","upsert")},{AWS_ACCESS_KEY:z9,AWS_SECRET:J9,AWS_BUCKET:X9,AWS_FILE_KEY:j9,REGION:Z9}=Rf.S3_BUCKET_AUTH_KEYS,e7={s3:{presence:!0},[`s3.${z9}`]:{presence:!0,type:"String"},[`s3.${J9}`]:{presence:!0,type:"String"},[`s3.${X9}`]:{presence:!0,type:"String"},[`s3.${j9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Z9}`]:{presence:!0,type:"String"}},YP=Of(dg);YP.data.presence={message:$P};var KP=Of(dg);KP.file_path.presence={message:$P};var t7=Object.assign(Of(dg),e7),fg=Of(Q9);fg.csv_url=Af.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();fg.passthrough_headers=_g.object();function r7(e){let t=bf.validateObject(e,YP);return Nf(e,t)}a(r7,"dataObject");function n7(e){let t=bf.validateBySchema(e,_g.object(fg));return Nf(e,t)}a(n7,"urlObject");function s7(e){let t=bf.validateObject(e,KP);return Nf(e,t)}a(s7,"fileObject");function i7(e){let t=bf.validateObject(e,t7);return Nf(e,t)}a(i7,"s3FileObject");function Nf(e,t){if(!t){let r=V9.checkGlobalSchemaTable(e.schema,e.table);if(r)return ju(new Error,r,gf.BAD_REQUEST);if(e.operation===Rf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Tf.accessSync(e.file_path,Tf.constants.R_OK|Tf.constants.F_OK)}catch(n){return n.code===Rf.NODE_ERROR_CODES.ENOENT?ju(n,`No such file or directory ${n.path}`,gf.BAD_REQUEST):n.code===Rf.NODE_ERROR_CODES.EACCES?ju(n,`Permission denied ${n.path}`,gf.BAD_REQUEST):ju(n)}try{let n=Tf.statSync(e.file_path).size;if(n>VP)return ju(new Error,K9.MAX_FILE_SIZE_ERR(n,VP),gf.BAD_REQUEST)}catch(n){$9.error(n),console.error(n)}}}return t}a(Nf,"postValidateChecks");WP.exports={dataObject:r7,urlObject:n7,fileObject:s7,s3FileObject:i7}});var hg=T(($fe,QP)=>{"use strict";var Zu=V(),yf=M();async function o7(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===yf.OPERATIONS_ENUM.INSERT||t.operation===yf.OPERATIONS_ENUM.UPDATE||t.operation===yf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Zu.info(i.message),i):i.http_resp_msg?(Zu.error(`Error calling operation: ${e.name}`),Zu.error(i.http_resp_msg),i):(Zu.error(`Error calling operation: ${e.name}`),Zu.error(i),i)}}a(o7,"callOperationFunctionAsAwait");QP.exports={callOperationFunctionAsAwait:o7}});var JP=T((Kfe,zP)=>{"use strict";var mg=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},pg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};zP.exports={BulkLoadFileObject:mg,BulkLoadDataObject:pg}});var jP=T((Qfe,XP)=>{"use strict";var Sg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};XP.exports=Sg});var bg=T((eEe,hv)=>{"use strict";var If=tn(),Cf=Eg(),a7=require("needle"),Bn=M(),Jfe=nt(),ya=J(),{handleHDBError:it,hdb_errors:av}=Z(),{HTTP_STATUS_CODES:Kt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:To}=av,Ia=V(),Tg=require("papaparse");ya.promisifyPapaParse();var Hn=require("fs-extra"),c7=require("path"),{chain:ZP}=require("stream-chain"),ev=require("stream-json/streamers/StreamArray"),tv=require("stream-json/utils/Batch"),rv=require("stream-chain/utils/comp"),{finished:nv}=require("stream"),u7=j(),cv=hg(),l7=XT(),{BulkLoadFileObject:Rg,BulkLoadDataObject:_7}=JP(),Ag=GT(),{verifyBulkLoadAttributePerms:uv}=cf(),Xfe=jP(),jfe=It(),Zfe=gs(),{databases:d7}=(ge(),ee(xe)),{coerceType:f7}=(Lf(),ee(Ng)),sv="No records parsed from csv file.",So=`${u7.get("HDB_ROOT")}/tmp`,{schema_regex:E7}=Kn(),iv=1024*1024*2,ov=5e3,h7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};hv.exports={csvDataLoad:m7,csvURLLoad:p7,csvFileLoad:S7,importFromS3:T7};async function m7(e,t){let r=Cf.dataObject(e);if(r)throw it(r,r.message,Kt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=dv(e.schema,e.table),i=Tg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:gg.bind(null,s),dynamicTyping:!1}),o=new Ag;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&uv(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw it(new Error,c,Kt.BAD_REQUEST,void 0,void 0,!0);let u=new _7(e.action,e.schema,e.table,i.data);return n=await cv.callOperationFunctionAsAwait(fv,u,null),n.message===sv?sv:Ev(n.records,n.number_written)}catch(s){throw go(s)}}a(m7,"csvDataLoad");async function p7(e){let t=Cf.urlObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${So}/${r}`;try{await g7(e,r)}catch(s){throw Ia.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),it(s,To(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Rg(this.job_operation_function.name,e.action,e.schema,e.table,n,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Og(s);return await wf(n),i}catch(s){throw await wf(n),go(s)}}a(p7,"csvURLLoad");async function S7(e){let t=Cf.fileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=new Rg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Og(r)}catch(n){throw go(n)}}a(S7,"csvFileLoad");async function T7(e){let t=Cf.s3FileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=c7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${So}/${s}`;let i=new Rg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await R7(s,e);let o=await Og(i);return await wf(r),o}catch(n){throw await wf(r),go(n)}}a(T7,"importFromS3");async function g7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await a7("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw it(n,s,n.statusCode,Bn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}O7(r,e.csv_url),await A7(t,r.raw)}a(g7,"downloadCSVFile");async function R7(e,t){try{let r=`${So}/${e}`;await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,"",{flag:"a+"});let n=await Hn.createWriteStream(r),s=await l7.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Ia.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ia.error(Lt.S3_DOWNLOAD_ERR+" - "+r),it(r,To(Lt.S3_DOWNLOAD_ERR))}}a(R7,"downloadFileFromS3");async function A7(e,t){try{await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,t)}catch(r){throw Ia.error(Lt.WRITE_TEMP_FILE_ERR),it(r,To(Lt.DEFAULT_BULK_LOAD_ERR))}}a(A7,"writeFileToTempFolder");async function wf(e){if(e)try{await Hn.access(e),await Hn.unlink(e)}catch{Ia.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(wf,"deleteTempFile");function O7(e,t){if(e.statusCode!==av.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Kt.BAD_REQUEST);if(!h7[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Kt.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Kt.BAD_REQUEST)}a(O7,"validateURLResponse");async function Og(e){try{let t;switch(e.file_type){case Bn.VALID_S3_FILE_TYPES.CSV:t=await b7(e);break;case Bn.VALID_S3_FILE_TYPES.JSON:t=await N7(e);break;default:throw it(new Error,Lt.DEFAULT_BULK_LOAD_ERR,Kt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return Ev(t.records,t.number_written)}catch(t){throw go(t)}}a(Og,"fileLoad");async function lv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await If.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&uv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=it(c);r(u)}}a(lv,"validateChunk");async function _v(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ya.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ya.isEmpty(c)&&!ya.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await cv.callOperationFunctionAsAwait(fv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=it(c,To(Lt.INSERT_CSV_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(_v,"insertChunk");async function b7(e){let t={records:0,number_written:0},r=dv(e.schema,e.table);try{let n=new Ag,s=Hn.createReadStream(e.file_path,{highWaterMark:iv});s.setEncoding("utf8"),await Tg.parsePromise(s,lv.bind(null,e,n),gg.bind(null,r));let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);return s=Hn.createReadStream(e.file_path,{highWaterMark:iv}),s.setEncoding("utf8"),await Tg.parsePromise(s,_v.bind(null,e,t),gg.bind(null,r)),s.destroy(),t}catch(n){throw it(n,To(Lt.PAPA_PARSE_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(b7,"callPapaParse");function dv(e,t){let r=d7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>f7(i,s));return n}a(dv,"createTransformMap");function gg(e,t,r){let n=e.get(r);return n?n(t):ya.autoCast(t)}a(gg,"typeFunction");async function N7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Ag,s=ZP([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),ev.withParser(),c=>c.value,new tv({batchSize:ov}),rv(async c=>{await lv(e,n,r,c)})]);await new Promise((c,u)=>{nv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);let o=ZP([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),ev.withParser(),c=>c.value,new tv({batchSize:ov}),rv(async c=>{await _v(e,t,r,c)})]);return await new Promise((c,u)=>{nv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw it(n,To(Lt.INSERT_JSON_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(N7,"insertJson");async function fv(e){let t={};try{e.data&&e.data.length>0&&y7(e.data[0])?t=await I7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ia.info(t.message))}catch(r){throw go(r)}return t}a(fv,"callBulkFileLoad");function y7(e){let t=Object.keys(e);for(let r of t)if(!E7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(y7,"validateColumnNames");async function I7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=If.insert;break;case"update":i=If.update;break;case"upsert":i=If.upsert;break;default:throw it(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),Kt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=ya.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw go(o)}}a(I7,"bulkFileLoad");function Ev(e,t){return`successfully loaded ${t} of ${e} records`}a(Ev,"buildResponseMsg");function go(e){return it(e,To(Lt.DEFAULT_BULK_LOAD_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(go,"buildTopLevelErrMsg")});var pv=T((rEe,mv)=>{"use strict";var yg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mv.exports=yg});var gv=T((sEe,Tv)=>{"use strict";var w7=M(),Sv=require("moment"),C7=require("uuid").v4,Ig=class{static{a(this,"JobObject")}constructor(){this.id=C7(),this.type=void 0,this.start_datetime=Sv().valueOf(),this.created_datetime=Sv().valueOf(),this.end_datetime=void 0,this.status=w7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Tv.exports=Ig});var wg=T((oEe,yv)=>{"use strict";var L7=require("uuid").v4,Ov=tn(),bv=en(),D7=Jn(),M7=jo(),U7=pv(),ot=M(),P7=gv(),v7=pS(),dn=V(),B7=wc(),wa=J(),{promisify:H7}=require("util"),Ro=require("moment"),x7=lf(),Df=Eg(),Rv=Sm(),{deleteTransactionLogsBeforeValidator:F7}=BT(),{handleHDBError:q7,hdb_errors:G7}=Z(),{HTTP_STATUS_CODES:k7}=G7,Av=bv.searchByValue,V7=bv.searchByHash,$7=Ov.insert,Y7=H7(x7.evaluateSQL),K7=Ov.update;yv.exports={addJob:z7,updateJob:X7,handleGetJob:W7,handleGetJobsByStartDate:Q7,getJobById:Nv};async function W7(e){try{let t=await Nv(e.id);return wa.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw dn.error("There was an error getting job",t),new Error(r)}}a(W7,"handleGetJob");async function Q7(e){try{let t=await J7(e);if(dn.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ro(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ro(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw dn.error(r),new Error(r)}}a(Q7,"handleGetJobsByStartDate");async function z7(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wa.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return dn.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return dn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Df.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=Df.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Df.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Df.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Rv(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Rv(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=F7(e);break;default:break}if(n)throw q7(n,n.message,k7.BAD_REQUEST,void 0,void 0,!0);let s=new P7;s.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new D7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Av(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=L7();try{o=await Av(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return dn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new B7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await $7(u)}catch(l){return dn.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,dn.trace(l)}return t}a(z7,"addJob");async function J7(e){let t=Ro(e.from_date,Ro.ISO_8601),r=Ro(e.to_date,Ro.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new U7(n,e.hdb_user);try{return await Y7(s)}catch(i){throw dn.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(J7,"getJobsInDateRange");async function Nv(e){if(wa.isEmptyOrZeroLength(e))return wa.errorizeMessage("Invalid job ID specified.");let t=new M7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await V7(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return dn.error(n),wa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Nv,"getJobById");async function X7(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wa.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ot.JOB_STATUS_ENUM.COMPLETE||e.status===ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ro().valueOf());let t=new v7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await K7(t),r}a(X7,"updateJob")});var Mv=T((cEe,Dv)=>{"use strict";var Iv=J(),gr=M(),j7=require("moment"),Mf=bg(),Uf=V(),wv=wg(),Cv=_f(),Lv=Vi(),Z7=tt(),eee=nf(),Cg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function tee(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Iv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Iv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gr.JOB_TYPE_ENUM.csv_file_load:await Us(e,Mf.csvFileLoad);break;case gr.JOB_TYPE_ENUM.csv_url_load:await Us(e,Mf.csvURLLoad);break;case gr.JOB_TYPE_ENUM.csv_data_load:await Us(e,Mf.csvDataLoad);break;case gr.JOB_TYPE_ENUM.import_from_s3:await Us(e,Mf.importFromS3);break;case gr.JOB_TYPE_ENUM.empty_trash:break;case gr.JOB_TYPE_ENUM.export_local:await Us(e,Cv.export_local);break;case gr.JOB_TYPE_ENUM.export_to_s3:await Us(e,Cv.export_to_s3);break;case gr.JOB_TYPE_ENUM.delete_files_before:case gr.JOB_TYPE_ENUM.delete_records_before:await Us(e,Lv.deleteFilesBefore);break;case gr.JOB_TYPE_ENUM.delete_audit_logs_before:await Us(e,Lv.deleteAuditLogsBefore);break;case gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Us(e,eee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(tee,"parseMessage");async function Us(e,t){try{e.job.status=gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=j7().valueOf(),await wv.updateJob(e.job),await ree(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Uf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Uf.error(n),e.job.message=n,e.job.status=gr.JOB_STATUS_ENUM.ERROR;try{await wv.updateJob(e.job)}catch(s){throw Uf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Us,"runJob");async function ree(e){Uf.trace("launching job thread:",e),Z7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(ree,"launchJobThread");Dv.exports={parseMessage:tee,RunnerMessage:Cg}});var Pv=T((lEe,Uv)=>{"use strict";var Lg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Uv.exports=Lg});var Xv=T((dEe,Bg)=>{"use strict";var Hf=en(),Ug=lf(),Pf=bg(),Ps=cd(),vf=xi(),tl=Vi(),nee=rS(),el=rn(),Bf=_S(),Wt=vT(),Dt=V(),see=ES(),iee=bd(),vv=XS(),oee=yd(),aee=jS(),cee=ZS(),uee=rT(),lee=sT(),Dg=aT(),Bv=_f(),_ee=cf(),Pg=wg(),H=M(),{hdb_errors:nl,handleHDBError:rl}=Z(),{HTTP_STATUS_CODES:Hv}=nl,Mg=dT(),xv=qd(),Wv=require("util"),Ca=tn(),dee=Xs(),fee=ua(),Fv=Mv(),qv=Eu(),Gv=(Kd(),ee(Du)),kv=Lr(),Vv=nf(),$v=Xd(),{setServerUtilities:Eee}=(Lf(),ee(Ng)),{CONTEXT:hee}=(yn(),ee(ap)),{_assignPackageExport:mee}=require("../../index"),{transformReq:pee}=J(),{server:See}=(nr(),ee(Ci)),Tee=hg(),Yv=Hf.searchByHash,gee=Hf.searchByValue,Ree=Wv.promisify(Hf.search),Aee=Wv.promisify(Ug.evaluateSQL),Oee={[H.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.CREATE_TABLE]:!0,[H.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[H.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.DROP_TABLE]:!0,[H.OPERATIONS_ENUM.DROP_SCHEMA]:!0},G=Pv();async function Qv(e,t){try{if(e.body.operation!=="read_log"&&(Dt.log_level===H.LOG_LEVELS.INFO||Dt.log_level===H.LOG_LEVELS.DEBUG||Dt.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Dt.info(o)}}catch(n){Dt.error(n)}let r=await Tee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Oee[e.body.operation]&&dee.setSchemaDataToGlobal(n=>{n&&Dt.error(n)}),r}a(Qv,"processLocalTransaction");var Kv=Nee();Bg.exports={chooseOperation:zv,getOperationFunction:Jv,operation:vg,processLocalTransaction:Qv};Eee(Bg.exports);See.operation=vg;function zv(e){let t;try{t=Jv(e)}catch(s){throw Dt.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Ug.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Ug.checkASTPermissions(e,i);if(o)throw Dt.error(`${Hv.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),rl(new Error,o,nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==H.OPERATIONS_ENUM.LOGIN&&e.operation!==H.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=_ee.verifyPerms(i,s);if(o)throw Dt.error(`${Hv.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),rl(new Error,o,nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw rl(s,"There was an error when trying to choose an operation path")}return r}a(zv,"chooseOperation");function Jv(e){if(Dt.trace(`getOperationFunction with operation: ${e.operation}`),Kv.has(e.operation))return Kv.get(e.operation);throw rl(new Error,nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Jv,"getOperationFunction");mee("operation",vg);function vg(e,t){e.hdb_user=this[hee]?.user,e.bypass_auth=!t;let r=zv(e);return Qv({body:e},r)}a(vg,"operation");async function bee(e){Dt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await Ca.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await Ca.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await Ca.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await tl.deleteRecord(i);break;default:Dt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Dt.info("Invalid operation in transaction"),Dt.error(o)}}a(bee,"catchup");async function as(e){pee(e);let t,r;try{r=await Pg.addJob(e),t=r.createdJob,Dt.info("addJob result",r);let n=new Fv.RunnerMessage(t,e);return await Fv.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Dt.error(s),rl(n,s)}}a(as,"executeJob");function Nee(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new G(Ca.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new G(Ca.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new G(Ca.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new G(Hf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new G(Yv)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new G(Yv)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new G(gee)),e.set(H.OPERATIONS_ENUM.SEARCH,new G(Ree)),e.set(H.OPERATIONS_ENUM.SQL,new G(Aee)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new G(as,Pf.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new G(as,Pf.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new G(as,Pf.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new G(as,Pf.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new G(Ps.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new G(Ps.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new G(Ps.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new G(Ps.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new G(Ps.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new G(Ps.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new G(Ps.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new G(Ps.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new G(vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new G(vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new G(vf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new G(vf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new G(tl.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new G(el.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new G(el.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new G(el.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new G(el.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new G(Bf.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new G(Bf.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new G(Bf.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new G(Bf.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new G(el.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new G(see)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new G(iee)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new G(vv)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new G(vv)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new G(oee)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new G(aee)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new G(cee)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new G(kv.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new G(uee.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new G(lee)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new G(Dg.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new G(Dg.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new G(Dg.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new G(as,Bv.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new G(as,tl.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new G(as,tl.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new G(as,Bv.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new G(Pg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new G(Pg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new G(Mg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new G(Mg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new G(Mg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new G(xv.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new G(xv.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new G(bee)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new G(fee.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new G(as,tl.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new G(nee)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new G(qv.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new G(qv.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new G(Gv.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new G(Gv.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new G(kv.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new G(Wt.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new G(Wt.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new G(Wt.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new G(Wt.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new G(Wt.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new G(Wt.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new G(Wt.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new G(Wt.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new G(Wt.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new G(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new G(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new G(Wt.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new G(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new G(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new G(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new G(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new G(Vv.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new G(as,Vv.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new G($v.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new G($v.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new G(Ps.getBackup)),e}a(Nee,"initializeOperationFunctionMap")});var Ff=T((EEe,e0)=>{"use strict";var Hg=M(),yee=J(),sl=V(),{handleHDBError:xg,hdb_errors:xf}=Z(),{isMainThread:Iee}=require("worker_threads"),{Readable:wee}=require("stream"),jv=require("os"),Cee=require("util"),Lee=NS(),Dee=Cee.promisify(Lee.authorize),Zv=Xv(),{createGzip:Mee,constants:Uee}=require("zlib");function Pee(e){let t=`Found an uncaught exception with message: ${e.message}. ${jv.EOL}Stack: ${e.stack} ${jv.EOL}Terminating ${Iee?"HDB":"thread"}.`;console.error(t),sl.fatal(t),process.exit(1)}a(Pee,"handleServerUncaughtException");function vee(e,t,r){if(sl[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:xf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(vee,"serverErrorHandler");function Bee(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=xg(new Error,"Invalid JSON.",xf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(yee.isEmpty(e.body.operation)){let n=xg(new Error,"Request body must include an 'operation' property.",xf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Bee,"reqBodyValidationHandler");function Hee(e,t,r){let n;e.body.operation!==Hg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Hg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Hg.OPERATIONS_ENUM.LOGOUT?Dee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{sl.warn(s),sl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(xg(s,i,xf.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Hee,"authHandler");async function xee(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Zv.chooseOperation(e.body);let s=await Zv.processLocalTransaction(e,n);if(s instanceof wee&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Mee({level:Uee.Z_BEST_SPEED})))}return s}catch(s){throw sl.error(s),s}}a(xee,"handlePostRequest");e0.exports={authHandler:Hee,handlePostRequest:xee,handleServerUncaughtException:Pee,serverErrorHandler:vee,reqBodyValidationHandler:Bee}});var s0=T((mEe,n0)=>{"use strict";var Fee=require("fastify-plugin"),{handlePostRequest:t0,authHandler:qee,reqBodyValidationHandler:Gee}=Ff();async function kee(e){e.decorate("hdbCore",{preValidation:[Gee,qee],request:t=>r0(t0(t,response)),requestWithoutAuthentication:(t,r)=>r0(t0(t,r,!0))})}a(kee,"hdbCore");async function r0(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(r0,"convertAsyncIterators");n0.exports=Fee(kee)});var a0=T((TEe,o0)=>{"use strict";var SEe=require("fs"),Fg=j();Fg.initSync();var{CONFIG_PARAMS:i0}=M(),Vee=1024*1024*1024;function $ee(e){let t=Fg.get(i0.HTTP_TIMEOUT),r=Fg.get(i0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Vee,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a($ee,"getServerOptions");o0.exports=$ee});var l0=T((REe,u0)=>{"use strict";var qg=j();qg.initSync();var{CONFIG_PARAMS:c0}=M();function Yee(){let e=qg.get(c0.HTTP_CORSACCESSLIST),t=qg.get(c0.HTTP_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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Yee,"getCORSOptions");u0.exports=Yee});var f0=T((OEe,d0)=>{"use strict";var _0=j();_0.initSync();var Kee=M();function Wee(){return _0.get(Kee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Wee,"getHeaderTimeoutConfig");d0.exports=Wee});var kg={};Ve(kg,{customFunctionsServer:()=>Jee,ready:()=>w0,start:()=>zee});function zee(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vs||(vs=I0(t),lt.http((await vs).server));let o=await vs,c=(0,Gg.dirname)(s),u=(0,Gg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!E0.has(c)){E0.add(c);try{o.register(jee(c,u))}catch(_){if(_.message==="Root plugin has already booted")qe.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:w0}}async function Jee(){try{qe.info("In Custom Functions Fastify server"+process.cwd()),qe.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qe.debug(`Custom Functions server process ${process.pid} starting up.`),await Xee();let e=g0.get(R0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vs=await I0(e)}catch(r){throw qe.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw qe.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){qe.error(`Custom Functions ${process.pid} Error: ${e}`),qe.error(e),process.exit(1)}}async function Xee(){try{qe.info("Custom Functions starting configuration."),await A0.setUsersToGlobal(),qe.info("Custom Functions completed configuration.")}catch(e){qe.error(e)}}function jee(e,t){return async function(r){try{qe.info("Custom Functions starting buildRoutes"),qe.trace("Loading fastify routes folder "+e),(0,h0.existsSync)(e)&&r.register(T0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:qe.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?qe.error(s.message):s&&qe.error(s),o()})}catch(n){qe.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function I0(e){qe.info("Custom Functions starting buildServer.");let t=(0,O0.default)(e),r=(0,m0.default)(t);r.server.headersTimeout=(0,N0.default)(),r.setErrorHandler(y0.serverErrorHandler);let n=(0,b0.default)();return n&&r.register(p0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(S0.default),await r.register(Qee),await r.after(),ig(r),qe.info("Custom Functions completed buildServer."),r}function w0(){if(vs)return vs.then?vs.then(e=>e.ready()):vs.ready()}var Gg,h0,m0,p0,S0,T0,g0,R0,qe,Qee,A0,O0,b0,N0,y0,vs,E0,C0=Ae(()=>{Gg=require("path"),h0=require("fs"),m0=v(require("fastify")),p0=v(require("@fastify/cors")),S0=v(lg()),T0=v(require("@fastify/autoload")),g0=v(j()),R0=v(M()),qe=v(V()),Qee=v(s0()),A0=v(rn()),O0=v(a0()),b0=v(l0()),N0=v(f0()),y0=v(Ff());ma();nr();E0=new Set;a(zee,"start");a(Jee,"customFunctionsServer");a(Xee,"setUp");a(jee,"buildRouteFolder");a(I0,"buildServer");a(w0,"ready")});var Vg={};Ve(Vg,{start:()=>Zee});function Zee(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,P0.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){D0||(D0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=L0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,M0.default)(s,(0,U0.realpathSync)(o))}}return i(s)},{runFirst:!0})),L0.set(r,n)}}}var M0,U0,P0,L0,D0,v0=Ae(()=>{M0=v(require("send")),U0=require("fs"),P0=v(require("serve-static")),L0=new Map;a(Zee,"start")});function rte(e,t=1,r){if($g++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:kf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===kf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});tte.push(s),await s,La.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Gf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=La.indexOf(n);o>-1&&La.splice(o,1)}if(a(i,"removeWorker"),Da){let o=Da;Da=[];for(let c of o)F0[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Yg?Yg=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),$g=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function q0(e=0,t){if(typeof e=="string")try{(0,Vf.existsSync)(e)&&(0,Vf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=nte:r=ste(t):r=Wg;let n=(0,Ma.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=F0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Yg=!0,r(o,(c,u)=>{if(!c){if(B0){let l=o._socket||new Ma.Socket({handle:o,writable:!0,readable:!0});B0.deliverSocket(l,e,u),l.resume()}else $g>0?(Da.length===0&&setTimeout(()=>{Da.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(),o.localPort=e,Da.push(o)):(console.log("start up a dynamic thread to handle request"),rte(0));xr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ma.Socket({handle:o,writable:!0,readable:!0});cte(l,c,e)}xr(!0,"socket-routed")})};let s=jc();Kg.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function Wg(e,t){let r,n=0;for(let s of La){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=qf)return qf=i,t(r);n=i}qf=0,t(r)}function nte(e,t){let r={};e.getpeername(r);let n=r.address,s=Ua.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Wg(e,o=>{Ua.set(n,{worker:o,lastUsed:i}),t(o)})}function ste(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ma.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ua.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);Wg(n,d=>{Ua.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function ote(){qf=0;for(let e of La)e.expectedIdle=e.recentELU.idle+ite,e.requests=1;La.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function cte(e,t,r){let n=ate++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Gf.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Gf.delete(n)),s.event=="destroy"&&(e.destroy(),Gf.delete(n))})}var Ao,Ma,kf,Kg,Vf,x0,ete,La,Da,F0,B0,$g,tte,Yg,qf,H0,Ua,ite,Gf,ate,G0=Ae(()=>{Ao=v(tt()),Ma=require("net"),kf=v(M()),Kg=v(V()),Vf=require("fs");Ns();x0=require("worker_threads"),ete=v($i()),La=[],Da=[],F0=[],$g=0,tte=[];x0.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(rte,"startHTTPWorker");a(q0,"startSocketServer");qf=0;a(Wg,"findMostIdleWorker");H0=36e5,Ua=new Map;a(nte,"findByRemoteAddressAffinity");a(ste,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ua)r.lastUsed+H0<e&&Ua.delete(t)},H0).unref();ite=1e3;a(ote,"updateWorkerIdleness");(0,Ao.setMonitorListener)(ote);Gf=new Map,ate=1;a(cte,"proxySocket")});var Xg={};Ve(Xg,{Request:()=>Qg,createReuseportFd:()=>$f});var k0,Qg,zg,Jg,$f,Yf=Ae(()=>{k0=require("os"),Qg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new Jg(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new zg(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},zg=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Jg=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,k0.platform)()!="win32"&&($f=require("node-unix-socket").createReuseportFd)});var K0=T((xEe,Y0)=>{"use strict";var ute=require("cluster"),Oo=j();Oo.initSync();var $0=M(),UEe=require("util"),Bs=V(),PEe=require("fs"),lte=require("fastify"),vEe=jc(),_te=require("@fastify/cors"),dte=require("@fastify/compress"),fte=require("@fastify/static"),Ete=lg(),hte=require("path"),{PACKAGE_ROOT:mte}=M(),pte=Xs(),Ste=J(),Tte=rn(),gte=$i(),{server:Rte}=(nr(),ee(Ci)),{node_request_key:BEe}=(Yf(),ee(Xg)),{authHandler:Ate,handlePostRequest:Ote,serverErrorHandler:bte,reqBodyValidationHandler:Nte}=Ff(),HEe=require("net"),{registerContentHandlers:yte}=(ma(),ee(PP)),Ite=6e4,wte=1024*1024*1024,Cte="TRUE",{CONFIG_PARAMS:il}=$0,Pa;Y0.exports={hdbServer:V0,start:V0};async function V0(e){try{Bs.info("In Fastify server"+process.cwd()),Bs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=ute.isMaster,await Lte();let t=e.securePort>0;Pa=Dte(t),await Pa.ready(),e||(e={}),e.isOperationsServer=!0;try{Rte.http(Pa.server,e),Pa.server.closeIdleConnections||await Pa.listen({port:0,host:"::"})}catch(r){throw Pa.close(),Bs.error(r),Bs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bs.fatal(t),process.exit(1)}}a(V0,"operationsServer");async function Lte(){Bs.trace("Configuring HarperDB process."),pte.setSchemaDataToGlobal(),await Tte.setUsersToGlobal(),await gte.getLicense()}a(Lte,"setUp");function Dte(e){Bs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Mte(e),r=lte(t);r.server.headersTimeout=Pte(),r.setErrorHandler(bte);let n=Ute();n&&r.register(_te,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Ete),r.register(dte),r.register(fte,{root:hte.join(mte,"studio/build-local")}),yte(r);let s=Oo.get($0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ste.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Nte,Ate],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ote(i,o)}),r.get("/health",()=>"HarperDB is running."),Bs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Dte,"buildServer");function Mte(e){let t=Oo.get(il.OPERATIONSAPI_NETWORK_TIMEOUT),r=Oo.get(il.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:wte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Mte,"getServerOptions");function Ute(){let e=Oo.get(il.OPERATIONSAPI_NETWORK_CORS),t=Oo.get(il.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Cte)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Ute,"getCORSOpts");function Pte(){return Oo.get(il.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ite}a(Pte,"getHeaderTimeoutConfig")});var rB=T((VEe,tB)=>{"use strict";var{decode:vte}=require("msgpackr"),{isMainThread:qEe,parentPort:Bte,threadId:GEe}=require("worker_threads"),Zg=It(),Hs=nt(),Hte=M(),pi=V(),W0=j(),z0=M();tt();var xte=gs(),{recordAction:Fte,recordActionBinary:qte}=(Ns(),ee(ru)),{publishToStream:Gte}=Zg,{ConsumerEvents:kte}=require("nats"),kEe={durable:Hs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Hs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Vte,$te,Yte,J0,X0;tB.exports={initialize:eR,workQueueListener:eB,setSubscription:Kte,setIgnoreOrigin:Qte,getDatabaseSubscriptions:Wte};async function eR(){X0=!0,pi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Zg.getNATSReferences();Vte=e,$te=e.info.server_name,Yte=t,J0=r}a(eR,"initialize");var Wf=new Map;function Kte(e,t,r){let n=Wf.get(e);n||Wf.set(e,n=new Map),n.set(t,r),X0||eR().then(eB)}a(Kte,"setSubscription");function Wte(){return Wf}a(Wte,"getDatabaseSubscriptions");var j0;function Qte(e){j0=e}a(Qte,"setIgnoreOrigin");var Z0=100,Q0=new Array(Z0),Kf=0;async function eB(){let e=await J0.consumers.get(Hs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Hs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Bte?.on("message",async n=>{let{type:s}=n;s===z0.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===kte.HeartbeatsMissed){let s=n.data;pi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(pi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await Q0[Kf],Q0[Kf]=zte(n).catch(s=>{pi.error(s)}),++Kf>=Z0&&(Kf=0)}catch(n){pi.error("Error consuming clustering ingest, restarting consumer",n)}Zg.clearClientCache(),await eR()}}a(eB,"workQueueListener");async function zte(e){let t=vte(e.data);Fte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=W0.get(Hte.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Hs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Hs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Hs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!j0),qte(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Hs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;pi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pi.trace(`messageProcessor nats msg id: ${e.headers.get(Hs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Wf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:jg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let w=l.map((B,K)=>({type:jg(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:jg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:w,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}W0.get(z0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Gte(e.subject.split(".").slice(0,-1).join("."),xte.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){pi.error(o)}e.ack()}a(zte,"messageProcessor");function jg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jg,"convertOperation")});var oR={};Ve(oR,{disableNATS:()=>Xte,publishToStream:()=>jf,setNATSReplicator:()=>tR,setPublishToStream:()=>jte,setSubscription:()=>iR,start:()=>Jte});function Jte(){zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ere()}function Xte(e=!0){aB=e}function jte(e,t){jf=e,iR=t}function ere(){if(aB||process.env._DISABLE_NATS)return;let e=Mn(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];tR(s,r,i)}}aR((r,n)=>{tR(r.tableName,r.databaseName,r),n&&uB(r)}),!nB&&(nB=!0)}function tR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Ft{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Le],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){uB(i)}static subscribe(){let i=new Nn;return iR(t,e,i),i}static subscribeOnThisThread(i){return i<Zte}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Qf(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=cB;return i}a(n,"getNATSTransaction")}function uB(e){let t=zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);jf(`${nR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,sR.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 sB,nR,sR,iB,oB,zf,Jf,Xf,aB,jf,iR,Zte,cB,nB,Qf,rR,lB=Ae(()=>{ge();yn();sB=v(It()),nR=v(nt()),sR=v(gs());fc();iB=v(rB()),oB=v(Dr()),zf=v(j()),Jf=v(M()),Xf=v(V());a(Jte,"start");a(Xte,"disableNATS");jf=sB.publishToStream,iR=iB.setSubscription;a(jte,"setPublishToStream");Zte=2;a(ere,"assignReplicationSource");a(tR,"setNATSReplicator");a(uB,"publishSchema");Qf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Xf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(jf(`${nR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,sR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw Xf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},rR=class extends Qf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,oB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};cB=new rR});var bB=T(No=>{"use strict";var{isMainThread:tre,parentPort:cl,threadId:ol}=require("worker_threads"),{Socket:rre,createServer:nre}=require("net"),{createServer:sre,IncomingMessage:ire}=require("http"),{createServer:ore}=require("https"),{readFileSync:va,unlinkSync:_B,existsSync:are}=require("fs"),xn=V(),Ge=j(),Rr=M(),{server:tE}=(nr(),ee(Ci)),{WebSocketServer:cre}=require("ws"),{createServer:ure}=require("tls"),{getTicketKeys:lre,restartNumber:_re,getWorkerIndex:dB}=tt(),{Headers:pB}=(kd(),ee(iU)),{recordAction:al,recordActionBinary:dre}=(Ns(),ee(ru)),{Request:SB,createReuseportFd:fB}=(Yf(),ee(Xg)),{checkMemoryLimit:fre}=$i(),TB=require("tls"),EB=TB.createSecureContext;TB.createSecureContext=function(e){if(!e.cert||!e.key)return EB(e);let t={...e};delete t.key,delete t.cert;let r=EB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){_re<=1&&xn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:JEe,CONFIG_PARAMS:Ere}=Rr;Ge.initSync();var hre=Ge.get(Ere.HTTP_SESSIONAFFINITY),cs={};No.registerServer=dR;No.httpServer=fR;No.deliverSocket=_R;No.startServers=gB;No.when_components_loaded=null;tE.http=fR;tE.request=Tre;tE.socket=gre;tE.ws=Rre;var cR=[],Zf=[],mre,bo={},eE={},pre=[],uR=[];function gB(){return No.when_components_loaded=ER().loadRootComponents(!0).then(()=>{cl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)_R(n,r,s);else if(t.requestId)Sre(t);else if(t.type===Rr.ITC_EVENT_TYPES.SHUTDOWN){xn.trace("received shutdown request",ol);for(let i in cs){let o=cs[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),xn.info("Closed all http connections",i,ol)},4e3).unref()),o.close?.(()=>{if(Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&dB()==0)try{_B(Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ol),o.cantCleanupProperly||xn.warn("Had to forcefully exit the thread",ol),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(fB&&!hre)for(let t in cs){let r=cs[t];if(isNaN(t)&&dB()==0){are(t)&&_B(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),xn.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=fB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),xn.trace("Listening on port "+t,ol)}).on("error",i)}))}Promise.all(e).then(()=>{cl?.postMessage({type:Rr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(gB,"startServers");tre||gB();function _R(e,t,r){let n=e?.read?e:new rre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=cs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=cs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(xn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(_R,"deliverSocket");var hB=new Map;function Sre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=hB.get(s),r){case"connection":i=_R(void 0,t),hB.set(s,i),i.write=(c,u,_)=>(cl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(cl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),cl.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Sre,"proxyRequest");function dR(e,t,r=!0){!+t&&t!==Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT),10));let n=cs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",mB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else cs[t]=e;e.on("unhandled",mB)}a(dR,"registerServer");function RB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT),secure:Ge.get(Rr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ge.get(Rr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(RB,"getPorts");function fR(e,t){for(let{port:r,secure:n}of RB(t))AB(r,n,t?.isOperationsServer),typeof e=="function"?uR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,dR(e,r,!1)),eE[r]=lR(uR,r),mre=lR(pre,r)}a(fR,"httpServer");function AB(e,t,r){if(!bo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ge.get(n+"_keepAliveTimeout"),headersTimeout:Ge.get(n+"_headersTimeout"),requestTimeout:Ge.get(n+"_timeout")},i=Ge.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ge.get(n+"tls_privateKey"),u=Ge.get(n+"tls_certificate"),_=Ge.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:va(c),ciphers:Ge.get("tls_ciphers"),cert:va(u),ca:_&&va(_),requestCert:!!i,ticketKeys:lre()})}let o=fre();bo[e]=(t?ore:sre)(s,async(c,u)=>{try{let l=performance.now(),d=new SB(c,u);r&&(d.isOperationsServer=!0);let f=await eE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=OB(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let B of f.headers||[])u.setHeader(B[0],B[1]);return c.baseRequest=d,u.baseResponse=f,bo[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),p=h-l,S=f.body,A;if(!f.handlesHeaders){let B=f.headers||new pB;if(S?S.length>=0&&(typeof S=="string"?B.set("Content-Length",Buffer.byteLength(S)):B.set("Content-Length",S.length),A=!0):(B.set("Content-Length","0"),A=!0),B.append){let K=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(K+=", miss"),B.append("Server-Timing",K,!0)}u.writeHead(E,B&&(B[Symbol.iterator]?Array.from(B):B)),A&&u.end(S)}let I=d.handlerPath,w=d.method;if(al(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),dre(E<400,"success",I,w),!A)if(S?.pipe){S.pipe(u),S.destroy&&u.on("close",()=>{S.destroy()});let B=0;S.on("data",K=>{B+=K.length}),S.on("end",()=>{al(performance.now()-h,"transfer",I,w),al(B,"bytes-sent",I,w)})}else S?.then?S.then(B=>{u.end(B)},_):u.end(S)}catch(l){_(l)}function _(l){let d=l.headers;u.writeHead(l.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),u.end(l.toString()),l.statusCode?l.statusCode===500?xn.warn(l):xn.info(l):xn.error(l)}a(_,"onError")}),t&&(bo[e].on("secureConnection",c=>{c._parent.startTime&&al(performance.now()-c._parent.startTime,"tls-handshake",e),al(c.isSessionReused(),"tls-reused",e)}),bo[e].isSecure=!0),dR(bo[e],e)}return bo[e]}a(AB,"getHTTPServer");function lR(e,t){let r=OB;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(lR,"makeCallbackChain");function OB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new pB}}a(OB,"unhandled");function Tre(e,t){fR(e,{requestOnly:!0,...t})}a(Tre,"onRequest");function gre(e,t){let r;if(t.securePort){let n=Ge.get("tls_privateKey"),s=Ge.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ge.get("tls_certificateAuthority");r=ure({ciphers:Ge.get("tls_ciphers"),key:va(n),cert:va(s),ca:i&&va(i),requestCert:!!t.mtls},e),cs[t.securePort]=r}return t.port&&(r=nre(e),cs[t.port]=r),r}a(gre,"onSocket");Object.defineProperty(ire.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Rre(e,t){for(let{port:r,secure:n}of RB(t)){Zf[r]||(Zf[r]=new cre({server:AB(r,n)}),Zf[r].on("connection",async(i,o)=>{try{let c=new SB(o);c.isWebSocket=!0;let u=eE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<cR.length;l++){let d=cR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){xn.warn("Error handling WebSocket connection",c)}}),Zf[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";cR.push({listener:e,protocol:s}),eE[r]=lR(uR,r)}}a(Rre,"onWebSocket");function mB(e,t){t.writeHead(404),t.end(`Not found
27
- `)}a(mB,"defaultNotFound")});async function wB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await hR.getResource(e,{});s=new SR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await hR.get(e);i&&i.delete()}s=new nE(e,t)}return n&&(n.id=e,n.user={username:t?.username},ul.put(n)),s}function mR(){return rE++,rE>65500&&(rE=1),rE}function pR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=li.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Qe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var NB,yo,yB,IB,hR,ul,rE,nE,SR,CB=Ae(()=>{ge();Lu();NB=v(Dr()),yo=v(V());Ji();yB=v(tt()),IB=v(bB());nr();hR=_t({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"}]}}]}),ul=_t({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,yB.getWorkerIndex)()===0&&(async()=>{await IB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await lt.getUser(r.user.username)),Qe(r,()=>{try{pR(r,t)}finally{ul.delete(e.id,r)}})}})();a(wB,"getSession");rE=1;a(mR,"getNextMessageId");nE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(A=>A.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,yo.trace)("Resuming subscription from",s,"from",o);let E=li.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let I=A.split("/"),w;for(let F=0;F<I.length;F++)if(I[F].indexOf("+")>-1)if(I[F]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let B=!0;I[I.length-1]==="#"&&(I.length--,B=!1),w&&(n=a(F=>{let P=F.id;if(!Array.isArray(P)||B&&P.length!==I.length)return!1;for(let Q=0;Q<I.length;Q++)if(I[Q]!=="+"&&I[Q]!==P[Q])return!1;return!0},"filter"));let K=I.indexOf("+");f.url="/"+(K>-1?I.slice(0,K):I).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Qe(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let I of A)try{let w;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,w=this.needsAcknowledge(I)):(I.acknowledge?.(),w=mR());let B=I.id;Array.isArray(B)&&(B=ha(B)),B==null&&(B=""),this.listener(h+"/"+B,I.value,w,t)}catch(w){(0,yo.warn)(w)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=mR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,pR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Qe(r,async()=>{if(!t){let n=await ul.get(this.sessionId,r);n?.doesExist()&&await pR(n,n.data,r)}await ul.delete(this.sessionId,r)}).catch(n=>{(0,yo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(pR,"publish");SR=class extends nE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=mR(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,yo.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,NB.getNextMonotonicTime)()),(0,yo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hR.put(this.sessionRecord)),t.qos}}});var TR={};Ve(TR,{bypassAuth:()=>Are,start:()=>Ore});function Are(){PB=!0}function Ore({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=MB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Ar.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Ar.error)(E)}else return(0,Ar.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&PB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,UB.getSuperUser)());let{onMessage:d,onClose:f}=MB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Ar.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function MB(e,t,r,n,s){DB||(DB=!0,tu(d=>{sE>0&&d.push({metric:"mqtt-connections",connections:sE,byThread:!0})}));let i;sE++;let o,c={protocolVersion:4},u=(0,oE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){sE--,i||(i=!0,o?.disconnect(),nn(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await lt.getUser(d.username,d.password.toString(),r),(0,iE.get)(us.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&LB.notify({username:n.username,status:us.AUTH_AUDIT_STATUS.SUCCESS,type:us.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iE.get)(us.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&LB.error({username:n.username,status:us.AUTH_AUDIT_STATUS.FAILURE,type:us.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return nn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let w=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?w(d.will.payload):void 0,delete d.will.payload}o=wB({user:n,...d}),o=await o}catch(w){return(0,Ar.error)(w),nn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:w.code||5,returnCode:w.code||128})}nn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((w,B,K,F)=>{try{let P=w.indexOf("/",1),Q=P>0?w.slice(0,P):w;f({cmd:"publish",topic:w,payload:E(B),messageId:K||Math.floor(Math.random()*1e8),qos:F.qos},Q)}catch(P){(0,Ar.error)(P),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let w of d.subscriptions){let B;try{B=(await o.addSubscription(w,w.qos>=1)).qos||0}catch(K){(0,Ar.error)(K),B=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let w=[];for(let B of d.unsubscriptions)w.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:w,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(w){(0,Ar.warn)(w),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),nn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ar.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,oE.generate)(h,c);t(S),xr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return di(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var oE,UB,iE,us,Ar,LB,PB,DB,sE,vB=Ae(()=>{oE=require("mqtt-packet");CB();UB=v(rn());ma();Ns();nr();iE=v(j()),us=v(M()),Ar=v(V()),LB=(0,Ar.loggerWithTag)("auth-event"),PB=(0,iE.get)(us.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Are,"bypassAuth");a(Ore,"start");sE=0;a(MB,"onSocket")});var ef={};Ve(ef,{component_errors:()=>Ha,loadComponent:()=>aE,loadComponentDirectories:()=>$B,setErrorReporter:()=>Ire});function $B(e,t){t&&(RR=t),e&&(AR=e);let r=[];if((0,Fn.existsSync)(gR)){let s=(0,Fn.readdirSync)(gR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,At.join)(gR,o);r.push(aE(c,RR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(aE(n,RR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{VB=!0})}function Ire(e){_l=e}async function aE(e,t,r,n,s,i){if(!HB.has(e)){HB.set(e,!0),s&&(AR=s);try{let o;n&&(Ha=new Map);let c=(0,At.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Fn.existsSync)(c)?o=n?(0,kB.getConfigObj)():(0,xB.parseDocument)((0,Fn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=OR;let u=[],_=n;for(let l in o){let d=o[l];if(Ha.set(n?l:(0,At.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,Fn.existsSync)(w=(0,At.join)(I,"node_modules",l));)if(I=(0,At.dirname)(I),I.length<(0,GB.getHdbBasePath)().length){w=null;break}if(w)f=await aE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=yre[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,_t(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Ba.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&p))for(let I of[A,S])try{if(+I&&!BB.includes(I)){let w=bR.get(NR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&ll.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!$f)&&(BB.push(I),q0(I,w))}}catch(w){console.error("Error listening on socket",I,w,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),AR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,qB.handleHDBError)("Can not reference parent directories");let I=(0,At.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==OR[l]?.files&&!(0,Fn.existsSync)(I.slice(0,w)))throw new Error(`The path '${I.slice(0,w)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,At.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let F,P,Q;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,At.join)(e,z)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),F=(0,At.relative)(e,P));let Y=!1;if(Ba.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(K,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(K,P,t)),Y)continue;for(let z of await(0,FB.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=z;_=!0;let ne=(0,At.relative)(e,re).replace(/\\/g,"/");if(F)if(ne.startsWith(F))ne=ne.slice(F.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ne}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ct=K+(K.endsWith("/")?"":"/")+ne;try{if(Ie.isFile()){let de=await Nre(re);Ba.isMainThread&&await f.setupFile?.(de,ct,re,t),t.isWorker&&await f.handleFile?.(de,ct,re,t)}else Ba.isMainThread&&await f.setupDirectory?.(ct,re,t),t.isWorker&&await f.handleDirectory?.(ct,re,t)}catch(de){de.message=`Could not load ${Ie.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,_l?.(de),((0,xa.getWorkerIndex)()===0?console:ll.default).error(de),t.set(d.path||"/",new dl(de)),Ha.set(n?l:(0,At.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,At.basename)(e)}' due to: ${h.message}`,_l?.(h),((0,xa.getWorkerIndex)()===0?console:ll.default).error(h),t.set(d.path||"/",new dl(h),null,!0),Ha.set(n?l:(0,At.basename)(e),h.message)}}if(Ba.isMainThread&&!VB&&i&&(0,xa.watchDir)(e,async()=>$B()),o.extensionModule)return await jl((0,At.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;_l?.(new Error(l)),((0,xa.getWorkerIndex)()===0?console:ll.default).error(l),Ha.set((0,At.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,_l?.(o),t.set("",new dl(o))}}}var Fn,At,Ba,xB,bR,NR,FB,xa,ll,qB,GB,bre,kB,Nre,gR,AR,VB,RR,Ha,yre,OR,BB,HB,_l,dl,tf=Ae(()=>{Fn=require("fs"),At=require("path"),Ba=require("worker_threads"),xB=require("yaml"),bR=v(j()),NR=v(M());GO();YO();KO();GP();C0();v0();FB=v(require("fast-glob")),xa=v(tt()),ll=v(V());Sh();nr();qB=v(Z());yn();ge();G0();GB=v(j()),bre=v(K0());Kd();lB();vB();kB=v(Lr());Yf();({readFile:Nre}=Fn.promises),gR=bR.get(NR.CONFIG_PARAMS.COMPONENTSROOT),AR=new Map,Ha=new Map;a($B,"loadComponentDirectories");yre={REST:pf,rest:pf,graphqlSchema:ph,jsResource:gh,fastifyRoutes:kg,login:Ah,static:Vg,operationsApi:bre,customFunctions:{},http:{},clustering:oR,authentication:Du,mqtt:TR},OR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OR,"static",{value:{files:"web/**"}});BB=[],HB=new Map;a(Ire,"setErrorReporter");a(aE,"loadComponent");dl=class extends Ft{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 ER=T((Ahe,KB)=>{var{isMainThread:YB}=require("worker_threads"),{getTables:wre}=(ge(),ee(xe)),{loadComponentDirectories:Cre,loadComponent:Lre}=(tf(),ee(ef)),{resetResources:Dre}=(Lu(),ee(sU)),Mre=MT(),Ure=Lr(),{dirname:Pre}=require("path"),{getConnection:vre}=It(),Bre=j(),Hre=M(),yR=new Map;async function xre(e=!1){!YB&&Bre.get(Hre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&vre();try{YB&&await Mre()}catch(n){console.error(n)}let t=Dre();wre(),t.isWorker=e,await Lre(Pre(Ure.getConfigFilePath()),t,"hdb",!0,yR),await Cre(yR,t);let r=[];for(let[n]of yR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(xre,"loadRootComponents");KB.exports.loadRootComponents=xre});var tt=T((bhe,Ti)=>{"use strict";var{Worker:Fre,MessageChannel:qre,parentPort:ls,isMainThread:DR,threadId:Gre,workerData:xs}=require("worker_threads"),{PACKAGE_ROOT:kre}=M(),{join:JB,isAbsolute:Vre,extname:$re}=require("path"),{server:XB}=(nr(),ee(Ci)),{watch:Yre,readdir:Kre}=require("fs/promises"),{totalmem:WB}=require("os"),fl=M(),jB=j(),Fs=V(),{randomBytes:Wre}=require("crypto"),{_assignPackageExport:Qre}=require("../../index"),zre=M(),QB=1024*1024,Si=[],fn=[],Jre=50,MR=1e4,Xre="restart",ZB="request_thread_info",eH="resource_report",tH="thread_info",rH="added-port",jre="ack",IR;Qre("threads",fn);Ti.exports={startWorker:wR,restartWorkers:PR,shutdownWorkers:nne,workers:Si,setMonitorListener:_ne,onMessageFromWorkers:sne,onMessageByType:cH,broadcast:one,broadcastWithAcknowledgement:cne,setChildListenerByType:rne,getWorkerIndex:nH,getWorkerCount:sH,getTicketKeys:iH,setMainIsWorker:ene,setTerminateTimeout:Zre,restartNumber:xs?.restartNumber||1};fn.onMessageByType=cH;fn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=fn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var UR;function Zre(e){MR=e}a(Zre,"setTerminateTimeout");function nH(){return xs?xs.workerIndex:UR?0:void 0}a(nH,"getWorkerIndex");function sH(){return xs?xs.workerCount:UR?1:void 0}a(sH,"getWorkerCount");function ene(e){UR=e}a(ene,"setMainIsWorker");var cE;function iH(){return cE||(cE=DR?Wre(48):xs.ticketKeys,cE)}a(iH,"getTicketKeys");Object.defineProperty(XB,"workerIndex",{get(){return nH()}});Object.defineProperty(XB,"workerCount",{get(){return sH()}});var oH={[ZB](e,t){une(t)},[eH](e,t){lne(t,e)}};function wR(e,t={}){let r=process.constrainedMemory?.()||WB();r=Math.min(r,WB(),2e4*QB);let n=jB.get(fl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/QB/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of fn){let _=new qre;_.existingPort=u,i.push(_),o.push(_.port2)}$re(e)||(e+=".js");let c=new Fre(Vre(e)?e:JB(kre,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:Ti.exports.restartNumber,ticketKeys:iH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:rH,port:u,threadId:c.threadId},[u]);return lE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>wR(e,t),c.on("error",u=>{console.error("Worker error:",u),Fs.error("Worker error:",u)}),c.on("exit",u=>{Si.splice(Si.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Jre?(t.unexpectedRestarts=c.unexpectedRestarts+1,wR(e,t)):Fs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{oH[u.type]?.(u,c)}),Si.push(c),fne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(wR,"startWorker");var tne=[fl.THREAD_TYPES.HTTP];async function PR(e=null,t=2,r=!0){if(DR){if(r){let{loadRootComponents:o}=ER();await o()}Ti.exports.restartNumber++,t<1&&(t=t*Si.length);let n=[],s=[];for(let o of Si.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Fs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ti.exports.restartNumber,type:fl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=tne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),MR*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===zre.ITC_EVENT_TYPES.CHILD_STARTED&&(Fs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");Fs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=qd();r&&(e==="http"||!e)&&jB.get(fl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ls.postMessage({type:Xre,workerType:e})}a(PR,"restartWorkers");function rne(e,t){oH[e]=t}a(rne,"setChildListenerByType");function nne(e){return PR(e,1/0,!1)}a(nne,"shutdownWorkers");var aH=[];function sne(e){aH.push(e)}a(sne,"onMessageFromWorkers");var CR=new Map;function cH(e,t){let r=CR.get(e);r||CR.set(e,r=[]),r.push(t)}a(cH,"onMessageByType");var ine=10;async function one(e){let t=0;for(let r of fn)try{r.postMessage(e),t++>ine&&(t=0,await new Promise(setImmediate))}catch(n){Fs.error("Unable to send message to worker",n)}}a(one,"broadcast");var uE=new Map,ane=1;function cne(e){return new Promise(t=>{let r=0;for(let n of fn)try{let s=ane++,i=a(()=>{uE.delete(s),--r===0&&t(),n!==ls&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,uE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of uE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Fs.error("Unable to send message to worker",s)}r===0&&t()})}a(cne,"broadcastWithAcknowledgement");function une(e){e.postMessage({type:tH,workers:uH()})}a(une,"sendThreadInfo");function uH(){let e=Date.now();return Si.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(uH,"getChildWorkerInfo");function lne(e,t){e.resources=t,e.resources.updated=Date.now()}a(lne,"recordResourceReport");var LR;function _ne(e){LR=e}a(_ne,"setMonitorListener");var dne=1e3,zB=!1;function fne(){zB||(zB=!0,setInterval(()=>{for(let e of Si){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LR&&LR()},dne).unref())}a(fne,"startMonitoring");var Ene=1e3;if(ls){lE(ls);for(let e=0,t=xs.addPorts.length;e<t;e++){let r=xs.addPorts[e];r.threadId=xs.addThreadIds[e],lE(r)}setInterval(()=>{let e=process.memoryUsage();ls.postMessage({type:eH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ene).unref(),IR=a(()=>new Promise((e,t)=>{ls.on("message",r),ls.postMessage({type:ZB});function r(n){n.type===tH&&(ls.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else IR=uH;Ti.exports.getThreadInfo=IR;function lE(e,t){fn.push(e),e.on("message",r=>{if(r.type===rH)r.port.threadId=r.threadId,lE(r.port);else if(r.type===jre){let n=uE.get(r.id);n&&n()}else{for(let s of aH)s(r,e);let n=CR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Fs.error(i)}}}).on("close",()=>{fn.splice(fn.indexOf(e),1)}).on("exit",()=>{fn.splice(fn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(lE,"addPort");if(DR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Kre(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(JB(n,i.name));try{for await(let{filename:i}of Yre(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ti.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ls.on("message",async e=>{let{type:t}=e;t===fl.ITC_EVENT_TYPES.SHUTDOWN&&(Ti.exports.restartNumber=e.restartNumber,ls.unref(),setTimeout(()=>{Fs.warn("Thread did not voluntarily terminate",Gre),process.exit(0)},MR).unref())})});var vw={};Ve(vw,{AUDIT_STORE_OPTIONS:()=>TH,createAuditEntry:()=>n_,openAuditStore:()=>EE,readAuditEntry:()=>Bt,setAuditRetention:()=>mne,transactionKeyEncoder:()=>SH});function EE(e){let t=e.auditStore=e.openDB(hH.AUDIT_STORE_NAME,TH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=_E){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-vR})){if((_[0]&15)===xR){let l=Bt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=hne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,vR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,fE.getWorkerIndex)()===(0,fE.getWorkerCount)()-1&&s(_E),t}function mne(e,t=_E){vR=e,_E=t}function n_(e,t,r,n,s,i,o){let c=gH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?Fa.setFloat64(0,n):En.set(Hh),u=9),f(0),f(t),d(r),Fa.setFloat64(u,e),u+=8,s?d(s):En[u++]=0,En[n?8:0]=c;let l=En.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,qa.writeKey)(E,En,u);let p=u-h-1;p>127?p>16383?(qR.error("Key or username was too large for audit entry",E),u=h+1,En[h]=0):(En.copyWithin(h+2,h+1,u),Fa.setUint16(h,p|32768),u++):En[h]=p}function f(E){E<128?En[u++]=E:E<16384?(Fa.setUint16(u,E|32768),u+=2):E<1056964608?(Fa.setUint32(u,E|3221225472),u+=4):(En[u]=255,Fa.setUint32(u+1,E),u+=5)}}function Bt(e){try{let t=e.dataView||(e.dataView=new FR(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:gH[n&7],tableId:i,get recordId(){return EH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?EH(e,l,d):void 0},getValue(f,E,h){if(n&BR||n&HR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&HR&&h)return GR(f.getEntry(this.recordId),h,f)}}}catch{return qR.error("Reading audit entry error",e),{}}}function EH(e,t,r){let n=e.subarray(t,r);return(0,qa.readKey)(n,0,r-t)}var qa,dE,hH,mH,fE,pH,qR,En,Fa,SH,TH,vR,hne,_E,BR,HR,lH,xR,_H,dH,fH,gH,FR,Pi=Ae(()=>{qa=require("ordered-binary"),dE=v(j()),hH=v(ht()),mH=v(M()),fE=v(tt()),pH=v(J());gc();qR=v(V());hE();(0,dE.initSync)();En=Buffer.alloc(1024),Fa=new DataView(En.buffer,En.byteOffset,1024),SH={writeKey(e,t,r){return e===Tc?(t.set(Tc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,qa.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,qa.readKey)(e,t,r)}},TH={encoding:"binary",keyEncoder:SH},vR=(0,pH.convertToMS)((0,dE.get)(mH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,hne=1e3,_E=1e4;a(EE,"openAuditStore");a(mne,"setAuditRetention");BR=16,HR=32,lH=1,xR=2,_H=3,dH=4,fH=5,gH={put:lH|BR,[lH]:"put",delete:xR,[xR]:"delete",message:_H|BR,[_H]:"message",invalidate:dH,[dH]:"invalidate",patch:fH|HR,[fH]:"patch"};a(n_,"createAuditEntry");a(Bt,"readAuditEntry");FR=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(EH,"readKeySafely")});var kR={};Ve(kR,{add:()=>mE,applyReverse:()=>RH,getRecordAtTime:()=>GR,rebuildUpdateBefore:()=>pE});function mE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function pE(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,mE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function RH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=pne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=AH}}function GR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Bt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":RH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===AH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Bt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var pne,AH,hE=Ae(()=>{Pi();a(mE,"add");mE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};pne={add:mE};a(pE,"rebuildUpdateBefore");a(RH,"applyReverse");AH={};a(GR,"getRecordAtTime")});function Vr(e){return e[Mt]||(e[Mt]=Object.create(null))}function AE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Re])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new hn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new hn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new hn.ClientError(`${c} must be a Date, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be an object, attempt to assign ${l}`);Vr(this)[c]=l},"set")}_={get(){let l=this[Mt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[Ne]?.[c];return f.update(E)}return f}let d=this[Ne]?.[c];if(d&&typeof d=="object"){let f=OH(d,o);if(f)return l||(l=this[Mt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[Mt];return u?.[o]!==void 0?u[o]:this[Ne]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new hn.ClientError("Can not add a property to a sealed table schema");Vr(this)[o]=c}),i("deleteProperty",function(o){Vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[Ne]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ne])),Object.assign(c,this)),c||this[Ne]}),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 OH(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[Ne]=s}},AE(r,t)),new r(e)):new SE(e);case Array:let n=new gE(e.length);n[Ne]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=OH(o,t?.elements)),n[s]=o}return n;default:return e}}function K_(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[Ne]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=K_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ne])),Object.assign(r,e)),r||e[Ne]}function wo(e,t=e[Mt]){let r;if(e[Ne]&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=wo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ne]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=kR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wo(s);r[n]=s}return r?Object.freeze(r):e[Ne]||e}function TE(e){let t=e[Ne];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Io]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ne]===s){if(TE(i))return!0}else return!0}}else{let r=e[Mt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ne]===i){if(TE(s))return!0}else return!0}else return!0}}return!1}var hn,Mt,SE,Io,gE,RE,W_=Ae(()=>{yn();hn=v(Z());hE();Mt=Symbol("own-data");a(Vr,"getChanges");a(AE,"assignTrackedAccessors");a(OH,"trackObject");SE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ne]=t}};AE(SE,{});a(K_,"collapseData");a(wo,"deepFreeze");a(TE,"hasChanges");Io=Symbol.for("has-array-changes"),gE=class extends Array{static{a(this,"TrackedArray")}[Io];constructor(t){super(t)}splice(...t){return this[Io]=!0,super.splice(...t)}push(...t){return this[Io]=!0,super.push(...t)}pop(){return this[Io]=!0,super.pop()}unshift(...t){return this[Io]=!0,super.unshift(...t)}shift(){return this[Io]=!0,super.shift()}};gE.prototype.constructor=Array;RE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var ap={};Ve(ap,{CONTEXT:()=>Re,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>mn,RECORD_PROPERTY:()=>Ne,Resource:()=>Ft,snake_case:()=>Tne,transformForSelect:()=>bE});function Tne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function bH(e,t){if(El=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(El=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new $R;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){El=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function $r(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?o?(l=i,o=o[Re]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Re]||i):l=i:(l=s,c=l[Le]??l[this.primaryKey]??null):i?o=i[Re]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){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,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,Qe(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new OE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new OE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Yr(e,t){let r=new IH.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function VR(e,t,r){let n=e[Ne];if(n){let s=e[Mt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function bE(e,t){let r=t?.propertyResolvers,n=t[Re],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):VR(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(VR(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(VR(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=bE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var NH,yH,IH,Re,Le,mn,Ne,Sne,Ft,OE,El,$R,yn=Ae(()=>{NH=require("crypto");fc();yH=require("../../index"),IH=v(Z());W_();Ji();mf();Re=Symbol.for("context"),Le=Symbol.for("primary-key"),mn=Symbol("is-collection"),Ne=Symbol("stored-record"),Sne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ft=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let n=r?.[Re];this[Re]=n!==void 0?n:r||null}static get=$r(function(t,r,n,s){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&&!c.selectApplied){let _=bE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=$r(function(t,r,n,s){if(Array.isArray(s)&&t[mn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Yr(t,"put")},{hasContent:!0,type:"update"});static patch=$r(function(t,r,n,s){return t.patch?t.patch(s,r):Yr(t,"patch")},{hasContent:!0,type:"update"});static delete=$r(function(t,r,n,s){return t.delete?t.delete(r):Yr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,NH.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Qe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Yr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=$r(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yr(t,"delete")},{hasContent:!1,type:"update"});static post=$r(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=$r(function(t,r,n,s){return t.connect?t.connect(s,r):Yr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=$r(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yr(t,"subscribe")},{type:"read"});static publish=$r(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.publish?t.publish(s,r):Yr(t,"publish")},{hasContent:!0,type:"create"});static search=$r(function(t,r,n,s){let i=t.search?t.search(r):Yr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=bE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=$r(function(t,r,n,s){return t.search?t.search(s,r):Yr(t,"search")},{hasContent:!0,type:"read"});static copy=$r(function(t,r,n,s){return t.copy?t.copy(s,r):Yr(t,"copy")},{type:"create"});static move=$r(function(t,r,n,s){return t.move?t.move(s,r):Yr(t,"move")},{type:"delete"});post(t){if(this[mn])return this.constructor.create(this[Le],t,this[Re]);Yr(this,"post")}static isCollection(t){return t?.[mn]}static coerceId(t){return t}static parseQuery(t){return hf(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Sne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:bH(t,this),isCollection:El}}let i=bH(t,this);return El?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Re],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;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 _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Le]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[mn]=!0),s}subscribe(t){return new Nn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Nn}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[Le]}getContext(){return this[Re]}};Ft.prototype[Re]=null;(0,yH._assignPackageExport)("Resource",Ft);a(Tne,"snake_case");OE=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(bH,"pathToId");$R=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a($r,"transactional");a(Yr,"missingMethod");a(VR,"selectFromObject");a(bE,"transformForSelect")});function CH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Ga||((0,NE.onMessageByType)(wH,l=>{LH(l.path)}),Ga=Object.create(null));let o=Ga[s]||(Ga[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ha(t);let u=new KR(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function LH(e,t){if(!Ga)return;let r=Ga[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Bt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ha(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,YR.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,p)}catch(p){console.error(p),(0,YR.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function DH(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,NE.broadcast)({type:wH,path:s}),LH(s,!0)})}}var YR,NE,wH,Ga,Khe,KR,MH=Ae(()=>{YR=v(V()),NE=v(tt());fc();Lu();Pi();wH="transaction",Khe=Buffer.alloc(4096);a(CH,"addSubscription");KR=class extends Nn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(LH,"notifyFromTransactionData");a(DH,"listenToCommits")});var Ng={};Ve(Ng,{coerceType:()=>yE,makeTable:()=>CE,setServerUtilities:()=>wne,updateResource:()=>IE});function CE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),DH(i,u);let S=qh(i,n,u),A=0,I,w,B,K={},F=Promise.resolve(),P,Q,Y;for(let k of p)(k.assignCreatedTime||k.name==="__createdtime__")&&(P=k),(k.assignUpdatedTime||k.name==="__updatedtime__")&&(Q=k),k.expiresAt&&(Y=k),k.isPrimaryKey&&(K=k);let z,re=[],Ie=[],ne=1,ct=2,de={},ut={},Tn=864e5,aA,Cl,Vs,cA=!1,kE,yx=i.getRange({start:!1,end:!1}).constructor,Ix=10,wx=6;E&&_A();class Ke extends Ft{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=P;static updatedTimeProperty=Q;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),w=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let N=a(b=>{let y=this.sources.slice(0,-1);if(y=y.filter(L=>L[b]&&(!L[b].reliesOnPrototype||L.prototype[b])),y.length>0)if(y.length===1){let L=y[0];return(D,U,x)=>{if(D?.source!==L)return L[b](U,x,D)}}else return(L,D,U)=>{let x=[];for(let W of y){if(L?.source===W)break;x.push(W[b](D,U,L))}return Promise.all(x)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],O=a(b=>{if(R[b]&&(!R[b].reliesOnPrototype||R.prototype[b]))return(y,L,D)=>{if(!y?.source)return R[b](L,D,y)}},"getApplyToCanonicalSource");return de={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},ut={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")},(async()=>{let b=!1,y=a(async(L,D)=>{let U=L.value,x=L.table?rt[c][L.table]:Ke;if(c===qn.SYSTEM_SCHEMA_NAME&&(L.table===qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),L.id===void 0&&(L.id=U[x.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let W=await x.getResource(L.id,D,ka);switch(L.type){case"put":return W._writeUpdate(U,!0,ka);case"patch":return W._writeUpdate(U,!1,ka);case"delete":return W._writeDelete(ka);case"publish":return W._writePublish(U,ka);case"invalidate":return W.invalidate(ka);default:Je.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let D=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Co.getWorkerIndex)()):(0,Co.getWorkerIndex)()===0,U=L&&D&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U){let x;for await(let W of U)try{if(!(W.type==="transaction"?W.writes[0]:W)){Je.error("Bad subscription event",W);continue}if(W.source=m,x)if(W.beginTxn)x.resolve();else{y(W,x);continue}if(W.type==="end_txn")continue;let le=Qe(W,()=>{if(W.type==="transaction"){let te=[];for(let se of W.writes)try{te.push(y(se,W))}catch(He){throw He.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(W),He}return Promise.all(te)}else if(W.type==="define_schema"){let te=this.attributes.slice(0),se;for(let He of W.attributes)te.find(ie=>ie.name===He.name)||(te.push(He),se=!0);se&&(_t({table:s,database:c,attributes:te,origin:"cluster"}),Rl.signalSchemaChange(new Al.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return W.beginTxn?(x=W,y(W,W),new Promise(te=>{x.resolve=te})):y(W,W)});b&&(await le,Rl.signalUserChange(new Al.UserEventMsg(process.pid))),W.onCommit&&(le?.then?le.then(W.onCommit):W.onCommit())}catch(Se){Je.error("error in subscription handler",Se)}}}catch(L){Je.error(L)}})(),this}static getResource(m,g,N){let R=super.getResource(m,g,N);if(m!=null){Qa(m);try{if(R.hasOwnProperty(Ne))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!N?.async||i.cache?.get(m),b=Nr(g),y=b.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return VE(m,g,{transaction:y},O,L=>{if(L?IE(R,L):R[Ne]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let D=$E(m,L,g,R);if(D)return b?.disregardReadTxn(),R[WR]=!0,zR(D,U=>(IE(R,U),R))}return R})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return R}ensureLoaded(){let m=$E(this[Le],this[Kr],this[Re]);if(m)return this[WR]=!0,zR(m,g=>{this[Kr]=g,this[Ne]=g.value,this[Tl]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Tn=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Tn=Tn||(d+f)/4,KE()}static enableAuditing(m=!0){E=m,m&&_A(),Ke.audit=m}static coerceId(m){return m===""?null:yE(m,K)}static async dropTable(){if(delete rt[c][s],c===o){for(let m of p)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.tableName+"/"),i.drop(),await l.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));Rl.signalSchemaChange(new Al.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[mn])return this.search(m);if(this[Le]===null){if(m?.conditions)return this.search(m);let g=Ke.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Re]?.returnNonexistent)return this}allowRead(m,g){let N=Dl(m);if(N?.read){if(N.isSuperUser)return!0;let R=N.attribute_permissions,O=g?.select;if(R?.length>0||cA&&O){if(g||(g={}),O){let b=R?.length>0&&QR(R,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let D=Vs[L]?.definition?.tableClass;if(D){if(y.name||(y={name:y}),!D.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else g.select=R.filter(b=>b.read&&!Vs[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Dl(m);if(N?.update){let R=N.attribute_permissions;if(R?.length>0){let O=QR(R,"update");for(let b in g)if(!O[b])return!1;for(let b of R){let y=b.attribute_name;!b.update&&!(y in g)&&(g[y]=this.getProperty(y))}}return!0}}allowCreate(m,g){if(this[mn]){let N=Dl(m);if(N?.insert){let R=N.attribute_permissions;if(R?.length>0){let O=QR(R,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Dl(m)?.delete}update(m,g){if(!Nr(this[Re]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;return typeof m=="object"&&m&&(g?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ne]={},this[Mt]=m):(R=this[Mt],R&&(m=Object.assign(R,m)),this[Mt]=R=m)),this._writeUpdate(this[Mt],g),this}addTo(m,g){if(typeof g=="number")this[hl]===PH?this.set(m,(+this.getProperty(m)||0)+g):(this[hl]||this.update(),this.set(m,new RE(g)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,g){if(typeof g=="number")return this.addTo(m,-g);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let g=this[Re],N=this[Le];Qa(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Kr],nodeName:this[Re]?.nodeName,before:de.invalidate?.bind(this,g,N),beforeIntermediate:ut.invalidate?.bind(this,g,N),commit:(O,b)=>{if(b?.version>O)return;let y=null;for(let L in r)y||(y={}),y[L]=this.getProperty(L);S(N,y,this[Kr],O,ml,E,this[Re],0,"invalidate")}})}static evict(m,g,N){let R=this.Source,O;if(!((w||E)&&(!g||(O=i.getEntry(m),!O||!g)||O.version!==N))){if(w){if(i.hasLock(m,O.version))return;let b;for(let y in r)b||(b={}),b[y]=g[y];if(b)return S(m,b,O,N,pl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Ll(m,g,null)}),E?S(m,null,O,N,pl,null,null,0,null,!0):i.remove(m,N)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=s,m.schema||=c,qH.operation(m,g)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,g,N){let R=this[Re],O=Nr(R),b=this[Le];Qa(b);let y=this[Kr];this[hl]=g?PH:Nne;let L={key:b,store:i,entry:y,nodeName:R?.nodeName,validate:D=>{m||(m=this[Mt]),g||m&&TE(m)?(this.validate(m,!g),R?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(D):Q.type==="String"?new Date(D).toISOString():D),g&&(t&&m[t]!==b&&(m[t]=b),P&&(y?.value?m[P.name]=y?.value[P.name]:m[P.name]=P.type==="Date"?new Date(D):P.type==="String"?new Date(D).toISOString():D),m=wo(m)))):O.removeWrite(L)},before:g?de.put?()=>de.put(R,b,m):null:de.patch?()=>de.patch(R,b,m):de.put?()=>de.put(R,b,wo(this)):null,beforeIntermediate:g?ut.put?()=>ut.put(R,b,m):null:ut.patch?()=>ut.patch(R,b,m):ut.put?()=>ut.put(R,b,wo(this)):null,commit:(D,U,x)=>{x&&(R&&U?.version>(R.lastModified||0)&&(R.lastModified=U.version),this[Kr]=U,g||(this[Ne]=U?.value??null)),this[Mt]=m,this[Tl]=D;let W=U?.value,Se=m;if(this[hl]=0,U?.version>D)if(E){let He=U.localTime,ie=U.version;for(;Se&&(He>D||ie>D&&He>0);){let _e=u.get(He),ke=Bt(_e);if(ie=ke.version,ie>D)if(ke.type==="patch"){let Ue=ke.getValue(i);Se=pE(Se,Ue)}else(ke.type==="put"||ke.type==="delete")&&(Se=null);He=ke.previousLocalTime}}else g?Se=null:Se=pE(Se,W);let le=wo(this,Se);this[Ne]=le;let te;g||(te=m),Ll(b,W,le);let se=g?"put":"patch";S(b,le,U,D,0,E,R,R.expiresAt||(d?d+Date.now():0),se,!1,te)}};O.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[mn]){for await(let g of this.search(m))(await Ke.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ne]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[Le];Qa(N);let R=this[Re];return g.addWrite({key:N,store:i,resource:this,nodeName:R?.nodeName,before:de.delete?.bind(this,R,N),beforeIntermediate:ut.delete?.bind(this,R,N),commit:(O,b,y)=>{let L=b?.value;y&&(R&&b?.version>(R.lastModified||0)&&(R.lastModified=b.version),IE(this,b)),!(b?.version>O)&&(Ll(this[Le],L),Je.trace("Write delete entry",N,O),E||h?(S(N,null,this[Kr],O,0,E,this[Re],0,"delete"),E||KE()):i.remove(this[Le]))}}),!0}search(m){let g=this[Re],N=Nr(g);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Le]&&(R=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(R));let O,b={};function y(oe,Ot){let je;switch(Ot){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');je=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Ot)}let Ut=je&&{},gn;for(let Pe of oe){if(Pe.conditions){Pe.conditions=y(Pe.conditions,Pe.operator);continue}let Ze=Pe[0]??Pe.attribute,Rn=Ze==null?K:Ms(p,Ze);if(Rn){if(je){let Ni=mi(Ze),Gn=Ut[Ni];Gn?(Gn.push(Pe),gn=!0):Ut[Ni]=[Pe]}Rn.type&&(Pe[1]===void 0?Pe.value=D(Pe.value,Rn):Pe[1]=D(Pe[1],Rn))}else if(Ze!=null)throw(0,pn.handleHDBError)(new Error,`${Ze} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return oe;if(gn)for(let Pe in Ut){let Ze=Ut[Pe],Rn=Ze.length;if(Rn>1)for(let Ni=0;Ni<Rn;Ni++){let Gn=Ze[Ni];if(Gn.comparator==="ge"||Gn.comparator==="greater_than_equal")for(let $s=0;$s<Rn;$s++){let Mo=Ze[$s];(Mo.comparator==="le"||Mo.comparator==="less_than_equal")&&(Gn.comparator="between",Gn.value=[Gn.value,Mo.value],oe.splice(oe.indexOf(Mo),1))}if(Gn.comparator==="equals"||!Gn.comparator){for(let $s=0;$s<Rn;$s++)if($s!==Ni){let Mo=Ze[$s];oe.splice(oe.indexOf(Mo),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,Ot){if(m.enforceExecutionOrder)return oe;for(let je of oe)je.conditions&&(je.conditions=L(je.conditions,je.operator));return oe.length>1&&Ot!=="or"?(0,FH.sortBy)(oe,ag(Ke)):oe}a(L,"orderConditions");function D(oe,Ot){return Array.isArray(oe)?oe.map(je=>yE(je,Ot)):yE(oe,Ot)}a(D,"coerceTypedValues");let U=m.operator;(R.length>0||U)&&(R=y(R,U));let x=typeof m.sort=="object"&&m.sort,W;if(x&&U!=="or"){let oe=x.attribute;if(O=R.find(Ot=>mi(Ot.attribute)===mi(oe)),!O){if(!Ms(p,oe))throw(0,pn.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);O={attribute:oe},R.push(O)}O.descending=!!x.descending}R=L(R,U),x&&(R[0]===O?x.next&&(W={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&R.splice(R.indexOf(O),1),W=x));function Se(oe,Ot){let je=oe[0];if(Ot==="or"){let Ut=te(je);for(let Pe=1;Pe<oe.length;Pe++){let Ze=oe[Pe],Rn=te(Ze);Ut=Ut.concat(Rn)}let gn=new Set;return Ut.filter(Pe=>{let Ze=Pe.key??Pe;return gn.has(Ze)?!1:(gn.add(Ze),!0)})}else{let Ut=te(je),gn=oe.slice(1).map(Pe=>zu(Pe,Ke,g,b)).filter(Boolean);return gn.length>0?uA(Ut,se,g,gn):Ut}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):Qu(oe,N,oe.descending||le,Ke,m.allowFullScan,b)}a(te,"executeCondition");let se=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:U,postOrdering:W,selectApplied:!!se};let He=N.useReadTxn(),ie=Se(R,U);(m.offset||m.limit!==void 0)&&(ie=ie.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let _e=m.ensureLoaded!==!1,ke=Ke.transformEntryForSelect(se,g,b,_e,!0),Ue=Ke.transformToOrderedSelect(ie,se,W,g,ke);return Ue.onDone=()=>{Ue.results=null,N.doneReadTxn()},Ue.selectApplied=!0,Ue}static transformToOrderedSelect(m,g,N,R,O){let b=new yx;if(N){m=uA(m,g,R,null);let y;b.iterate=function(){let D,U=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,W=N.dbOrderedAttribute,Se,le,te=!0;function se(ie){let _e=ie.next&&se(ie.next),ke=ie.descending;return(Ue,oe)=>{let Ot=YE(Ue,ie.attribute,R),je=YE(oe,ie.attribute,R),Ut=ke?(0,Lo.compareKeys)(je,Ot):(0,Lo.compareKeys)(Ot,je);return Ut===0?_e?.(Ue,oe)||0:Ut}}a(se,"createComparator");let He=se(N);return{async next(){let ie;if(D)if(ie=D.next(),ie.done){if(x)return b.onDone&&b.onDone(),ie}else return{value:await O(ie.value)};y=[],Se&&y.push(Se);do if(ie=await U.next(),ie.done){if(x=!0,y.length)break;return b.onDone&&b.onDone(),ie}else{let _e=ie.value;if(_e?.then&&(_e=await _e),W){let ke=YE(_e,W,R);if(te)te=!1,le=ke;else if(ke!==le){le=ke,Se=_e;break}}y.push(_e)}while(!0);return N.isGrouped,y.sort(He),D=y[Symbol.iterator](),ie=D.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await O(ie.value)}},return(){b.onDone&&b.onDone(),U.return()},throw(){b.onDone&&b.onDone(),U.throw()}}};let L=a(D=>{if(typeof g=="object"&&Array.isArray(D.attribute))for(let U=0;U<g.length;U++){let x=g[U],W;if(x.name===D.attribute[0]){for(W=x.sort||(x.sort={});W.next;)W=W.next;W.attribute=D.attribute.slice(1),W.descending=D.descending}else x===D.attribute[0]&&(g[U]=W={name:x,sort:{attribute:D.attribute.slice(1),descending:D.descending}})}D.next&&L(D.next)},"applySortingOnSelect");L(N)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(O);return b}static transformEntryForSelect(m,g,N,R,O){if(m&&(m===t||m?.length===1&&m[0]===t)){let D=a(U=>U?.key??U,"transform");return m===t?D:m.asArray?U=>[D(U)]:U=>({[t]:D(U)})}let b;R&&w&&!m?.every(D=>{let U;return typeof D=="object"?U=D.name:U=D,r[U]||U===t})&&(b=!0);let y,L=a(D=>{let U;if(D){if(kE=D,U=D.value||D.deref?.(),!U&&(D.key===void 0||D.deref)){if(D=VE(D.key??D,g,{transaction:Nr(g).getReadTxn(),lazy:m?.length<4},!1,x=>x),D?.then)return D.then(L);U=D?.value}if(b&&(D.metadataFlags&(ml|pl)||D.expiresAt&&D.expiresAt<Date.now())){let x=$E(D.key??D,D,g);if(x?.then)return x.then(L)}}if(U==null)return O?Va.SKIP:U;if(m&&!(m[0]==="*"&&m.length===1)){let x,W=a((le,te)=>{let se;typeof le=="object"?se=le.name:se=le;let He=Vs?.[se],ie;if(He){let _e=N?.[se];if(_e)if(_e.fromRecord)ie=_e.fromRecord(U);else{let Ue=mi(D.key);ie=_e.get(Ue),ie||(ie=[])}else ie=He(U,g,D);let ke=a(Ue=>{if(Ue&&typeof Ue=="object"){let oe=He.definition?.tableClass||Ke;y||(y={});let Ot=y[se]||(y[se]=oe.transformEntryForSelect(se===le?null:le.select||(Array.isArray(le)?le:null),g,_e,R));if(Array.isArray(Ue)){let je=[],Ut=oe.transformToOrderedSelect(Ue,le.select,typeof le.sort=="object"&&le.sort,g,Ot)[Symbol.asyncIterator](),gn=a(Ze=>{for(;!Ze.done;){if(Ze?.then)return Ze.then(gn);je.push(Ze.value),Ze=Ut.next()}te(je,se)},"nextValue"),Pe=gn(Ut.next());Pe&&(x||(x=[]),x.push(Pe));return}else if(Ue=Ot(Ue),Ue?.then){x||(x=[]),x.push(Ue.then(je=>te(je,se)));return}}te(Ue,se)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(ke))):ke(ie);return}else ie=U[se],ie&&typeof ie=="object"&&se!==le&&(ie=this.transformEntryForSelect(le.select||le,g,null)({value:ie}));te(ie,se)},"selectAttribute"),Se;if(typeof m=="string")W(m,le=>{Se=le});else if(Array.isArray(m))if(m.asArray)Se=[],m.forEach((le,te)=>{le==="*"?m[te]=U:W(le,se=>Se[te]=se)});else{Se={};let le=m.forceNulls;for(let te of m)if(te==="*")for(let se in U)Se[se]=U[se];else W(te,(se,He)=>{se===void 0&&le&&(se=null),Se[He]=se})}else throw new pn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>Se):Se}return U},"transform");return L}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||_t({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=!m.rawEvents,N=CH(Ke,this[Le]??null,function(y,L,D,U){try{let x=L.getValue?.(i,g);if(!x&&L.type==="patch"&&g){let W=i.getEntry(y);W?.version===L.version?x=W.value:x=L.getValue?.(i,!0,D)}this.send({id:y,timestamp:D,value:x,version:L.version,type:L.type,beginTxn:U})}catch(x){Je.error(x)}},m.startTime||0,this[mn]);this[mn]&&(N.includeDescendants=!0,m.onlyChildren&&(N.onlyChildren=!0)),m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let R=this[Le],O=m.previousCount;O>1e3&&(O=1e3);let b=m.startTime;if(this[mn]){if(b){if(O)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:L}of u.getRange({start:b,exclusiveStart:!0})){let D=Bt(L);if(D.tableId!==n)continue;let U=D.recordId;(R==null||HH(R,U))&&N.send({id:U,timestamp:y,...D}),N.startTime=y}}else if(O){let y=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let U=Bt(D);if(U.tableId!==n)continue;let x=U.recordId;if(R==null||HH(R,x)){let W=U.getValue(i,g,L);if(y.push({id:x,timestamp:L,value:W,version:U.version,type:U.type}),--O<=0)break}}catch(U){Je.error("Error getting history entry",L,U)}for(let L=y.length;L>0;)N.send(y[--L]);y[0]&&(N.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:L,version:D,localTime:U}of i.getRange({start:R??!1,end:R==null?void 0:[R,Lo.MAXIMUM_KEY],versions:!0}))L&&N.send({id:y,version:D,timestamp:U,value:L})}else{O&&!b&&(b=0);let y=this[Kr]?.localTime;if(y===Fh&&(i.cache?.delete(R),this[Kr]=i.getEntry(R),Je.warn("re-retrieved record",y,this[Kr]?.localTime),y=this[Kr]?.localTime),Je.trace("Subscription from",b,"from",R,y),b<y){let L=[],D=y;do{let U=u.get(D);if(U){m.omitCurrent=!0;let x=Bt(U),W=x.getValue(i,g,D);L.push({id:R,value:W,timestamp:D,...x}),D=x.previousLocalTime}else break;O&&O--}while(D>b&&O!==0);for(let U=L.length;U>0;)N.send(L[--U]);N.startTime=y}!m.omitCurrent&&this.doesExist()&&N.send({id:R,version:this[Tl],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[Ne]||this[hl])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),R=this[Le]||null;Qa(R);let O=this[Re];N.addWrite({key:R,store:i,entry:this[Kr],nodeName:O?.nodeName,validate:()=>{this.validate(m)},before:de.publish?.bind(this,O,R,m),beforeIntermediate:ut.publish?.bind(this,O,R,m),commit:(b,y,L)=>{y===void 0&&h&&!E&&KE(),S(R,y?.value??null,y,y?.version||b,0,!0,O,y?.expiresAt,"message",!1,m)}})}validate(m,g){let N,R=a((O,b,y)=>{if(b.type&&O!=null)if(g&&O.__op__&&(O=O.value),b.properties){typeof O!="object"&&(N||(N=[])).push(`Property ${y} must be an object${b.type?" ("+b.type+")":""}`);let L=b.properties;for(let D=0,U=L.length;D<U;D++){let x=L[D],W=R(O[x.name],x,y+"."+x.name);W&&(O[x.name]=W)}}else switch(b.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(L=>typeof L=="string")||(N||(N=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(b.elements)for(let L=0,D=O.length;L<D;L++){let U=O[L],x=R(U,b.elements,y+"[*]");x&&(O[L]=x)}}else(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}b.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,b=p.length;O<b;O++){let y=p[O];if(!y.relationship&&(!g||y.name in m)){let L=R(m[y.name],y,y.name);L&&(m[y.name]=L)}}if(N)throw new pn.ClientError(N.join(". "))}getUpdatedTime(){return this[Tl]}wasLoadedFromSource(){return w?!!this[WR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let N of m){if(!N.name)throw new pn.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");g.push(N)}return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static async removeAttributes(m){let g=p.filter(N=>!m.includes(N.name));return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,N=5e3,R=1e3,O;g>N&&!m?.exactCount&&(O=R);let b=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&b++;if(O){let y=b;b=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))se!=null&&b++;let L=O*2,D=(b+y)/L,U=Math.pow((b-y+1)/O/2,2)+D*(1-D)/L,x=Math.max(Math.sqrt(U)*g,1),W=Math.round(D*g),Se=Math.max(W-1.96*x,0),le=Math.min(W+1.96*x,g),te=Math.pow(10,Math.round(Math.log10(x)));return te>W&&(te=te/10),b=Math.round(W/te)*te,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(le)]}}return{recordCount:b}}static updatedAttributes(){Vs=this.propertyResolvers={$id:(m,g,N)=>({value:N.key}),$updatedtime:(m,g,N)=>N.version,$record:(m,g,N)=>N?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(cA=!0,g.to)m.elements?.definition?(Vs[m.name]=m.resolve=(N,R,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?Qu({attribute:g.to,value:b},Nr(R).getReadTxn(),!1,y).asArray:y.search([{attribute:g.to,value:b}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(g.from){let N=m.definition||m.elements?.definition;N?(Vs[m.name]=m.resolve=(R,O,b)=>{let y=R[g.from];if(y!==void 0){if(m.elements){let L,D=y.map(U=>{let x=b?N.tableClass.primaryStore.getEntry(U,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(U,O);return x?.then&&(L=!0),x});return g.filterMissing?L?Promise.all(D).then(U=>U.filter(xH)):D.filter(xH):L?Promise.all(D):D}return b?N.tableClass.primaryStore.getEntry(y,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(y,O)}},m.set=(R,O)=>{if(Array.isArray(O)){let b=O.map(y=>y[Le]||y[N.tableClass.primaryKey]);R[g.from]=b}else{let b=O[Le]||O[N.tableClass.primaryKey];R[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}AE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:R}of u.getRange({start:0,end:m}))await Sl(),Bt(R).tableId===n&&(g=u.remove(N));await g}static async*getHistory(m=0,g=1/0){for(let{key:N,value:R}of u.getRange({start:m,end:g})){await Sl();let O=Bt(R);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user})}}static async getHistoryOfRecord(m){let g=[];if(m==null)throw new Error("An id is required");let N=i.getEntry(m);if(!N)return g;let R=N.localTime;if(!R)throw new Error("The entry does not have a local audit time");let O=0;do{await Sl();let b=u.get(R);if(b){let y=Bt(b);g.push({id:y.recordId,localTime:R,version:y.version,type:y.type,value:y.getValue(i,!0,R),user:y.user}),R=y.previousLocalTime}else break}while(O<1e3&&R);return g.reverse()}static cleanup(){z?.remove()}}Ke.updatedAttributes();let Cx=Ke.prototype;return Cx[bne]=!0,d&&Ke.setTTLExpiration(d/1e3),Y&&Lx(),Ke;function Ll(k,m,g){let N;for(let R in r){let O=r[R],b=O.isIndexing,y=g?.[R],L=m?.[R];if(y===L&&!b)continue;N=!0;let D=O.indexNulls,U=(0,gl.getIndexedValues)(L,D);if(U){UH&&O.prefetch(U.map(x=>({key:x,value:k})),BH);for(let x=0,W=U.length;x<W;x++)O.remove(U[x],k)}if(U=(0,gl.getIndexedValues)(y,D),U){UH&&O.prefetch(U.map(x=>({key:x,value:k})),BH);for(let x=0,W=U.length;x<W;x++)O.put(U[x],k)}}return N}a(Ll,"updateIndices");function Qa(k){switch(typeof k){case"number":return!0;case"string":if(k.length<659)return!0;if(k.length>vH)throw new Error("Primary key size is too large: "+k.length);break;case"object":if(k===null)return!0;break;case"bigint":if(k<2n**64n&&k>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof k)}if((0,Lo.writeKey)(k,yne,0)>vH)throw new Error("Primary key size is too large: "+k.length);return!0}a(Qa,"checkValidId");function VE(k,m,g,N,R){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,k);let b=i.getEntry(k,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),R(b,k)},"whenPrefetched");return N?O():ne>0?(ne--,O()):new Promise((b,y)=>{ne===0?(ne--,i.prefetch([k],()=>{L(),D()})):(re.push(k),Ie.push(D),re.length>wx&&(ne--,L()));function L(){if(re.length>0){let U=Ie;i.prefetch(re,()=>{ne===-1?L():ne++;for(let x of U)x()}),re=[],Ie=[],ct>2&&ct--}else ne=ct,ct<Ix&&ct++}a(L,"prefetch");function D(){try{b(O())}catch(U){y(U)}}a(D,"load")})}a(VE,"loadLocalRecord");function Dl(k){if(!k?.role)return;let m=k.role.permission;if(m.super_user)return Ine;let g=m[c],N,R=g?.tables;if(R)return R[s];if(c==="data"&&(N=m[s])&&!N.tables)return N}a(Dl,"getTablePermissions");function $E(k,m,g,N){if(w){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(ml|pl)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,nn(!R,"cache-hit",s)),R){let O=lA(k,m,g).then(b=>(b?.value?.[Ne]&&Je.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&N?.allowStaleWhileRevalidate?.(m,k)){if(O.catch(b=>Je.warn(b)),g?.onlyIfCached&&!N.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return O}}}a($E,"ensureLoadedFromSource");function Nr(k){let m=k?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new zi,m.lmdbDb=i,m;m=g}while(!0)}else return new $_}a(Nr,"txnForContext");function YE(k,m,g){if(!k)return;kE=k;let N=k.value||k.deref?.()||(kE=i.getEntry(k.key))?.value;if(typeof m=="object"){let O=Vs,b=N;for(let y=0,L=m.length;y<L;y++){let D=m[y],U=O?.[D];b=U&&b?U(b,g,!0)?.value:b?.[D],O=U?.definition?.tableClass?.propertyResolvers}return b}let R=Vs[m];return R?R(N,g):N[m]}a(YE,"getAttributeValue");function uA(k,m,g,N){let R=Nr(g).getReadTxn(),O=N?.length,b={transaction:R,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function y(L,D){let U=L?.value;if(!U)return Va.SKIP;for(let x=0;x<O;x++)if(!N[x](U,L))return Va.SKIP;return D!==void 0&&(L.key=D),L}if(a(y,"processEntry"),O>0||!k.hasEntries){let L=k.map(D=>typeof D=="object"&&D.key!==void 0?O>0?y(D):D:D==null?Va.SKIP:VE(D,g,b,!1,y));return Array.isArray(k)&&(L=L.filter(D=>D!==Va.SKIP)),L.hasEntries=!0,L}return k}a(uA,"transformToEntries");async function lA(k,m,g){let N=m?.metadataFlags,R=m?.version,O,b;if(!i.attemptLock(k,R,()=>{clearTimeout(b);let U=i.getEntry(k);!U||!U.value||U.metadataFlags&(ml|pl)?O(lA(k,i.getEntry(k),g)):O(U)}))return new Promise(U=>{O=U,b=setTimeout(()=>{i.unlock(k,R)},One)});let y=m?.value,L={requestContext:g,replacingRecord:y,replacingVersion:R,source:null,resourceCache:g?.resourceCache},D=g?.responseHeaders;return new Promise((U,x)=>{let W;zR(Qe(L,async Se=>{let le=performance.now(),te,se,He;try{for(let Ue of Ke.sources)if(Ue.get&&(!Ue.get.reliesOnPrototype||Ue.prototype.get)&&(L.source=Ue,te=await Ue.get(k,L),te))break;He=N&ml;let _e=L.lastModified||He&&R;se=He||_e>R||!y,_e||(_e=(0,gl.getNextMonotonicTime)());let ke=performance.now()-le;if(xr(ke,"cache-resolution",s),D&&D.append("Server-Timing",`cache-resolve;dur=${ke.toFixed(2)}`),Se.timestamp=_e,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==k&&(te[t]=k)}W=!0,U({version:_e,value:te})}catch(_e){_e.message+=` while resolving record ${k} for ${s}`,y&&((_e.code==="ECONNRESET"||_e.code==="ECONNREFUSED"||_e.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(_e.statusCode===500||_e.statusCode===502||_e.statusCode===503||_e.statusCode===504))?(U({version:R,value:y}),Je.trace(_e.message,"(returned stale record)")):x(_e),L.transaction.abort();return}if(g?.noCacheStore){L.transaction.abort();return}Nr(L).addWrite({key:k,store:i,entry:m,nodeName:"source",commit:(_e,ke)=>{if(ke?.version!==R)return;let Ue=Ll(k,y,te);te?(ut.put?.(L,k,te),S(k,te,ke,_e,0,E&&se||null,L,L.expiresAt,"put",!!He)):(ut.delete?.(L,k),E||h?S(k,null,ke,_e,0,E&&se||null,L,0,"delete",!!He):i.remove(k,R))}})}),()=>{i.unlock(k,R)},Se=>{i.unlock(k,R),W&&Je.error("Error committing cache update",Se)})})}a(lA,"getFromSource");function KE(){if(Tn!==aA&&(aA=Tn,(0,Co.getWorkerIndex)()===(0,Co.getWorkerCount)()-1)){if(Cl&&clearTimeout(Cl),!Tn)return;let k=new Date;k.setMonth(0),k.setDate(1),k.setHours(0),k.setMinutes(0),k.setSeconds(0);let m=Math.ceil((Date.now()-k.getTime())/Tn)*Tn+k.getTime(),g=a(N=>{Je.trace(`Scheduled next cleanup scan at ${new Date(N)}ms`),Cl=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(N+Tn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Cl);return}let R=50,O=new Array(R),b=0;Je.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:L,value:D,version:U,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let W;D===null&&!E&&U+Ane<Date.now()?W=i.remove(L,U):x&&x+f<Date.now()&&(W=Ke.evict(L,D,U),y++),W&&(await O[b],O[b]=W.catch(Se=>{Je.error("Cleanup error",Se)}),++b>=R&&(b=0)),await Sl()}Je.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){Je.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(KE,"scheduleCleanup");function _A(){z=u?.addDeleteRemovalCallback(n,k=>{let m=i.getEntry(k);m?.value===null&&i.remove(k,m.version)})}a(_A,"addDeleteRemoval");function Lx(){(0,Co.getWorkerIndex)()===0&&setInterval(async()=>{try{let k=Y.name,m=r[k];if(!m)throw new Error(`expiresAt attribute ${Y} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(g);N?.value?.[k]<Date.now()&&Ke.evict(g,N.value,N.version),await Sl()}}catch(k){Je.error("Error in evicting old records",k)}},Rne).unref()}a(Lx,"runRecordExpirationEviction")}function QR(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function BH(){}function wne(e){qH=e}function yE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!Cne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,wE.autoCast)(e):e}function HH(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function zR(e,t,r){return e?.then?e.then(t,r):t(e)}function IE(e,t){e[Kr]=t,e[Ne]=t?.value??null,e[Tl]=t?.version}function xH(e){return e!=null}var qn,Va,gl,FH,Ol,pn,Rl,Al,Je,Lo,Co,wE,gne,qH,Rne,Ane,UH,One,Tl,bne,Kr,hl,PH,Nne,WR,ka,ml,pl,yne,vH,Ine,ame,Cne,Sl,Lf=Ae(()=>{qn=v(M()),Va=require("lmdb"),gl=v(Dr()),FH=require("lodash");yn();Cp();Ol=v(j());MH();pn=v(Z()),Rl=v(Rs()),Al=v(Ln());ge();mf();Je=v(V());W_();Ji();Lo=require("ordered-binary"),Co=v(tt());Pi();wE=v(J());gc();Ns();hE();gne=new Uint8Array(9);gne[8]=192;Rne=6e4,Ane=864e5;Ol.initSync();UH=Ol.get(qn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),One=1e4,Tl=Symbol.for("version"),bne=Symbol.for("incremental-update"),Kr=Symbol("entry"),hl=Symbol("is-saving"),PH=1,Nne=2,WR=Symbol("loaded-from-source"),ka={isNotification:!0,ensureLoaded:!1},ml=1,pl=8,yne=Buffer.allocUnsafeSlow(8192),vH=1978,Ine={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ame=(0,wE.convertToMS)(Ol.get(qn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(CE,"makeTable");a(QR,"attributesAsObject");a(BH,"noop");a(wne,"setServerUtilities");Cne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(yE,"coerceType");a(HH,"isDescendantId");Sl=a(()=>new Promise(setImmediate),"rest");a(zR,"when");a(IE,"updateResource");a(xH,"exists")});var xe={};Ve(xe,{database:()=>Qc,databases:()=>rt,dropDatabase:()=>Pp,dropTableMeta:()=>vne,getDatabases:()=>Mn,getTables:()=>Lne,onUpdatedTable:()=>aR,readMetaDb:()=>bl,resetDatabases:()=>Dne,table:()=>_t,tables:()=>Mr});function Lne(){return PE||Mn(),Mr||{}}function Mn(){if(PE)return rt;PE=!0,Ka=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.DATABASES_DIR_NAME),t=(0,Zt.get)(Qr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(Qr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Wr.existsSync)(e)?e:(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Wr.existsSync)(e))for(let r of(0,Wr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&bl((0,Xe.join)(e,r.name),null,n)}if((0,Wr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,Wr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,Ya.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Wr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);bl((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Wr.existsSync)(s))for(let o of(0,Wr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&bl((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,Wr.existsSync)(u)&&bl(u,o,r,null,!0)}}for(let r in rt){let n=Ka.get(r);if(n){let s=rt[r];r.includes("delete")&&Sn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Sn.trace(`delete table class ${i}`),delete s[i])}else if(delete rt[r],r==="data"){for(let s in Mr)delete Mr[s];delete Mr[vE]}}return Ka=null,rt}}function Dne(){PE=!1;for(let[,e]of gi)e.needsDeletion=!0;Mn();for(let[e,t]of gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),gi.delete(e));return rt}function bl(e,t,r=jR,n,s){let i=new JR.default(e,!1);try{let o=gi.get(e);o?o.needsDeletion=!1:(o=(0,DE.open)(i),gi.set(e,o));let c=new Do.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(LE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Wr.existsSync)(n)&&(i.path=n,_=(0,DE.open)(i),_.isLegacy=!0):_=EE(o));let l=$H(r),d=l[vE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Sn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},w=[],B,K,F=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Qr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,Q=S.expiration,Y=S.eviction;if(A)I=A.indices,w=A.attributes,A.schemaVersion++;else{B=S.tableId,B?B>=(u.get($a)||0)&&u.putSync($a,B+1):(S.tableId=B=u.get($a),B||(B=1),u.putSync($a,B+1),u.putSync(S.key,S));let z=new Do.default(!S.is_hash_attribute,S.is_hash_attribute);K=s_(o.openDB(S.key,z)),K.rootStore=o,K.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!I[z.name]){let Ie=new Do.default(!z.is_hash_attribute,z.is_hash_attribute);I[z.name]=o.openDB(z.key,Ie),I[z.name].indexNulls=z.indexNulls}let re=w.find(Ie=>Ie.name===z.name);re?w.splice(w.indexOf(re),1,z):w.push(z)}}catch(re){Sn.error("Error trying to update attribute",z,w,I,re)}}if(!A){A=YH(l,E,CE({primaryStore:K,auditStore:_,audit:F,expirationMS:Q&&Q*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let z of ZR)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function $H(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Mr:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),Ka&&!Ka.has(e)){let r=new Set;t[vE]=r,Ka.set(e,r)}return t}function YH(e,t,r){return e[t]=r,r}function Qc({database:e,table:t}){e||(e=jR),Mn();let r=$H(e),n=(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.DATABASES_DIR_NAME),s=(0,Zt.get)(Qr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(Qr.CONFIG_PARAMS.STORAGE_PATH)||((0,Wr.existsSync)(n)?n:(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=gi.get(o);if(!c){let u=new JR.default(o,!1);c=(0,DE.open)(u),gi.set(o,c)}return c}async function Pp(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let s=t[r].primaryStore.rootStore;gi.delete(s.path),s.status==="open"&&(await s.close(),await GH.remove(s.path))}if(e==="data"){for(let r in Mr)delete Mr[r];delete Mr[vE]}delete rt[e]}function _t({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=jR);let l=Qc({database:t,table:e}),d=rt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Do.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let I,w;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let P=l.auditStore;P||(P=EE(l)),h=i.find(re=>re.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Zt.get)(Qr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Sn.trace(`${e} table loading, opening primary store`);let Q=new Do.default(!1,!0),Y=e+"/",z=s_(l.openDB(Y,Q));z.rootStore=l,S=l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,A),z.tableId=S.get($a),z.tableId||(z.tableId=1),S.putSync($a,z.tableId+1),h.tableId=z.tableId,f=YH(d,e,CE({primaryStore:z,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,F(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let B=[];for(let{key:P,value:Q}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=Q.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Ie=>Ie.name===z)?.indexed&&Q.indexed&&!Q.isPrimaryKey){F(),I=!0,S.remove(P);let Ie=f.indices[Y];Ie&&B.push(Ie)}}let K=[];try{for(let P of i||[]){if(P.relationship)continue;let Q=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:Q,configurable:!0});let Y=S.get(Q);if(P.isPrimaryKey){if(Y=Y||S.get(Q=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let re=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),n&&(re.eviction=+n),I=!0,F(),S.put(Q,re)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let re=new Do.default(!0,!1),Ie=l.openDB(Q,re);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Nl.workerData?.restartNumber)&&(I=!0,F(),Y=S.get(Q),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Nl.workerData?.restartNumber)&&(I=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Ie}),P.indexNulls===void 0&&(P.indexNulls=!0),K.push(P)),S.put(Q,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Ie.indexNulls=P.indexNulls,p[P.name]=Ie}else z&&(I=!0,F(),S.put(Q,P))}}finally{w&&w()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Sn.trace(`${e} table loading, running index`),K.length>0||B.length>0?f.indexingOperation=Pne(f,K,B):I&&ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of ZR)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Sn.trace(`${e} table loaded`),f;function F(){w||l.transactionSync(()=>({then(P){w=P}}))}a(F,"startTxn")}async function Pne(e,t,r){try{let n=e.schemaVersion;await ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,kH.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,Sn.error(f)}),Nl.workerData&&Nl.workerData.restartNumber!==VH.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Mne?await s:u>Une&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Sn.error("Error in indexing",n)}}function vne({table:e,database:t}){let r=Qc({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function aR(e){ZR.push(e)}var Zt,LE,DE,Xe,Wr,Ya,Do,JR,Qr,GH,XR,kH,ME,UE,Nl,Sn,VH,jR,vE,Mr,rt,$a,ZR,PE,gi,Ka,Mne,Une,ge=Ae(()=>{Zt=v(j()),LE=v(ht()),DE=require("lmdb"),Xe=require("path"),Wr=require("fs"),Ya=v(We());Lf();Do=v(i_()),JR=v(a_()),Qr=v(M()),GH=v(require("fs-extra")),XR=require("../../index"),kH=v(Dr()),ME=v(Rs()),UE=v(Ln()),Nl=require("worker_threads"),Sn=v(V()),VH=v(tt());Pi();gc();jR="data",vE=Symbol("defined-tables");(0,Zt.initSync)();Mr=Object.create(null),rt=Object.create(null);(0,XR._assignPackageExport)("databases",rt);(0,XR._assignPackageExport)("tables",Mr);$a=Symbol.for("next-table-id"),ZR=[],gi=new Map;a(Lne,"getTables");a(Mn,"getDatabases");a(Dne,"resetDatabases");a(bl,"readMetaDb");a($H,"ensureDB");a(YH,"setTable");a(Qc,"database");a(Pp,"dropDatabase");a(_t,"table");Mne=1e3,Une=10;a(Pne,"runIndexing");a(vne,"dropTableMeta");a(aR,"onUpdatedTable")});var J=T((mme,ix)=>{"use strict";var Ri=require("path"),JH=require("fs-extra"),Or=V(),KH=require("fs-extra"),BE=require("os"),Bne=require("net"),Hne=require("recursive-iterator"),at=M(),xne=$A(),WH=require("papaparse"),HE=require("moment"),{inspect:Fne}=require("util"),QH=require("is-number"),hme=require("lodash"),qne=require("minimist"),Gne=require("https"),kne=require("http"),{hdb_errors:xE}=Z(),Vne=/^((\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)))$/,XH=require("util").promisify(setTimeout),$ne=100,Yne=5,Kne="",Wne=4,zH={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};ix.exports={isEmpty:zr,isEmptyOrZeroLength:_s,arrayHasEmptyValues:Jne,arrayHasEmptyOrZeroLengthValues:Xne,buildFolderPath:jne,isBoolean:jH,errorizeMessage:Qne,stripFileExtension:ese,autoCast:tse,autoCastJSON:ZH,autoCastJSONDeep:tA,removeDir:rse,compareVersions:nse,isCompatibleDataVersion:sse,escapeRawValue:ise,unescapeValue:ose,stringifyProps:ase,timeoutPromise:use,isClusterOperation:_se,getClusterUser:fse,checkGlobalSchemaTable:dse,getHomeDir:tx,getPropsFilePath:cse,promisifyPapaParse:Ese,removeBOM:rx,createEventPromise:hse,checkProcessRunning:mse,checkSchemaTableExist:pse,checkSchemaExists:nx,checkTableExists:sx,getStartOfTomorrowInSeconds:Sse,getLimitKey:Tse,isObject:Zne,isNotEmptyAndHasValue:zne,autoCasterIsNumberCheck:ex,backtickASTSchemaItems:gse,isPortTaken:lse,createForkArgs:Rse,autoCastBoolean:Ase,async_set_timeout:XH,getTableHashAttribute:Ose,doesSchemaExist:bse,doesTableExist:Nse,stringifyObj:yse,ms_to_time:Ise,changeExtension:wse,getEnvCliRootPath:rA,noBootFile:Cse,httpRequest:Lse,transformReq:Dse,convertToMS:Mse,PACKAGE_ROOT:at.PACKAGE_ROOT};function Qne(e){return e instanceof Error?e:new Error(e)}a(Qne,"errorizeMessage");function zr(e){return e==null}a(zr,"isEmpty");function zne(e){return!zr(e)&&(e||e===0||e===""||jH(e))}a(zne,"isNotEmptyAndHasValue");function _s(e){return zr(e)||e.length===0||e.size===0}a(_s,"isEmptyOrZeroLength");function Jne(e){if(zr(e))return!0;for(let t=0;t<e.length;t++)if(zr(e[t]))return!0;return!1}a(Jne,"arrayHasEmptyValues");function Xne(e){if(_s(e))return!0;for(let t=0;t<e.length;t++)if(_s(e[t]))return!0;return!1}a(Xne,"arrayHasEmptyOrZeroLengthValues");function jne(...e){try{return e.join(Ri.sep)}catch{console.error(e)}}a(jne,"buildFolderPath");function jH(e){return zr(e)?!1:e===!0||e===!1}a(jH,"isBoolean");function Zne(e){return zr(e)?!1:typeof e=="object"}a(Zne,"isObject");function ese(e){return _s(e)?Kne:e.slice(0,-Wne)}a(ese,"stripFileExtension");function tse(e){return zr(e)||e===""||typeof e!="string"?e:zH[e]!==void 0?zH[e]:ex(e)===!0?Number(e):Vne.test(e)?new Date(e):e}a(tse,"autoCast");function ZH(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(ZH,"autoCastJSON");function tA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=tA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=tA(r);n!==r&&(e[t]=n)}return e}else return ZH(e)}a(tA,"autoCastJSONDeep");function ex(e){if(e.startsWith("0.")&&QH(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&QH(e))}a(ex,"autoCasterIsNumberCheck");async function rse(e){if(_s(e))throw new Error(`Directory path: ${e} does not exist`);try{await KH.emptyDir(e),await KH.remove(e)}catch(t){throw Or.error(`Error removing files in ${e} -- ${t}`),t}}a(rse,"removeDir");function nse(e,t){if(_s(e)){Or.info("Invalid current version sent as parameter.");return}if(_s(t)){Or.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(nse,"compareVersions");function sse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(sse,"isCompatibleDataVersion");function ise(e){if(zr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(ise,"escapeRawValue");function ose(e){if(zr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(ose,"unescapeValue");function ase(e,t){if(zr(e))return Or.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+BE.EOL}!_s(n)&&n[0]===";"?r+=" "+n+s+BE.EOL:_s(n)||(r+=n+"="+s+BE.EOL)}catch{Or.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(ase,"stringifyProps");function tx(){let e;try{e=BE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(tx,"getHomeDir");function cse(){let e=Ri.join(tx(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return JH.existsSync(e)||(e=Ri.join(__dirname,"../","hdb_boot_properties.file")),e}a(cse,"getPropsFilePath");function use(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(use,"timeoutPromise");async function lse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Bne.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(lse,"isPortTaken");function _se(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Or.error(`Error checking operation against cluster ops ${t}`)}return!1}a(_se,"isClusterOperation");function dse(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(dse,"checkGlobalSchemaTable");function fse(e,t){if(zr(t)){Or.warn("No CLUSTERING_USER defined, clustering disabled");return}if(zr(e)||_s(e)){Or.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Or.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Or.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(fse,"getClusterUser");function Ese(){WH.parsePromise=function(e,t,r){return new Promise(function(n,s){WH.parse(e,{header:!0,transformHeader:rx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Ese,"promisifyPapaParse");function rx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(rx,"removeBOM");function hse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Or.info(`Got cluster status event response: ${Fne(s)}`);try{i.cancel()}catch{Or.error("Error trying to cancel timeout.")}n(s)})})}a(hse,"createEventPromise");async function mse(e){let t=!0,r=0;do await XH($ne*r++),(await xne.findPs(e)).length>0&&(t=!1);while(t&&r<Yne);if(t)throw new Error(`process ${e} was not started`)}a(mse,"checkProcessRunning");function pse(e,t){let r=nx(e);if(r)return r;let n=sx(e,t);if(n)return n}a(pse,"checkSchemaTableExist");function nx(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nx,"checkSchemaExists");function sx(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(sx,"checkTableExists");function Sse(){let e=HE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=HE().utc().unix();return e-t}a(Sse,"getStartOfTomorrowInSeconds");function Tse(){return HE().utc().format("DD-MM-YYYY")}a(Tse,"getLimitKey");function gse(e){try{let t=new Hne(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){Or.error("Got an error back ticking items."),Or.error(t)}}a(gse,"backtickASTSchemaItems");function Rse(e){return[e]}a(Rse,"createForkArgs");function Ase(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ase,"autoCastBoolean");function Ose(e,t){let{getDatabases:r}=(ge(),ee(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Ose,"getTableHashAttribute");function bse(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(bse,"doesSchemaExist");function Nse(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(Nse,"doesTableExist");function yse(e){try{return JSON.stringify(e)}catch{return e}}a(yse,"stringifyObj");function Ise(e){let t=HE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(Ise,"ms_to_time");function wse(e,t){let r=Ri.basename(e,Ri.extname(e));return Ri.join(Ri.dirname(e),r+t)}a(wse,"changeExtension");function rA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=qne(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(rA,"getEnvCliRootPath");var eA;function Cse(){if(eA)return eA;let e=rA();rA()&&JH.pathExistsSync(Ri.join(e,at.HDB_CONFIG_FILE))&&(eA=!0)}a(Cse,"noBootFile");function Lse(e,t){let r;return e.protocol==="http:"?r=kne:r=Gne,new Promise((n,s)=>{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",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(Lse,"httpRequest");function Dse(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Dse,"transformReq");function Mse(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(Mse,"convertToMS")});var _x=T((Sme,lx)=>{"use strict";var Jr=j(),Use=$i(),he=M(),yl=nt(),qs=require("path"),{PACKAGE_ROOT:qE}=M(),ox=j(),FE=J(),Wa="/dev/null",Pse=qs.join(qE,"launchServiceScripts"),ax=qs.join(qE,"utility/scripts"),vse=qs.join(ax,he.HDB_RESTART_SCRIPT),cx=qs.resolve(qE,"dependencies",`${process.platform}-${process.arch}`,yl.NATS_BINARY_NAME);function ux(){let t=Use.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return FE.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qE}}a(ux,"generateMainServerConfig");var Bse=9930;function Hse(){Jr.initSync(!0);let e=Jr.get(he.CONFIG_PARAMS.ROOTPATH),t=qs.join(e,"clustering",yl.NATS_CONFIG_FILES.HUB_SERVER),r=qs.join(Jr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=ox.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=yl.LOG_LEVEL_FLAGS[Jr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Bse?"-"+n:""),script:cx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(Hse,"generateNatsHubServerConfig");var xse=9940;function Fse(){Jr.initSync(!0);let e=Jr.get(he.CONFIG_PARAMS.ROOTPATH),t=qs.join(e,"clustering",yl.NATS_CONFIG_FILES.LEAF_SERVER),r=qs.join(Jr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=ox.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=yl.LOG_LEVEL_FLAGS[Jr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==xse?"-"+n:""),script:cx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(Fse,"generateNatsLeafServerConfig");function qse(){Jr.initSync();let e=qs.join(Jr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Pse,autorestart:!1};return Jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wa,t.error_file=Wa),t}a(qse,"generateClusteringUpgradeV4ServiceConfig");function Gse(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return FE.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:ax},script:vse}}a(Gse,"generateRestart");function kse(){return{apps:[ux()]}}a(kse,"generateAllServiceConfigs");lx.exports={generateAllServiceConfigs:kse,generateMainServerConfig:ux,generateRestart:Gse,generateNatsHubServerConfig:Hse,generateNatsLeafServerConfig:Fse,generateClusteringUpgradeV4ServiceConfig:qse}});var NT=T((Rme,bx)=>{"use strict";var De=M(),Vse=J(),Gs=TT(),Il=It(),ds=nt(),Ai=_x(),GE=j(),Oi=V(),$se=ys(),{startWorker:dx,onMessageFromWorkers:Yse}=tt(),Kse=ua(),gme=require("util"),Wse=require("child_process"),Qse=require("fs"),{execFile:zse}=Wse,ye;bx.exports={enterPM2Mode:Jse,start:bi,stop:nA,reload:Ex,restart:hx,list:sA,describe:px,connect:ks,kill:tie,startAllServices:rie,startService:iA,getUniqueServicesList:Sx,restartAllServices:nie,isServiceRegistered:Tx,reloadStopStart:gx,restartHdb:mx,deleteProcess:Zse,startClusteringProcesses:Ax,startClusteringThreads:Ox,isHdbRestartRunning:eie,isClusteringRunning:iie,stopClustering:sie,reloadClustering:oie};var wl=!1;Yse(e=>{e.type==="restart"&&GE.initSync(!0)});function Jse(){wl=!0}a(Jse,"enterPM2Mode");function ks(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,n)=>{Oi.setupConsoleLogging(),r&&t(r),e(n)})})}a(ks,"connect");var br,Xse=10,fx;function bi(e,t=!1){if(wl)return jse(e);let r=zse(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=br.indexOf(r);o>-1&&br.splice(o,1),!fx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Xse&&(Qse.existsSync(Gs.getHubConfigPath())?bi(e):(await Gs.generateNatsConfig(!0),bi(e),await new Promise(c=>setTimeout(c,3e3)),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=GE.get(De.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&ds.LOG_LEVEL_HIERARCHY[o]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=ds.LOG_LEVELS[f]}if(ds.LOG_LEVEL_HIERARCHY[o]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),br=[],!br&&!t){let i=a(()=>{fx=!0,br&&(br.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}br.push(r)}a(bi,"start");function jse(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.start(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(jse,"startWithPM2");function nA(e){if(!wl){for(let t of br||[])t.name===e&&(br.splice(br.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.stop(e,async(n,s)=>{n&&(ye.disconnect(),r(n)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(n)),ye.disconnect(),t(o)})})})}a(nA,"stop");function Ex(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.reload(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(Ex,"reload");function hx(e){if(!wl)for(let t of br||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.restart(e,(n,s)=>{ye.disconnect(),t(s)})})}a(hx,"restart");function Zse(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.delete(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(Zse,"deleteProcess");async function mx(){await bi(Ai.generateRestart())}a(mx,"restartHdb");async function eie(){let e=await sA();for(let t in e)if(e[t].name===De.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(eie,"isHdbRestartRunning");function sA(){return new Promise(async(e,t)=>{try{await ks()}catch(r){t(r)}ye.list((r,n)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(n)})})}a(sA,"list");function px(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.describe(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(px,"describe");function tie(){if(!wl){for(let e of br||[])e.kill();br=[];return}return new Promise(async(e,t)=>{try{await ks()}catch(r){t(r)}ye.killDaemon((r,n)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(n)})})}a(tie,"kill");async function rie(){try{await Ax(),await Ox(),await bi(Ai.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(rie,"startAllServices");async function iA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case De.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ai.generateMainServerConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ai.generateNatsIngestServiceConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ai.generateNatsReplyServiceConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ai.generateNatsHubServerConfig(),await bi(r,t),await Gs.removeNatsConfig(e);return;case De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ai.generateNatsLeafServerConfig(),await bi(r,t),await Gs.removeNatsConfig(e);return;case De.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ai.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await bi(r)}catch(r){throw ye?.disconnect(),r}}a(iA,"startService");async function Sx(){try{let e=await sA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw ye?.disconnect(),e}}a(Sx,"getUniqueServicesList");async function nie(e=[]){try{let t=!1,r=await Sx();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===De.PROCESS_DESCRIPTORS.HDB?t=!0:await hx(o))}t&&await gx(De.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(nie,"restartAllServices");async function Tx(e){if(br?.find(r=>r.name===e))return!0;let t=await Kse.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Tx,"isServiceRegistered");async function gx(e){let t=e===De.PROCESS_DESCRIPTORS.HDB?GE.get(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):GE.get(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await px(e),n=Vse.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await nA(e),await iA(e)):e===De.PROCESS_DESCRIPTORS.HDB?await mx():await Ex(e)}a(gx,"reloadStopStart");var Rx;async function Ax(e=!1){for(let t in De.CLUSTERING_PROCESSES){let r=De.CLUSTERING_PROCESSES[t];await iA(r,e)}}a(Ax,"startClusteringProcesses");async function Ox(){Rx=dx(De.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:De.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Il.createWorkQueueStream(ds.WORK_QUEUE_CONSUMER_NAMES),await Il.updateIngestStreamConsumer(),await Il.updateLocalStreams();let e=await $se.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===De.PRE_4_0_0_VERSION){Oi.info("Starting clustering upgrade 4.0.0 process"),dx(De.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Ox,"startClusteringThreads");async function sie(){for(let e in De.CLUSTERING_PROCESSES)if(e!==De.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===De.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Rx.terminate();else{let t=De.CLUSTERING_PROCESSES[e];await nA(t)}}a(sie,"stopClustering");async function iie(){for(let e in De.CLUSTERING_PROCESSES){let t=De.CLUSTERING_PROCESSES[e];if(await Tx(t)===!1)return!1}return!0}a(iie,"isClusteringRunning");async function oie(){await Gs.generateNatsConfig(!0),await Il.reloadNATSHub(),await Il.reloadNATSLeaf(),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(oie,"reloadClustering")});var oA=NT(),Nx=M();a(async function(){try{let t=await oA.describe(Nx.PROCESS_DESCRIPTORS.HDB);for(let r of t)await oA.reload(r.pm_id);await oA.deleteProcess(Nx.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
26
+ `},compressible:!1,q:.8});Ut.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});GP={type:"application/json",serializeStream:dc,serialize:qu,deserialize:G9,q:.8};Ut.set("*/*",GP);Ut.set("",GP);a(G9,"tryJSONParse");a(ag,"registerContentHandlers");k9=require("fastify-plugin"),V9=k9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(lf,"findBestSerializer");BP=ng.default.get(sg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_f,"serialize");a(ui,"serializeMessage");a($9,"streamToBuffer");a(_o,"getDeserializer");a(HP,"deserializerUnknownType");a(Y9,"transformIterable")});function _g(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?_g(d.conditions,d.operator,r,n,s,i,o,c):Aa(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let A=h.operator==="or",b=l(h.conditions,!A,E);return A?H=>b.some(F=>F(H)):H=>b.every(F=>F(H))}let S=(h.attribute||h[0])===r.primaryKey,T=fg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=e7(r.primaryStore,h.estimated_count,E)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Aa(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let T=o[0],A=Is(n.attributes,T);if(A.relationship){if(o.length<2)throw new ws.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let b=A.definition?.tableClass||A.elements?.definition?.tableClass,H=new Map,F=Aa({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,b,s,H);if(A.relationship.to){i[o[0]]=H;let v=!!Is(b.attributes,A.relationship.to)?.elements;F=J9(F,A,b.primaryStore,v,H)}if(A.relationship.from){let v=a(P=>Aa({attribute:A.relationship.from,value:P},t,r,n,s,H),"searchEntry");A.elements?(i[o[0]]=H,F=X9(F,A,b.primaryStore,H,v)):F=F.flatMap(v)}return F}else if(o.length===1)o=o[0];else throw new ws.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(dg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ts.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new ws.ClientError(`Unknown query comparator "${u}"`)}if(r){let T=_;_=l,l=T,T=!f,f=!d,d=T}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new ws.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=fg(e);if(!T)throw new ws.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:b})=>new Promise((H,F)=>setImmediate(()=>{try{H(b&&T(b)?A:cg.SKIP)}catch(v){F(v)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=p.getRange(S).map(A=>A.value==null?cg.SKIP:A);return T.hasEntries=!0,T}else return p.getRange(S).map(({value:T})=>T)}function Is(e,t){if(Array.isArray(t))if(t.length>1){let r=Is(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Is(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function J9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Dn(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?s:s.keys())[Symbol.iterator](),this.next()})()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function X9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Dn(u.value);if(!c.has(_))return c.add(_),u}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(Dn(f)));let l=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(Dn(d),d),l++>100&&(await new Promise(setImmediate),l=0)}return i=_.values()[Symbol.iterator](),this.next()})();do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function fg(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Is(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=fg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((A,b)=>{let H,F;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:p.from,value:P};S=_(p.from,h.idFilter,!0)}else S=_(p.from,h.idFilter,!1);let v=S(A);return S.idFilter&&(T.idFilter=S.idFilter),v}F=p(A,r,b),H=F?.value}else H=A[l];return H?Array.isArray(H)?H.some(h):h(H,F):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),dg[o]||o){case ug.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ts.compareKeys)(l,u[0])>=0&&(0,ts.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ts.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ts.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ts.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ts.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ts.compareKeys)(l,u)!==0);default:throw new ws.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f){let E;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&ff(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,p=3;function S(T){let A=T[l],b;if(typeof A!="object"||!A?b=d(A):Array.isArray(A)?b=A.some(d):A instanceof Date&&(b=d(A.getTime())),f&&(p++,!b&&!S.idFilter&&++h/p*(i-p)>E)){let H=Aa(e,r.transaction.getReadTxn(),!1,t).map(Dn),F=new Set(H);S.idFilter=v=>F.has(Dn(v)),S.idFilter.idSet=F}return b}return a(S,"recordFilter"),s&&(S.idFilter=d),S}a(_,"attributeComparator")}function ff(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/di(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=dg[n]||n,n===ug.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Is(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ff(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*di(e.indices[i.relationship.from]||e.primaryStore)/(di(o.primaryStore)||1)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=di(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=Q9*di(e.primaryStore)+1:n==="between"?r.estimated_count=W9*di(e.primaryStore)+1:r.estimated_count=K9*di(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=4)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Ef(e){if(e)if(fi=e,ga.lastIndex=0,j9.test(e))try{let t=ku(new Ra,"");if(hr!==fi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${hr} in '${fi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function ku(e,t){let r=ga,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(fi);){hr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=VP}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Vu(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=z9[d],u=lg[i]?VP:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Vu(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&$P(h,l),df(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Vu(l)),s=void 0;break;case"(":ga.lastIndex=hr;let E=ku(l?[]:new Ra,")");switch(l){case"":df(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=YP(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}fi[hr]===","?r.lastIndex=++hr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");ga.lastIndex=hr,f=ku([],"}"),f.name=l,e.push(f),fi[hr]===","?r.lastIndex=++hr:o=!0;break;case"[":ga.lastIndex=hr,l?(f=ku(new Ra,"]"),f.name=l):f=ku(e.conditions?new Ra:[],"]"),e.conditions?(df(e,_),e.conditions.push(f),s=null):e.push(f),fi[hr]===","?r.lastIndex=++hr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&$P(h,l),df(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Vu(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Z9:ga,r.lastIndex=hr),hr===fi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function df(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Vu(e){return e.indexOf(".")>-1?e.split(".").map(Vu):decodeURIComponent(e)}function VP(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new ws.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function $P(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ws.ClientError("wildcard can only be used at the end of a string")}function YP(e){let t=KP(e[0]);return e.length>1&&(t.next=YP(e.slice(1))),t}function KP(e){if(Array.isArray(e)){let t=KP(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Dn(e){return Array.isArray(e)?e.join("\0"):e}function di(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function e7(e,t,r){return t*r/di(e)}var ws,ug,ts,cg,K9,W9,Q9,z9,lg,dg,j9,ga,Z9,hr,fi,Ra,hf=Oe(()=>{ws=B(ee()),ug=B(lt()),ts=require("ordered-binary"),cg=require("lmdb"),K9=.3,W9=.1,Q9=.05,z9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},lg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(_g,"executeConditions");a(Aa,"searchByIndex");a(Is,"findAttribute");a(J9,"joinTo");a(X9,"joinFrom");dg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(fg,"filterByType");a(ff,"estimateCondition");j9=/[()[\]|!<>.]|(=\w*=)/,ga=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Z9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Ef,"parseQuery");a(ku,"parseBlock");a(df,"assignOperator");a(Vu,"decodeProperty");a(VP,"typedDecoding");a($P,"wildcardDecoding");a(YP,"toSortObject");a(KP,"toSortEntry");Ra=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Dn,"flattenKey");a(di,"estimatedEntryCount");a(e7,"intersectionEstimate")});function jP(e){let t={openapi:t7,info:{title:"HarperDB HTTP REST interface",version:(0,XP.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,{attributes:i,primaryKey:o,prototype:c}=n.Resource;if(o=o??"id",!o)continue;let u={},_=[];if(i)for(let{type:A,name:b}of i)u[b]=new JP(WP[A],A),_.push(new mg(b,"query",u[b]));let l=Object.keys(u),d=new mg(o,"path",new JP(WP.ID,"ID"));d.required=!0,d.description="primary key of record";let f=new mg("property","path",{enum:l});f.required=!0,t.components.schemas[s]=new s7(u);let E=c.post!==Resource.prototype.post||c.update,h=c.hasOwnProperty("put"),p=c.hasOwnProperty("get"),S=c.hasOwnProperty("delete"),T="/"+s+"/";E&&(t.paths[T]={},t.paths[T].post=new r7(s,r,"create a new record auto-assigning a primary key")),p&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new Eg(_,r,{200:new hg({$ref:mf+s})},"search for records by the specified property name and value")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zP(_,r,"delete all the records that match the provided query",{204:new QP})),T="/"+s+"/{"+o+"}",p&&(t.paths[T]={},t.paths[T].get=new Eg([d],r,{200:new hg({$ref:mf+s})},"retrieve a record by its primary key")),h&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new n7([d],r,s,"create or update the record with the URL path that maps to the record's primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zP([d],r,"delete a record with the given primary key",{204:new QP})),p&&f.schema.enum.length>0&&(T="/"+s+"/{"+o+"}.{property}",t.paths[T]={},t.paths[T].get=new Eg([d,f],r,{200:new hg({enum:l})},"used to retrieve the specified property of the specified record"))}return t}function r7(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:mf+e}}}},this.security=t,this.responses={200:{description:pg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Eg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function hg(e){this.description=pg,this.content={"application/json":{schema:e}}}function QP(){this.description="successfully processed request, no content returned to client"}function n7(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:mf+r}}}},this.responses={200:{description:pg}}}function zP(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function s7(e){this.type="object",this.properties=e}function JP(e,t){this.type=e,this.format=t}function mg(e,t,r){this.name=e,this.in=t,this.schema=r}var XP,t7,WP,mf,pg,ZP=Oe(()=>{XP=B(md()),t7="3.0.3",WP={ID:"string",Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",Any:"string",BigInt:"integer"},mf="#/components/schemas/",pg="successful operation";a(jP,"generateJsonApi");a(r7,"Post");a(Eg,"Get");a(hg,"Response200");a(QP,"Response204");a(n7,"Put");a(zP,"Delete");a(s7,"ResourceSchema");a(JP,"Type");a(mg,"Parameter")});var Sf={};Ve(Sf,{start:()=>a7});async function o7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Ef(e);let s=new ci;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==ev){let h=pf.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await We(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=_o(r["content-type"],!0)(e.body)}catch(h){throw new Yu.ClientError(h,400)}if(e.authorize=!0,i===ev&&n==="GET")return jP(pf);switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Yu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Yu.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Sg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){i7[0]=d;let h=String.fromCharCode(34,(Gt[0]&63)+62,(Gt[0]>>6)+(Gt[1]<<2&63)+62,(Gt[1]>>4)+(Gt[2]<<4&63)+62,(Gt[2]>>2)+62,(Gt[3]&63)+62,(Gt[3]>>6)+(Gt[4]<<2&63)+62,(Gt[4]>>4)+(Gt[5]<<4&63)+62,(Gt[5]>>2)+62,(Gt[6]&63)+62,(Gt[6]>>6)+(Gt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Sg.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:l,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=_f(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?fo.warn(i):fo.info(i):fo.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=_f(i.contentType?i:i.toString(),e,o),o}}function a7(e){Sg=e,!tv&&(tv=!0,pf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return o7(t,r)}),e.server.ws(async(t,r,n)=>{$u++;let s=new Tn;rv||(rv=!0,Xc(l=>{$u>0&&l.push({metric:"ws-connections",connections:$u,byThread:!0})}));let i;t.on("error",l=>{i=!0,fo.warn(l)});let o;t.on("message",a(function(d){o||(o=_o(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$u--,en(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=pf.getMatch(u);if(en(!!_,"connection","ws","connect"),!_)t.send(ui(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,vr(h=>({count:h.count,total:$u}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ui(E.value,r);t.send(h),vr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var fo,Yu,Gt,i7,Sg,ev,tv,pf,rv,$u,nv=Oe(()=>{fa();gs();fo=B(Y()),Yu=B(ee());hf();lc();Wi();Fd();ZP();Gt=new Uint8Array(8),i7=new Float64Array(Gt.buffer,0,1),Sg={},ev="openapi";a(o7,"http");$u=0;a(a7,"start")});var Tg=g((fEe,sv)=>{var{recordAction:Tf,recordActionBinary:c7}=(gs(),te(jc)),u7=require("fastify-plugin"),l7=200;sv.exports=u7(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Tf(o,"duration",_,d,l),c7(s.raw.statusCode<400,"success",_,d,l);let f=l7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Tf(performance.now()-c,"transfer",_,d,l),Tf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Tf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Og=g((EEe,uv)=>{var bf=require("clone"),Nf=Xe(),_7=J(),Af=M(),d7=Y(),gf=require("fs"),gg=require("joi"),{string:Of}=gg.types(),{hdb_errors:f7,handleHDBError:Ku}=ee(),{HDB_ERROR_MSGS:E7,HTTP_STATUS_CODES:Rf}=f7,{common_validators:Oa}=kn(),iv=1e9,ov=" is required",h7=["insert","update","upsert"],Rg={database:{presence:!1,format:Oa.schema_format,length:Oa.schema_length},schema:{presence:!1,format:Oa.schema_format,length:Oa.schema_length},table:{presence:!0,format:Oa.schema_format,length:Oa.schema_length},action:{inclusion:{within:h7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},m7={schema:Of.required(),table:Of.required(),action:Of.valid("insert","update","upsert")},{AWS_ACCESS_KEY:p7,AWS_SECRET:S7,AWS_BUCKET:T7,AWS_FILE_KEY:g7,REGION:R7}=Af.S3_BUCKET_AUTH_KEYS,A7={s3:{presence:!0},[`s3.${p7}`]:{presence:!0,type:"String"},[`s3.${S7}`]:{presence:!0,type:"String"},[`s3.${T7}`]:{presence:!0,type:"String"},[`s3.${g7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${R7}`]:{presence:!0,type:"String"}},av=bf(Rg);av.data.presence={message:ov};var cv=bf(Rg);cv.file_path.presence={message:ov};var O7=Object.assign(bf(Rg),A7),Ag=bf(m7);Ag.csv_url=Of.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Ag.passthrough_headers=gg.object();function b7(e){let t=Nf.validateObject(e,av);return yf(e,t)}a(b7,"dataObject");function N7(e){let t=Nf.validateBySchema(e,gg.object(Ag));return yf(e,t)}a(N7,"urlObject");function y7(e){let t=Nf.validateObject(e,cv);return yf(e,t)}a(y7,"fileObject");function w7(e){let t=Nf.validateObject(e,O7);return yf(e,t)}a(w7,"s3FileObject");function yf(e,t){if(!t){let r=_7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Ku(new Error,r,Rf.BAD_REQUEST);if(e.operation===Af.OPERATIONS_ENUM.CSV_FILE_LOAD){try{gf.accessSync(e.file_path,gf.constants.R_OK|gf.constants.F_OK)}catch(n){return n.code===Af.NODE_ERROR_CODES.ENOENT?Ku(n,`No such file or directory ${n.path}`,Rf.BAD_REQUEST):n.code===Af.NODE_ERROR_CODES.EACCES?Ku(n,`Permission denied ${n.path}`,Rf.BAD_REQUEST):Ku(n)}try{let n=gf.statSync(e.file_path).size;if(n>iv)return Ku(new Error,E7.MAX_FILE_SIZE_ERR(n,iv),Rf.BAD_REQUEST)}catch(n){d7.error(n),console.error(n)}}}return t}a(yf,"postValidateChecks");uv.exports={dataObject:b7,urlObject:N7,fileObject:y7,s3FileObject:w7}});var bg=g((mEe,lv)=>{"use strict";var Wu=Y(),wf=M();async function I7(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===wf.OPERATIONS_ENUM.INSERT||t.operation===wf.OPERATIONS_ENUM.UPDATE||t.operation===wf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===wf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Wu.info(i.message),i):i.http_resp_msg?(Wu.error(`Error calling operation: ${e.name}`),Wu.error(i.http_resp_msg),i):(Wu.error(`Error calling operation: ${e.name}`),Wu.error(i),i)}}a(I7,"callOperationFunctionAsAwait");lv.exports={callOperationFunctionAsAwait:I7}});var dv=g((SEe,_v)=>{"use strict";var Ng=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},yg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};_v.exports={BulkLoadFileObject:Ng,BulkLoadDataObject:yg}});var Ev=g((gEe,fv)=>{"use strict";var wg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};fv.exports=wg});var Ug=g((yEe,Lv)=>{"use strict";var If=jr(),Df=Og(),C7=require("needle"),Ln=M(),AEe=tt(),ba=J(),{handleHDBError:nt,hdb_errors:Ov}=ee(),{HTTP_STATUS_CODES:kt,HDB_ERROR_MSGS:bt,CHECK_LOGS_WRAPPER:ho}=Ov,Na=Y(),Ig=require("papaparse");ba.promisifyPapaParse();var Mn=require("fs-extra"),D7=require("path"),{chain:hv}=require("stream-chain"),mv=require("stream-json/streamers/StreamArray"),pv=require("stream-json/utils/Batch"),Sv=require("stream-chain/utils/comp"),{finished:Tv}=require("stream"),L7=Z(),bv=bg(),M7=ZT(),{BulkLoadFileObject:Dg,BulkLoadDataObject:U7}=dv(),Lg=VT(),{verifyBulkLoadAttributePerms:Nv}=sf(),OEe=Ev(),bEe=Rt(),NEe=hs(),{databases:P7}=(be(),te(Fe)),{coerceType:v7}=(Lf(),te(Pg)),gv="No records parsed from csv file.",Eo=`${L7.get("HDB_ROOT")}/tmp`,{schema_regex:B7}=kn(),Rv=1024*1024*2,Av=5e3,H7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Lv.exports={csvDataLoad:x7,csvURLLoad:F7,csvFileLoad:q7,importFromS3:G7};async function x7(e,t){let r=Df.dataObject(e);if(r)throw nt(r,r.message,kt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Iv(e.schema,e.table),i=Ig.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Cg.bind(null,s),dynamicTyping:!1}),o=new Lg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Nv(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw nt(new Error,c,kt.BAD_REQUEST,void 0,void 0,!0);let u=new U7(e.action,e.schema,e.table,i.data);return n=await bv.callOperationFunctionAsAwait(Cv,u,null),n.message===gv?gv:Dv(n.records,n.number_written)}catch(s){throw mo(s)}}a(x7,"csvDataLoad");async function F7(e){let t=Df.urlObject(e);if(t)throw nt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Eo}/${r}`;try{await k7(e,r)}catch(s){throw Na.error(bt.DOWNLOAD_FILE_ERR(r)+" - "+s),nt(s,ho(bt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Dg(this.job_operation_function.name,e.action,e.schema,e.table,n,Ln.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Mg(s);return await Cf(n),i}catch(s){throw await Cf(n),mo(s)}}a(F7,"csvURLLoad");async function q7(e){let t=Df.fileObject(e);if(t)throw nt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=new Dg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ln.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Mg(r)}catch(n){throw mo(n)}}a(q7,"csvFileLoad");async function G7(e){let t=Df.s3FileObject(e);if(t)throw nt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=D7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Eo}/${s}`;let i=new Dg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await V7(s,e);let o=await Mg(i);return await Cf(r),o}catch(n){throw await Cf(r),mo(n)}}a(G7,"importFromS3");async function k7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await C7("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw nt(n,s,n.statusCode,Ln.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Y7(r,e.csv_url),await $7(t,r.raw)}a(k7,"downloadCSVFile");async function V7(e,t){try{let r=`${Eo}/${e}`;await Mn.mkdirp(Eo),await Mn.writeFile(`${Eo}/${e}`,"",{flag:"a+"});let n=await Mn.createWriteStream(r),s=await M7.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Na.error(bt.S3_DOWNLOAD_ERR+" - "+r),nt(r,ho(bt.S3_DOWNLOAD_ERR))}}a(V7,"downloadFileFromS3");async function $7(e,t){try{await Mn.mkdirp(Eo),await Mn.writeFile(`${Eo}/${e}`,t)}catch(r){throw Na.error(bt.WRITE_TEMP_FILE_ERR),nt(r,ho(bt.DEFAULT_BULK_LOAD_ERR))}}a($7,"writeFileToTempFolder");async function Cf(e){if(e)try{await Mn.access(e),await Mn.unlink(e)}catch{Na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Cf,"deleteTempFile");function Y7(e,t){if(e.statusCode!==Ov.HTTP_STATUS_CODES.OK)throw nt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,kt.BAD_REQUEST);if(!H7[e.headers["content-type"]])throw nt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,kt.BAD_REQUEST);if(!e.raw)throw nt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,kt.BAD_REQUEST)}a(Y7,"validateURLResponse");async function Mg(e){try{let t;switch(e.file_type){case Ln.VALID_S3_FILE_TYPES.CSV:t=await K7(e);break;case Ln.VALID_S3_FILE_TYPES.JSON:t=await W7(e);break;default:throw nt(new Error,bt.DEFAULT_BULK_LOAD_ERR,kt.BAD_REQUEST,Ln.LOG_LEVELS.ERROR,bt.INVALID_FILE_EXT_ERR(e))}return Dv(t.records,t.number_written)}catch(t){throw mo(t)}}a(Mg,"fileLoad");async function yv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await If.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Nv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=nt(c);r(u)}}a(yv,"validateChunk");async function wv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ba.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ba.isEmpty(c)&&!ba.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await bv.callOperationFunctionAsAwait(Cv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=nt(c,ho(bt.INSERT_CSV_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.INSERT_CSV_ERR+" - "+c);r(u)}}a(wv,"insertChunk");async function K7(e){let t={records:0,number_written:0},r=Iv(e.schema,e.table);try{let n=new Lg,s=Mn.createReadStream(e.file_path,{highWaterMark:Rv});s.setEncoding("utf8"),await Ig.parsePromise(s,yv.bind(null,e,n),Cg.bind(null,r));let i=n.getPermsResponse();if(i)throw nt(new Error,i,kt.BAD_REQUEST);return s=Mn.createReadStream(e.file_path,{highWaterMark:Rv}),s.setEncoding("utf8"),await Ig.parsePromise(s,wv.bind(null,e,t),Cg.bind(null,r)),s.destroy(),t}catch(n){throw nt(n,ho(bt.PAPA_PARSE_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.PAPA_PARSE_ERR+n)}}a(K7,"callPapaParse");function Iv(e,t){let r=P7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>v7(i,s));return n}a(Iv,"createTransformMap");function Cg(e,t,r){let n=e.get(r);return n?n(t):ba.autoCast(t)}a(Cg,"typeFunction");async function W7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Lg,s=hv([Mn.createReadStream(e.file_path,{encoding:"utf-8"}),mv.withParser(),c=>c.value,new pv({batchSize:Av}),Sv(async c=>{await yv(e,n,r,c)})]);await new Promise((c,u)=>{Tv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw nt(new Error,i,kt.BAD_REQUEST);let o=hv([Mn.createReadStream(e.file_path,{encoding:"utf-8"}),mv.withParser(),c=>c.value,new pv({batchSize:Av}),Sv(async c=>{await wv(e,t,r,c)})]);return await new Promise((c,u)=>{Tv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw nt(n,ho(bt.INSERT_JSON_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.INSERT_JSON_ERR+n)}}a(W7,"insertJson");async function Cv(e){let t={};try{e.data&&e.data.length>0&&Q7(e.data[0])?t=await z7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Na.info(t.message))}catch(r){throw mo(r)}return t}a(Cv,"callBulkFileLoad");function Q7(e){let t=Object.keys(e);for(let r of t)if(!B7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Q7,"validateColumnNames");async function z7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=If.insert;break;case"update":i=If.update;break;case"upsert":i=If.upsert;break;default:throw nt(new Error,bt.INVALID_ACTION_PARAM_ERR(n),kt.BAD_REQUEST,Ln.LOG_LEVELS.ERROR,bt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=ba.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw mo(o)}}a(z7,"bulkFileLoad");function Dv(e,t){return`successfully loaded ${t} of ${e} records`}a(Dv,"buildResponseMsg");function mo(e){return nt(e,ho(bt.DEFAULT_BULK_LOAD_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(mo,"buildTopLevelErrMsg")});var Uv=g((IEe,Mv)=>{"use strict";var vg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Mv.exports=vg});var Bv=g((DEe,vv)=>{"use strict";var J7=M(),Pv=require("moment"),X7=require("uuid").v4,Bg=class{static{a(this,"JobObject")}constructor(){this.id=X7(),this.type=void 0,this.start_datetime=Pv().valueOf(),this.created_datetime=Pv().valueOf(),this.end_datetime=void 0,this.status=J7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};vv.exports=Bg});var Hg=g((MEe,kv)=>{"use strict";var j7=require("uuid").v4,Fv=jr(),qv=Xr(),Z7=Kn(),eee=zo(),tee=Uv(),st=M(),ree=Bv(),nee=gS(),un=Y(),see=bc(),ya=J(),{promisify:iee}=require("util"),po=require("moment"),oee=af(),Mf=Og(),Hv=Rm(),{deleteTransactionLogsBeforeValidator:aee}=xT(),{handleHDBError:cee,hdb_errors:uee}=ee(),{HTTP_STATUS_CODES:lee}=uee,xv=qv.searchByValue,_ee=qv.searchByHash,dee=Fv.insert,fee=iee(oee.evaluateSQL),Eee=Fv.update;kv.exports={addJob:pee,updateJob:Tee,handleGetJob:hee,handleGetJobsByStartDate:mee,getJobById:Gv};async function hee(e){try{let t=await Gv(e.id);return ya.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw un.error("There was an error getting job",t),new Error(r)}}a(hee,"handleGetJob");async function mee(e){try{let t=await See(e);if(un.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=po(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=po(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw un.error(r),new Error(r)}}a(mee,"handleGetJobsByStartDate");async function pee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return un.info(l),t.error=l,t}if(!st.JOB_TYPE_ENUM[e.operation])return un.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case st.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Mf.fileObject(e);break;case st.OPERATIONS_ENUM.CSV_URL_LOAD:n=Mf.urlObject(e);break;case st.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Mf.dataObject(e);break;case st.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Mf.s3FileObject(e);break;case st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Hv(e,"date");break;case st.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Hv(e,"timestamp");break;case st.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=aee(e);break;default:break}if(n)throw cee(n,n.message,lee.BAD_REQUEST,void 0,void 0,!0);let s=new ree;s.type=e.operation===st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Z7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await xv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return un.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=j7();try{o=await xv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return un.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return un.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new see(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await dee(u)}catch(l){return un.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,un.trace(l)}return t}a(pee,"addJob");async function See(e){let t=po(e.from_date,po.ISO_8601),r=po(e.to_date,po.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new tee(n,e.hdb_user);try{return await fee(s)}catch(i){throw un.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(See,"getJobsInDateRange");async function Gv(e){if(ya.isEmptyOrZeroLength(e))return ya.errorizeMessage("Invalid job ID specified.");let t=new eee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await _ee(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return un.error(n),ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Gv,"getJobById");async function Tee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===st.JOB_STATUS_ENUM.COMPLETE||e.status===st.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=po().valueOf());let t=new nee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Eee(t),r}a(Tee,"updateJob")});var Qv=g((PEe,Wv)=>{"use strict";var Vv=J(),mr=M(),gee=require("moment"),Uf=Ug(),Pf=Y(),$v=Hg(),Yv=cf(),Kv=qi(),Ree=Ze(),Aee=ef(),xg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Oee(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Vv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Vv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case mr.JOB_TYPE_ENUM.csv_file_load:await Cs(e,Uf.csvFileLoad);break;case mr.JOB_TYPE_ENUM.csv_url_load:await Cs(e,Uf.csvURLLoad);break;case mr.JOB_TYPE_ENUM.csv_data_load:await Cs(e,Uf.csvDataLoad);break;case mr.JOB_TYPE_ENUM.import_from_s3:await Cs(e,Uf.importFromS3);break;case mr.JOB_TYPE_ENUM.empty_trash:break;case mr.JOB_TYPE_ENUM.export_local:await Cs(e,Yv.export_local);break;case mr.JOB_TYPE_ENUM.export_to_s3:await Cs(e,Yv.export_to_s3);break;case mr.JOB_TYPE_ENUM.delete_files_before:case mr.JOB_TYPE_ENUM.delete_records_before:await Cs(e,Kv.deleteFilesBefore);break;case mr.JOB_TYPE_ENUM.delete_audit_logs_before:await Cs(e,Kv.deleteAuditLogsBefore);break;case mr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Cs(e,Aee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Oee,"parseMessage");async function Cs(e,t){try{e.job.status=mr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=gee().valueOf(),await $v.updateJob(e.job),await bee(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Pf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Pf.error(n),e.job.message=n,e.job.status=mr.JOB_STATUS_ENUM.ERROR;try{await $v.updateJob(e.job)}catch(s){throw Pf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Cs,"runJob");async function bee(e){Pf.trace("launching job thread:",e),Ree.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[mr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(bee,"launchJobThread");Wv.exports={parseMessage:Oee,RunnerMessage:xg}});var Jv=g((BEe,zv)=>{"use strict";var Fg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};zv.exports=Fg});var f0=g((xEe,Yg)=>{"use strict";var xf=Xr(),kg=af(),vf=Ug(),Ds=sd(),Bf=vi(),zu=qi(),Nee=iS(),Qu=Zr(),Hf=ES(),Vt=HT(),Nt=Y(),yee=pS(),wee=Rd(),Xv=ZS(),Iee=Od(),Cee=eT(),Dee=tT(),Lee=sT(),Mee=oT(),qg=uT(),jv=cf(),Uee=sf(),Vg=Hg(),q=M(),{hdb_errors:Xu,handleHDBError:Ju}=ee(),{HTTP_STATUS_CODES:Zv}=Xu,Gg=ET(),e0=Hd(),u0=require("util"),wa=jr(),Pee=Qs(),vee=oa(),t0=Qv(),r0=lu(),n0=(Vd(),te(wu)),s0=wr(),i0=ef(),o0=Qd(),{setServerUtilities:Bee}=(Lf(),te(Pg)),{CONTEXT:Hee}=(gn(),te(lp)),{_assignPackageExport:xee}=require("../../index"),{transformReq:Fee}=J(),{server:qee}=(Zt(),te(yi)),Gee=bg(),a0=xf.searchByHash,kee=xf.searchByValue,Vee=u0.promisify(xf.search),$ee=u0.promisify(kg.evaluateSQL),Yee={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},V=Jv();async function l0(e,t){try{if(e.body.operation!=="read_log"&&(Nt.log_level===q.LOG_LEVELS.INFO||Nt.log_level===q.LOG_LEVELS.DEBUG||Nt.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Nt.info(o)}}catch(n){Nt.error(n)}let r=await Gee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Yee[e.body.operation]&&Pee.setSchemaDataToGlobal(n=>{n&&Nt.error(n)}),r}a(l0,"processLocalTransaction");var c0=Wee();Yg.exports={chooseOperation:_0,getOperationFunction:d0,operation:$g,processLocalTransaction:l0};Bee(Yg.exports);qee.operation=$g;function _0(e){let t;try{t=d0(e)}catch(s){throw Nt.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=kg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=kg.checkASTPermissions(e,i);if(o)throw Nt.error(`${Zv.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Ju(new Error,o,Xu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Uee.verifyPerms(i,s);if(o)throw Nt.error(`${Zv.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Ju(new Error,o,Xu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Ju(s,"There was an error when trying to choose an operation path")}return r}a(_0,"chooseOperation");function d0(e){if(Nt.trace(`getOperationFunction with operation: ${e.operation}`),c0.has(e.operation))return c0.get(e.operation);throw Ju(new Error,Xu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Xu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(d0,"getOperationFunction");xee("operation",$g);function $g(e,t){e.hdb_user=this[Hee]?.user,e.bypass_auth=!t;let r=_0(e);return l0({body:e},r)}a($g,"operation");async function Kee(e){Nt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await wa.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await wa.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await wa.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await zu.deleteRecord(i);break;default:Nt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Nt.info("Invalid operation in transaction"),Nt.error(o)}}a(Kee,"catchup");async function rs(e){Fee(e);let t,r;try{r=await Vg.addJob(e),t=r.createdJob,Nt.info("addJob result",r);let n=new t0.RunnerMessage(t,e);return await t0.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Nt.error(s),Ju(n,s)}}a(rs,"executeJob");function Wee(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new V(wa.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new V(wa.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new V(wa.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(xf.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(a0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new V(a0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(kee)),e.set(q.OPERATIONS_ENUM.SEARCH,new V(Vee)),e.set(q.OPERATIONS_ENUM.SQL,new V($ee)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(rs,vf.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(rs,vf.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new V(rs,vf.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(rs,vf.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Ds.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new V(Ds.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new V(Ds.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Ds.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new V(Ds.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new V(Ds.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new V(Ds.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Ds.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(Bf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(Bf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(Bf.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new V(Bf.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new V(zu.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new V(Qu.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new V(Qu.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new V(Qu.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new V(Qu.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new V(Hf.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new V(Hf.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new V(Hf.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new V(Hf.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new V(Qu.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new V(yee)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new V(wee)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new V(Xv)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(Xv)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new V(Iee)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Cee)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new V(Dee)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new V(s0.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Lee.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(Mee)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(qg.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(qg.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(qg.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new V(rs,jv.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(rs,zu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(rs,zu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new V(rs,jv.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V(Vg.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new V(Vg.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new V(Gg.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new V(Gg.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V(Gg.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new V(e0.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new V(e0.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new V(Kee)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(vee.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(rs,zu.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(Nee)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(r0.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(r0.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new V(n0.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new V(n0.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new V(s0.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V(Vt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V(Vt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V(Vt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new V(Vt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V(Vt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new V(Vt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V(Vt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V(Vt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V(Vt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V(Vt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new V(Vt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V(Vt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V(Vt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V(Vt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V(Vt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V(Vt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(i0.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(rs,i0.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(o0.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(o0.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new V(Ds.getBackup)),e}a(Wee,"initializeOperationFunctionMap")});var qf=g((qEe,m0)=>{"use strict";var Kg=M(),Qee=J(),ju=Y(),{handleHDBError:Wg,hdb_errors:Ff}=ee(),{isMainThread:zee}=require("worker_threads"),{Readable:Jee}=require("stream"),E0=require("os"),Xee=require("util"),jee=IS(),Zee=Xee.promisify(jee.authorize),h0=f0(),{createGzip:ete,constants:tte}=require("zlib");function rte(e){let t=`Found an uncaught exception with message: ${e.message}. ${E0.EOL}Stack: ${e.stack} ${E0.EOL}Terminating ${zee?"HDB":"thread"}.`;console.error(t),ju.fatal(t),process.exit(1)}a(rte,"handleServerUncaughtException");function nte(e,t,r){if(ju[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Ff.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(nte,"serverErrorHandler");function ste(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Wg(new Error,"Invalid JSON.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Qee.isEmpty(e.body.operation)){let n=Wg(new Error,"Request body must include an 'operation' property.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ste,"reqBodyValidationHandler");function ite(e,t,r){let n;e.body.operation!==Kg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Kg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Kg.OPERATIONS_ENUM.LOGOUT?Zee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{ju.warn(s),ju.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Wg(s,i,Ff.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(ite,"authHandler");async function ote(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=h0.chooseOperation(e.body);let s=await h0.processLocalTransaction(e,n);if(s instanceof Jee&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(ete({level:tte.Z_BEST_SPEED})))}return s}catch(s){throw ju.error(s),s}}a(ote,"handlePostRequest");m0.exports={authHandler:ite,handlePostRequest:ote,handleServerUncaughtException:rte,serverErrorHandler:nte,reqBodyValidationHandler:ste}});var g0=g((kEe,T0)=>{"use strict";var ate=require("fastify-plugin"),{handlePostRequest:p0,authHandler:cte,reqBodyValidationHandler:ute}=qf();async function lte(e){e.decorate("hdbCore",{preValidation:[ute,cte],request:t=>S0(p0(t,response)),requestWithoutAuthentication:(t,r)=>S0(p0(t,r,!0))})}a(lte,"hdbCore");async function S0(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(S0,"convertAsyncIterators");T0.exports=ate(lte)});var O0=g((YEe,A0)=>{"use strict";var $Ee=require("fs"),Qg=Z();Qg.initSync();var{CONFIG_PARAMS:R0}=M(),_te=1024*1024*1024;function dte(e){let t=Qg.get(R0.HTTP_TIMEOUT),r=Qg.get(R0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:_te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(dte,"getServerOptions");A0.exports=dte});var y0=g((WEe,N0)=>{"use strict";var zg=Z();zg.initSync();var{CONFIG_PARAMS:b0}=M();function fte(){let e=zg.get(b0.HTTP_CORSACCESSLIST),t=zg.get(b0.HTTP_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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(fte,"getCORSOptions");N0.exports=fte});var C0=g((zEe,I0)=>{"use strict";var w0=Z();w0.initSync();var Ete=M();function hte(){return w0.get(Ete.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hte,"getHeaderTimeoutConfig");I0.exports=hte});var Xg={};Ve(Xg,{customFunctionsServer:()=>Ste,ready:()=>$0,start:()=>pte});function pte(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ls||(Ls=V0(t),je.http((await Ls).server));let o=await Ls,c=(0,Jg.dirname)(s),u=(0,Jg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!D0.has(c)){D0.add(c);try{o.register(gte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ge.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:$0}}async function Ste(){try{Ge.info("In Custom Functions Fastify server"+process.cwd()),Ge.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ge.debug(`Custom Functions server process ${process.pid} starting up.`),await Tte();let e=B0.get(H0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ls=await V0(e)}catch(r){throw Ge.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ge.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ge.error(`Custom Functions ${process.pid} Error: ${e}`),Ge.error(e),process.exit(1)}}async function Tte(){try{Ge.info("Custom Functions starting configuration."),await x0.setUsersToGlobal(),Ge.info("Custom Functions completed configuration.")}catch(e){Ge.error(e)}}function gte(e,t){return async function(r){try{Ge.info("Custom Functions starting buildRoutes"),Ge.trace("Loading fastify routes folder "+e),(0,L0.existsSync)(e)&&r.register(v0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ge.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ge.error(s.message):s&&Ge.error(s),o()})}catch(n){Ge.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function V0(e){Ge.info("Custom Functions starting buildServer.");let t=(0,F0.default)(e),r=(0,M0.default)(t);r.server.headersTimeout=(0,G0.default)(),r.setErrorHandler(k0.serverErrorHandler);let n=(0,q0.default)();return n&&r.register(U0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(P0.default),await r.register(mte),await r.after(),ag(r),Ge.info("Custom Functions completed buildServer."),r}function $0(){if(Ls)return Ls.then?Ls.then(e=>e.ready()):Ls.ready()}var Jg,L0,M0,U0,P0,v0,B0,H0,Ge,mte,x0,F0,q0,G0,k0,Ls,D0,Y0=Oe(()=>{Jg=require("path"),L0=require("fs"),M0=B(require("fastify")),U0=B(require("@fastify/cors")),P0=B(Tg()),v0=B(require("@fastify/autoload")),B0=B(Z()),H0=B(M()),Ge=B(Y()),mte=B(g0()),x0=B(Zr()),F0=B(O0()),q0=B(y0()),G0=B(C0()),k0=B(qf());fa();Zt();D0=new Set;a(pte,"start");a(Ste,"customFunctionsServer");a(Tte,"setUp");a(gte,"buildRouteFolder");a(V0,"buildServer");a($0,"ready")});var jg={};Ve(jg,{start:()=>Rte});function Rte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,J0.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){W0||(W0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=K0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Q0.default)(s,(0,z0.realpathSync)(o))}}return i(s)},{runFirst:!0})),K0.set(r,n)}}}var Q0,z0,J0,K0,W0,X0=Oe(()=>{Q0=B(require("send")),z0=require("fs"),J0=B(require("serve-static")),K0=new Map;a(Rte,"start")});function bte(e,t=1,r){if(Zg++,(0,So.startWorker)("server/threads/threadServer.js",{name:Vf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Vf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Ote.push(s),await s,Ia.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=kf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Ia.indexOf(n);o>-1&&Ia.splice(o,1)}if(a(i,"removeWorker"),Ca){let o=Ca;Ca=[];for(let c of o)tB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{eR?eR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,So.shutdownWorkers)(),Zg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function rB(e=0,t){if(typeof e=="string")try{(0,$f.existsSync)(e)&&(0,$f.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Nte:r=yte(t):r=rR;let n=(0,Da.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=tB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),eR=!0,r(o,(c,u)=>{if(!c){if(j0){let l=o._socket||new Da.Socket({handle:o,writable:!0,readable:!0});j0.deliverSocket(l,e,u),l.resume()}else Zg>0?(Ca.length===0&&setTimeout(()=>{Ca.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(),o.localPort=e,Ca.push(o)):(console.log("start up a dynamic thread to handle request"),bte(0));vr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Da.Socket({handle:o,writable:!0,readable:!0});Dte(l,c,e)}vr(!0,"socket-routed")})};let s=Qc();tR.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function rR(e,t){let r,n=0;for(let s of Ia){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Gf)return Gf=i,t(r);n=i}Gf=0,t(r)}function Nte(e,t){let r={};e.getpeername(r);let n=r.address,s=La.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);rR(e,o=>{La.set(n,{worker:o,lastUsed:i}),t(o)})}function yte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Da.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=La.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);rR(n,d=>{La.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Ite(){Gf=0;for(let e of Ia)e.expectedIdle=e.recentELU.idle+wte,e.requests=1;Ia.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Dte(e,t,r){let n=Cte++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),kf.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),kf.delete(n)),s.event=="destroy"&&(e.destroy(),kf.delete(n))})}var So,Da,Vf,tR,$f,eB,Ate,Ia,Ca,tB,j0,Zg,Ote,eR,Gf,Z0,La,wte,kf,Cte,nB=Oe(()=>{So=B(Ze()),Da=require("net"),Vf=B(M()),tR=B(Y()),$f=require("fs");gs();eB=require("worker_threads"),Ate=B(Gi()),Ia=[],Ca=[],tB=[],Zg=0,Ote=[];eB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(bte,"startHTTPWorker");a(rB,"startSocketServer");Gf=0;a(rR,"findMostIdleWorker");Z0=36e5,La=new Map;a(Nte,"findByRemoteAddressAffinity");a(yte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of La)r.lastUsed+Z0<e&&La.delete(t)},Z0).unref();wte=1e3;a(Ite,"updateWorkerIdleness");(0,So.setMonitorListener)(Ite);kf=new Map,Cte=1;a(Dte,"proxySocket")});var oR={};Ve(oR,{Request:()=>nR,createReuseportFd:()=>Yf});var sB,nR,sR,iR,Yf,Kf=Oe(()=>{sB=require("os"),nR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new iR(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new sR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},sR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},iR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,sB.platform)()!="win32"&&(Yf=require("node-unix-socket").createReuseportFd)});var cB=g((lhe,aB)=>{"use strict";var Lte=require("cluster"),To=Z();To.initSync();var oB=M(),ihe=require("util"),Ms=Y(),ohe=require("fs"),Mte=require("fastify"),ahe=Qc(),Ute=require("@fastify/cors"),Pte=require("@fastify/compress"),vte=require("@fastify/static"),Bte=Tg(),Hte=require("path"),{PACKAGE_ROOT:xte}=M(),Fte=Qs(),qte=J(),Gte=Zr(),kte=Gi(),{server:Vte}=(Zt(),te(yi)),{node_request_key:che}=(Kf(),te(oR)),{authHandler:$te,handlePostRequest:Yte,serverErrorHandler:Kte,reqBodyValidationHandler:Wte}=qf(),uhe=require("net"),{registerContentHandlers:Qte}=(fa(),te(kP)),zte=6e4,Jte=1024*1024*1024,Xte="TRUE",{CONFIG_PARAMS:Zu}=oB,Ma;aB.exports={hdbServer:iB,start:iB};async function iB(e){try{Ms.info("In Fastify server"+process.cwd()),Ms.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ms.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Lte.isMaster,await jte();let t=e.securePort>0;Ma=Zte(t),await Ma.ready(),e||(e={}),e.isOperationsServer=!0;try{Vte.http(Ma.server,e),Ma.server.closeIdleConnections||await Ma.listen({port:0,host:"::"})}catch(r){throw Ma.close(),Ms.error(r),Ms.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ms.fatal(t),process.exit(1)}}a(iB,"operationsServer");async function jte(){Ms.trace("Configuring HarperDB process."),Fte.setSchemaDataToGlobal(),await Gte.setUsersToGlobal(),await kte.getLicense()}a(jte,"setUp");function Zte(e){Ms.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ere(e),r=Mte(t);r.server.headersTimeout=rre(),r.setErrorHandler(Kte);let n=tre();n&&r.register(Ute,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Bte),r.register(Pte),r.register(vte,{root:Hte.join(xte,"studio/build-local")}),Qte(r);let s=To.get(oB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wte,$te],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Yte(i,o)}),r.get("/health",()=>"HarperDB is running."),Ms.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Zte,"buildServer");function ere(e){let t=To.get(Zu.OPERATIONSAPI_NETWORK_TIMEOUT),r=To.get(Zu.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Jte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ere,"getServerOptions");function tre(){let e=To.get(Zu.OPERATIONSAPI_NETWORK_CORS),t=To.get(Zu.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Xte)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(tre,"getCORSOpts");function rre(){return To.get(Zu.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??zte}a(rre,"getHeaderTimeoutConfig")});var SB=g((hhe,pB)=>{"use strict";var{decode:nre}=require("msgpackr"),{isMainThread:dhe,parentPort:sre,threadId:fhe}=require("worker_threads"),cR=Rt(),Us=tt(),ire=M(),Ei=Y(),uB=Z(),_B=M();Ze();var ore=hs(),{recordAction:are,recordActionBinary:cre}=(gs(),te(jc)),{publishToStream:ure}=cR,{ConsumerEvents:lre}=require("nats"),Ehe={durable:Us.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Us.WORK_QUEUE_CONSUMER_NAMES.deliver_group},_re,dre,fre,dB,fB;pB.exports={initialize:uR,workQueueListener:mB,setSubscription:Ere,setIgnoreOrigin:mre,getDatabaseSubscriptions:hre};async function uR(){fB=!0,Ei.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await cR.getNATSReferences();_re=e,dre=e.info.server_name,fre=t,dB=r}a(uR,"initialize");var Qf=new Map;function Ere(e,t,r){let n=Qf.get(e);n||Qf.set(e,n=new Map),n.set(t,r),fB||uR().then(mB)}a(Ere,"setSubscription");function hre(){return Qf}a(hre,"getDatabaseSubscriptions");var EB;function mre(e){EB=e}a(mre,"setIgnoreOrigin");var hB=100,lB=new Array(hB),Wf=0;async function mB(){let e=await dB.consumers.get(Us.WORK_QUEUE_CONSUMER_NAMES.stream_name,Us.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(sre?.on("message",async n=>{let{type:s}=n;s===_B.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===lre.HeartbeatsMissed){let s=n.data;Ei.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(Ei.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await lB[Wf],lB[Wf]=pre(n).catch(s=>{Ei.error(s)}),++Wf>=hB&&(Wf=0)}catch(n){Ei.error("Error consuming clustering ingest, restarting consumer",n)}cR.clearClientCache(),await uR()}}a(mB,"workQueueListener");async function pre(e){let t=nre(e.data);are(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=uB.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Us.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Us.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Us.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!EB),cre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Us.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Ei.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Ei.trace(`messageProcessor nats msg id: ${e.headers.get(Us.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:T}=f||{},A=Qf.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,A.send(t);else if(l.length===1&&!u)A.send({type:aR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:T});else{let b=l.map((H,F)=>({type:aR(o),value:H,expiresAt:E,id:d?.[F],table:_}));for(;u;)b.push({type:aR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;A.send({type:"transaction",writes:b,table:_,timestamp:p,onCommit:h,user:S,nodeName:T})}uB.get(_B.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ure(e.subject.split(".").slice(0,-1).join("."),ore.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Ei.error(o)}e.ack()}a(pre,"messageProcessor");function aR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(aR,"convertOperation")});var hR={};Ve(hR,{disableNATS:()=>Tre,publishToStream:()=>Zf,setNATSReplicator:()=>lR,setPublishToStream:()=>gre,setSubscription:()=>ER,start:()=>Sre});function Sre(){Jf.default.get(Xf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Are()}function Tre(e=!0){OB=e}function gre(e,t){Zf=e,ER=t}function Are(){if(OB||process.env._DISABLE_NATS)return;let e=yn(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];lR(s,r,i)}}mR((r,n)=>{lR(r.tableName,r.databaseName,r),n&&NB(r)}),!TB&&(TB=!0)}function lR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Bt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){NB(i)}static subscribe(){let i=new Tn;return ER(t,e,i),i}static subscribeOnThisThread(i){return i<Rre}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new zf(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=bB;return i}a(n,"getNATSTransaction")}function NB(e){let t=Jf.default.get(Xf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Zf(`${dR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fR.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 gB,dR,fR,RB,AB,Jf,Xf,jf,OB,Zf,ER,Rre,bB,TB,zf,_R,yB=Oe(()=>{be();gn();gB=B(Rt()),dR=B(tt()),fR=B(hs());lc();RB=B(SB()),AB=B(Ir()),Jf=B(Z()),Xf=B(M()),jf=B(Y());a(Sre,"start");a(Tre,"disableNATS");Zf=gB.publishToStream,ER=RB.setSubscription;a(gre,"setPublishToStream");Rre=2;a(Are,"assignReplicationSource");a(lR,"setNATSReplicator");a(NB,"publishSchema");zf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Jf.default.get(Xf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(jf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(Zf(`${dR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,fR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw jf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},_R=class extends zf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};bB=new _R});var qB=g(go=>{"use strict";var{isMainThread:Ore,parentPort:rl,threadId:el}=require("worker_threads"),{Socket:bre,createServer:Nre}=require("net"),{createServer:yre,IncomingMessage:wre}=require("http"),{createServer:Ire}=require("https"),{readFileSync:Ua,unlinkSync:wB,existsSync:Cre}=require("fs"),Un=Y(),He=Z(),pr=M(),{server:rE}=(Zt(),te(yi)),{WebSocketServer:Dre}=require("ws"),{createServer:Lre}=require("tls"),{getTicketKeys:Mre,restartNumber:Ure,getWorkerIndex:IB}=Ze(),{Headers:UB}=(Fd(),te(dU)),{recordAction:tl,recordActionBinary:Pre}=(gs(),te(jc)),{Request:PB,createReuseportFd:CB}=(Kf(),te(oR)),{checkMemoryLimit:vre}=Gi(),vB=require("tls"),DB=vB.createSecureContext;vB.createSecureContext=function(e){if(!e.cert||!e.key)return DB(e);let t={...e};delete t.key,delete t.cert;let r=DB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ure<=1&&Un.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Ahe,CONFIG_PARAMS:Bre}=pr;He.initSync();var Hre=He.get(Bre.HTTP_SESSIONAFFINITY),ns={};go.registerServer=RR;go.httpServer=AR;go.deliverSocket=gR;go.startServers=BB;go.when_components_loaded=null;rE.http=AR;rE.request=Gre;rE.socket=kre;rE.ws=Vre;var pR={},eE={},xre,hi={},tE={},Fre=[],SR=[];function BB(){return go.when_components_loaded=OR().loadRootComponents(!0).then(()=>{rl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)gR(n,r,s);else if(t.requestId)qre(t);else if(t.type===pr.ITC_EVENT_TYPES.SHUTDOWN){Un.trace("received shutdown request",el);for(let i in ns){let o=ns[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Un.info("Closed all http connections",i,el)},4e3).unref()),o.close?.(()=>{if(He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&IB()==0)try{wB(He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,el),o.cantCleanupProperly||Un.warn("Had to forcefully exit the thread",el),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(CB&&!Hre)for(let t in ns){let r=ns[t];if(isNaN(t)&&IB()==0){Cre(t)&&wB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),Un.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=CB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),Un.trace("Listening on port "+t,el)}).on("error",i)}))}Promise.all(e).then(()=>{rl?.postMessage({type:pr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(BB,"startServers");Ore||BB();function gR(e,t,r){let n=e?.read?e:new bre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ns[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=ns[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Un.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(gR,"deliverSocket");var LB=new Map;function qre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=LB.get(s),r){case"connection":i=gR(void 0,t),LB.set(s,i),i.write=(c,u,_)=>(rl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(rl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),rl.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(qre,"proxyRequest");function RR(e,t,r=!0){!+t&&t!==He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(He.get(pr.CONFIG_PARAMS.HTTP_PORT),10));let n=ns[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",MB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else ns[t]=e;e.on("unhandled",MB)}a(RR,"registerServer");function HB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],He.get(pr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:He.get(pr.CONFIG_PARAMS.HTTP_PORT),secure:He.get(pr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),He.get(pr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:He.get(pr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(HB,"getPorts");function AR(e,t){for(let{port:r,secure:n}of HB(t))xB(r,n,t?.isOperationsServer),typeof e=="function"?SR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,RR(e,r,!1)),tE[r]=TR(SR,r),xre=TR(Fre,r)}a(AR,"httpServer");function xB(e,t,r){if(!hi[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:He.get(n+"_keepAliveTimeout"),headersTimeout:He.get(n+"_headersTimeout"),requestTimeout:He.get(n+"_timeout")},i=He.get(n+"_mtls"),o=He.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=He.get(n+"tls_privateKey"),_=He.get(n+"tls_certificate"),l=He.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ua(u),ciphers:He.get("tls_ciphers"),cert:Ua(_),ca:l&&Ua(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Mre()})}let c=vre();hi[e]=(t?Ire:yre)(s,async(u,_)=>{try{let d=performance.now(),f=new PB(u,_);r&&(f.isOperationsServer=!0);let E=await tE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=FB(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let F of E.headers||[])_.setHeader(F[0],F[1]);return u.baseRequest=f,_.baseResponse=E,hi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,A;if(!E.handlesHeaders){let F=E.headers||new UB;if(T?T.length>=0&&(typeof T=="string"?F.set("Content-Length",Buffer.byteLength(T)):F.set("Content-Length",T.length),A=!0):(F.set("Content-Length","0"),A=!0),F.append){let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),F.append("Server-Timing",v,!0)}_.writeHead(h,F&&(F[Symbol.iterator]?Array.from(F):F)),A&&_.end(T)}let b=f.handlerPath,H=f.method;if(tl(S,"duration",b,H,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Pre(h<400,"success",b,H),!A)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let F=0;T.on("data",v=>{F+=v.length}),T.on("end",()=>{tl(performance.now()-p,"transfer",b,H),tl(F,"bytes-sent",b,H)})}else T?.then?T.then(F=>{_.end(F)},l):_.end(T)}catch(d){l(d)}function l(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?Un.warn(d):Un.info(d):Un.error(d)}a(l,"onError")}),i&&(hi[e].mtlsConfig=i),t&&(hi[e].on("secureConnection",u=>{u._parent.startTime&&tl(performance.now()-u._parent.startTime,"tls-handshake",e),tl(u.isSessionReused(),"tls-reused",e)}),hi[e].isSecure=!0),RR(hi[e],e)}return hi[e]}a(xB,"getHTTPServer");function TR(e,t){let r=FB;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(TR,"makeCallbackChain");function FB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new UB}}a(FB,"unhandled");function Gre(e,t){AR(e,{requestOnly:!0,...t})}a(Gre,"onRequest");function kre(e,t){let r;if(t.securePort){let n=He.get("tls_privateKey"),s=He.get("tls_certificate"),i=t.mtls?.certificateAuthority||He.get("tls_certificateAuthority");r=Lre({ciphers:He.get("tls_ciphers"),key:Ua(n),cert:Ua(s),ca:i&&Ua(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),ns[t.securePort]=r}return t.port&&(r=Nre(e),ns[t.port]=r),r}a(kre,"onSocket");Object.defineProperty(wre.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Vre(e,t){let r;for(let{port:n,secure:s}of HB(t)){eE[n]||(eE[n]=new Dre({server:r=xB(n,s)}),eE[n].on("connection",async(c,u)=>{try{let _=new PB(u);_.isWebSocket=!0;let l=tE[n](_),d=u.headers["sec-websocket-protocol"]||"",f=pR[n];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.listener(c,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){Un.warn("Error handling WebSocket connection",_)}}),eE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=pR[n];o||(o=pR[n]=[]),o.push({listener:e,protocol:i}),tE[n]=TR(SR,n)}return r}a(Vre,"onWebSocket");function MB(e,t){t.writeHead(404),t.end(`Not found
27
+ `)}a(MB,"defaultNotFound")});async function $B({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await bR.getResource(e,{});s=new wR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await bR.get(e);i&&i.delete()}s=new sE(e,t)}return n&&(n.id=e,n.user={username:t?.username},nl.put(n)),s}function NR(){return nE++,nE>65500&&(nE=1),nE}function yR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=ai.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return We(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var GB,Ro,kB,VB,bR,nl,nE,sE,wR,YB=Oe(()=>{be();yu();GB=B(Ir()),Ro=B(Y());Wi();kB=B(Ze()),VB=B(qB());Zt();bR=ot({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"}]}}]}),nl=ot({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,kB.getWorkerIndex)()===0&&(async()=>{await VB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of nl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await je.getUser(r.user.username)),We(r,()=>{try{yR(r,t)}finally{nl.delete(e.id,r)}})}})();a($B,"getSession");nE=1;a(NR,"getNextMessageId");sE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ro.trace)("Resuming subscription from",s,"from",o);let E=ai.getMatch(_);if(!E){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let T=f.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,T.indexOf("+")===T.length-1)f.onlyChildren=!0,f.url="/"+T.slice(0,T.length-1);else{let A=T.split("/"),b;for(let v=0;v<A.length;v++)if(A[v].indexOf("+")>-1)if(A[v]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let H=!0;A[A.length-1]==="#"&&(A.length--,H=!1),b&&(n=a(v=>{let P=v.id;if(!Array.isArray(P)||H&&P.length!==A.length)return!1;for(let z=0;z<A.length;z++)if(A[z]!=="+"&&A[z]!==P[z])return!1;return!0},"filter"));let F=A.indexOf("+");f.url="/"+(F>-1?A.slice(0,F):A).concat("").join("/")}}let h=E.path,p=E.Resource,S=await We(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of T)try{let b;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,b=this.needsAcknowledge(A)):(A.acknowledge?.(),b=NR());let H=A.id;Array.isArray(H)&&(H=da(H)),H==null&&(H=""),this.listener(h+"/"+H,A.value,b,t)}catch(b){(0,Ro.warn)(b)}})(),T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=NR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,yR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};We(r,async()=>{if(!t){let n=await nl.get(this.sessionId,r);n?.doesExist()&&await yR(n,n.data,r)}await nl.delete(this.sessionId,r)}).catch(n=>{(0,Ro.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(yR,"publish");wR=class extends sE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=NR(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ro.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,GB.getNextMonotonicTime)()),(0,Ro.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),bR.put(this.sessionRecord)),t.qos}}});var IR={};Ve(IR,{bypassAuth:()=>$re,start:()=>Yre});function $re(){JB=!0}function Yre({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=QB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Sr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(u){if(_.authorized)try{let E=u.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Sr.error)(E)}else if(u.required)return(0,Sr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&JB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,zB.getSuperUser)());let{onMessage:d,onClose:f}=QB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Sr.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function QB(e,t,r,n,s){WB||(WB=!0,Xc(d=>{iE>0&&d.push({metric:"mqtt-connections",connections:iE,byThread:!0})}));let i;iE++;let o,c={protocolVersion:4},u=(0,aE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){iE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),en(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await je.getUser(d.username,d.password.toString(),r),(0,oE.get)(ss.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&KB.notify({username:n.username,status:ss.AUTH_AUDIT_STATUS.SUCCESS,type:ss.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,oE.get)(ss.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&KB.error({username:n.username,status:ss.AUTH_AUDIT_STATUS.FAILURE,type:ss.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return en(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let b=e.deserialize||(e.deserialize=_o(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?b(d.will.payload):void 0,delete d.will.payload}o=$B({user:n,...d}),o=await o,s.sessions.add(o)}catch(b){return(0,Sr.error)(b),en(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}en(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,H,F,v)=>{try{let P=b.indexOf("/",1),z=P>0?b.slice(0,P):b;f({cmd:"publish",topic:b,payload:E(H),messageId:F||Math.floor(Math.random()*1e8),qos:v.qos},z)}catch(P){(0,Sr.error)(P),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let H;try{H=(await o.addSubscription(b,b.qos>=1)).qos||0}catch(F){(0,Sr.error)(F),H=c.protocolVersion<5?128:F.statusCode===403?135:F.statusCode===404?143:128}h.push(H)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let b=[];for(let H of d.unsubscriptions)b.push(o.removeSubscription(H)?0:17);f({cmd:"unsuback",granted:b,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=_o(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,A;try{A=await o.publish(d,T)}catch(b){(0,Sr.warn)(b),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:A===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),en(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Sr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,aE.generate)(h,c);t(S),vr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ui(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var aE,zB,oE,ss,Sr,KB,JB,WB,iE,XB=Oe(()=>{aE=require("mqtt-packet");YB();zB=B(Zr());fa();gs();Zt();oE=B(Z()),ss=B(M()),Sr=B(Y()),KB=(0,Sr.loggerWithTag)("auth-event"),JB=(0,oE.get)(ss.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a($re,"bypassAuth");a(Yre,"start");iE=0;a(QB,"onSocket")});var Xd={};Ve(Xd,{component_errors:()=>va,loadComponent:()=>cE,loadComponentDirectories:()=>oH,setErrorReporter:()=>zre});function oH(e,t){t&&(DR=t),e&&(LR=e);let r=[];if((0,Pn.existsSync)(CR)){let s=(0,Pn.readdirSync)(CR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,pt.join)(CR,o);r.push(cE(c,DR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(cE(n,DR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{iH=!0})}function zre(e){il=e}async function cE(e,t,r,n,s,i){if(!ZB.has(e)){ZB.set(e,!0),s&&(LR=s);try{let o;n&&(va=new Map);let c=(0,pt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Pn.existsSync)(c)?o=n?(0,sH.getConfigObj)():(0,eH.parseDocument)((0,Pn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=MR;let u=[],_=n;for(let l in o){let d=o[l];if(va.set(n?l:(0,pt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let A=e,b;for(;!(0,Pn.existsSync)(b=(0,pt.join)(A,"node_modules",l));)if(A=(0,pt.dirname)(A),A.length<(0,nH.getHdbBasePath)().length){b=null;break}if(b)f=await cE(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Qre[l];if(!f)continue;u.push(f);let h=a(A=>(A.origin=r,ot(A)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if(Pa.isMainThread&&(f=await f.startOnMainThread?.({server:je,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,n&&p))for(let A of[T,S])try{if(+A&&!jB.includes(A)){let b=UR.get(PR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&sl.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!Yf)&&(jB.push(A),rB(A,b))}}catch(b){console.error("Error listening on socket",A,b,l)}if(t.isWorker&&(f=await f.start?.({server:je,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),LR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,rH.handleHDBError)("Can not reference parent directories");let A=(0,pt.join)(e,d.files).replace(/\\/g,"/"),b=A.indexOf("/*");if(b>-1&&d.files!==MR[l]?.files&&!(0,Pn.existsSync)(A.slice(0,b)))throw new Error(`The path '${A.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let H=(0,pt.basename)(e),F=d.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+H+F.slice(2):F==="."?"/"+H:"/"+H+"/"+F;let v,P,z;if(d.root){let Q=d.root;Q.startsWith("/")&&(Q=Q.slice(1)),Q.endsWith("/")&&(Q=Q.slice(0,-1)),Q+="/",P=(0,pt.join)(e,Q)}else(z=A.indexOf("/*"))>-1&&(P=A.slice(0,z+1),v=(0,pt.relative)(e,P));let W=!1;if(Pa.isMainThread&&f.setupDirectory&&(W=await f.setupDirectory?.(F,P,t)),t.isWorker&&f.handleDirectory&&(W=await f.handleDirectory?.(F,P,t)),W)continue;for(let Q of await(0,tH.default)(A,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:pe}=Q;_=!0;let oe=(0,pt.relative)(e,se).replace(/\\/g,"/");if(v)if(oe.startsWith(v))oe=oe.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let xe=F+(F.endsWith("/")?"":"/")+oe;try{if(pe.isFile()){let le=await Wre(se);Pa.isMainThread&&await f.setupFile?.(le,xe,se,t),t.isWorker&&await f.handleFile?.(le,xe,se,t)}else Pa.isMainThread&&await f.setupDirectory?.(xe,se,t),t.isWorker&&await f.handleDirectory?.(xe,se,t)}catch(le){le.message=`Could not load ${pe.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${le.message}`,il?.(le),((0,Ba.getWorkerIndex)()===0?console:sl.default).error(le),t.set(d.path||"/",new ol(le)),va.set(n?l:(0,pt.basename)(e),le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,pt.basename)(e)}' due to: ${h.message}`,il?.(h),((0,Ba.getWorkerIndex)()===0?console:sl.default).error(h),t.set(d.path||"/",new ol(h),null,!0),va.set(n?l:(0,pt.basename)(e),h.message)}}if(Pa.isMainThread&&!iH&&i&&(0,Ba.watchDir)(e,async()=>oH()),o.extensionModule)return await Wl((0,pt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;il?.(new Error(l)),((0,Ba.getWorkerIndex)()===0?console:sl.default).error(l),va.set((0,pt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,il?.(o),t.set("",new ol(o))}}}var Pn,pt,Pa,eH,UR,PR,tH,Ba,sl,rH,nH,Kre,sH,Wre,CR,LR,iH,DR,va,Qre,MR,jB,ZB,il,ol,jd=Oe(()=>{Pn=require("fs"),pt=require("path"),Pa=require("worker_threads"),eH=require("yaml"),UR=B(Z()),PR=B(M());zO();ZO();eb();nv();Y0();X0();tH=B(require("fast-glob")),Ba=B(Ze()),sl=B(Y());Th();Zt();rH=B(ee());gn();be();nB();nH=B(Z()),Kre=B(cB());Vd();yB();XB();sH=B(wr());Kf();({readFile:Wre}=Pn.promises),CR=UR.get(PR.CONFIG_PARAMS.COMPONENTSROOT),LR=new Map,va=new Map;a(oH,"loadComponentDirectories");Qre={REST:Sf,rest:Sf,graphqlSchema:Sh,jsResource:Rh,fastifyRoutes:Xg,login:Oh,static:jg,operationsApi:Kre,customFunctions:{},http:{},clustering:hR,authentication:wu,mqtt:IR},MR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(MR,"static",{value:{files:"web/**"}});jB=[],ZB=new Map;a(zre,"setErrorReporter");a(cE,"loadComponent");ol=class extends Bt{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 OR=g((Qhe,cH)=>{var{isMainThread:aH}=require("worker_threads"),{getTables:Jre}=(be(),te(Fe)),{loadComponentDirectories:Xre,loadComponent:jre}=(jd(),te(Xd)),{resetResources:Zre}=(yu(),te(_U)),ene=PT(),tne=wr(),{dirname:rne}=require("path"),{getConnection:nne}=Rt(),sne=Z(),ine=M(),vR=new Map;async function one(e=!1){!aH&&sne.get(ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nne();try{aH&&await ene()}catch(n){console.error(n)}let t=Zre();Jre(),t.isWorker=e,await jre(rne(tne.getConfigFilePath()),t,"hdb",!0,vR),await Xre(vR,t);let r=[];for(let[n]of vR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(one,"loadRootComponents");cH.exports.loadRootComponents=one});var Ze=g((Jhe,pi)=>{"use strict";var{Worker:ane,MessageChannel:cne,parentPort:is,isMainThread:qR,threadId:une,workerData:Ps}=require("worker_threads"),{PACKAGE_ROOT:lne}=M(),{join:dH,isAbsolute:_ne,extname:dne}=require("path"),{server:fH}=(Zt(),te(yi)),{watch:fne,readdir:Ene}=require("fs/promises"),{totalmem:uH}=require("os"),al=M(),EH=Z(),vs=Y(),{randomBytes:hne}=require("crypto"),{_assignPackageExport:mne}=require("../../index"),pne=M(),lH=1024*1024,mi=[],ln=[],Sne=50,GR=1e4,Tne="restart",hH="request_thread_info",mH="resource_report",pH="thread_info",SH="added-port",gne="ack",BR;mne("threads",ln);pi.exports={startWorker:HR,restartWorkers:VR,shutdownWorkers:Nne,workers:mi,setMonitorListener:Une,onMessageFromWorkers:yne,onMessageByType:bH,broadcast:Ine,broadcastWithAcknowledgement:Dne,setChildListenerByType:bne,getWorkerIndex:TH,getWorkerCount:gH,getTicketKeys:RH,setMainIsWorker:Ane,setTerminateTimeout:Rne,restartNumber:Ps?.restartNumber||1};ln.onMessageByType=bH;ln.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ln.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var kR;function Rne(e){GR=e}a(Rne,"setTerminateTimeout");function TH(){return Ps?Ps.workerIndex:kR?0:void 0}a(TH,"getWorkerIndex");function gH(){return Ps?Ps.workerCount:kR?1:void 0}a(gH,"getWorkerCount");function Ane(e){kR=e}a(Ane,"setMainIsWorker");var uE;function RH(){return uE||(uE=qR?hne(48):Ps.ticketKeys,uE)}a(RH,"getTicketKeys");Object.defineProperty(fH,"workerIndex",{get(){return TH()}});Object.defineProperty(fH,"workerCount",{get(){return gH()}});var AH={[hH](e,t){Lne(t)},[mH](e,t){Mne(t,e)}};function HR(e,t={}){let r=process.constrainedMemory?.()||uH();r=Math.min(r,uH(),2e4*lH);let n=EH.get(al.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/lH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ln){let _=new cne;_.existingPort=u,i.push(_),o.push(_.port2)}dne(e)||(e+=".js");let c=new ane(_ne(e)?e:dH(lne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:pi.exports.restartNumber,ticketKeys:RH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:SH,port:u,threadId:c.threadId},[u]);return _E(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>HR(e,t),c.on("error",u=>{console.error("Worker error:",u),vs.error("Worker error:",u)}),c.on("exit",u=>{mi.splice(mi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Sne?(t.unexpectedRestarts=c.unexpectedRestarts+1,HR(e,t)):vs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{AH[u.type]?.(u,c)}),mi.push(c),vne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(HR,"startWorker");var One=[al.THREAD_TYPES.HTTP];async function VR(e=null,t=2,r=!0){if(qR){if(r){let{loadRootComponents:o}=OR();await o()}pi.exports.restartNumber++,t<1&&(t=t*mi.length);let n=[],s=[];for(let o of mi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;vs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:pi.exports.restartNumber,type:al.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=One.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),GR*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===pne.ITC_EVENT_TYPES.CHILD_STARTED&&(vs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");vs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Hd();r&&(e==="http"||!e)&&EH.get(al.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else is.postMessage({type:Tne,workerType:e})}a(VR,"restartWorkers");function bne(e,t){AH[e]=t}a(bne,"setChildListenerByType");function Nne(e){return VR(e,1/0,!1)}a(Nne,"shutdownWorkers");var OH=[];function yne(e){OH.push(e)}a(yne,"onMessageFromWorkers");var xR=new Map;function bH(e,t){let r=xR.get(e);r||xR.set(e,r=[]),r.push(t)}a(bH,"onMessageByType");var wne=10;async function Ine(e){let t=0;for(let r of ln)try{r.postMessage(e),t++>wne&&(t=0,await new Promise(setImmediate))}catch(n){vs.error("Unable to send message to worker",n)}}a(Ine,"broadcast");var lE=new Map,Cne=1;function Dne(e){return new Promise(t=>{let r=0;for(let n of ln)try{let s=Cne++,i=a(()=>{lE.delete(s),--r===0&&t(),n!==is&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,lE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of lE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){vs.error("Unable to send message to worker",s)}r===0&&t()})}a(Dne,"broadcastWithAcknowledgement");function Lne(e){e.postMessage({type:pH,workers:NH()})}a(Lne,"sendThreadInfo");function NH(){let e=Date.now();return mi.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(NH,"getChildWorkerInfo");function Mne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Mne,"recordResourceReport");var FR;function Une(e){FR=e}a(Une,"setMonitorListener");var Pne=1e3,_H=!1;function vne(){_H||(_H=!0,setInterval(()=>{for(let e of mi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}FR&&FR()},Pne).unref())}a(vne,"startMonitoring");var Bne=1e3;if(is){_E(is);for(let e=0,t=Ps.addPorts.length;e<t;e++){let r=Ps.addPorts[e];r.threadId=Ps.addThreadIds[e],_E(r)}setInterval(()=>{let e=process.memoryUsage();is.postMessage({type:mH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Bne).unref(),BR=a(()=>new Promise((e,t)=>{is.on("message",r),is.postMessage({type:hH});function r(n){n.type===pH&&(is.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else BR=NH;pi.exports.getThreadInfo=BR;function _E(e,t){ln.push(e),e.on("message",r=>{if(r.type===SH)r.port.threadId=r.threadId,_E(r.port);else if(r.type===gne){let n=lE.get(r.id);n&&n()}else{for(let s of OH)s(r,e);let n=xR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){vs.error(i)}}}).on("close",()=>{ln.splice(ln.indexOf(e),1)}).on("exit",()=>{ln.splice(ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(_E,"addPort");if(qR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Ene(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(dH(n,i.name));try{for await(let{filename:i}of fne(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await VR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");pi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else is.on("message",async e=>{let{type:t}=e;t===al.ITC_EVENT_TYPES.SHUTDOWN&&(pi.exports.restartNumber=e.restartNumber,is.unref(),setTimeout(()=>{vs.warn("Thread did not voluntarily terminate",une),process.exit(0)},GR).unref())})});var kI={};Ve(kI,{AUDIT_STORE_OPTIONS:()=>vH,createAuditEntry:()=>jl,openAuditStore:()=>hE,readAuditEntry:()=>Dt,setAuditRetention:()=>xne,transactionKeyEncoder:()=>PH});function hE(e){let t=e.auditStore=e.openDB(LH.AUDIT_STORE_NAME,vH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=dE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-$R})){if((_[0]&15)===WR){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Hne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,$R/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,EE.getWorkerIndex)()===(0,EE.getWorkerCount)()-1&&s(dE),t}function xne(e,t=dE){$R=e,dE=t}function jl(e,t,r,n,s,i,o){let c=BH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?Ha.setFloat64(0,n):_n.set(qh),u=9),f(0),f(t),d(r),Ha.setFloat64(u,e),u+=8,s?d(s):_n[u++]=0,_n[n?8:0]=c;let l=_n.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,xa.writeKey)(E,_n,u);let p=u-h-1;p>127?p>16383?(zR.error("Key or username was too large for audit entry",E),u=h+1,_n[h]=0):(_n.copyWithin(h+2,h+1,u),Ha.setUint16(h,p|32768),u++):_n[h]=p}function f(E){E<128?_n[u++]=E:E<16384?(Ha.setUint16(u,E|32768),u+=2):E<1056964608?(Ha.setUint32(u,E|3221225472),u+=4):(_n[u]=255,Ha.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new QR(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:BH[n&7],tableId:i,get recordId(){return DH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?DH(e,l,d):void 0},getValue(f,E,h){if(n&YR||n&KR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&KR&&h)return JR(f.getEntry(this.recordId),h,f)}}}catch{return zR.error("Reading audit entry error",e),{}}}function DH(e,t,r){let n=e.subarray(t,r);return(0,xa.readKey)(n,0,r-t)}var xa,fE,LH,MH,EE,UH,zR,_n,Ha,PH,vH,$R,Hne,dE,YR,KR,yH,WR,wH,IH,CH,BH,QR,Li=Oe(()=>{xa=require("ordered-binary"),fE=B(Z()),LH=B(lt()),MH=B(M()),EE=B(Ze()),UH=B(J());Po();zR=B(Y());mE();(0,fE.initSync)();_n=Buffer.alloc(1024),Ha=new DataView(_n.buffer,_n.byteOffset,1024),PH={writeKey(e,t,r){return e===mc?(t.set(mc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,xa.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,xa.readKey)(e,t,r)}},vH={encoding:"binary",keyEncoder:PH},$R=(0,UH.convertToMS)((0,fE.get)(MH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Hne=1e3,dE=1e4;a(hE,"openAuditStore");a(xne,"setAuditRetention");YR=16,KR=32,yH=1,WR=2,wH=3,IH=4,CH=5,BH={put:yH|YR,[yH]:"put",delete:WR,[WR]:"delete",message:wH|YR,[wH]:"message",invalidate:IH,[IH]:"invalidate",patch:CH|KR,[CH]:"patch"};a(jl,"createAuditEntry");a(Dt,"readAuditEntry");QR=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(DH,"readKeySafely")});var XR={};Ve(XR,{add:()=>pE,applyReverse:()=>HH,getRecordAtTime:()=>JR,rebuildUpdateBefore:()=>SE});function pE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function SE(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,pE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function HH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Fne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=xH}}function JR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Dt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":HH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===xH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Dt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Fne,xH,mE=Oe(()=>{Li();a(pE,"add");pE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Fne={add:pE};a(SE,"rebuildUpdateBefore");a(HH,"applyReverse");xH={};a(JR,"getRecordAtTime")});function qr(e){return e[yt]||(e[yt]=Object.create(null))}function OE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Ne])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a string, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a string, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a number, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new dn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new dn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new dn.ClientError(`${c} must be a number, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new dn.ClientError(`${c} must be a Date, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){qr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be an object, attempt to assign ${l}`);qr(this)[c]=l},"set")}_={get(){let l=this[yt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[Re]?.[c];return f.update(E)}return f}let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=FH(d,o);if(f)return l||(l=this[yt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[yt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new dn.ClientError("Can not add a property to a sealed table schema");qr(this)[o]=c}),i("deleteProperty",function(o){qr(this)[o]=void 0}),i("toJSON",function(){let o=this[yt],c;for(let _ in o){c||(c=Object.assign({},this[Re]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),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 FH(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Re])throw new Error("Can not track an already tracked object, check for circular references");this[Re]=s}},OE(r,t)),new r(e)):new TE(e);case Array:let n=new RE(e.length);n[Re]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=FH(o,t?.elements)),n[s]=o}return n;default:return e}}function k_(e){let t=e[yt],r;for(let s in t){r||(r=Object.assign({},e[Re]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=k_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Oo(e,t=e[yt]){let r;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Oo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Re]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=XR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Oo(s);r[n]=s}return r?Object.freeze(r):e[Re]||e}function gE(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ao]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Re]===s){if(gE(i))return!0}else return!0}}else{let r=e[yt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Re]===i){if(gE(s))return!0}else return!0}else return!0}}return!1}var dn,yt,TE,Ao,RE,AE,V_=Oe(()=>{gn();dn=B(ee());mE();yt=Symbol("own-data");a(qr,"getChanges");a(OE,"assignTrackedAccessors");a(FH,"trackObject");TE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Re])throw new Error("Can not track an already tracked object, check for circular references");this[Re]=t}};OE(TE,{});a(k_,"collapseData");a(Oo,"deepFreeze");a(gE,"hasChanges");Ao=Symbol.for("has-array-changes"),RE=class extends Array{static{a(this,"TrackedArray")}[Ao];constructor(t){super(t)}splice(...t){return this[Ao]=!0,super.splice(...t)}push(...t){return this[Ao]=!0,super.push(...t)}pop(){return this[Ao]=!0,super.pop()}unshift(...t){return this[Ao]=!0,super.unshift(...t)}shift(){return this[Ao]=!0,super.shift()}};RE.prototype.constructor=Array;AE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var lp={};Ve(lp,{CONTEXT:()=>Ne,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>fn,RECORD_PROPERTY:()=>Re,Resource:()=>Bt,snake_case:()=>Gne,transformForSelect:()=>NE});function Gne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function qH(e,t){if(cl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(cl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new ZR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){cl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Gr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Ne]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Ne]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ne]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){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,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,We(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new bE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new bE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function kr(e,t){let r=new VH.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function jR(e,t,r){let n=e[Re];if(n){let s=e[yt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function NE(e,t){let r=t?.propertyResolvers,n=t[Ne],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):jR(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(jR(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(jR(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=NE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var GH,kH,VH,Ne,Me,fn,Re,qne,Bt,bE,cl,ZR,gn=Oe(()=>{GH=require("crypto");lc();kH=require("../../index"),VH=B(ee());V_();Wi();hf();Ne=Symbol.for("context"),Me=Symbol.for("primary-key"),fn=Symbol("is-collection"),Re=Symbol("stored-record"),qne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Bt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[Ne];this[Ne]=n!==void 0?n:r||null}static get=Gr(function(t,r,n,s){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&&!c.selectApplied){let _=NE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Gr(function(t,r,n,s){if(Array.isArray(s)&&t[fn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):kr(t,"put")},{hasContent:!0,type:"update"});static patch=Gr(function(t,r,n,s){return t.patch?t.patch(s,r):kr(t,"patch")},{hasContent:!0,type:"update"});static delete=Gr(function(t,r,n,s){return t.delete?t.delete(r):kr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,GH.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),We(n,()=>{let i=new this(s,n),o=i.update?i.update(r):kr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Gr(function(t,r,n,s){return t.invalidate?t.invalidate(r):kr(t,"delete")},{hasContent:!1,type:"update"});static post=Gr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Gr(function(t,r,n,s){return t.connect?t.connect(s,r):kr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Gr(function(t,r,n,s){return t.subscribe?t.subscribe(r):kr(t,"subscribe")},{type:"read"});static publish=Gr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):kr(t,"publish")},{hasContent:!0,type:"create"});static search=Gr(function(t,r,n,s){let i=t.search?t.search(r):kr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=NE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Gr(function(t,r,n,s){return t.search?t.search(s,r):kr(t,"search")},{hasContent:!0,type:"read"});static copy=Gr(function(t,r,n,s){return t.copy?t.copy(s,r):kr(t,"copy")},{type:"create"});static move=Gr(function(t,r,n,s){return t.move?t.move(s,r):kr(t,"move")},{type:"delete"});post(t){if(this[fn])return this.constructor.create(this[Me],t,this[Ne]);kr(this,"post")}static isCollection(t){return t?.[fn]}static coerceId(t){return t}static parseQuery(t){return Ef(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&qne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:qH(t,this),isCollection:cl}}let i=qH(t,this);return cl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ne],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;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 _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[fn]=!0),s}subscribe(t){return new Tn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Tn}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[Me]}getContext(){return this[Ne]}};Bt.prototype[Ne]=null;(0,kH._assignPackageExport)("Resource",Bt);a(Gne,"snake_case");bE=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(qH,"pathToId");ZR=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Gr,"transactional");a(kr,"missingMethod");a(jR,"selectFromObject");a(NE,"transformForSelect")});function YH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Fa||((0,yE.onMessageByType)($H,l=>{KH(l.path)}),Fa=Object.create(null));let o=Fa[s]||(Fa[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=da(t);let u=new tA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function KH(e,t){if(!Fa)return;let r=Fa[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=da(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,eA.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,p)}catch(p){console.error(p),(0,eA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function WH(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,yE.broadcast)({type:$H,path:s}),KH(s,!0)})}}var eA,yE,$H,Fa,Sme,tA,QH=Oe(()=>{eA=B(Y()),yE=B(Ze());lc();yu();Li();$H="transaction",Sme=Buffer.alloc(4096);a(YH,"addSubscription");tA=class extends Tn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(KH,"notifyFromTransactionData");a(WH,"listenToCommits")});var Pg={};Ve(Pg,{coerceType:()=>wE,makeTable:()=>DE,setServerUtilities:()=>Jne,updateResource:()=>IE});function DE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),WH(i,u);let S=Vh(i,n,u),T=0,A,b,H={},F=Promise.resolve(),v,P,z;for(let $ of p)($.assignCreatedTime||$.name==="__createdtime__")&&(v=$),($.assignUpdatedTime||$.name==="__updatedtime__")&&(P=$),$.expiresAt&&(z=$),$.isPrimaryKey&&(H=$);let W,Q=[],se=[],pe=1,oe=2,xe={},le={},wt=864e5,Ol,bl,Fs,mA=!1,VE,kx=i.getRange({start:!1,end:!1}).constructor,Vx=10,$x=6;E&&TA();class Qe extends Bt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(w=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[w]&&(!U[w].reliesOnPrototype||U.prototype[w])),y.length>0)if(y.length===1){let U=y[0];return(L,D,x)=>{if(L?.source!==U)return U[w](D,x,L)}}else return(U,L,D)=>{let x=[];for(let k of y){if(U?.source===k)break;x.push(k[w](L,D,U))}return Promise.all(x)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(w=>{if(O[w]&&(!O[w].reliesOnPrototype||O.prototype[w]))return(y,U,L)=>{if(!y?.source)return O[w](U,L,y)}},"getApplyToCanonicalSource");return xe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},le={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let w=!1,y=a(async(U,L)=>{let D=U.value,x=U.table?et[c][U.table]:Qe;if(c===vn.SYSTEM_SCHEMA_NAME&&(U.table===vn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(w=!0),U.id===void 0&&(U.id=D[x.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let k=await x.getResource(U.id,L,qa);switch(U.type){case"put":return k._writeUpdate(D,!0,qa);case"patch":return k._writeUpdate(D,!1,qa);case"delete":return k._writeDelete(qa);case"publish":return k._writePublish(D,qa);case"invalidate":return k.invalidate(qa);default:ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,No.getWorkerIndex)()):(0,No.getWorkerIndex)()===0,D=U&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let x;for await(let k of D)try{if(!(k.type==="transaction"?k.writes[0]:k)){ze.error("Bad subscription event",k);continue}if(k.source=m,x)if(k.beginTxn)x.resolve();else{y(k,x);continue}if(k.type==="end_txn")continue;let _e=We(k,()=>{if(k.type==="transaction"){let re=[];for(let ae of k.writes)try{re.push(y(ae,k))}catch(ve){throw ve.message+=" writing "+JSON.stringify(ae)+" of event "+JSON.stringify(k),ve}return Promise.all(re)}else if(k.type==="define_schema"){let re=this.attributes.slice(0),ae;for(let ve of k.attributes)re.find(ne=>ne.name===ve.name)||(re.push(ve),ae=!0);ae&&(ot({table:s,database:c,attributes:re,origin:"cluster"}),hl.signalSchemaChange(new ml.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return k.beginTxn?(x=k,y(k,k),new Promise(re=>{x.resolve=re})):y(k,k)});w&&(await _e,hl.signalUserChange(new ml.UserEventMsg(process.pid))),k.onCommit&&(_e?.then?_e.then(k.onCommit):k.onCommit())}catch(ie){ze.error("error in subscription handler",ie)}}}catch(U){ze.error(U)}})(),this}static getResource(m,R,I){let O=super.getResource(m,R,I);if(m!=null){Ya(m);try{if(O.hasOwnProperty(Re))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!I?.async||i.cache?.get(m),w=Rr(R),y=w.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return $E(m,R,{transaction:y},N,U=>{if(U?IE(O,U):O[Re]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new En.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let L=YE(m,U,R,O);if(L)return w?.disregardReadTxn(),O[rA]=!0,sA(L,D=>(IE(O,D),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=YE(this[Me],this[Vr],this[Ne]);if(m)return this[rA]=!0,sA(m,R=>{this[Vr]=R,this[Re]=R.value,this[fl]=R.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,wt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");wt=wt||(d+f)/4,WE()}static enableAuditing(m=!0){E=m,m&&TA(),Qe.audit=m}static coerceId(m){return m===""?null:wE(m,H)}static async dropTable(){if(delete et[c][s],c===o){for(let m of p)l.remove(Qe.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Qe.tableName+"/"),i.drop(),await l.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));hl.signalSchemaChange(new ml.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[fn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let R=Qe.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Ne]?.returnNonexistent)return this}allowRead(m,R){let I=yl(m);if(I?.read){if(I.isSuperUser)return!0;let O=I.attribute_permissions,N=R?.select;if(O?.length>0||mA&&N){if(R||(R={}),N){let w=O?.length>0&&nA(O,"read");R.select=N.map(y=>{let U=y.name||y;if(!w||w[U]){let L=Fs[U]?.definition?.tableClass;if(L){if(y.name||(y={name:y}),!L.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else R.select=O.filter(w=>w.read&&!Fs[w.attribute_name]).map(w=>w.attribute_name);return R}else return!0}}allowUpdate(m,R){let I=yl(m);if(I?.update){let O=I.attribute_permissions;if(O?.length>0){let N=nA(O,"update");for(let w in R)if(!N[w])return!1;for(let w of O){let y=w.attribute_name;!w.update&&!(y in R)&&(R[y]=this.getProperty(y))}}return!0}}allowCreate(m,R){if(this[fn]){let I=yl(m);if(I?.insert){let O=I.attribute_permissions;if(O?.length>0){let N=nA(O,"insert");for(let w in R)if(!N[w])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return yl(m)?.delete}update(m,R){if(!Rr(this[Ne]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Re]={},this[yt]=m):(O=this[yt],O&&(m=Object.assign(O,m)),this[yt]=O=m)),this._writeUpdate(this[yt],R),this}addTo(m,R){if(typeof R=="number")this[ul]===JH?this.set(m,(+this.getProperty(m)||0)+R):(this[ul]||this.update(),this.set(m,new AE(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let R=this[Ne],I=this[Me];Ya(I),Rr(this[Ne]).addWrite({key:I,store:i,invalidated:!0,entry:this[Vr],nodeName:this[Ne]?.nodeName,before:xe.invalidate?.bind(this,R,I),beforeIntermediate:le.invalidate?.bind(this,R,I),commit:(N,w)=>{if(w?.version>N)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);S(I,y,this[Vr],N,ll,E,this[Ne],0,"invalidate")}})}static evict(m,R,I){let O=this.Source,N;if(!((b||E)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==I))){if(b){if(i.hasLock(m,N.version))return;let w;for(let y in r)w||(w={}),w[y]=R[y];if(w)return S(m,w,N,I,_l,null,null,0,null,!0)}return i.ifVersion(I,()=>{Nl(m,R,null)}),E?S(m,null,N,I,_l,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,rx.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,I){let O=this[Ne],N=Rr(O),w=this[Me];Ya(w);let y=this[Vr];this[ul]=R?JH:Wne;let U={key:w,store:i,entry:y,nodeName:O?.nodeName,validate:L=>{m||(m=this[yt]),R||m&&gE(m)?(this.validate(m,!R),O?.source||(P&&(m[P.name]=P.type==="Date"?new Date(L):P.type==="String"?new Date(L).toISOString():L),R&&(t&&m[t]!==w&&(m[t]=w),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(L):v.type==="String"?new Date(L).toISOString():L),m=Oo(m)))):N.removeWrite(U)},before:R?xe.put?()=>xe.put(O,w,m):null:xe.patch?()=>xe.patch(O,w,m):xe.put?()=>xe.put(O,w,Oo(this)):null,beforeIntermediate:R?le.put?()=>le.put(O,w,m):null:le.patch?()=>le.patch(O,w,m):le.put?()=>le.put(O,w,Oo(this)):null,commit:(L,D,x)=>{if(x){if(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this[Vr]=D,D?.value?.[Re])throw new Error("Can not assign a record to a record, check for circular references");R||(this[Re]=D?.value??null)}this[yt]=m,this[fl]=L;let k=D?.value,ie=m;if(this[ul]=0,D?.version>L)if(E){let ve=D.localTime,ne=D.version;for(;ie&&(ve>L||ne>L&&ve>0);){let X=u.get(ve),de=Dt(X);if(ne=de.version,ne>L)if(de.type==="patch"){let Se=de.getValue(i);ie=SE(ie,Se)}else(de.type==="put"||de.type==="delete")&&(ie=null);ve=de.previousLocalTime}}else R?ie=null:ie=SE(ie,k);let _e=Oo(this,ie);if(_e?.[Re])throw new Error("Can not assign a record to a record, check for circular references");this[Re]=_e;let re;R||(re=m),Nl(w,k,_e);let ae=R?"put":"patch";S(w,_e,D,L,0,E,O,O.expiresAt||(d?d+Date.now():0),ae,!1,re)}};N.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[fn]){for await(let R of this.search(m))(await Qe.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let R=Rr(this[Ne]),I=this[Me];Ya(I);let O=this[Ne];return R.addWrite({key:I,store:i,resource:this,nodeName:O?.nodeName,before:xe.delete?.bind(this,O,I),beforeIntermediate:le.delete?.bind(this,O,I),commit:(N,w,y)=>{let U=w?.value;y&&(O&&w?.version>(O.lastModified||0)&&(O.lastModified=w.version),IE(this,w)),!(w?.version>N)&&(Nl(this[Me],U),ze.trace("Write delete entry",I,N),E||h?(S(I,null,this[Vr],N,0,E,this[Ne],0,"delete"),E||WE()):i.remove(this[Me]))}}),!0}search(m){let R=this[Ne],I=Rr(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,w={};function y(X,de){let Se;switch(de){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');Se=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+de)}let Bn=Se&&{},qs;for(let ke of X){if(ke.conditions){ke.conditions=y(ke.conditions,ke.operator);continue}let Pt=ke[0]??ke.attribute,Qr=Pt==null?H:Is(p,Pt);if(Qr){if(Se){let Hn=Dn(Pt),vt=Bn[Hn];vt?(vt.push(ke),qs=!0):Bn[Hn]=[ke]}(Qr.type||lg[ke.comparator])&&(ke[1]===void 0?ke.value=L(ke.value,Qr):ke[1]=L(ke[1],Qr))}else if(Pt!=null)throw(0,En.handleHDBError)(new Error,`${Pt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(qs)for(let ke in Bn){let Pt=Bn[ke],Qr=Pt.length;if(Qr>1)for(let Hn=0;Hn<Qr;Hn++){let vt=Pt[Hn];if(vt.comparator==="ge"||vt.comparator==="greater_than_equal")for(let Gs=0;Gs<Qr;Gs++){let Io=Pt[Gs];(Io.comparator==="le"||Io.comparator==="less_than_equal")&&(vt.comparator="between",vt.value=[vt.value,Io.value],X.splice(X.indexOf(Io),1))}if(vt.comparator==="equals"||!vt.comparator){for(let Gs=0;Gs<Qr;Gs++)if(Gs!==Hn){let Io=Pt[Gs];X.splice(X.indexOf(Io),1)}break}}}return X}a(y,"prepareConditions");function U(X,de){if(m.enforceExecutionOrder)return X;for(let Se of X)Se.conditions&&(Se.conditions=U(Se.conditions,Se.operator));return X.length>1&&de!=="or"?(0,tx.sortBy)(X,ff(Qe)):X}a(U,"orderConditions");function L(X,de){return Array.isArray(X)?X.map(Se=>wE(Se,de)):wE(X,de)}a(L,"coerceTypedValues");let D=m.operator;(O.length>0||D)&&(O=y(O,D));let x=typeof m.sort=="object"&&m.sort,k;if(x&&D!=="or"){let X=x.attribute;if(N=O.find(de=>Dn(de.attribute)===Dn(X)),!N){if(!Is(p,X))throw(0,En.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);N={attribute:X},O.push(N)}N.descending=!!x.descending}O=U(O,D),x&&(O[0]===N?x.next&&(k={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(N&&O.splice(O.indexOf(N),1),k=x));let ie=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:D,postOrdering:k,selectApplied:!!ie};let _e=I.useReadTxn(),re=_g(O,D,Qe,_e,m,R,(X,de)=>pA(X,ie,R,de),w);(m.offset||m.limit!==void 0)&&(re=re.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let ae=m.ensureLoaded!==!1,ve=Qe.transformEntryForSelect(ie,R,w,ae,!0),ne=Qe.transformToOrderedSelect(re,ie,k,R,ve);return ne.onDone=()=>{ne.onDone=null,I.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(ie){let X=[];for(let de of ie)de==="*"?X.push(...p.map(Se=>Se.name)):X.push(de.name||de);return X}return p.map(X=>X.name)},ne}static transformToOrderedSelect(m,R,I,O,N){let w=new kx;if(I){m=pA(m,R,O,null);let y;w.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,k=I.dbOrderedAttribute,ie,_e,re=!0;function ae(ne){let X=ne.next&&ae(ne.next),de=ne.descending;return(Se,Bn)=>{let qs=KE(Se,ne.attribute,O),ke=KE(Bn,ne.attribute,O),Pt=de?(0,yo.compareKeys)(ke,qs):(0,yo.compareKeys)(qs,ke);return Pt===0?X?.(Se,Bn)||0:Pt}}a(ae,"createComparator");let ve=ae(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if(x)return w.onDone&&w.onDone(),ne}else return{value:await N(ne.value)};y=[],ie&&y.push(ie);do if(ne=await D.next(),ne.done){if(x=!0,y.length)break;return w.onDone&&w.onDone(),ne}else{let X=ne.value;if(X?.then&&(X=await X),k){let de=KE(X,k,O);if(re)re=!1,_e=de;else if(de!==_e){_e=de,ie=X;break}}y.push(X)}while(!0);return I.isGrouped,y.sort(ve),L=y[Symbol.iterator](),ne=L.next(),ne.done?(w.onDone&&w.onDone(),ne):{value:await N(ne.value)}},return(){w.onDone&&w.onDone(),D.return()},throw(){w.onDone&&w.onDone(),D.throw()}}};let U=a(L=>{if(typeof R=="object"&&Array.isArray(L.attribute))for(let D=0;D<R.length;D++){let x=R[D],k;if(x.name===L.attribute[0]){for(k=x.sort||(x.sort={});k.next;)k=k.next;k.attribute=L.attribute.slice(1),k.descending=L.descending}else x===L.attribute[0]&&(R[D]=k={name:x,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(I)}else w.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),w=w.map(N);return w}static transformEntryForSelect(m,R,I,O,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let w;O&&b&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(w=!0);let y,U=a(L=>{let D;if(L){if(VE=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=$E(L.key??L,R,{transaction:Rr(R).getReadTxn(),lazy:m?.length<4},!1,x=>x),L?.then)return L.then(U);D=L?.value}if(w&&(L.metadataFlags&(ll|_l)||L.expiresAt&&L.expiresAt<Date.now())){let x=YE(L.key??L,L,R);if(x?.then)return x.then(U)}}if(D==null)return N?bo.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let x,k=a((_e,re)=>{let ae;typeof _e=="object"?ae=_e.name:ae=_e;let ve=Fs?.[ae],ne;if(ve){let X=I?.[ae];if(X)if(X.hasMappings){let Se=ve.from?D[ve.from]:Dn(L.key);ne=X.get(Se),ne||(ne=[])}else ne=X.fromRecord?.(D);else ne=ve(D,R,L);let de=a(Se=>{if(Se&&typeof Se=="object"){let Bn=ve.definition?.tableClass||Qe;y||(y={});let qs=y[ae]||(y[ae]=Bn.transformEntryForSelect(ae===_e?null:_e.select||(Array.isArray(_e)?_e:null),R,X,O));if(Array.isArray(Se)){let ke=[],Pt=Bn.transformToOrderedSelect(Se,_e.select,typeof _e.sort=="object"&&_e.sort,R,qs)[Symbol.asyncIterator](),Qr=a(vt=>{for(;!vt.done;){if(vt?.then)return vt.then(Qr);ke.push(vt.value),vt=Pt.next()}re(ke,ae)},"nextValue"),Hn=Qr(Pt.next());Hn&&(x||(x=[]),x.push(Hn));return}else if(Se=qs(Se),Se?.then){x||(x=[]),x.push(Se.then(ke=>re(ke,ae)));return}}re(Se,ae)},"handleResolvedValue");ne?.then?(x||(x=[]),x.push(ne.then(de))):de(ne);return}else ne=D[ae],ne&&typeof ne=="object"&&ae!==_e&&(ne=this.transformEntryForSelect(_e.select||_e,R,null)({value:ne}));re(ne,ae)},"selectAttribute"),ie;if(typeof m=="string")k(m,_e=>{ie=_e});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((_e,re)=>{_e==="*"?m[re]=D:k(_e,ae=>ie[re]=ae)});else{ie={};let _e=m.forceNulls;for(let re of m)if(re==="*")for(let ae in D)ie[ae]=D[ae];else k(re,(ae,ve)=>{ae===void 0&&_e&&(ae=null),ie[ve]=ae})}else throw new En.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>ie):ie}return D},"transform");return U}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ot({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let R=!m.rawEvents,I=YH(Qe,this[Me]??null,function(y,U,L,D){try{let x=U.getValue?.(i,R);if(!x&&U.type==="patch"&&R){let k=i.getEntry(y);k?.version===U.version?x=k.value:x=U.getValue?.(i,!0,L),U.type="put"}this.send({id:y,timestamp:L,value:x,version:U.version,type:U.type,beginTxn:D})}catch(x){ze.error(x)}},m.startTime||0,this[fn]);this[fn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let O=this[Me],N=m.previousCount;N>1e3&&(N=1e3);let w=m.startTime;if(this[fn]){if(w){if(N)throw new En.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:w,exclusiveStart:!0})){let L=Dt(U);if(L.tableId!==n)continue;let D=L.recordId;(O==null||ZH(O,D))&&I.send({id:D,timestamp:y,...L}),I.startTime=y}}else if(N){let y=[];for(let{key:U,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=Dt(L);if(D.tableId!==n)continue;let x=D.recordId;if(O==null||ZH(O,x)){let k=D.getValue(i,R,U);if(y.push({id:x,timestamp:U,value:k,version:D.version,type:D.type}),--N<=0)break}}catch(D){ze.error("Error getting history entry",U,D)}for(let U=y.length;U>0;)I.send(y[--U]);y[0]&&(I.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:L,localTime:D}of i.getRange({start:O??!1,end:O==null?void 0:[O,yo.MAXIMUM_KEY],versions:!0}))U&&I.send({id:y,version:L,timestamp:D,value:U})}else{N&&!w&&(w=0);let y=this[Vr]?.localTime;if(y===kh&&(i.cache?.delete(O),this[Vr]=i.getEntry(O),ze.trace("re-retrieved record",y,this[Vr]?.localTime),y=this[Vr]?.localTime),ze.trace("Subscription from",w,"from",O,y),w<y){let U=[],L=y;do{let D=u.get(L);if(D){m.omitCurrent=!0;let x=Dt(D),k=x.getValue(i,R,L);R&&(x.type="put"),U.push({id:O,value:k,timestamp:L,...x}),L=x.previousLocalTime}else break;N&&N--}while(L>w&&N!==0);for(let D=U.length;D>0;)I.send(U[--D]);I.startTime=y}!m.omitCurrent&&this.doesExist()&&I.send({id:O,version:this[fl],timestamp:y,value:this})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[Re]||this[ul])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let I=Rr(this[Ne]),O=this[Me]||null;Ya(O);let N=this[Ne];I.addWrite({key:O,store:i,entry:this[Vr],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,N,O,m),beforeIntermediate:le.publish?.bind(this,N,O,m),commit:(w,y,U)=>{y===void 0&&h&&!E&&WE(),S(O,y?.value??null,y,y?.version||w,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,R){let I,O=a((N,w,y)=>{if(w.type&&N!=null)if(R&&N.__op__&&(N=N.value),w.properties){typeof N!="object"&&(I||(I=[])).push(`Property ${y} must be an object${w.type?" ("+w.type+")":""}`);let U=w.properties;for(let L=0,D=U.length;L<D;L++){let x=U[L],k=O(N[x.name],x,y+"."+x.name);k&&(N[x.name]=k)}}else switch(w.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(U=>typeof U=="string")||(I||(I=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(w.elements)for(let U=0,L=N.length;U<L;U++){let D=N[U],x=O(D,w.elements,y+"[*]");x&&(N[U]=x)}}else(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}w.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,w=p.length;N<w;N++){let y=p[N];if(!y.relationship&&(!R||y.name in m)){let U=O(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(I)throw new En.ClientError(I.join(". "))}getUpdatedTime(){return this[fl]}wasLoadedFromSource(){return b?!!this[rA]:void 0}static async addAttributes(m){let R=p.slice(0);for(let I of m){if(!I.name)throw new En.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new En.ClientError("Attribute names cannot include backticks or forward slashes");R.push(I)}return ot({table:s,database:c,schemaDefined:_,attributes:R}),Qe.indexingOperation}static async removeAttributes(m){let R=p.filter(I=>!m.includes(I.name));return ot({table:s,database:c,schemaDefined:_,attributes:R}),Qe.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,I=5e3,O=1e3,N;R>I&&!m?.exactCount&&(N=O);let w=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&w++;if(N){let y=w;w=0;for(let{value:ae}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ae!=null&&w++;let U=N*2,L=(w+y)/U,D=Math.pow((w-y+1)/N/2,2)+L*(1-L)/U,x=Math.max(Math.sqrt(D)*R,1),k=Math.round(L*R),ie=Math.max(k-1.96*x,0),_e=Math.min(k+1.96*x,R),re=Math.pow(10,Math.round(Math.log10(x)));return re>k&&(re=re/10),w=Math.round(k/re)*re,{recordCount:w,estimatedRange:[Math.round(ie),Math.round(_e)]}}return{recordCount:w}}static updatedAttributes(){Fs=this.propertyResolvers={$id:(m,R,I)=>({value:I.key}),$updatedtime:(m,R,I)=>I.version,$record:(m,R,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(mA=!0,R.to)m.elements?.definition?(Fs[m.name]=m.resolve=(I,O,N)=>{let w=I[R.from?R.from:t],y=m.elements.definition.tableClass;return N?Aa({attribute:R.to,value:w},Rr(O).getReadTxn(),!1,y).asArray:y.search([{attribute:R.to,value:w}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let I=m.definition||m.elements?.definition;I?(Fs[m.name]=m.resolve=(O,N,w)=>{let y=O[R.from];if(y!==void 0){if(m.elements){let U,L=y.map(D=>{let x=w?I.tableClass.primaryStore.getEntry(D,{transaction:Rr(N).getReadTxn()}):I.tableClass.get(D,N);return x?.then&&(U=!0),x});return R.filterMissing?U?Promise.all(L).then(D=>D.filter(ex)):L.filter(ex):U?Promise.all(L):L}return w?I.tableClass.primaryStore.getEntry(y,{transaction:Rr(N).getReadTxn()}):I.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let w=N.map(y=>y[Me]||y[I.tableClass.primaryKey]);O[R.from]=w}else{let w=N[Me]||N[I.tableClass.primaryKey];O[R.from]=w}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}OE(this,this)}static async deleteHistory(m=0){let R;for(let{key:I,value:O}of u.getRange({start:0,end:m}))await dl(),Dt(O).tableId===n&&(R=u.remove(I));await R}static async*getHistory(m=0,R=1/0){for(let{key:I,value:O}of u.getRange({start:m,end:R})){await dl();let N=Dt(O);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return R;let O=I.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await dl();let w=u.get(O);if(w){let y=Dt(w);R.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){W?.remove()}}Qe.updatedAttributes();let Yx=Qe.prototype;return Yx[Kne]=!0,d&&Qe.setTTLExpiration(d/1e3),z&&Kx(),Qe;function Nl($,m,R){let I;for(let O in r){let N=r[O],w=N.isIndexing,y=R?.[O],U=m?.[O];if(y===U&&!w)continue;I=!0;let L=N.indexNulls,D=(0,El.getIndexedValues)(U,L);if(D){zH&&N.prefetch(D.map(x=>({key:x,value:$})),jH);for(let x=0,k=D.length;x<k;x++)N.remove(D[x],$)}if(D=(0,El.getIndexedValues)(y,L),D){zH&&N.prefetch(D.map(x=>({key:x,value:$})),jH);for(let x=0,k=D.length;x<k;x++)N.put(D[x],$)}}return I}a(Nl,"updateIndices");function Ya($){switch(typeof $){case"number":return!0;case"string":if($.length<659)return!0;if($.length>XH)throw new Error("Primary key size is too large: "+$.length);break;case"object":if($===null)return!0;break;case"bigint":if($<2n**64n&&$>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof $)}if((0,yo.writeKey)($,Qne,0)>XH)throw new Error("Primary key size is too large: "+$.length);return!0}a(Ya,"checkValidId");function $E($,m,R,I,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,$);let w=i.getEntry($,R);return w&&m&&(w?.version>(m.lastModified||0)&&(m.lastModified=w.version),w?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=w.localTime)),O(w,$)},"whenPrefetched");return I?N():pe>0?(pe--,N()):new Promise((w,y)=>{pe===0?(pe--,i.prefetch([$],()=>{U(),L()})):(Q.push($),se.push(L),Q.length>$x&&(pe--,U()));function U(){if(Q.length>0){let D=se;i.prefetch(Q,()=>{pe===-1?U():pe++;for(let x of D)x()}),Q=[],se=[],oe>2&&oe--}else pe=oe,oe<Vx&&oe++}a(U,"prefetch");function L(){try{w(N())}catch(D){y(D)}}a(L,"load")})}a($E,"loadLocalRecord");function yl($){if(!$?.role)return;let m=$.role.permission;if(m.super_user)return zne;let R=m[c],I,O=R?.tables;if(O)return O[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(yl,"getTablePermissions");function YE($,m,R,I){if(b){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ll|_l)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,en(!O,"cache-hit",s)),O){let N=SA($,m,R).then(w=>(w?.value?.[Re]&&ze.error("Can not assign a record with a record property"),R&&(w?.version>(R.lastModified||0)&&(R.lastModified=w.version),R.lastRefreshed=Date.now()),w));if(R?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,$)){if(N.catch(w=>ze.warn(w)),R?.onlyIfCached&&!I.doesExist())throw new En.ServerError("Entry is not cached",504);return}else return N}}}a(YE,"ensureLoadedFromSource");function Rr($){let m=$?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new Ki,m.lmdbDb=i,m;m=R}while(!0)}else return new q_}a(Rr,"txnForContext");function KE($,m,R){if(!$)return;VE=$;let I=$.value||$.deref?.()||(VE=i.getEntry($.key))?.value;if(typeof m=="object"){let N=Fs,w=I;for(let y=0,U=m.length;y<U;y++){let L=m[y],D=N?.[L];w=D&&w?D(w,R,!0)?.value:w?.[L],N=D?.definition?.tableClass?.propertyResolvers}return w}let O=Fs[m];return O?O(I,R):I[m]}a(KE,"getAttributeValue");function pA($,m,R,I){let O=Rr(R).getReadTxn(),N=I?.length,w={transaction:O,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(L,D){let x=L?.value;if(!x)return bo.SKIP;for(let k=0;k<N;k++)if(!y?.includes(k)&&!I[k](x,L))return bo.SKIP;return D!==void 0&&(L.key=D),L}if(a(U,"processEntry"),N>0||!$.hasEntries){let L=$.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return N>0?U(D):D;if(D==null)return bo.SKIP;for(let x=0;x<N;x++){let ie=I[x].idFilter;if(ie){if(!ie(D))return bo.SKIP;y||(y=[]),y.push(x)}}return $E(D,R,w,!1,U)});return Array.isArray($)&&(L=L.filter(D=>D!==bo.SKIP)),L.hasEntries=!0,L}return $}a(pA,"transformToEntries");async function SA($,m,R){let I=m?.metadataFlags,O=m?.version,N,w;if(!i.attemptLock($,O,()=>{clearTimeout(w);let D=i.getEntry($);!D||!D.value||D.metadataFlags&(ll|_l)?N(SA($,i.getEntry($),R)):N(D)}))return new Promise(D=>{N=D,w=setTimeout(()=>{i.unlock($,O)},Yne)});let y=m?.value,U={requestContext:R,replacingRecord:y,replacingVersion:O,source:null,resourceCache:R?.resourceCache},L=R?.responseHeaders;return new Promise((D,x)=>{let k;sA(We(U,async ie=>{let _e=performance.now(),re,ae,ve;try{for(let Se of Qe.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(U.source=Se,re=await Se.get($,U),re))break;ve=I&ll;let X=U.lastModified||ve&&O;ae=ve||X>O||!y,X||(X=(0,El.getNextMonotonicTime)());let de=performance.now()-_e;if(vr(de,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${de.toFixed(2)}`),ie.timestamp=X,d&&!U.expiresAt&&(U.expiresAt=Date.now()+d),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==$&&(re[t]=$)}k=!0,D({version:X,value:re})}catch(X){X.message+=` while resolving record ${$} for ${s}`,y&&((X.code==="ECONNRESET"||X.code==="ECONNREFUSED"||X.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(X.statusCode===500||X.statusCode===502||X.statusCode===503||X.statusCode===504))?(D({version:O,value:y}),ze.trace(X.message,"(returned stale record)")):x(X),U.transaction.abort();return}if(R?.noCacheStore){U.transaction.abort();return}Rr(U).addWrite({key:$,store:i,entry:m,nodeName:"source",commit:(X,de)=>{if(de?.version!==O)return;let Se=Nl($,y,re);re?(le.put?.(U,$,re),S($,re,de,X,0,E&&ae||null,U,U.expiresAt,"put",!!ve)):(le.delete?.(U,$),E||h?S($,null,de,X,0,E&&ae||null,U,0,"delete",!!ve):i.remove($,O))}})}),()=>{i.unlock($,O)},ie=>{i.unlock($,O),k&&ze.error("Error committing cache update",ie)})})}a(SA,"getFromSource");function WE(){if(wt!==Ol&&(Ol=wt,(0,No.getWorkerIndex)()===(0,No.getWorkerCount)()-1)){if(bl&&clearTimeout(bl),!wt)return;let $=new Date;$.setMonth(0),$.setDate(1),$.setHours(0),$.setMinutes(0),$.setSeconds(0);let m=Math.ceil((Date.now()-$.getTime())/wt)*wt+$.getTime(),R=a(I=>{ze.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),bl=setTimeout(()=>F=F.then(async()=>{if(R(Math.max(I+wt,Date.now())),i.rootStore.status!=="open"){clearTimeout(bl);return}let O=50,N=new Array(O),w=0;ze.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:U,value:L,version:D,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let k;L===null&&!E&&D+$ne<Date.now()?k=i.remove(U,D):x&&x+f<Date.now()&&(k=Qe.evict(U,L,D),y++),k&&(await N[w],N[w]=k.catch(ie=>{ze.error("Cleanup error",ie)}),++w>=O&&(w=0)),await dl()}ze.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ze.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(WE,"scheduleCleanup");function TA(){W=u?.addDeleteRemovalCallback(n,$=>{let m=i.getEntry($);m?.value===null&&i.remove($,m.version)})}a(TA,"addDeleteRemoval");function Kx(){(0,No.getWorkerIndex)()===0&&setInterval(async()=>{try{let $=z.name,m=r[$];if(!m)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let{value:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(R);I?.value?.[$]<Date.now()&&Qe.evict(R,I.value,I.version),await dl()}}catch($){ze.error("Error in evicting old records",$)}},Vne).unref()}a(Kx,"runRecordExpirationEviction")}function nA(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function jH(){}function Jne(e){rx=e}function wE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!Xne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,CE.autoCast)(e):e}function ZH(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function sA(e,t,r){return e?.then?e.then(t,r):t(e)}function IE(e,t){e[Vr]=t,e[Re]=t?.value??null,e[fl]=t?.version}function ex(e){return e!=null}var vn,bo,El,tx,pl,En,hl,ml,ze,yo,No,CE,kne,rx,Vne,$ne,zH,Yne,fl,Kne,Vr,ul,JH,Wne,rA,qa,ll,_l,Qne,XH,zne,vme,Xne,dl,Lf=Oe(()=>{vn=B(M()),bo=require("lmdb"),El=B(Ir()),tx=require("lodash");gn();Mp();pl=B(Z());QH();En=B(ee()),hl=B(ms()),ml=B(bn());be();hf();ze=B(Y());V_();Wi();yo=require("ordered-binary"),No=B(Ze());Li();CE=B(J());Po();gs();mE();kne=new Uint8Array(9);kne[8]=192;Vne=6e4,$ne=864e5;pl.initSync();zH=pl.get(vn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yne=1e4,fl=Symbol.for("version"),Kne=Symbol.for("incremental-update"),Vr=Symbol("entry"),ul=Symbol("is-saving"),JH=1,Wne=2,rA=Symbol("loaded-from-source"),qa={isNotification:!0,ensureLoaded:!1},ll=1,_l=8,Qne=Buffer.allocUnsafeSlow(8192),XH=1978,zne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},vme=(0,CE.convertToMS)(pl.get(vn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(DE,"makeTable");a(nA,"attributesAsObject");a(jH,"noop");a(Jne,"setServerUtilities");Xne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(wE,"coerceType");a(ZH,"isDescendantId");dl=a(()=>new Promise(setImmediate),"rest");a(sA,"when");a(IE,"updateResource");a(ex,"exists")});var Fe={};Ve(Fe,{database:()=>$c,databases:()=>et,dropDatabase:()=>Hp,dropTableMeta:()=>nse,getDatabases:()=>yn,getTables:()=>jne,onUpdatedTable:()=>mR,readMetaDb:()=>Sl,resetDatabases:()=>Zne,table:()=>ot,tables:()=>Cr});function jne(){return vE||yn(),Cr||{}}function yn(){if(vE)return et;vE=!0,Va=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Je.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,$r.existsSync)(e)?e:(0,Je.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,$r.existsSync)(e))for(let r of(0,$r.readdirSync)(e,{withFileTypes:!0})){let n=(0,Je.basename)(r.name,".mdb");r.isFile()&&(0,Je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Sl((0,Je.join)(e,r.name),null,n)}if((0,$r.existsSync)((0,ka.getBaseSchemaPath)())){for(let r of(0,$r.readdirSync)((0,ka.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Je.join)((0,ka.getBaseSchemaPath)(),r.name),s=(0,Je.join)((0,ka.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,$r.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Je.join)(s,i.name);Sl((0,Je.join)(n,i.name),(0,Je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,$r.existsSync)(s))for(let o of(0,$r.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Je.extname)(o.name).toLowerCase()===".mdb"&&Sl((0,Je.join)(s,o.name),(0,Je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Je.join)(c.path,(0,Je.basename)(o+".mdb"));(0,$r.existsSync)(u)&&Sl(u,o,r,null,!0)}}for(let r in et){let n=Va.get(r);if(n){let s=et[r];r.includes("delete")&&hn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(hn.trace(`delete table class ${i}`),delete s[i])}else if(delete et[r],r==="data"){for(let s in Cr)delete Cr[s];delete Cr[BE]}}return Va=null,et}}function Zne(){vE=!1;for(let[,e]of Si)e.needsDeletion=!0;yn();for(let[e,t]of Si)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Si.delete(e));return et}function Sl(e,t,r=aA,n,s){let i=new iA.default(e,!1);try{let o=Si.get(e);o?o.needsDeletion=!1:(o=(0,ME.open)(i),Si.set(e,o));let c=new wo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(LE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,$r.existsSync)(n)&&(i.path=n,_=(0,ME.open)(i),_.isLegacy=!0):_=hE(o));let l=ox(r),d=l[BE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let Q of p)if(Q.is_hash_attribute||Q.isPrimaryKey){S=Q;break}if(!S){hn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],A={},b=[],H,F,v=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,z=S.expiration,W=S.eviction;if(T)A=T.indices,b=T.attributes,T.schemaVersion++;else{H=S.tableId,H?H>=(u.get(Ga)||0)&&u.putSync(Ga,H+1):(S.tableId=H=u.get(Ga),H||(H=1),u.putSync(Ga,H+1),u.putSync(S.key,S));let Q=new wo.default(!S.is_hash_attribute,S.is_hash_attribute);F=e_(o.openDB(S.key,Q)),F.rootStore=o,F.tableId=H}for(let Q of p){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!A[Q.name]){let pe=new wo.default(!Q.is_hash_attribute,Q.is_hash_attribute);A[Q.name]=o.openDB(Q.key,pe),A[Q.name].indexNulls=Q.indexNulls}let se=b.find(pe=>pe.name===Q.name);se?b.splice(b.indexOf(se),1,Q):b.push(Q)}}catch(se){hn.error("Error trying to update attribute",Q,b,A,se)}}if(!T){T=ax(l,E,DE({primaryStore:F,auditStore:_,audit:v,expirationMS:z&&z*1e3,evictionMS:W&&W*1e3,trackDeletes:P,tableName:E,tableId:H,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let Q of cA)Q(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function ox(e){let t=et[e];if(t||(e==="data"?t=et[e]=Cr:e==="system"?Object.defineProperty(et,"system",{value:t=Object.create(null),configurable:!0}):t=et[e]=Object.create(null)),Va&&!Va.has(e)){let r=new Set;t[BE]=r,Va.set(e,r)}return t}function ax(e,t,r){return e[t]=r,r}function $c({database:e,table:t}){e||(e=aA),yn();let r=ox(e),n=(0,Je.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),s=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,$r.existsSync)(n)?n:(0,Je.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Je.join)(n,(i?t:e)+".mdb"),c=Si.get(o);if(!c){let u=new iA.default(o,!1);c=(0,ME.open)(u),Si.set(o,c)}return c}async function Hp(e){if(!et[e])throw new Error("Schema does not exist");let t=et[e];for(let r in t){let s=t[r].primaryStore.rootStore;Si.delete(s.path),s.status==="open"&&(await s.close(),await nx.remove(s.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[BE]}delete et[e]}function ot({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=aA);let l=$c({database:t,table:e}),d=et[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let T=new wo.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let A,b;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let P=l.auditStore;P||(P=hE(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),hn.trace(`${e} table loading, opening primary store`);let z=new wo.default(!1,!0),W=e+"/",Q=e_(l.openDB(W,z));Q.rootStore=l,S=l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,T),Q.tableId=S.get(Ga),Q.tableId||(Q.tableId=1),S.putSync(Ga,Q.tableId+1),h.tableId=Q.tableId,f=ax(d,e,DE({primaryStore:Q,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:Q.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,A=!0,v(),S.put(W,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,T)),f.dbisDB=S;let H=[];for(let{key:P,value:z}of S.getRange({start:!0})){let[W,Q]=P.toString().split("/");if(Q===""&&(Q=z.name),Q){if(W!==e)continue}else Q=W;if(!i.find(pe=>pe.name===Q)?.indexed&&z.indexed&&!z.isPrimaryKey){v(),A=!0,S.remove(P);let pe=f.indices[W];pe&&H.push(pe)}}let F=[];try{for(let P of i||[]){if(P.relationship)continue;let z=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:z,configurable:!0});let W=S.get(z);if(P.isPrimaryKey){if(W=W||S.get(z=e+"/")||{},o!==f.audit||(+r||void 0)!==(+W.expiration||void 0)||(+n||void 0)!==(+W.eviction||void 0)){let se=Object.assign({},W);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),A=!0,v(),S.put(z,se)}continue}W?.attribute&&!W.name&&(W.indexed=!0);let Q=!W||W.type!==P.type||W.indexed!==P.indexed||JSON.stringify(W.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(W.elements)!==JSON.stringify(P.elements);if(P.indexed){let se=new wo.default(!0,!1),pe=l.openDB(z,se);(Q||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<Tl.workerData?.restartNumber)&&(A=!0,v(),W=S.get(z),(Q||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<Tl.workerData?.restartNumber)&&(A=!0,P.lastIndexedKey=W?.lastIndexedKey||!1,P.indexingPID=process.pid,pe.isIndexing=!0,Object.defineProperty(P,"dbi",{value:pe}),P.indexNulls===void 0&&(P.indexNulls=!0),F.push(P)),S.put(z,P)),W?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),pe.indexNulls=P.indexNulls,p[P.name]=pe}else Q&&(A=!0,v(),S.put(z,P))}}finally{b&&b()}if(A&&(f.schemaVersion++,f.updatedAttributes()),hn.trace(`${e} table loading, running index`),F.length>0||H.length>0?f.indexingOperation=rse(f,F,H):A&&UE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,A)for(let P of cA)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),hn.trace(`${e} table loaded`),f;function v(){b||l.transactionSync(()=>({then(P){b=P}}))}a(v,"startTxn")}async function rse(e,t,r){try{let n=e.schemaVersion;await UE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,sx.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,hn.error(f)}),Tl.workerData&&Tl.workerData.restartNumber!==ix.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>ese?await s:u>tse&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await UE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){hn.error("Error in indexing",n)}}function nse({table:e,database:t}){let r=$c({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function mR(e){cA.push(e)}var zt,LE,ME,Je,$r,ka,wo,iA,Yr,nx,oA,sx,UE,PE,Tl,hn,ix,aA,BE,Cr,et,Ga,cA,vE,Si,Va,ese,tse,be=Oe(()=>{zt=B(Z()),LE=B(lt()),ME=require("lmdb"),Je=require("path"),$r=require("fs"),ka=B(Ke());Lf();wo=B(t_()),iA=B(n_()),Yr=B(M()),nx=B(require("fs-extra")),oA=require("../../index"),sx=B(Ir()),UE=B(ms()),PE=B(bn()),Tl=require("worker_threads"),hn=B(Y()),ix=B(Ze());Li();Po();aA="data",BE=Symbol("defined-tables");(0,zt.initSync)();Cr=Object.create(null),et=Object.create(null);(0,oA._assignPackageExport)("databases",et);(0,oA._assignPackageExport)("tables",Cr);Ga=Symbol.for("next-table-id"),cA=[],Si=new Map;a(jne,"getTables");a(yn,"getDatabases");a(Zne,"resetDatabases");a(Sl,"readMetaDb");a(ox,"ensureDB");a(ax,"setTable");a($c,"database");a(Hp,"dropDatabase");a(ot,"table");ese=1e3,tse=10;a(rse,"runIndexing");a(nse,"dropTableMeta");a(mR,"onUpdatedTable")});var J=g(($me,Rx)=>{"use strict";var Ti=require("path"),dx=require("fs-extra"),Tr=Y(),cx=require("fs-extra"),HE=require("os"),sse=require("net"),ise=require("recursive-iterator"),it=M(),ose=jA(),ux=require("papaparse"),xE=require("moment"),{inspect:ase}=require("util"),lx=require("is-number"),Vme=require("lodash"),cse=require("minimist"),use=require("https"),lse=require("http"),{hdb_errors:FE}=ee(),_se=/^((\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)))$/,fx=require("util").promisify(setTimeout),dse=100,fse=5,Ese="",hse=4,_x={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Rx.exports={isEmpty:Kr,isEmptyOrZeroLength:os,arrayHasEmptyValues:Sse,arrayHasEmptyOrZeroLengthValues:Tse,buildFolderPath:gse,isBoolean:Ex,errorizeMessage:mse,stripFileExtension:Ase,autoCast:Ose,autoCastJSON:hx,autoCastJSONDeep:lA,removeDir:bse,compareVersions:Nse,isCompatibleDataVersion:yse,escapeRawValue:wse,unescapeValue:Ise,stringifyProps:Cse,timeoutPromise:Lse,isClusterOperation:Use,getClusterUser:vse,checkGlobalSchemaTable:Pse,getHomeDir:px,getPropsFilePath:Dse,promisifyPapaParse:Bse,removeBOM:Sx,createEventPromise:Hse,checkProcessRunning:xse,checkSchemaTableExist:Fse,checkSchemaExists:Tx,checkTableExists:gx,getStartOfTomorrowInSeconds:qse,getLimitKey:Gse,isObject:Rse,isNotEmptyAndHasValue:pse,autoCasterIsNumberCheck:mx,backtickASTSchemaItems:kse,isPortTaken:Mse,createForkArgs:Vse,autoCastBoolean:$se,async_set_timeout:fx,getTableHashAttribute:Yse,doesSchemaExist:Kse,doesTableExist:Wse,stringifyObj:Qse,ms_to_time:zse,changeExtension:Jse,getEnvCliRootPath:_A,noBootFile:Xse,httpRequest:jse,transformReq:Zse,convertToMS:eie,PACKAGE_ROOT:it.PACKAGE_ROOT};function mse(e){return e instanceof Error?e:new Error(e)}a(mse,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function pse(e){return!Kr(e)&&(e||e===0||e===""||Ex(e))}a(pse,"isNotEmptyAndHasValue");function os(e){return Kr(e)||e.length===0||e.size===0}a(os,"isEmptyOrZeroLength");function Sse(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(Sse,"arrayHasEmptyValues");function Tse(e){if(os(e))return!0;for(let t=0;t<e.length;t++)if(os(e[t]))return!0;return!1}a(Tse,"arrayHasEmptyOrZeroLengthValues");function gse(...e){try{return e.join(Ti.sep)}catch{console.error(e)}}a(gse,"buildFolderPath");function Ex(e){return Kr(e)?!1:e===!0||e===!1}a(Ex,"isBoolean");function Rse(e){return Kr(e)?!1:typeof e=="object"}a(Rse,"isObject");function Ase(e){return os(e)?Ese:e.slice(0,-hse)}a(Ase,"stripFileExtension");function Ose(e){return Kr(e)||e===""||typeof e!="string"?e:_x[e]!==void 0?_x[e]:mx(e)===!0?Number(e):_se.test(e)?new Date(e):e}a(Ose,"autoCast");function hx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(hx,"autoCastJSON");function lA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=lA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=lA(r);n!==r&&(e[t]=n)}return e}else return hx(e)}a(lA,"autoCastJSONDeep");function mx(e){if(e.startsWith("0.")&&lx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&lx(e))}a(mx,"autoCasterIsNumberCheck");async function bse(e){if(os(e))throw new Error(`Directory path: ${e} does not exist`);try{await cx.emptyDir(e),await cx.remove(e)}catch(t){throw Tr.error(`Error removing files in ${e} -- ${t}`),t}}a(bse,"removeDir");function Nse(e,t){if(os(e)){Tr.info("Invalid current version sent as parameter.");return}if(os(t)){Tr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Nse,"compareVersions");function yse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(yse,"isCompatibleDataVersion");function wse(e){if(Kr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(wse,"escapeRawValue");function Ise(e){if(Kr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Ise,"unescapeValue");function Cse(e,t){if(Kr(e))return Tr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+HE.EOL}!os(n)&&n[0]===";"?r+=" "+n+s+HE.EOL:os(n)||(r+=n+"="+s+HE.EOL)}catch{Tr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Cse,"stringifyProps");function px(){let e;try{e=HE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(px,"getHomeDir");function Dse(){let e=Ti.join(px(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return dx.existsSync(e)||(e=Ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(Dse,"getPropsFilePath");function Lse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Lse,"timeoutPromise");async function Mse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=sse.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Mse,"isPortTaken");function Use(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Tr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Use,"isClusterOperation");function Pse(e,t){let r=(be(),te(Fe)).getDatabases();if(!r[e])return FE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Pse,"checkGlobalSchemaTable");function vse(e,t){if(Kr(t)){Tr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||os(e)){Tr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Tr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Tr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vse,"getClusterUser");function Bse(){ux.parsePromise=function(e,t,r){return new Promise(function(n,s){ux.parse(e,{header:!0,transformHeader:Sx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Bse,"promisifyPapaParse");function Sx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Sx,"removeBOM");function Hse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Tr.info(`Got cluster status event response: ${ase(s)}`);try{i.cancel()}catch{Tr.error("Error trying to cancel timeout.")}n(s)})})}a(Hse,"createEventPromise");async function xse(e){let t=!0,r=0;do await fx(dse*r++),(await ose.findPs(e)).length>0&&(t=!1);while(t&&r<fse);if(t)throw new Error(`process ${e} was not started`)}a(xse,"checkProcessRunning");function Fse(e,t){let r=Tx(e);if(r)return r;let n=gx(e,t);if(n)return n}a(Fse,"checkSchemaTableExist");function Tx(e){let{getDatabases:t}=(be(),te(Fe));if(!t()[e])return FE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Tx,"checkSchemaExists");function gx(e,t){let{getDatabases:r}=(be(),te(Fe));if(!r()[e][t])return FE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gx,"checkTableExists");function qse(){let e=xE().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=xE().utc().unix();return e-t}a(qse,"getStartOfTomorrowInSeconds");function Gse(){return xE().utc().format("DD-MM-YYYY")}a(Gse,"getLimitKey");function kse(e){try{let t=new ise(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){Tr.error("Got an error back ticking items."),Tr.error(t)}}a(kse,"backtickASTSchemaItems");function Vse(e){return[e]}a(Vse,"createForkArgs");function $se(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($se,"autoCastBoolean");function Yse(e,t){let{getDatabases:r}=(be(),te(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Yse,"getTableHashAttribute");function Kse(e){let{getDatabases:t}=(be(),te(Fe));return t()[e]!==void 0}a(Kse,"doesSchemaExist");function Wse(e,t){let{getDatabases:r}=(be(),te(Fe));return r()[e]?.[t]!==void 0}a(Wse,"doesTableExist");function Qse(e){try{return JSON.stringify(e)}catch{return e}}a(Qse,"stringifyObj");function zse(e){let t=xE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(zse,"ms_to_time");function Jse(e,t){let r=Ti.basename(e,Ti.extname(e));return Ti.join(Ti.dirname(e),r+t)}a(Jse,"changeExtension");function _A(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cse(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(_A,"getEnvCliRootPath");var uA;function Xse(){if(uA)return uA;let e=_A();_A()&&dx.pathExistsSync(Ti.join(e,it.HDB_CONFIG_FILE))&&(uA=!0)}a(Xse,"noBootFile");function jse(e,t){let r;return e.protocol==="http:"?r=lse:r=use,new Promise((n,s)=>{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",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(jse,"httpRequest");function Zse(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Zse,"transformReq");function eie(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(eie,"convertToMS")});var wx=g((Kme,yx)=>{"use strict";var Wr=Z(),tie=Gi(),me=M(),gl=tt(),Bs=require("path"),{PACKAGE_ROOT:GE}=M(),Ax=Z(),qE=J(),$a="/dev/null",rie=Bs.join(GE,"launchServiceScripts"),Ox=Bs.join(GE,"utility/scripts"),nie=Bs.join(Ox,me.HDB_RESTART_SCRIPT),bx=Bs.resolve(GE,"dependencies",`${process.platform}-${process.arch}`,gl.NATS_BINARY_NAME);function Nx(){let t=tie.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qE.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:GE}}a(Nx,"generateMainServerConfig");var sie=9930;function iie(){Wr.initSync(!0);let e=Wr.get(me.CONFIG_PARAMS.ROOTPATH),t=Bs.join(e,"clustering",gl.NATS_CONFIG_FILES.HUB_SERVER),r=Bs.join(Wr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=Ax.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=gl.LOG_LEVEL_FLAGS[Wr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==sie?"-"+n:""),script:bx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$a,i.error_file=$a),i}a(iie,"generateNatsHubServerConfig");var oie=9940;function aie(){Wr.initSync(!0);let e=Wr.get(me.CONFIG_PARAMS.ROOTPATH),t=Bs.join(e,"clustering",gl.NATS_CONFIG_FILES.LEAF_SERVER),r=Bs.join(Wr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=Ax.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=gl.LOG_LEVEL_FLAGS[Wr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==oie?"-"+n:""),script:bx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$a,i.error_file=$a),i}a(aie,"generateNatsLeafServerConfig");function cie(){Wr.initSync();let e=Bs.join(Wr.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:rie,autorestart:!1};return Wr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$a,t.error_file=$a),t}a(cie,"generateClusteringUpgradeV4ServiceConfig");function uie(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return qE.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Ox},script:nie}}a(uie,"generateRestart");function lie(){return{apps:[Nx()]}}a(lie,"generateAllServiceConfigs");yx.exports={generateAllServiceConfigs:lie,generateMainServerConfig:Nx,generateRestart:uie,generateNatsHubServerConfig:iie,generateNatsLeafServerConfig:aie,generateClusteringUpgradeV4ServiceConfig:cie}});var wT=g((zme,qx)=>{"use strict";var Ue=M(),_ie=J(),Hs=RT(),Rl=Rt(),as=tt(),gi=wx(),kE=Z(),Ri=Y(),die=Rs(),{startWorker:Ix,onMessageFromWorkers:fie}=Ze(),Eie=oa(),Qme=require("util"),hie=require("child_process"),mie=require("fs"),{execFile:pie}=hie,Ie;qx.exports={enterPM2Mode:Sie,start:Ai,stop:dA,reload:Dx,restart:Lx,list:fA,describe:Ux,connect:xs,kill:Oie,startAllServices:bie,startService:EA,getUniqueServicesList:Px,restartAllServices:Nie,isServiceRegistered:vx,reloadStopStart:Bx,restartHdb:Mx,deleteProcess:Rie,startClusteringProcesses:xx,startClusteringThreads:Fx,isHdbRestartRunning:Aie,isClusteringRunning:wie,stopClustering:yie,reloadClustering:Iie};var Al=!1;fie(e=>{e.type==="restart"&&kE.initSync(!0)});function Sie(){Al=!0}a(Sie,"enterPM2Mode");function xs(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{Ri.setupConsoleLogging(),r&&t(r),e(n)})})}a(xs,"connect");var gr,Tie=10,Cx;function Ai(e,t=!1){if(Al)return gie(e);let r=pie(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=gr.indexOf(r);o>-1&&gr.splice(o,1),!Cx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Tie&&(mie.existsSync(Hs.getHubConfigPath())?Ai(e):(await Hs.generateNatsConfig(!0),Ai(e),await new Promise(c=>setTimeout(c,3e3)),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=kE.get(Ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&as.LOG_LEVEL_HIERARCHY[o]>=as.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===as.LOG_LEVELS.ERR||l===as.LOG_LEVELS.WRN?Ri.OUTPUTS.STDERR:Ri.OUTPUTS.STDOUT;Ri.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=as.LOG_LEVELS[f]}if(as.LOG_LEVEL_HIERARCHY[o]>=as.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===as.LOG_LEVELS.ERR||l===as.LOG_LEVELS.WRN?Ri.OUTPUTS.STDERR:Ri.OUTPUTS.STDOUT;Ri.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),gr=[],!gr&&!t){let i=a(()=>{Cx=!0,gr&&(gr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}gr.push(r)}a(Ai,"start");function gie(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(gie,"startWithPM2");function dA(e){if(!Al){for(let t of gr||[])t.name===e&&(gr.splice(gr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(dA,"stop");function Dx(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Dx,"reload");function Lx(e){if(!Al)for(let t of gr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(Lx,"restart");function Rie(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Rie,"deleteProcess");async function Mx(){await Ai(gi.generateRestart())}a(Mx,"restartHdb");async function Aie(){let e=await fA();for(let t in e)if(e[t].name===Ue.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Aie,"isHdbRestartRunning");function fA(){return new Promise(async(e,t)=>{try{await xs()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(fA,"list");function Ux(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Ux,"describe");function Oie(){if(!Al){for(let e of gr||[])e.kill();gr=[];return}return new Promise(async(e,t)=>{try{await xs()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(Oie,"kill");async function bie(){try{await xx(),await Fx(),await Ai(gi.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a(bie,"startAllServices");async function EA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ue.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=gi.generateMainServerConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=gi.generateNatsIngestServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=gi.generateNatsReplyServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=gi.generateNatsHubServerConfig(),await Ai(r,t),await Hs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=gi.generateNatsLeafServerConfig(),await Ai(r,t),await Hs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=gi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ai(r)}catch(r){throw Ie?.disconnect(),r}}a(EA,"startService");async function Px(){try{let e=await fA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ie?.disconnect(),e}}a(Px,"getUniqueServicesList");async function Nie(e=[]){try{let t=!1,r=await Px();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ue.PROCESS_DESCRIPTORS.HDB?t=!0:await Lx(o))}t&&await Bx(Ue.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(Nie,"restartAllServices");async function vx(e){if(gr?.find(r=>r.name===e))return!0;let t=await Eie.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(vx,"isServiceRegistered");async function Bx(e){let t=e===Ue.PROCESS_DESCRIPTORS.HDB?kE.get(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):kE.get(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ux(e),n=_ie.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await dA(e),await EA(e)):e===Ue.PROCESS_DESCRIPTORS.HDB?await Mx():await Dx(e)}a(Bx,"reloadStopStart");var Hx;async function xx(e=!1){for(let t in Ue.CLUSTERING_PROCESSES){let r=Ue.CLUSTERING_PROCESSES[t];await EA(r,e)}}a(xx,"startClusteringProcesses");async function Fx(){Hx=Ix(Ue.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Rl.createWorkQueueStream(as.WORK_QUEUE_CONSUMER_NAMES),await Rl.updateIngestStreamConsumer(),await Rl.updateLocalStreams();let e=await die.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ue.PRE_4_0_0_VERSION){Ri.info("Starting clustering upgrade 4.0.0 process"),Ix(Ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Fx,"startClusteringThreads");async function yie(){for(let e in Ue.CLUSTERING_PROCESSES)if(e!==Ue.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ue.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Hx.terminate();else{let t=Ue.CLUSTERING_PROCESSES[e];await dA(t)}}a(yie,"stopClustering");async function wie(){for(let e in Ue.CLUSTERING_PROCESSES){let t=Ue.CLUSTERING_PROCESSES[e];if(await vx(t)===!1)return!1}return!0}a(wie,"isClusteringRunning");async function Iie(){await Hs.generateNatsConfig(!0),await Rl.reloadNATSHub(),await Rl.reloadNATSLeaf(),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Iie,"reloadClustering")});var hA=wT(),Gx=M();a(async function(){try{let t=await hA.describe(Gx.PROCESS_DESCRIPTORS.HDB);for(let r of t)await hA.reload(r.pm_id);await hA.deleteProcess(Gx.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();