harperdb 4.3.0-alpha.2 → 4.3.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +58 -55
- package/bin/lite.js +21 -18
- package/config/yaml/defaultConfig.yaml +7 -2
- package/dependencies/linux-x64/nats-server +0 -0
- package/json/systemSchema.json +20 -0
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +20 -17
- package/launchServiceScripts/launchNatsReplyService.js +21 -18
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +21 -18
- package/npm-shrinkwrap.json +547 -529
- package/package.json +6 -9
- package/resources/DatabaseTransaction.d.ts +9 -3
- package/resources/Table.d.ts +2 -2
- package/resources/databases.d.ts +5 -3
- package/resources/search.d.ts +11 -1
- package/server/jobs/jobProcess.js +21 -18
- package/server/serverHelpers/Headers.d.ts +12 -0
- package/server/threads/threadServer.js +21 -18
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.824bbe07.js → main.3051089a.js} +2 -2
- package/utility/scripts/restartHdb.js +21 -18
- /package/studio/build-local/static/js/{main.824bbe07.js.LICENSE.txt → main.3051089a.js.LICENSE.txt} +0 -0
|
@@ -1,27 +1,30 @@
|
|
|
1
|
-
"use strict";var gq=Object.create;var ja=Object.defineProperty;var Rq=Object.getOwnPropertyDescriptor;var Aq=Object.getOwnPropertyNames;var Oq=Object.getPrototypeOf,bq=Object.prototype.hasOwnProperty;var a=(e,t)=>ja(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),$e=(e,t)=>{for(var r in t)ja(e,r,{get:t[r],enumerable:!0})},CA=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Aq(t))!bq.call(e,n)&&n!==r&&ja(e,n,{get:()=>t[n],enumerable:!(s=Rq(t,n))||s.enumerable});return e};var v=(e,t,r)=>(r=e!=null?gq(Oq(e)):{},CA(t||!e||!e.__esModule?ja(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>CA(ja({},"__esModule",{value:!0}),e);var UA=T((Yoe,LA)=>{var Nq=require("fast-glob"),{statSync:ih,existsSync:oh,readFileSync:yq,writeFileSync:Iq}=require("fs"),{spawnSync:wq,spawn:Cq,execFileSync:$oe}=require("child_process"),{isMainThread:Dq}=require("worker_threads"),{join:Wn,relative:DA}=require("path"),{PACKAGE_ROOT:Os}=D(),{tmpdir:Lq,platform:Uq}=require("os");require("source-map-support").install();var Mq=["resources","server","dataLayer","components"],Za="ts-build",ah,Pq=__filename.endsWith("tsBuild.js");if(Pq){if(Dq){let r;try{ih(Wn(Os,Za)),r=!0}catch{}if(r)for(let s of Nq.sync(Mq.map(n=>n+"/**/*.ts"),{cwd:Os})){let n=0,i=0;try{n=ih(Wn(Os,s)).mtimeMs-5e3,i=ih(Wn(Os,Za,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),ah=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),ah=!0;if(ah){let s=Wn(Os,"node_modules/.bin/tsc");Uq()==="win32"&&(s+=".cmd");let n=wq(s,{cwd:Os});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Wn(Lq(),"harperdb-tsc.pid"),o;if(oh(i))try{process.kill(+yq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Cq(s,["--watch"],{cwd:Os,detached:!0,stdio:"ignore"});Iq(i,c.pid.toString()),c.unref()}}}}let e=LA.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Os)&&!s[0].includes("node_modules")){let i=DA(Os,s[0]),o;i.startsWith(Za)?o=Wn(Os,DA(Za,i)):o=Wn(Os,Za,i);let c=Wn(o,r),u=c+".js";if(oh(u))return u;if(c.includes(".")&&oh(c))return c}return t(r,s,n)}}});var D=T((Qoe,KA)=>{"use strict";var jr=require("path"),vq=require("fs"),{relative:Koe,join:Woe}=jr,{existsSync:Bq}=vq;function Hq(){let e=__dirname;for(;!Bq(jr.join(e,"package.json"));){let t=jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Hq,"getHDBPackageRoot");var Qn=Hq(),MA="js",ql=MA,xq="harperdb-config.yaml",qq="defaultConfig.yaml",Fq="hdb",PA=`harperdb.${ql}`,vA=`customFunctionsServer.${ql}`,Gq=`restartHdb.${ql}`,uh="HarperDB",xl="Custom Functions",Fl="Clustering Hub",Gl="Clustering Leaf",kq="Clustering Ingest Service",Vq="Clustering Reply Service",$q="foreground.pid",Yq="hdb.pid",Kq="data",Wq={HDB:uh,CLUSTERING_HUB:Fl,CLUSTERING_LEAF:Gl,CLUSTERING_INGEST_SERVICE:kq,CLUSTERING_REPLY_SERVICE:Vq,CUSTOM_FUNCTIONS:xl,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"},Qq={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},zq={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Jq={harperdb:uh,"clustering hub":Fl,"clustering leaf":Gl,"custom functions":xl,custom_functions:xl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Xq={CLUSTERING_HUB_PROC_DESCRIPTOR:Fl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Gl},ch={HDB:jr.join(Qn,"server/harperdb"),CUSTOM_FUNCTIONS:jr.join(Qn,"server/customFunctions"),CLUSTERING_HUB:jr.join(Qn,"server/nats"),CLUSTERING_LEAF:jr.join(Qn,"server/nats")},jq={HDB:jr.join(ch.HDB,PA),CUSTOM_FUNCTIONS:jr.join(ch.CUSTOM_FUNCTIONS,vA)},Zq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:jr.join(Qn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:jr.join(Qn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:jr.join(Qn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},eF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},BA="support@harperdb.io",tF="customer-success@harperdb.io",HA=1,rF=4141,xA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",sF="https://www.harperdb.io/product",nF=`For support, please submit a request at ${xA} or contact ${BA}`,qA=`For license support, please contact ${tF}`,iF="None of the specified records were found.",oF="hash attribute not found",aF=`Your current license only supports ${HA} role. ${qA}`,cF="Your current license only supports 3 connections to a node.",uF="127.0.0.1",lF=1,_F=/^\.$/,dF=/^\.\.$/,fF="U+002E",EF=/\//g,hF="U+002F",mF=/U\+002F/g,pF=/^U\+002E$/,SF=/^U\+002EU\+002E$/,TF="d",gF=999999,RF="*",AF="--max-old-space-size=",OF="system",bF="__hdb_hash",NF=".harperdb",yF=".hdb",IF="keys",wF="hdb_boot_properties.file",CF=".updateConfig.json",DF="SIGTSTP",LF=24,UF=6e4,MF=448,PF="blob",vF="trash",BF="database",HF="schema",xF="transactions",qF=".count",FF="id",GF="PROCESS_NAME",FA={SETTINGS_PATH_KEY:"settings_path"},GA=require("lodash"),kF={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"},VF={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},$F={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},YF={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"},KF={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:",WF={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"},QF={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"},zF="060493.ks",JF=".license",XF={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"},jF={CSV:".csv",JSON:".json"},ZF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},eG={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ec={};ec[X.INSERT]=X.INSERT;ec[X.UPDATE]=X.UPDATE;ec[X.UPSERT]=X.UPSERT;ec[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 tG={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"},rG={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},kA={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"},sG=GA.invert(kA),nG={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"},VA={settings_path:FA.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];VA[t.toLowerCase()]=t}var iG={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},oG={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"},aG={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"},cG={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},uG={VERSION_DEFAULT:"2.2.0"},lG={DEVELOPMENT:8192,DEFAULT:512},_G={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"},dG={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"},fG={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},$A={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},EG=Symbol("metadata"),hG="__clustering__",mG=Object.values($A),pG=15984864e5,YA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},SG=GA.invert(YA),TG={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"},gG=111,RG=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:ek.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(nk,"findPs")});var mt=T((rae,uO)=>{"use strict";var ik="__dbis__",ok="__txns__",ak="__environment_name__",ck="__dbi_defintion__",uk={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"},lk=["__createdtime__","__updatedtime__"],_k="\uFFFF",cO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},dk=Object.values(cO);uO.exports={AUDIT_STORE_NAME:ok,INTERNAL_DBIS_NAME:ik,DBI_DEFINITION_NAME:ck,SEARCH_TYPES:uk,TIMESTAMP_NAMES:lk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:ak,TRANSACTIONS_DBI_NAMES_ENUM:cO,TRANSACTIONS_DBIS:dk,OVERFLOW_MARKER:_k}});var Ir=T((sae,SO)=>{"use strict";var lO=D(),_O=mt(),dO={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},fO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),EO={500:fO("There was an error processing your request."),400:"Invalid request"},fk=EO[dO.INTERNAL_SERVER_ERROR],Ek={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.`},hk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},mk={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"},pk={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 ${_O.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${_O.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"},Sk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${lO.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 ${lO.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"},hO={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"},Tk={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."},gk={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`},Rk={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"},Ak={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Ok={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`},mO={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.`},pO={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}`},bk={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."},Nk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},yk={...hO,...mk,...Ek,...Tk,...gk,...Rk,...Ak,...Ok,...Sk,...mO,...pO,...bk,...Nk,...hk};SO.exports={CHECK_LOGS_WRAPPER:fO,HDB_ERROR_MSGS:yk,DEFAULT_ERROR_MSGS:EO,DEFAULT_ERROR_RESP:fk,HTTP_STATUS_CODES:dO,LMDB_ERRORS_ENUM:pk,AUTHENTICATION_ERROR_MSGS:hO,VALIDATION_ERROR_MSGS:mO,ITC_ERRORS:pO}});var Z=T((iae,RO)=>{"use strict";var Ho=Ir(),Ik=G(),wk=D(),Kl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,TO),this.statusCode=s||Ho.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ho.DEFAULT_ERROR_MSGS[s]?Ho.DEFAULT_ERROR_MSGS[s]:Ho.DEFAULT_ERROR_MSGS[Ho.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&Ik[n](i)}},Sh=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}},Th=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function TO(e,t,r,s=wk.LOG_LEVELS.ERROR,n=null,i=!1){if(gO(e))return e;let o=new Kl(e,t,r,s,n);return i&&delete o.stack,o}a(TO,"handleHDBError");function gO(e){return e.__proto__.constructor.name===Kl.name}a(gO,"isHDBError");RO.exports={isHDBError:gO,handleHDBError:TO,ClientError:Sh,ServerError:Th,hdb_errors:Ho}});var ze=T((aae,wO)=>{"use strict";var lc=D(),Ck=z(),rr=j(),_c=require("path"),Dk=require("minimist"),AO=require("fs-extra"),OO=require("lodash");rr.initSync();var{CONFIG_PARAMS:zn,DATABASES_PARAM_CONFIG:oc,SYSTEM_SCHEMA_NAME:Wl}=lc,ac,cc,uc;function bO(){if(ac!==void 0)return ac;if(rr.getHdbBasePath()!==void 0)return ac=rr.get(zn.STORAGE_PATH)||_c.join(rr.getHdbBasePath(),lc.DATABASES_DIR_NAME),ac}a(bO,"getBaseSchemaPath");function NO(){if(cc!==void 0)return cc;if(rr.getHdbBasePath()!==void 0)return cc=IO(Wl),cc}a(NO,"getSystemSchemaPath");function yO(){if(uc!==void 0)return uc;if(rr.getHdbBasePath()!==void 0)return uc=rr.get(lc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_c.join(rr.getHdbBasePath(),lc.TRANSACTIONS_DIR_NAME),uc}a(yO,"getTransactionAuditStoreBasePath");function Lk(e,t){let r=rr.get(zn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_c.join(yO(),e.toString())}a(Lk,"getTransactionAuditStorePath");function IO(e,t){e=e.toString(),t=t&&t.toString();let r=rr.get(lc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_c.join(bO(),e)}a(IO,"getSchemaPath");function Uk(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Dk(process.argv));let s=r[zn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Ck.isObject(s))throw o;i=s}for(let o of i){let c=o[Wl];if(!c)continue;let u=rr.get(zn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[oc.PATH];if(_)return OO.set(u,[Wl,oc.TABLES,t,oc.PATH],_),rr.setProperty(zn.DATABASES,u),_;let l=c?.[oc.PATH];if(l)return OO.set(u,[Wl,oc.PATH],l),rr.setProperty(zn.DATABASES,u),l}}let n=r[zn.STORAGE_PATH.toUpperCase()];if(n){if(!AO.pathExistsSync(n))throw new Error(n+" does not exist");let i=_c.join(n,e);return AO.mkdirsSync(i),rr.setProperty(zn.STORAGE_PATH,n),i}return NO()}a(Uk,"initSystemSchemaPaths");function Mk(){ac=void 0,cc=void 0,uc=void 0}a(Mk,"resetPaths");wO.exports={getBaseSchemaPath:bO,getSystemSchemaPath:NO,getTransactionAuditStorePath:Lk,getTransactionAuditStoreBasePath:yO,getSchemaPath:IO,initSystemSchemaPaths:Uk,resetPaths:Mk}});var wr=T((_ae,MO)=>{"use strict";var Pk=Ir().LMDB_ERRORS_ENUM,uae=require("lmdb"),vk=mt(),lae=require("buffer").Buffer,{OVERFLOW_MARKER:CO,MAX_SEARCH_KEY_LENGTH:Ql}=vk,DO=["number","string","symbol","boolean","bigint"];function Bk(e){if(e=e?.primaryStore||e,!e)throw new Error(Pk.ENV_REQUIRED)}a(Bk,"validateEnv");function Hk(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(Hk,"stringifyData");function xk(e){return e instanceof Date?e.valueOf():e}a(xk,"convertKeyValueToWrite");function qk(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(DO.includes(typeof e))return e.length>Ql?[e.slice(0,Ql)+CO]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(DO.includes(typeof i))i.length>Ql?r.push(i.slice(0,Ql)+CO):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(qk,"getIndexedValues");var zl=0,LO=0;function UO(){LO=Date.now()-performance.now()}a(UO,"adjustStartTime");UO();var Fk=6e4;setInterval(UO,Fk).unref();function Gk(){let e=performance.now()+LO;return e>zl?(zl=e,e):(zl+=488e-6,zl)}a(Gk,"getNextMonotonicTime");MO.exports={validateEnv:Bk,stringifyData:Hk,convertKeyValueToWrite:xk,getNextMonotonicTime:Gk,getIndexedValues:qk}});var PO,bs,gh,dc=Ae(()=>{PO=require("events"),bs=class extends PO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new gh;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)}},gh=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 Li={};$e(Li,{server:()=>_t});var vO,_t,sr=Ae(()=>{vO=require("../index"),_t={};(0,vO._assignPackageExport)("server",_t)});var Ah={};$e(Ah,{loadGQLSchema:()=>$k,start:()=>Rh,startOnMainThread:()=>Vk});function Rh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let K=function(q){if(q.kind==="NonNullType"){let Y=K(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:K(q.type)};let Q={type:q.name?.value};return Object.defineProperty(Q,"location",{value:q.loc.startToken}),Q};a(K,"getProperty");let R=S.name.value,I=[],w={table:null,database:null,properties:I};f.set(R,w);for(let q of S.directives){if(q.name.value==="table"){for(let P of q.arguments)w[P.name.value]=P.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=R),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,E.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="export"){w.export=!0;for(let P of q.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let q of S.fields){let P=K(q.type);P.name=q.name.value,I.push(P);for(let Q of q.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 J of Q.arguments)Y[J.name.value]=J.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 J of Q.arguments)J.name.value==="role"&&Y.push(J.value.value)}}w.type=R,R==="Query"&&(h=w)}function p(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?p(S.elements):kk.includes(S.type)||(0,BO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Jl.dirname)(s),S.tableClass):i.set((0,Jl.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Jl.dirname)(s)+"/"+S.name,R.tableClass)}}}var Jl,BO,kk,Vk,$k,HO=Ae(()=>{Jl=require("path");ge();BO=v(Ye()),kk=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Rh,"start");Vk=Rh,$k=Rh({ensureTable:dt}).handleFile});async function Xl(e){return Yk?(fc||(fc=Kk(Qk)),(await(await fc).import(e)).namespace):import(e)}async function Kk(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),fc=new Compartment({console,Math,Date,fetch:Wk,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,qO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Cr,databases:st})}};let s=await(0,xO.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),fc}function Wk(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 Qk(){return{Resource:qt,tables:Cr}}var xO,qO,Yk,fc,Oh=Ae(()=>{Ns();ge();xO=require("fs/promises"),qO=require("path"),Yk=!1;a(Xl,"secureImport");a(Kk,"getCompartment");a(Wk,"secureOnlyFetch");a(Qk,"getGlobalVars")});var Nh={};$e(Nh,{handleFile:()=>zk});async function zk(e,t,r,s){let n=new Map,i=(0,FO.pathToFileURL)(r).toString(),o=await Xl(i);u(o.default)&&s.set((0,bh.dirname)(t),o.default),c(o,(0,bh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var FO,bh,GO=Ae(()=>{FO=require("url");Oh();bh=require("path");a(zk,"handleFile")});var Ih={};$e(Ih,{start:()=>Jk});function Jk({resources:e}){e.set("login",yh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var yh,kO=Ae(()=>{Ns();a(Jk,"start");yh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var zO={};$e(zO,{parse:()=>Ch,streamAsJSON:()=>Ec,stringify:()=>Ui});function Ec(e){return new wh({value:e})}function VO(e){return console.error(e),JSON.stringify(e.toString())}function $O(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ui(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===WO)return QO(e);if(t.resolution)return t.resolution.then(()=>Ui(e));throw t}}function QO(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=QO(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+Ui(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Ch(e){return Zk.test(e)?Xk.parse(e):JSON.parse(e)}var YO,KO,Xk,jk,WO,wh,Zk,Dh=Ae(()=>{YO=require("stream"),KO=v(require("json-bigint-fixes")),Xk=(0,KO.default)({useNativeBigInt:!0}),jk=1e4,WO={};BigInt.prototype.toJSON=function(){throw WO};a(Ec,"streamAsJSON");wh=class extends YO.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),VO)}catch(n){yield VO(n)}else yield Ui(t)}else yield Ui(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);$O(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>jk?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 $O(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(VO,"handleError");a($O,"when");a(Ui,"stringify");a(QO,"jsStringify");Zk=/-?\d{16,}/;a(Ch,"parse")});var cb=T((Iae,ab)=>{"use strict";var Lh=require("recursive-iterator"),eV=require("alasql"),Uh=require("clone"),JO=z(),{handleHDBError:XO,hdb_errors:tV}=Z(),{HDB_ERROR_MSGS:jO,HTTP_STATUS_CODES:ZO}=tV,{getDatabases:rV}=(ge(),ee(xe)),sV=["DISTINCT_ARRAY"],eb=Symbol("validateTables"),Mh=Symbol("validateTable"),yae=Symbol("getAllColumns"),tb=Symbol("validateAllColumns"),jl=Symbol("findColumn"),rb=Symbol("validateOrderBy"),hc=Symbol("validateSegment"),Ph=Symbol("validateColumn"),sb=Symbol("setColumnsForTable"),nb=Symbol("checkColumnsForAsterisk"),ib=Symbol("validateGroupBy"),ob=Symbol("hasColumns"),vh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eb](),this[nb](),this[tb]()}[eb](){if(this[ob]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mh](t.table)})}}[ob](){let t=!1,r=new Lh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Mh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=rV();if(!r[t.databaseid])throw XO(new Error,jO.SCHEMA_NOT_FOUND(t.databaseid),ZO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XO(new Error,jO.TABLE_NOT_FOUND(t.databaseid,t.tableid),ZO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Uh(n);i.table=Uh(t),this.attributes.push(i)})}[jl](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)}[nb](){let t=new Lh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sb](r.tableid)}[sb](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}))})}[tb](){this[hc](this.statement.columns,!1),this[hc](this.statement.joins,!1),this[hc](this.statement.where,!1),this[ib](this.statement.group,!1),this[hc](this.statement.order,!0)}[hc](t,r){if(!t)return;let s=new Lh(t),n=[];for(let{node:i,path:o}of s)!JO.isEmpty(i)&&!JO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rb](i):n.push(this[Ph](i)));return n}[ib](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&sV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Uh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[jl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[jl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[rb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Ph](t)}[Ph](t){let r=this[jl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};ab.exports=vh});var lb=T((Cae,ub)=>{"use strict";var Bh=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")}};ub.exports=Bh});var db=T((Lae,_b)=>{"use strict";var Hh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_b.exports=Hh});var pb={};$e(pb,{HAS_EXPIRATION:()=>Vh,LAST_TIMESTAMP_PLACEHOLDER:()=>Sc,LOCAL_TIMESTAMP:()=>nV,METADATA:()=>mc,NO_TIMESTAMP:()=>xh,PENDING_LOCAL_TIME:()=>$h,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kh,RecordEncoder:()=>Gh,TIMESTAMP_ASSIGN_LAST:()=>oV,TIMESTAMP_ASSIGN_NEW:()=>hb,TIMESTAMP_ASSIGN_PREVIOUS:()=>mb,TIMESTAMP_PLACEHOLDER:()=>Zl,TIMESTAMP_RECORD_PREVIOUS:()=>qh,getUpdateRecord:()=>Yh,handleLocalTimeForGets:()=>s_});function cV(){return pc[0]=pc[0]^64,iV.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?.[mc];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?.[mc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[mc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Mi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Mi.length;u++){let _=Mi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Yh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?xo=i?.localTime?qh|mb:xh:xo=u?i?.localTime?qh|16384:hb|16384:xh,l>0&&(c|=Vh),t_=c,Fh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:xo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let R=_?.user?.username;if(E&&(e_=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,w=r.get(I);if(w){let B=Pt(w).previousLocalTime;return r.put(I,r_(o,t,s,B,R,d,e_),{ifVersion:p}),S}}r.put(Sc,r_(o,t,s,i?.localTime?1:0,R,d,e_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var fb,Eb,Zl,Sc,kh,nV,mc,pc,iV,xh,hb,oV,mb,qh,Vh,$h,aV,e_,xo,t_,Fh,Gh,Pae,Mi,Tc=Ae(()=>{fb=require("msgpackr");Pi();Eb=v(G()),Zl=new Uint8Array([1,1,1,1,4,64,0,0]),Sc=new Uint8Array([1,1,1,1,1,0,0,0]),kh=new Uint8Array([1,1,1,1,3,64,0,0]),nV=Symbol("local-timestamp"),mc=Symbol("metadata"),pc=new Uint8Array(8),iV=new DataView(pc.buffer,0,8),xh=0,hb=0,oV=1,mb=3,qh=4,Vh=16,$h=1,xo=0,t_=-1,Fh=0,Gh=class extends fb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(xo||t_>=0){let i=0,o=xo;o&&(i+=8,xo=0);let c=t_,u=Fh;c>=0&&(i+=2,t_=-1,u&&(i+=8,Fh=0));let _=aV=r.call(this,s,n|2048|i);e_=_.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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(pc,0,c),c+=8;else for(let d=0;d<8;d++)pc[d]=t[c++];u=cV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Vh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[mc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(cV,"getTimestamp");Pae=Map.prototype.get;a(s_,"handleLocalTimeForGets");Mi=[];setInterval(()=>{for(let e=0;e<Mi.length;e++){let t=Mi[e].deref();!t||t.isDone||t.isCommitted?Mi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Eb.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(Yh,"getUpdateRecord")});var n_=T((Bae,Sb)=>{"use strict";var Wh=j(),Qh=D(),{RecordEncoder:uV}=(Tc(),ee(pb));Wh.initSync();var lV=Wh.get(Qh.CONFIG_PARAMS.STORAGE_COMPRESSION),_V=Wh.get(Qh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,dV=Qh.UPDATES_PROPERTY,Kh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=lV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=_V&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:uV},this.alwaysLazyProperty=s=>s===dV)}};Sb.exports=Kh});var o_=T((xae,gb)=>{"use strict";var qo=j(),gc=D();qo.initSync();var fV=qo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Tb=qo.get(gc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),EV=qo.get(gc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),i_=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=fV,this.noFSAccess=!0,Tb!==void 0&&(this.overlappingSync=Tb),this.noReadAhead=EV}};gb.exports=i_;i_.MAX_DBS=1e4});var Ke=T((Fae,Db)=>{"use strict";var Jh=require("lmdb"),ys=require("fs-extra"),Dr=require("path"),a_=wr(),Ob=G(),nr=Ir().LMDB_ERRORS_ENUM,c_=db(),Xh=n_(),bb=o_(),Jn=mt(),Rb=D(),{table:hV,resetDatabases:mV}=(ge(),ee(xe)),Ab=j(),Is=Jn.INTERNAL_DBIS_NAME,Nb=Jn.DBI_DEFINITION_NAME,pV="data.mdb",SV="lock.mdb",Rc=".mdb",TV="-lock",zh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Zr(t,r),this.key_type=this.dbi[Jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Jh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function u_(e,t){if(e===void 0)throw new Error(nr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(nr.ENV_NAME_REQUIRED)}a(u_,"pathEnvNameValidation");async function jh(e,t,r=!0){try{await ys.access(e)}catch(s){throw s.code==="ENOENT"?new Error(nr.INVALID_BASE_PATH):s}try{let s=Dr.join(e,t+Rc);return await ys.access(s,ys.constants.R_OK|ys.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ys.access(Dr.join(e,t,pV),ys.constants.R_OK|ys.constants.F_OK),Dr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(nr.INVALID_ENVIRONMENT)}else throw new Error(nr.INVALID_ENVIRONMENT);throw s}}a(jh,"validateEnvironmentPath");function l_(e,t){if(a_.validateEnv(e),t===void 0)throw new Error(nr.DBI_NAME_REQUIRED)}a(l_,"validateEnvDBIName");async function gV(e,t,r=!1,s=!1){u_(e,t);let n=Dr.basename(e);t=t.toString();let i=Ab.get(Rb.CONFIG_PARAMS.DATABASES);i||Ab.setProperty(Rb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await jh(e,t,s),yb(e,t,r)}catch(o){if(o.message===nr.INVALID_ENVIRONMENT){let c=Dr.join(e,t);await ys.mkdirp(s?c:e);let u=new bb(s?c:c+Rc,!1),_=Jh.open(u);_.dbis=Object.create(null);let l=new Xh(!1);_.openDB(Is,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Zh(e,t,r);return _[Jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(gV,"createEnvironment");async function RV(e,t,r,s=!0){u_(e,t),t=t.toString();let n=Dr.join(e,t);return hV({table:t,database:Dr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(RV,"copyEnvironment");async function yb(e,t,r=!1){u_(e,t),t=t.toString();let s=Zh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await jh(e,t),i=Dr.join(e,t+Rc),o=n!=i,c=new bb(n,o),u=Jh.open(c);u.dbis=Object.create(null);let _=wb(u);for(let l=0;l<_.length;l++)Zr(u,_[l]);return u[Jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(yb,"openEnvironment");async function AV(e,t,r=!1){u_(e,t),t=t.toString();let s=Dr.join(e,t+Rc),n=await jh(e,t);if(global.lmdb_map!==void 0){let i=Zh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Ib(o),delete global.lmdb_map[i]}}await ys.remove(n),await ys.remove(n===s?n+TV:Dr.join(Dr.dirname(n),SV))}a(AV,"deleteEnvironment");async function Ib(e){a_.validateEnv(e);let t=e[Jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Ib,"closeEnvironment");function Zh(e,t,r=!1){let n=`${Dr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Zh,"getCachedEnvironmentName");function OV(e){a_.validateEnv(e);let t=Object.create(null),r=Zr(e,Is);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Is)try{t[s]=Object.assign(new c_,n)}catch{Ob.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(OV,"listDBIDefinitions");function wb(e){a_.validateEnv(e);let t=[],r=Zr(e,Is);for(let{key:s}of r.getRange({start:!1}))s!==Is&&t.push(s);return t}a(wb,"listDBIs");function bV(e,t){let s=Zr(e,Is).getEntry(t),n=new c_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Ob.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(bV,"getDBIDefinition");function Cb(e,t,r,s=!r){if(l_(e,t),t=t.toString(),t===Is)throw new Error(nr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Zr(e,t)}catch(n){if(n.message===nr.DBI_DOES_NOT_EXIST){let i=new Xh(r,s===!0),o=e.openDB(t,i),c=new c_(r===!0,s);return o[Nb]=c,Zr(e,Is).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Cb,"createDBI");function Zr(e,t){if(l_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Is?r=bV(e,t):r=new c_,r===void 0)throw new Error(nr.DBI_DOES_NOT_EXIST);let s;try{let n=new Xh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(nr.DBI_DOES_NOT_EXIST):n}return s[Nb]=r,e.dbis[t]=s,s}a(Zr,"openDBI");function NV(e,t){l_(e,t),t=t.toString();let r=Zr(e,t),s=r.getStats();return r[Jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(NV,"statDBI");async function yV(e,t){try{let r=Dr.join(e,t+Rc);return(await ys.stat(r)).size}catch{throw new Error(nr.INVALID_ENVIRONMENT)}}a(yV,"environmentDataSize");function IV(e,t){if(l_(e,t),t=t.toString(),t===Is)throw new Error(nr.CANNOT_DROP_INTERNAL_DBIS_NAME);Zr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Zr(e,Is).removeSync(t)}a(IV,"dropDBI");function wV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Zr(e,i)}catch(o){if(o.message===nr.DBI_DOES_NOT_EXIST)Cb(e,i,i!==t,i===t),s=!0;else throw o}}s&&mV()}a(wV,"initializeDBIs");Db.exports={openDBI:Zr,openEnvironment:yb,createEnvironment:gV,listDBIs:wb,listDBIDefinitions:OV,createDBI:Cb,dropDBI:IV,statDBI:NV,deleteEnvironment:AV,initializeDBIs:wV,TransactionCursor:zh,environmentDataSize:yV,copyEnvironment:RV,closeEnvironment:Ib}});var Ub=T((kae,Lb)=>{"use strict";var em=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Lb.exports=em});var Pb=T(($ae,Mb)=>{"use strict";var tm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};Mb.exports=tm});var Bb=T((Kae,vb)=>{"use strict";var rm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};vb.exports=rm});var Fo=T((Xae,qb)=>{"use strict";var CV=Ke(),DV=Ub(),LV=Pb(),UV=Bb(),$s=wr(),Ac=Ir().LMDB_ERRORS_ENUM,MV=mt(),Sn=D(),PV=z(),vV=require("uuid"),Qae=require("lmdb"),{handleHDBError:BV,hdb_errors:HV}=Z(),{OVERFLOW_MARKER:zae,MAX_SEARCH_KEY_LENGTH:Jae}=MV,Hb=j();Hb.initSync();var __=Hb.get(Sn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sm=Sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,vi=Sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xV(e,t,r,s,n=$s.getNextMonotonicTime()){am(e,t,r,s),nm(e,t,r);let i=new DV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];xb(_,!0,n);let l=qV(e,t,r,_),d=_[t];o.push(l),c.push(d)}return im(o,c,s,i,n)}a(xV,"insertRecords");function qV(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Sn.FUNC_VAL],s[o]=c)}let u=$s.getIndexedValues(c),_=e.dbis[o];if(u){__&&_.prefetch(u.map(l=>({key:l,value:n})),d_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}__&&e.dbis[t].prefetch([n],d_),e.dbis[t].put(n,s,s[vi])})}a(qV,"insertRecord");function FV(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(FV,"removeSkippedRecords");function xb(e,t,r){let s=r>0;(s||!Number.isInteger(e[vi]))&&(e[vi]=r||(r=$s.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[sm]))&&(e[sm]=r||$s.getNextMonotonicTime()):delete e[sm]}a(xb,"setTimestamps");function nm(e,t,r){r.indexOf(Sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),CV.initializeDBIs(e,t,r)}a(nm,"initializeTransaction");async function GV(e,t,r,s,n=$s.getNextMonotonicTime()){am(e,t,r,s),nm(e,t,r);let i=new LV,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=om(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return im(c,u,s,i,n,o)}a(GV,"updateRecords");async function kV(e,t,r,s,n=$s.getNextMonotonicTime()){try{am(e,t,r,s)}catch(u){throw BV(u,u.message,HV.HTTP_STATUS_CODES.BAD_REQUEST)}nm(e,t,r);let i=new UV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;PV.isEmpty(_[t])?(l=vV.v4(),_[t]=l):l=_[t];let d=om(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return im(o,c,s,i,n)}a(kV,"upsertRecords");async function im(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||$s.getNextMonotonicTime(),FV(r,i),s}a(im,"finalizeWrite");function om(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(xb(r,!l,o),Number.isInteger(r[vi])&&_[vi]>r[vi])return!1;l&&n.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 R=_[h];if(typeof p=="function"){let w=p([[_]]);Array.isArray(w)&&(p=w[0][Sn.FUNC_VAL],r[h]=p)}if(p===R)continue;let I=$s.getIndexedValues(R);if(I){__&&S.prefetch(I.map(w=>({key:w,value:s})),d_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],s)}if(I=$s.getIndexedValues(p),I){__&&S.prefetch(I.map(w=>({key:w,value:s})),d_);for(let w=0,B=I.length;w<B;w++)S.put(I[w],s)}}let E=Object.assign({},_,r);c.put(s,E,E[vi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:om(e,t,r,s,n,i,o))}a(om,"updateUpsertRecord");function VV(e,t,r){if($s.validateEnv(e),t===void 0)throw new Error(Ac.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ac.WRITE_ATTRIBUTES_REQUIRED):new Error(Ac.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(VV,"validateBasic");function am(e,t,r,s){if(VV(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ac.RECORDS_REQUIRED):new Error(Ac.RECORDS_MUST_BE_ARRAY)}a(am,"validateWrite");function d_(){}a(d_,"noop");qb.exports={insertRecords:xV,updateRecords:GV,upsertRecords:kV}});var Bi=T((Zae,$V)=>{$V.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 Ks=T((ece,kb)=>{"use strict";var Gb=z(),Fb=D(),Go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ys=require("joi"),Xn={schema_format:{pattern:Go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},YV=Ys.alternatives(Ys.string().min(1).max(Xn.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ys.number(),Ys.array()).required(),KV=Ys.alternatives(Ys.string().min(1).max(Xn.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ys.number()),WV=Ys.alternatives(Ys.string().min(1).max(Xn.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ys.number()).required();function QV(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:Go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(QV,"checkValidTable");function zV(e,t){return Gb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(zV,"validateSchemaExists");function JV(e,t){let r=t.state.ancestors[0].schema;return Gb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(JV,"validateTableExists");function XV(e,t){return e.toLowerCase()===Fb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Fb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(XV,"validateSchemaName");kb.exports={common_validators:Xn,schema_regex:Go,hdb_schema_table:YV,validateSchemaExists:zV,validateTableExists:JV,validateSchemaName:XV,checkValidTable:QV,hdb_database:KV,hdb_table:WV}});var Je=T((rce,Vb)=>{"use strict";var ir=require("validate.js");ir.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ir.validators.type.checks[t](e)?null:` must be a '${t}' value`};ir.validators.type.checks={Object:function(e){return ir.isObject(e)&&!ir.isArray(e)},Array:ir.isArray,Integer:ir.isInteger,Number:ir.isNumber,String:ir.isString,Date:ir.isDate,Boolean:function(e){return typeof e=="boolean"}};ir.validators.hasValidFileExt=function(e,t){return ir.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};Vb.exports={validateObject:jV,validateObjectAsync:ZV,validateBySchema:e$};function jV(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ir(e,t,{format:"flat"});return r?new Error(r):null}a(jV,"validateObject");async function ZV(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ir.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(ZV,"validateObjectAsync");function e$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(e$,"validateBySchema")});var f_=T((nce,$b)=>{var{common_validators:Ws}=Ks(),bc=Je(),Oc="is required",pt={database:{presence:!1,format:Ws.schema_format,length:Ws.schema_length},schema:{presence:!1,format:Ws.schema_format,length:Ws.schema_length},table:{presence:!0,format:Ws.schema_format,length:Ws.schema_length},attribute:{presence:!0,format:Ws.schema_format,length:Ws.schema_length},hash_attribute:{presence:!0,format:Ws.schema_format,length:Ws.schema_length}};function Nc(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(Nc,"makeAttributesStrings");function t$(e){return e=Nc(e),pt.table.presence=!1,pt.attribute.presence=!1,pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(t$,"schema_object");function r$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence=!1,pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(r$,"table_object");function s$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence=!1,bc.validateObject(e,pt)}a(s$,"create_table_object");function n$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence={message:Oc},pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(n$,"attribute_object");function i$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence=!1,pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(i$,"describe_table");function o$(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(o$,"validateTableResidence");$b.exports={schema_object:t$,create_table_object:s$,table_object:r$,attribute_object:n$,describe_table:i$,validateTableResidence:o$}});var Kb=T((oce,Yb)=>{"use strict";var a$=require("uuid"),cm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||a$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Yb.exports=cm});var E_=T((cce,Wb)=>{"use strict";var c$=Kb(),um=class extends c${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};Wb.exports=um});var zb=T((lce,Qb)=>{"use strict";Qb.exports=l$;var u$="inserted";function l$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===u$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(l$,"returnObject")});var h_=T((dce,eN)=>{"use strict";var _$=D(),lm=Ke(),d$=Fo(),{getSystemSchemaPath:f$,getSchemaPath:E$}=ze(),h$=Bi(),m$=f_(),p$=E_(),S$=zb(),{handleHDBError:Jb,hdb_errors:jb}=Z(),Xb=z(),{HTTP_STATUS_CODES:T$}=jb,_m=h$.hdb_attribute,Zb=[];for(let e=0;e<_m.attributes.length;e++)Zb.push(_m.attributes[e].attribute);var g$="inserted";eN.exports=R$;async function R$(e){let t=m$.attribute_object(e);if(t)throw Jb(new Error,t.message,jb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Xb.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Jb(new Error,r,T$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Xb.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new p$(e.schema,e.table,e.attribute,e.id);try{let i=await lm.openEnvironment(E$(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}`);lm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await lm.openEnvironment(f$(),_$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await d$.insertRecords(o,_m.hash_attribute,Zb,[n]);return S$(g$,c,{records:[n]},u)}catch(i){throw i}}a(R$,"lmdbCreateAttribute")});var fm=T((Ece,rN)=>{var{hdb_table:A$,hdb_database:tN}=Ks(),O$=Je(),dm=require("joi"),b$={undefined:"undefined",null:"null"},N$=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||b$[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),y$=dm.object({database:tN,schema:tN,table:A$,records:dm.array().items(dm.object().custom(N$)).required()});rN.exports=function(e){return O$.validateBySchema(e,y$)}});var yc=T((pce,nN)=>{"use strict";var Tn=z(),sN=G(),mce=fm(),{getDatabases:I$}=(ge(),ee(xe)),{ClientError:Hi}=Z();nN.exports=w$;function w$(e){if(Tn.isEmpty(e))throw new Hi("invalid update parameters defined.");if(Tn.isEmptyOrZeroLength(e.schema))throw new Hi("invalid schema specified.");if(Tn.isEmptyOrZeroLength(e.table))throw new Hi("invalid table specified.");if(!Array.isArray(e.records))throw new Hi("records must be an array");let t=I$()[e.schema]?.[e.table];if(Tn.isEmpty(t))throw new Hi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Tn.isEmptyOrZeroLength(o[r]))throw sN.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(!Tn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw sN.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`);!Tn.isEmpty(o[r])&&o[r]!==""&&s.has(Tn.autoCast(o[r]))&&(o.skip=!0),s.add(Tn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(w$,"insertUpdateValidate")});var Ic=T((Tce,iN)=>{"use strict";var C$=D().OPERATIONS_ENUM,Em=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=C$.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};iN.exports=Em});var Lc=T((Ace,oN)=>{"use strict";var Rce=Ic(),m_=D(),mm=z(),hm=G(),D$=require("uuid"),{handleHDBError:wc,hdb_errors:L$}=Z(),{HDB_ERROR_MSGS:Cc,HTTP_STATUS_CODES:Dc}=L$;oN.exports=U$;function U$(e,t,r){for(let n=0;n<t.length;n++)M$(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];P$(i,r,e.operation)}}a(U$,"processRows");function M$(e){if(Buffer.byteLength(String(e))>m_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wc(new Error,Cc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(mm.isEmptyOrZeroLength(e)||mm.isEmpty(e.trim()))throw wc(new Error,Cc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(M$,"validateAttribute");function P$(e,t,r){if(!e.hasOwnProperty(t)||mm.isEmptyOrZeroLength(e[t])){if(r===m_.OPERATIONS_ENUM.INSERT||r===m_.OPERATIONS_ENUM.UPSERT){e[t]=D$.v4();return}throw hm.error("Update transaction aborted due to record with no hash value:",e),wc(new Error,Cc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>m_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hm.error(e),wc(new Error,Cc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw hm.error(e),wc(new Error,Cc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(P$,"validateHash")});var cN=T((bce,aN)=>{"use strict";var pm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};aN.exports=pm});var _N=T((yce,lN)=>{"use strict";var Sm=Ke(),v$=G(),uN=Ir().LMDB_ERRORS_ENUM;lN.exports=B$;async function B$(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 Sm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==uN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Sm.closeEnvironment(global.lmdb_map[s]),await Sm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==uN.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){v$.error(t)}}a(B$,"cleanLMDBMap")});var gn=T((wce,hN)=>{"use strict";var Uc=require("crypto"),H$=j(),{CONFIG_PARAMS:x$}=D(),fN="aes-256-cbc",q$=32,F$=16,Tm=64,EN=32,G$=Tm+EN,dN=new Map;hN.exports={encrypt:k$,decrypt:V$,createNatsTableStreamName:$$};function k$(e){let t=Uc.randomBytes(q$),r=Uc.randomBytes(F$),s=Uc.createCipheriv(fN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(k$,"encrypt");function V$(e){let t=e.substr(0,Tm),r=e.substr(Tm,EN),s=e.substr(G$,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(fN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(V$,"decrypt");function $$(e,t){let r=H$.get(x$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=dN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),dN.set(r,s)),s}a($$,"createNatsTableStreamName")});var jn=T((Lce,pN)=>{"use strict";var Dce=es(),p_=G(),mN=f_(),Y$=gn(),S_=z(),{handleHDBError:T_,hdb_errors:K$}=Z(),{HDB_ERROR_MSGS:g_,HTTP_STATUS_CODES:gm}=K$,W$=j();W$.initSync();var{getDatabases:Rm}=(ge(),ee(xe));pN.exports={describeAll:Q$,describeTable:R_,describeSchema:z$};async function Q$(e){try{let t=S_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Rm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await R_({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 R_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){p_.error(E)}}let _={};for(let l in c)t||s?(_[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||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),T_(new Error,g_.DESCRIBE_ALL_ERR)}}a(Q$,"describeAll");async function R_(e,t){S_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=mN.describe_table(e);if(i)throw i;let c=Rm()[r];if(!c)throw T_(new Error,g_.SCHEMA_NOT_FOUND(e.schema),gm.NOT_FOUND);let u=c[s];if(!u)throw T_(new Error,g_.TABLE_NOT_FOUND(e.schema,e.table),gm.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(n){let f={};n.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=Y$.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){p_.warn(`unable to stat table dbi due to ${f}`)}return d}a(R_,"descTable");async function z$(e){S_.transformReq(e);let t=mN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Rm()[s];if(!i)throw T_(new Error,g_.SCHEMA_NOT_FOUND(e.schema),gm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),S_.isEmpty(u)||u.describe){let _=await R_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(z$,"describeSchema")});var Rn=T((vce,AN)=>{var J$=Bi(),{callbackify:TN,promisify:X$}=require("util"),{getDatabases:gN}=(ge(),ee(xe));AN.exports={setSchemaDataToGlobal:SN,getTableSchema:j$,getSystemSchema:Z$,setSchemaDataToGlobalAsync:X$(SN)};var RN=jn(),Mce=TN(RN.describeAll),Pce=TN(RN.describeTable);function SN(e){global.hdb_schema=gN(),e&&e()}a(SN,"setSchemaDataToGlobal");function j$(e,t,r){let s=gN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(j$,"getTableSchema");function Z$(){return J$}a(Z$,"getSystemSchema")});var Lr=T((Hce,yN)=>{"use strict";var O_=fm(),Ft=z(),e1=require("util"),b_=ws(),t1=Rn(),ON=G(),{handleHDBError:xi,hdb_errors:r1}=Z(),{HTTP_STATUS_CODES:qi}=r1,s1=e1.promisify(t1.getTableSchema),n1="updated",bN="inserted",NN="upserted";yN.exports={insert:o1,update:a1,upsert:c1,validation:i1,flush:u1};async function i1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await s1(e.schema,e.table),r=O_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ft.isEmptyOrZeroLength(c[s]))throw ON.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(!Ft.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ON.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ft.isEmpty(c[s])&&c[s]!==""&&n.has(Ft.autoCast(c[s]))&&(c.skip=!0),n.add(Ft.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(i1,"validation");async function o1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=O_(e);if(t)throw xi(new Error,t.message,qi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,qi.BAD_REQUEST);let s=await b_.createRecords(e);return A_(bN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(o1,"insertData");async function a1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=O_(e);if(t)throw xi(new Error,t.message,qi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,qi.BAD_REQUEST);let s=await b_.updateRecords(e);return Ft.isEmpty(s.existing_rows)?A_(n1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):A_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(a1,"updateData");async function c1(e){if(e.operation!=="upsert")throw xi(new Error,"invalid operation, must be upsert",qi.INTERNAL_SERVER_ERROR);let t=O_(e);if(t)throw xi(new Error,t.message,qi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,qi.BAD_REQUEST);let s=await b_.upsertRecords(e);return A_(NN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(c1,"upsertData");function A_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===bN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===NN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(A_,"returnObject");function u1(e){return Ft.transformReq(e),b_.flush(e.schema,e.table)}a(u1,"flush")});var Om=T((qce,CN)=>{var l1=Je(),Am=require("joi"),{hdb_table:_1,hdb_database:IN}=Ks(),wN={schema:IN,database:IN,table:_1},d1={date:Am.date().iso().required()},f1={timestamp:Am.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};CN.exports=function(e,t){let r=t==="timestamp"?{...wN,...f1}:{...wN,...d1},s=Am.object(r);return l1.validateBySchema(e,s)}});var UN=T((Fce,LN)=>{var E1=Je(),bm=require("joi"),{hdb_table:h1,hdb_database:DN}=Ks(),m1=bm.object({schema:DN,database:DN,table:h1,hash_values:bm.array().required(),ids:bm.array()});LN.exports=function(e){return E1.validateBySchema(e,m1)}});var PN=T((Gce,MN)=>{"use strict";var Nm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},ym=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Im=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};MN.exports={InsertObject:Nm,NoSQLSeachObject:ym,DeleteResponseObject:Im}});var ti=T((Vce,qN)=>{"use strict";var BN=Om(),p1=UN(),Fi=z(),vN=require("moment"),HN=G(),{promisify:S1,callbackify:T1}=require("util"),Gi=D(),g1=Rn(),wm=S1(g1.getTableSchema),Cm=ws(),{DeleteResponseObject:R1}=PN(),{handleHDBError:Zn,hdb_errors:A1}=Z(),{HDB_ERROR_MSGS:N_,HTTP_STATUS_CODES:ei}=A1,O1="records successfully deleted",b1=T1(xN);qN.exports={delete:b1,deleteRecord:xN,deleteFilesBefore:N1,deleteAuditLogsBefore:y1};async function N1(e){let t=BN(e,"date");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Fi.transformReq(e),!vN(e.date,vN.ISO_8601).isValid())throw Zn(new Error,N_.INVALID_DATE,ei.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,N_.INVALID_DATE,!0);let s=Fi.checkSchemaTableExist(e.schema,e.table);if(s)throw Zn(new Error,s,ei.NOT_FOUND,Gi.LOG_LEVELS.ERROR,s,!0);let n=await Cm.deleteRecordsBefore(e);if(await wm(e.schema,e.table),HN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(N1,"deleteFilesBefore");async function y1(e){let t=BN(e,"timestamp");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Fi.transformReq(e),isNaN(e.timestamp))throw Zn(new Error,N_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,N_.INVALID_VALUE("Timestamp"),!0);let r=Fi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);let s=await Cm.deleteAuditLogsBefore(e);return await wm(e.schema,e.table),HN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(y1,"deleteAuditLogsBefore");async function xN(e){e.ids&&(e.hash_values=e.ids);let t=p1(e);if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Fi.transformReq(e);let r=Fi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);try{await wm(e.schema,e.table);let s=await Cm.deleteRecords(e);return Fi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${O1}`),s}catch(s){if(s.message===Gi.SEARCH_NOT_FOUND_MESSAGE){let n=new R1;return n.message=Gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(xN,"deleteRecord")});var y_=T((Yce,kN)=>{var I1=require("crypto"),FN=9;function w1(e){let t=D1(FN),r=GN(e+t);return t+r}a(w1,"createHash");function C1(e,t){let r=e?.substr(0,FN),s=r+GN(t+r);return e===s}a(C1,"validateHash");function D1(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(D1,"generateSalt");function GN(e){return I1.createHash("md5").update(e).digest("hex")}a(GN,"md5");kN.exports={hash:w1,validate:C1}});var $N=T((Wce,VN)=>{var Dm=Je(),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 L1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Dm.validateObject(e,Qt)}a(L1,"addUserValidation");function U1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Dm.validateObject(e,Qt)}a(U1,"alterUserValidation");function M1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Dm.validateObject(e,Qt)}a(M1,"dropUserValidation");VN.exports={addUserValidation:L1,alterUserValidation:U1,dropUserValidation:M1}});var qe=T((Jce,KN)=>{"use strict";var{platform:zce}=require("os"),P1="nats-server.zip",Lm="nats-server",v1=process.platform==="win32"?`${Lm}.exe`:Lm,Um="HDB",B1=/^[^\s.,*>]+$/,YN="__request__",H1=a(e=>`${e}.${YN}`,"REQUEST_SUBJECT"),x1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},q1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},F1={HUB:"hub.pid",LEAF:"leaf.pid"},G1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},k1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Um,deliver_subject:"__HDB__.WORKQUEUE"},V1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Um,deliver_subject:"HDB.SCHEMAQUEUE"},$1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Um,deliver_subject:"HDB.USERQUEUE"},Y1={SUCCESS:"success",ERROR:"error"},K1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},W1={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Q1={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},z1={debug:"-D",trace:"-DVV"};KN.exports={NATS_SERVER_ZIP:P1,NATS_SERVER_NAME:Lm,NATS_BINARY_NAME:v1,PID_FILES:F1,NATS_CONFIG_FILES:q1,SERVER_SUFFIX:G1,WORK_QUEUE_CONSUMER_NAMES:k1,SCHEMA_QUEUE_CONSUMER_NAMES:V1,USER_QUEUE_CONSUMER_NAMES:$1,NATS_TERM_CONSTRAINTS_RX:B1,REQUEST_SUFFIX:YN,UPDATE_REMOTE_RESPONSE_STATUSES:Y1,CLUSTER_STATUS_STATUSES:K1,REQUEST_SUBJECT:H1,SUBJECT_PREFIXES:W1,MSG_HEADERS:x1,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:z1,LOG_LEVEL_HIERARCHY:Q1}});var QN=T((jce,WN)=>{"use strict";var J1={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 Xq=Object.create;var rc=Object.defineProperty;var Zq=Object.getOwnPropertyDescriptor;var eG=Object.getOwnPropertyNames;var tG=Object.getPrototypeOf,rG=Object.prototype.hasOwnProperty;var a=(e,t)=>rc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ye=(e,t)=>{for(var r in t)rc(e,r,{get:t[r],enumerable:!0})},eO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of eG(t))!rG.call(e,n)&&n!==r&&rc(e,n,{get:()=>t[n],enumerable:!(s=Zq(t,n))||s.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Xq(tG(e)):{},eO(t||!e||!e.__esModule?rc(r,"default",{value:e,enumerable:!0}):r,e)),ne=e=>eO(rc({},"__esModule",{value:!0}),e);var sO=g((Nae,rO)=>{var sG=require("fast-glob"),{statSync:Sh,existsSync:Th,readFileSync:nG,writeFileSync:iG}=require("fs"),{spawnSync:oG,spawn:aG,execFileSync:bae}=require("child_process"),{isMainThread:cG}=require("worker_threads"),{join:Qn,relative:tO}=require("path"),{PACKAGE_ROOT:Rs}=M(),{tmpdir:uG,platform:lG}=require("os");require("source-map-support").install();var _G=["resources","server","dataLayer","components"],sc="ts-build",gh,dG=__filename.endsWith("tsBuild.js");if(dG){if(cG){let r;try{Sh(Qn(Rs,sc)),r=!0}catch{}if(r)for(let s of sG.sync(_G.map(n=>n+"/**/*.ts"),{cwd:Rs})){let n=0,i=0;try{n=Sh(Qn(Rs,s)).mtimeMs-5e3,i=Sh(Qn(Rs,sc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),gh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),gh=!0;if(gh){let s=Qn(Rs,"node_modules/.bin/tsc");lG()==="win32"&&(s+=".cmd");let n=oG(s,{cwd:Rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Qn(uG(),"harperdb-tsc.pid"),o;if(Th(i))try{process.kill(+nG(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=aG(s,["--watch"],{cwd:Rs,detached:!0,stdio:"ignore"});iG(i,c.pid.toString()),c.unref()}}}}let e=rO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Rs)&&!s[0].includes("node_modules")){let i=tO(Rs,s[0]),o;i.startsWith(sc)?o=Qn(Rs,tO(sc,i)):o=Qn(Rs,sc,i);let c=Qn(o,r),u=c+".js";if(Th(u))return u;if(c.includes(".")&&Th(c))return c}return t(r,s,n)}}});var M=g((Iae,pO)=>{"use strict";var ts=require("path"),fG=require("fs"),{relative:yae,join:wae}=ts,{existsSync:EG}=fG;function hG(){let e=__dirname;for(;!EG(ts.join(e,"package.json"));){let t=ts.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(hG,"getHDBPackageRoot");var zn=hG(),nO="js",$l=nO,mG="harperdb-config.yaml",pG="defaultConfig.yaml",SG="hdb",iO=`harperdb.${$l}`,oO=`customFunctionsServer.${$l}`,TG=`restartHdb.${$l}`,Ah="HarperDB",Vl="Custom Functions",Yl="Clustering Hub",Kl="Clustering Leaf",gG="Clustering Ingest Service",RG="Clustering Reply Service",AG="foreground.pid",OG="hdb.pid",bG="data",NG={HDB:Ah,CLUSTERING_HUB:Yl,CLUSTERING_LEAF:Kl,CLUSTERING_INGEST_SERVICE:gG,CLUSTERING_REPLY_SERVICE:RG,CUSTOM_FUNCTIONS:Vl,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"},yG={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},wG={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},IG={harperdb:Ah,"clustering hub":Yl,"clustering leaf":Kl,"custom functions":Vl,custom_functions:Vl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},CG={CLUSTERING_HUB_PROC_DESCRIPTOR:Yl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kl},Rh={HDB:ts.join(zn,"server/harperdb"),CUSTOM_FUNCTIONS:ts.join(zn,"server/customFunctions"),CLUSTERING_HUB:ts.join(zn,"server/nats"),CLUSTERING_LEAF:ts.join(zn,"server/nats")},DG={HDB:ts.join(Rh.HDB,iO),CUSTOM_FUNCTIONS:ts.join(Rh.CUSTOM_FUNCTIONS,oO)},LG={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:ts.join(zn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ts.join(zn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ts.join(zn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},MG={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},aO="support@harperdb.io",UG="customer-success@harperdb.io",cO=1,PG=4141,uO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",vG="https://www.harperdb.io/product",BG=`For support, please submit a request at ${uO} or contact ${aO}`,lO=`For license support, please contact ${UG}`,HG="None of the specified records were found.",xG="hash attribute not found",qG=`Your current license only supports ${cO} role. ${lO}`,GG="Your current license only supports 3 connections to a node.",FG="127.0.0.1",kG=1,VG=/^\.$/,$G=/^\.\.$/,YG="U+002E",KG=/\//g,WG="U+002F",QG=/U\+002F/g,zG=/^U\+002E$/,JG=/^U\+002EU\+002E$/,jG="d",XG=999999,ZG="*",eF="--max-old-space-size=",tF="system",rF="__hdb_hash",sF=".harperdb",nF=".hdb",iF="keys",oF="hdb_boot_properties.file",aF=".updateConfig.json",cF="SIGTSTP",uF=24,lF=6e4,_F=448,dF="blob",fF="trash",EF="database",hF="schema",mF="transactions",pF=".count",SF="id",TF="PROCESS_NAME",_O={SETTINGS_PATH_KEY:"settings_path"},dO=require("lodash"),gF={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"},RF={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},AF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},OF={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"},bF={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"},Nr="hdb_internal:",NF={CREATE_SCHEMA:Nr+"create_schema",CREATE_TABLE:Nr+"create_table",CREATE_ATTRIBUTE:Nr+"create_attribute",ADD_USER:Nr+"add_user",ALTER_USER:Nr+"alter_user",DROP_USER:Nr+"drop_user",HDB_NODES:Nr+"hdb_nodes",HDB_USERS:Nr+"hdb_users",HDB_WORKERS:Nr+"hdb_workers",CATCHUP:Nr+"catchup",SCHEMA_CATCHUP:Nr+"schema_catchup",WORKER_ROOM:Nr+"cluster_workers"},yF={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"},wF="060493.ks",IF=".license",CF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={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"},DF={CSV:".csv",JSON:".json"},LF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},MF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},nc={};nc[Z.INSERT]=Z.INSERT;nc[Z.UPDATE]=Z.UPDATE;nc[Z.UPSERT]=Z.UPSERT;nc[Z.DELETE]=Z.DELETE;var xe=Object.create(null);xe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;xe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;xe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;xe[Z.READ_LOG]=Z.READ_LOG;xe[Z.ADD_NODE]=Z.ADD_NODE;xe[Z.LIST_USERS]=Z.LIST_USERS;xe[Z.LIST_ROLES]=Z.LIST_ROLES;xe[Z.USER_INFO]=Z.USER_INFO;xe[Z.SQL]=Z.SQL;xe[Z.GET_JOB]=Z.GET_JOB;xe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;xe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;xe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;xe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;xe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;xe[Z.REMOVE_NODE]=Z.REMOVE_NODE;xe[Z.RESTART]=Z.RESTART;xe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;xe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;xe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;xe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;xe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;xe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;xe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;xe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var UF={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"},PF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fO={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"},vF=dO.invert(fO),BF={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"},I={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_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"},EO={settings_path:_O.SETTINGS_PATH_KEY,hdb_root_key:I.ROOTPATH,hdb_root:I.ROOTPATH,rootpath:I.ROOTPATH,server_port_key:I.OPERATIONSAPI_NETWORK_PORT,server_port:I.OPERATIONSAPI_NETWORK_PORT,cert_key:I.TLS_CERTIFICATE,certificate:I.TLS_CERTIFICATE,private_key_key:I.TLS_PRIVATEKEY,private_key:I.TLS_PRIVATEKEY,http_secure_enabled_key:I.OPERATIONSAPI_NETWORK_HTTPS,https_on:I.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:I.OPERATIONSAPI_NETWORK_CORS,cors_on:I.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:I.LOGGING_LEVEL,log_level:I.LOGGING_LEVEL,log_path_key:I.LOGGING_ROOT,log_path:I.LOGGING_ROOT,clustering_node_name_key:I.CLUSTERING_NODENAME,node_name:I.CLUSTERING_NODENAME,clustering_enabled_key:I.CLUSTERING_ENABLED,clustering:I.CLUSTERING_ENABLED,max_http_threads:I.THREADS_COUNT,max_hdb_processes:I.THREADS_COUNT,server_timeout_key:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:I.LOGGING_AUDITLOG,disable_transaction_log:I.LOGGING_AUDITLOG,operation_token_timeout_key:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:I.HTTP_PORT,custom_functions_port:I.HTTP_PORT,custom_functions_directory_key:I.COMPONENTSROOT,custom_functions_directory:I.COMPONENTSROOT,max_custom_function_processes:I.THREADS_COUNT,log_to_file:I.LOGGING_FILE,log_to_stdstreams:I.LOGGING_STDSTREAMS,local_studio_on:I.LOCALSTUDIO_ENABLED,clustering_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:I.CLUSTERING_USER,clustering_enabled:I.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:I.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:I.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:I.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:I.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:I.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:I.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:I.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:I.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:I.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:I.CLUSTERING_NODENAME,clustering_tls_certificate:I.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:I.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:I.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:I.CLUSTERING_TLS_INSECURE,clustering_tls_verify:I.CLUSTERING_TLS_VERIFY,clustering_loglevel:I.CLUSTERING_LOGLEVEL,clustering_republishmessages:I.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:I.CLUSTERING_DATABASELEVEL,customfunctions_network_port:I.HTTP_PORT,customfunctions_tls_certificate:I.TLS_CERTIFICATE,customfunctions_network_cors:I.HTTP_CORS,customfunctions_network_corsaccesslist:I.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:I.HTTP_HEADERSTIMEOUT,customfunctions_network_https:I.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:I.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:I.HTTP_TIMEOUT,http_threads:I.THREADS_COUNT,threads:I.THREADS_COUNT,threads_count:I.THREADS_COUNT,threads_debug:I.THREADS_DEBUG,threads_debug_startingport:I.THREADS_DEBUG_STARTINGPORT,threads_debug_port:I.THREADS_DEBUG_PORT,threads_debug_host:I.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:I.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:I.THREADS_MAXHEAPMEMORY,http_session_affinity:I.HTTP_SESSIONAFFINITY,http_compressionthreshold:I.HTTP_COMPRESSIONTHRESHOLD,http_cors:I.HTTP_CORS,http_corsaccesslist:I.HTTP_CORSACCESSLIST,http_headerstimeout:I.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,http_timeout:I.HTTP_TIMEOUT,http_port:I.HTTP_PORT,http_secureport:I.HTTP_SECUREPORT,http_mtls:I.HTTP_MTLS,http_mtls_user:I.HTTP_MTLS_USER,http_mtls_required:I.HTTP_MTLS_REQUIRED,customfunctions_processes:I.THREADS_COUNT,customfunctions_root:I.COMPONENTSROOT,localstudio_enabled:I.LOCALSTUDIO_ENABLED,logging_file:I.LOGGING_FILE,logging_level:I.LOGGING_LEVEL,logging_root:I.LOGGING_ROOT,logging_rotation_enabled:I.LOGGING_ROTATION_ENABLED,logging_rotation_compress:I.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:I.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:I.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:I.LOGGING_ROTATION_PATH,logging_stdstreams:I.LOGGING_STDSTREAMS,logging_auditlog:I.LOGGING_AUDITLOG,logging_auditretention:I.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:I.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:I.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:I.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:I.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:I.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:I.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:I.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:I.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:I.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:I.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:I.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:I.ROOTPATH,databases:I.DATABASES,storage_path:I.STORAGE_PATH,ignorescripts:I.IGNORE_SCRIPTS,mqtt_network_port:I.MQTT_NETWORK_PORT,mqtt_websocket:I.MQTT_WEBSOCKET,mqtt_network_secureport:I.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:I.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:I.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:I.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:I.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:I.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:I.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:I.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:I.AUTHENTICATION_CACHETTL,authentication_enablesessions:I.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:I.COMPONENTSROOT,tls_certificate:I.TLS_CERTIFICATE,tls_privatekey:I.TLS_PRIVATEKEY,tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,tls_ciphers:I.TLS_CIPHERS};for(let e in I){let t=I[e];EO[t.toLowerCase()]=t}var HF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},xF={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.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"},qF={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"},GF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},FF={VERSION_DEFAULT:"2.2.0"},kF={DEVELOPMENT:8192,DEFAULT:512},VF={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"},$F={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"},YF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},hO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},KF=Symbol("metadata"),WF="__clustering__",QF=Object.values(hO),zF=15984864e5,mO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},JF=dO.invert(mO),jF={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"},XF=111,ZF=`\r
|
|
2
|
+
`,ek={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},tk=["*","%"],rk="unauthorized_access",sk="func_val",nk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ik={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},ok={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},ak={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},ck={HTTP:"http"},uk={STOPPED:"stopped",ONLINE:"online"},lk="3.x.x",_k={SUCCESS:"success",FAILURE:"failure"},dk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pO.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:aO,HDB_SUPPORT_URL:uO,HDB_PRICING_URL:vG,SUPPORT_HELP_MSG:BG,LICENSE_HELP_MSG:lO,HDB_PROC_NAME:iO,HDB_PROC_DESCRIPTOR:Ah,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kl,CLUSTERING_HUB_PROC_DESCRIPTOR:Yl,SYSTEM_SCHEMA_NAME:tF,HASH_FOLDER_NAME:rF,HDB_HOME_DIR_NAME:sF,UPDATE_FILE_NAME:aF,LICENSE_KEY_DIR_NAME:iF,BOOT_PROPS_FILE_NAME:oF,JOB_TYPE_ENUM:xF,JOB_STATUS_ENUM:CF,SYSTEM_TABLE_NAMES:OF,SYSTEM_TABLE_HASH_ATTRIBUTES:bF,OPERATIONS_ENUM:Z,VALID_S3_FILE_TYPES:DF,S3_BUCKET_AUTH_KEYS:LF,VALID_SQL_OPS_ENUM:MF,GEO_CONVERSION_ENUM:PF,HDB_SETTINGS_NAMES:fO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:vF,SERVICE_ACTIONS_ENUM:UF,CLUSTER_MESSAGE_TYPE_ENUM:qF,CLUSTER_CONNECTION_DIRECTION_ENUM:GF,CLUSTER_EVENTS_DEFS_ENUM:VF,PERIOD_REGEX:VG,DOUBLE_PERIOD_REGEX:$G,UNICODE_PERIOD:YG,FORWARD_SLASH_REGEX:KG,UNICODE_FORWARD_SLASH:WG,ESCAPED_FORWARD_SLASH_REGEX:QG,ESCAPED_PERIOD_REGEX:zG,ESCAPED_DOUBLE_PERIOD_REGEX:JG,REG_KEY_FILE_NAME:wF,RESTART_TIMEOUT_MS:lF,HDB_FILE_PERMISSIONS:_F,DATABASES_DIR_NAME:EF,LEGACY_DATABASES_DIR_NAME:hF,TRANSACTIONS_DIR_NAME:mF,LIMIT_COUNT_NAME:pF,ID_ATTRIBUTE_STRING:SF,INSERT_MODULE_ENUM:RF,UPGRADE_JSON_FIELD_NAMES_ENUM:AF,RESTART_CODE:cF,RESTART_CODE_NUM:uF,CLUSTER_OPERATIONS:nc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yF,HDB_INTERNAL_SC_CHANNEL_PREFIX:Nr,INTERNAL_SC_CHANNELS:NF,CLUSTERING_MESSAGE_TYPES:jF,HDB_FILE_SUFFIX:nF,BLOB_FOLDER_NAME:dF,HDB_TRASH_DIR:fF,ORIGINATOR_SET_VALUE:XF,LICENSE_VALUES:FF,RAM_ALLOCATION_ENUM:kF,TIME_STAMP_NAMES_ENUM:hO,TIME_STAMP_NAMES:QF,PERMS_UPDATE_RELEASE_TIMESTAMP:zF,SEARCH_NOT_FOUND_MESSAGE:HG,SEARCH_ATTRIBUTE_NOT_FOUND:xG,LICENSE_ROLE_DENIED_RESPONSE:qG,LICENSE_MAX_CONNS_REACHED:GG,BASIC_LICENSE_MAX_NON_CU_ROLES:cO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:PG,VALUE_SEARCH_COMPARATORS:mO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:JF,LICENSE_FILE_NAME:IF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:$F,NEW_LINE:ZF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:kG,MOMENT_DAYS_TAG:jG,API_TURNOVER_SEC:XG,LOOPBACK:FG,CODE_EXTENSION:$l,WILDCARD_SEARCH_VALUE:ZG,NODE_ERROR_CODES:YF,JAVASCRIPT_EXTENSION:nO,PERMS_CRUD_ENUM:ek,UNAUTHORIZED_PERMISSION_NAME:rk,SEARCH_WILDCARDS:tk,FUNC_VAL:sk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:nk,JWT_ENUM:ik,CLUSTERING_FLAG:WF,ITC_EVENT_TYPES:ok,CUSTOM_FUNCTION_PROC_NAME:oO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Vl,SERVICES:ak,THREAD_TYPES:ck,MEM_SETTING_KEY:eF,HDB_RESTART_SCRIPT:TG,PROCESS_DESCRIPTORS:NG,SERVICE_SERVERS:DG,SERVICE_SERVERS_CWD:Rh,PROCESS_DESCRIPTORS_VALIDATE:IG,LAUNCH_SERVICE_SCRIPTS:LG,LOG_LEVELS:wG,PROCESS_NAME_ENV_PROP:TF,LOG_NAMES:yG,PM2_PROCESS_STATUSES:uk,CONFIG_PARAM_MAP:EO,CONFIG_PARAMS:I,HDB_CONFIG_FILE:mG,HDB_DEFAULT_CONFIG_FILE:pG,ROLE_TYPES_ENUM:MG,BOOT_PROP_PARAMS:_O,INSTALL_PROMPTS:gF,HDB_ROOT_DIR_NAME:SG,CLUSTERING_PROCESSES:CG,FOREGROUND_PID_FILE:AG,PACKAGE_ROOT:zn,PRE_4_0_0_VERSION:lk,DATABASES_PARAM_CONFIG:HF,METADATA_PROPERTY:KF,AUTH_AUDIT_STATUS:_k,AUTH_AUDIT_TYPES:dk,HDB_PID_FILE:OG,DEFAULT_DATABASE_NAME:bG,LEGACY_CONFIG_PARAMS:BF};sO()});var Oh=g((Dae,gO)=>{"use strict";var SO=require("minimist");gO.exports=fk;function fk(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=TO(process.env),s=TO(SO(process.argv))):(r=process.env,s=SO(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(fk,"assignCMDENVVariables");function TO(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(TO,"objKeysToLowerCase")});var $=g((Mae,Dh)=>{"use strict";var Ui=require("fs-extra"),{workerData:Ek,threadId:hk}=require("worker_threads"),hn=require("path"),OO=require("yaml"),bO=require("properties-reader"),Rt=M(),RO=Oh(),mk=require("os"),{PACKAGE_ROOT:Nh}=M(),{_assignPackageExport:pk}=require("../index"),oc={};for(let e in console)oc[e]||(oc[e]=console[e]);var rr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NO={STDOUT:"stdOut",STDERR:"stdErr"},Sk=hn.join(Nh,"logs"),Tk=hn.join(Nh,"config/yaml/",Rt.HDB_DEFAULT_CONFIG_FILE),gk=1e4,En,Ys,tr,Wl,Ql,ac,Ho,ic;ic===void 0&&yO();Dh.exports={notify:CO,fatal:DO,error:cc,warn:Ch,info:zl,debug:Ih,trace:wh,setLogLevel:wk,log_level:tr,loggerWithTag:Rk,suppressLogging:Ak,initLogSettings:yO,setupConsoleLogging:wO,logCustomLevel:Nk,closeLogFile:yh,getLogFilePath:()=>ac,OUTPUTS:NO,AuthAuditLog:Dk};pk("logger",Dh.exports);function yO(e=!1){try{if(ic===void 0||e){yh();let t=yk(),r=RO(["ROOTPATH"]);try{ic=bO(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ui.pathExistsSync(hn.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE)))throw s}({level:tr,config_log_path:Ql,to_file:En,to_stream:Ys}=Ik(r.ROOTPATH?hn.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE):ic.get("settings_path"))),Wl=Rt.LOG_NAMES.HDB,ac=hn.join(Ql,Wl)}}catch(t){if(ic=void 0,t.code===Rt.NODE_ERROR_CODES.ENOENT){let r=RO(Object.keys(Rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Rt.CONFIG_PARAMS.LOGGING_LEVEL){tr=u;continue}if(c===Rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ys=u;continue}c===Rt.CONFIG_PARAMS.LOGGING_FILE&&(En=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Ck();En=En===void 0?n:En,En=AO(En),Ys=Ys===void 0?i:Ys,Ys=AO(Ys),tr=tr===void 0?s:tr,Ql=Sk,Wl=Rt.LOG_NAMES.INSTALL,ac=hn.join(Ql,Wl);return}throw cc("Error initializing log settings"),cc(t),t}process.env.DEV_MODE&&(Ys=!0),wO()}a(yO,"initLogSettings");var bh=!0;function wO(){Bo("error",cc),Bo("warn",Ch),Bo("log",zl),Bo("info",zl),Bo("debug",Ih),Bo("trace",wh)}a(wO,"setupConsoleLogging");function Bo(e,t){console[e]=function(...r){if(bh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return oc[e](...r)}}a(Bo,"logConsole");function Rk(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(CO),fatal:r(DO),error:r(cc),warn:r(Ch),info:r(zl),debug:r(Ih),trace:r(wh)};function r(s){return function(...n){return s(t,...n)}}}a(Rk,"loggerWithTag");function Ak(e){try{bh=!1,e()}finally{bh=!0}}a(Ak,"suppressLogging");var Ok=Ek?.name?.replace(/ /g,"-")||"main";function mn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Ok+"/"+hk);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(mn,"createLogRecord");function uc(e){En&&IO(e),Ys&&process.stdout.write(e)}a(uc,"logStdOut");function Jl(e){En&&IO(e),Ys&&process.stderr.write(e)}a(Jl,"logStdErr");function IO(e){bk(),Ho?Ui.appendFileSync(Ho,e):oc.log(e)}a(IO,"logToFile");function yh(){try{Ui.closeSync(Ho)}catch{}Ho=null}a(yh,"closeLogFile");function bk(){if(!Ho){try{if(!ac)debugger;Ho=Ui.openSync(ac,"a")}catch(e){oc.error(e)}setTimeout(()=>{yh()},gk).unref()}}a(bk,"openLogFile");function zl(...e){rr[tr]<=rr.info&&uc(mn("info",e))}a(zl,"info");function wh(...e){rr[tr]<=rr.trace&&uc(mn("trace",e))}a(wh,"trace");function cc(...e){rr[tr]<=rr.error&&Jl(mn("error",e))}a(cc,"error");function Ih(...e){rr[tr]<=rr.debug&&uc(mn("debug",e))}a(Ih,"debug");function CO(...e){rr[tr]<=rr.notify&&uc(mn("notify",e))}a(CO,"notify");function DO(...e){rr[tr]<=rr.fatal&&Jl(mn("fatal",e))}a(DO,"fatal");function Ch(...e){rr[tr]<=rr.warn&&Jl(mn("warn",e))}a(Ch,"warn");function Nk(e,t,...r){t===NO.STDERR?Jl(mn(e,r)):uc(mn(e,r))}a(Nk,"logCustomLevel");function yk(){let e;try{e=mk.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hn.join(e,Rt.HDB_HOME_DIR_NAME,Rt.BOOT_PROPS_FILE_NAME);return Ui.existsSync(t)||(t=hn.join(Nh,"utility/hdb_boot_properties.file")),t}a(yk,"getPropsFilePath");function wk(e){tr=e}a(wk,"setLogLevel");function AO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(AO,"autoCastBoolean");function Ik(e){try{if(e.includes("config/settings.js")){let o=bO(e);return{level:o.get(Rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hn.dirname(o.get(Rt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Rt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Rt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=OO.parseDocument(Ui.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===Rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ik,"getLogConfig");function Ck(){try{let e=OO.parseDocument(Ui.readFileSync(Tk,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(Ck,"getDefaultConfig");function Dk(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(Dk,"AuthAuditLog")});var MO=g((Pae,LO)=>{"use strict";var Lk=require("util"),Mk=require("path"),Uk=require("child_process"),Pk=Lk.promisify(Uk.execFile),vk=1e3*1e3*10;LO.exports={findPs:Bk};async function Bk(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Pk("ps",["wwxo",`pid,${r}`],{maxBuffer:vk});for(let n of s.trim().split(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Mk.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Bk,"findPs")});var dt=g((Bae,PO)=>{"use strict";var Hk="__dbis__",xk="__txns__",qk="__environment_name__",Gk="__dbi_defintion__",Fk={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"},kk=["__createdtime__","__updatedtime__"],Vk="\uFFFF",UO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$k=Object.values(UO);PO.exports={AUDIT_STORE_NAME:xk,INTERNAL_DBIS_NAME:Hk,DBI_DEFINITION_NAME:Gk,SEARCH_TYPES:Fk,TIMESTAMP_NAMES:kk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qk,TRANSACTIONS_DBI_NAMES_ENUM:UO,TRANSACTIONS_DBIS:$k,OVERFLOW_MARKER:Vk}});var yr=g((Hae,VO)=>{"use strict";var vO=M(),BO=dt(),HO={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},xO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qO={500:xO("There was an error processing your request."),400:"Invalid request"},Yk=qO[HO.INTERNAL_SERVER_ERROR],Kk={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.`},Wk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Qk={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"},zk={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 ${BO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${BO.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"},Jk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vO.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 ${vO.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"},GO={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"},jk={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."},Xk={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`},Zk={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"},eV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},tV={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`},FO={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.`},kO={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}`},rV={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."},sV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},nV={...GO,...Qk,...Kk,...jk,...Xk,...Zk,...eV,...tV,...Jk,...FO,...kO,...rV,...sV,...Wk};VO.exports={CHECK_LOGS_WRAPPER:xO,HDB_ERROR_MSGS:nV,DEFAULT_ERROR_MSGS:qO,DEFAULT_ERROR_RESP:Yk,HTTP_STATUS_CODES:HO,LMDB_ERRORS_ENUM:zk,AUTHENTICATION_ERROR_MSGS:GO,VALIDATION_ERROR_MSGS:FO,ITC_ERRORS:kO}});var se=g((qae,KO)=>{"use strict";var xo=yr(),iV=$(),oV=M(),jl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$O),this.statusCode=s||xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(xo.DEFAULT_ERROR_MSGS[s]?xo.DEFAULT_ERROR_MSGS[s]:xo.DEFAULT_ERROR_MSGS[xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&iV[n](i)}},Lh=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}},Mh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $O(e,t,r,s=oV.LOG_LEVELS.ERROR,n=null,i=!1){if(YO(e))return e;let o=new jl(e,t,r,s,n);return i&&delete o.stack,o}a($O,"handleHDBError");function YO(e){return e.__proto__.constructor.name===jl.name}a(YO,"isHDBError");KO.exports={isHDBError:YO,handleHDBError:$O,ClientError:Lh,ServerError:Mh,hdb_errors:xo}});var Je=g((Fae,ZO)=>{"use strict";var Ec=M(),aV=Q(),sr=ee(),hc=require("path"),cV=require("minimist"),WO=require("fs-extra"),QO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Jn,DATABASES_PARAM_CONFIG:lc,SYSTEM_SCHEMA_NAME:Xl}=Ec,_c,dc,fc;function zO(){if(_c!==void 0)return _c;if(sr.getHdbBasePath()!==void 0)return _c=sr.get(Jn.STORAGE_PATH)||hc.join(sr.getHdbBasePath(),Ec.DATABASES_DIR_NAME),_c}a(zO,"getBaseSchemaPath");function JO(){if(dc!==void 0)return dc;if(sr.getHdbBasePath()!==void 0)return dc=XO(Xl),dc}a(JO,"getSystemSchemaPath");function jO(){if(fc!==void 0)return fc;if(sr.getHdbBasePath()!==void 0)return fc=sr.get(Ec.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||hc.join(sr.getHdbBasePath(),Ec.TRANSACTIONS_DIR_NAME),fc}a(jO,"getTransactionAuditStoreBasePath");function uV(e,t){let r=sr.get(Jn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||hc.join(jO(),e.toString())}a(uV,"getTransactionAuditStorePath");function XO(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(Ec.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||hc.join(zO(),e)}a(XO,"getSchemaPath");function lV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,cV(process.argv));let s=r[Jn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!aV.isObject(s))throw o;i=s}for(let o of i){let c=o[Xl];if(!c)continue;let u=sr.get(Jn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[lc.PATH];if(_)return QO.set(u,[Xl,lc.TABLES,t,lc.PATH],_),sr.setProperty(Jn.DATABASES,u),_;let l=c?.[lc.PATH];if(l)return QO.set(u,[Xl,lc.PATH],l),sr.setProperty(Jn.DATABASES,u),l}}let n=r[Jn.STORAGE_PATH.toUpperCase()];if(n){if(!WO.pathExistsSync(n))throw new Error(n+" does not exist");let i=hc.join(n,e);return WO.mkdirsSync(i),sr.setProperty(Jn.STORAGE_PATH,n),i}return JO()}a(lV,"initSystemSchemaPaths");function _V(){_c=void 0,dc=void 0,fc=void 0}a(_V,"resetPaths");ZO.exports={getBaseSchemaPath:zO,getSystemSchemaPath:JO,getTransactionAuditStorePath:uV,getTransactionAuditStoreBasePath:jO,getSchemaPath:XO,initSystemSchemaPaths:lV,resetPaths:_V}});var wr=g((Yae,nb)=>{"use strict";var dV=yr().LMDB_ERRORS_ENUM,Vae=require("lmdb"),fV=dt(),$ae=require("buffer").Buffer,{OVERFLOW_MARKER:eb,MAX_SEARCH_KEY_LENGTH:Zl}=fV,tb=["number","string","symbol","boolean","bigint"];function EV(e){if(e=e?.primaryStore||e,!e)throw new Error(dV.ENV_REQUIRED)}a(EV,"validateEnv");function hV(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(hV,"stringifyData");function mV(e){return e instanceof Date?e.valueOf():e}a(mV,"convertKeyValueToWrite");function pV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(tb.includes(typeof e))return e.length>Zl?[e.slice(0,Zl)+eb]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(tb.includes(typeof i))i.length>Zl?r.push(i.slice(0,Zl)+eb):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(pV,"getIndexedValues");var e_=0,rb=0;function sb(){rb=Date.now()-performance.now()}a(sb,"adjustStartTime");sb();var SV=6e4;setInterval(sb,SV).unref();function TV(){let e=performance.now()+rb;return e>e_?(e_=e,e):(e_+=488e-6,e_)}a(TV,"getNextMonotonicTime");nb.exports={validateEnv:EV,stringifyData:hV,convertKeyValueToWrite:mV,getNextMonotonicTime:TV,getIndexedValues:pV}});var ib,As,Uh,mc=Re(()=>{ib=require("events"),As=class extends ib.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Uh;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)}},Uh=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 Pi={};Ye(Pi,{server:()=>tt});var ob,tt,nr=Re(()=>{ob=require("../index"),tt={};(0,ob._assignPackageExport)("server",tt)});var Bh={};Ye(Bh,{loadGQLSchema:()=>AV,start:()=>vh,startOnMainThread:()=>RV});function vh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let z of B.arguments)J[z.name.value]=z.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&J.push(z.value.value)}}R.type=T,T==="Query"&&(h=R)}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):gV.includes(S.type)||(0,ab.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}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,Ph.dirname)(s),S.tableClass):i.set((0,Ph.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass))}}var Ph,ab,gV,RV,AV,cb=Re(()=>{Ph=require("path");Ae();ab=x(Ke()),gV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vh,"start");RV=vh,AV=vh({ensureTable:ct}).handleFile});async function t_(e){return OV?(pc||(pc=bV(yV)),(await(await pc).import(e)).namespace):import(e)}async function bV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),pc=new Compartment({console,Math,Date,fetch:NV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,lb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Ir,databases:rt})}};let s=await(0,ub.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),pc}function NV(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 yV(){return{Resource:qt,tables:Ir}}var ub,lb,OV,pc,Hh=Re(()=>{Os();Ae();ub=require("fs/promises"),lb=require("path"),OV=!1;a(t_,"secureImport");a(bV,"getCompartment");a(NV,"secureOnlyFetch");a(yV,"getGlobalVars")});var qh={};Ye(qh,{handleFile:()=>wV});async function wV(e,t,r,s){let n=new Map,i=(0,_b.pathToFileURL)(r).toString(),o=await t_(i);u(o.default)&&s.set((0,xh.dirname)(t),o.default),c(o,(0,xh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var _b,xh,db=Re(()=>{_b=require("url");Hh();xh=require("path");a(wV,"handleFile")});var Fh={};Ye(Fh,{start:()=>IV});function IV({resources:e}){e.set("login",Gh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gh,fb=Re(()=>{Os();a(IV,"start");Gh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var gb={};Ye(gb,{parse:()=>Vh,streamAsJSON:()=>Sc,stringify:()=>vi});function Sc(e){return new kh({value:e})}function Eb(e){return console.error(e),JSON.stringify(e.toString())}function hb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function vi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Sb)return Tb(e);if(t.resolution)return t.resolution.then(()=>vi(e));throw t}}function Tb(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=Tb(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+vi(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Vh(e){return LV.test(e)?CV.parse(e):JSON.parse(e)}var mb,pb,CV,DV,Sb,kh,LV,$h=Re(()=>{mb=require("stream"),pb=x(require("json-bigint-fixes")),CV=(0,pb.default)({useNativeBigInt:!0}),DV=1e4,Sb={};BigInt.prototype.toJSON=function(){throw Sb};a(Sc,"streamAsJSON");kh=class extends mb.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),Eb)}catch(n){yield Eb(n)}else yield vi(t)}else yield vi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);hb(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 hb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(Eb,"handleError");a(hb,"when");a(vi,"stringify");a(Tb,"jsStringify");LV=/-?\d{16,}/;a(Vh,"parse")});var Ub=g((ace,Mb)=>{"use strict";var Yh=require("recursive-iterator"),MV=require("alasql"),Kh=require("clone"),Rb=Q(),{handleHDBError:Ab,hdb_errors:UV}=se(),{HDB_ERROR_MSGS:Ob,HTTP_STATUS_CODES:bb}=UV,{getDatabases:PV}=(Ae(),ne(Ge)),vV=["DISTINCT_ARRAY"],Nb=Symbol("validateTables"),Wh=Symbol("validateTable"),oce=Symbol("getAllColumns"),yb=Symbol("validateAllColumns"),r_=Symbol("findColumn"),wb=Symbol("validateOrderBy"),Tc=Symbol("validateSegment"),Qh=Symbol("validateColumn"),Ib=Symbol("setColumnsForTable"),Cb=Symbol("checkColumnsForAsterisk"),Db=Symbol("validateGroupBy"),Lb=Symbol("hasColumns"),zh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Nb](),this[Cb](),this[yb]()}[Nb](){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:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Wh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=PV();if(!r[t.databaseid])throw Ab(new Error,Ob.SCHEMA_NOT_FOUND(t.databaseid),bb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Ab(new Error,Ob.TABLE_NOT_FOUND(t.databaseid,t.tableid),bb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Kh(n);i.table=Kh(t),this.attributes.push(i)})}[r_](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:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Ib](r.tableid)}[Ib](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new MV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yb](){this[Tc](this.statement.columns,!1),this[Tc](this.statement.joins,!1),this[Tc](this.statement.where,!1),this[Db](this.statement.group,!1),this[Tc](this.statement.order,!0)}[Tc](t,r){if(!t)return;let s=new Yh(t),n=[];for(let{node:i,path:o}of s)!Rb.isEmpty(i)&&!Rb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wb](i):n.push(this[Qh](i)));return n}[Db](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&vV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Kh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[r_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[r_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[wb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Qh](t)}[Qh](t){let r=this[r_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Mb.exports=zh});var vb=g((uce,Pb)=>{"use strict";var Jh=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")}};Pb.exports=Jh});var Hb=g((_ce,Bb)=>{"use strict";var jh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Bb.exports=jh});var Fb={};Ye(Fb,{HAS_EXPIRATION:()=>nm,LAST_TIMESTAMP_PLACEHOLDER:()=>Ac,LOCAL_TIMESTAMP:()=>BV,METADATA:()=>gc,NO_TIMESTAMP:()=>Zh,PENDING_LOCAL_TIME:()=>im,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>sm,RecordEncoder:()=>rm,TIMESTAMP_ASSIGN_LAST:()=>xV,TIMESTAMP_ASSIGN_NEW:()=>qb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Gb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>em,getUpdateRecord:()=>om,handleLocalTimeForGets:()=>a_});function GV(){return Rc[0]=Rc[0]^64,HV.getFloat64(0)}function a_(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?.[gc];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?.[gc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[gc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Bi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Bi.length;u++){let _=Bi[u].deref();(!_||_.isDone||_.isCommitted)&&Bi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function om(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?qo=i?.localTime?em|Gb:Zh:qo=u?i?.localTime?em|16384:qb|16384:Zh,l>0&&(c|=nm),i_=c,tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:qo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Dt(R).previousLocalTime;return r.put(b,o_(o,t,s,L,T,d,n_),{ifVersion:p}),S}}r.put(Ac,o_(o,t,s,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var xb,Xh,s_,Ac,sm,BV,gc,Rc,HV,Zh,qb,xV,Gb,em,nm,im,qV,n_,qo,i_,tm,rm,Bi,Oc=Re(()=>{xb=require("msgpackr");Hi();Xh=x($()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),Ac=new Uint8Array([1,1,1,1,1,0,0,0]),sm=new Uint8Array([1,1,1,1,3,64,0,0]),BV=Symbol("local-timestamp"),gc=Symbol("metadata"),Rc=new Uint8Array(8),HV=new DataView(Rc.buffer,0,8),Zh=0,qb=0,xV=1,Gb=3,em=4,nm=16,im=1,qo=0,i_=-1,tm=0,rm=class extends xb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(qo||i_>=0){let i=0,o=qo;o&&(i+=8,qo=0);let c=i_,u=tm;c>=0&&(i+=2,i_=-1,u&&(i+=8,tm=0));let _=qV=r.call(this,s,n|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Rc,0,c),c+=8;else for(let d=0;d<8;d++)Rc[d]=t[c++];u=GV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[gc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(GV,"getTimestamp");a(a_,"handleLocalTimeForGets");Bi=[];setInterval(()=>{for(let e=0;e<Bi.length;e++){let t=Bi[e].deref();!t||t.isDone||t.isCommitted?Bi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Xh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Xh.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(om,"getUpdateRecord")});var c_=g((hce,kb)=>{"use strict";var cm=ee(),um=M(),{RecordEncoder:FV}=(Oc(),ne(Fb));cm.initSync();var kV=cm.get(um.CONFIG_PARAMS.STORAGE_COMPRESSION),VV=cm.get(um.CONFIG_PARAMS.STORAGE_CACHING)!==!1,$V=um.UPDATES_PROPERTY,am=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=kV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=VV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:FV},this.alwaysLazyProperty=s=>s===$V)}};kb.exports=am});var l_=g((pce,$b)=>{"use strict";var Go=ee(),bc=M();Go.initSync();var YV=Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Vb=Go.get(bc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),KV=Go.get(bc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),u_=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=YV,this.noFSAccess=!0,Vb!==void 0&&(this.overlappingSync=Vb),this.noReadAhead=KV}};$b.exports=u_;u_.MAX_DBS=1e4});var We=g((Tce,eN)=>{"use strict";var _m=require("lmdb"),bs=require("fs-extra"),Cr=require("path"),__=wr(),Wb=$(),ir=yr().LMDB_ERRORS_ENUM,d_=Hb(),dm=c_(),Qb=l_(),jn=dt(),Yb=M(),{table:WV,resetDatabases:QV}=(Ae(),ne(Ge)),Kb=ee(),Ns=jn.INTERNAL_DBIS_NAME,zb=jn.DBI_DEFINITION_NAME,zV="data.mdb",JV="lock.mdb",Nc=".mdb",jV="-lock",lm=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=rs(t,r),this.key_type=this.dbi[jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _m.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function f_(e,t){if(e===void 0)throw new Error(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(f_,"pathEnvNameValidation");async function fm(e,t,r=!0){try{await bs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):s}try{let s=Cr.join(e,t+Nc);return await bs.access(s,bs.constants.R_OK|bs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bs.access(Cr.join(e,t,zV),bs.constants.R_OK|bs.constants.F_OK),Cr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw s}}a(fm,"validateEnvironmentPath");function E_(e,t){if(__.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(E_,"validateEnvDBIName");async function XV(e,t,r=!1,s=!1){f_(e,t);let n=Cr.basename(e);t=t.toString();let i=Kb.get(Yb.CONFIG_PARAMS.DATABASES);i||Kb.setProperty(Yb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fm(e,t,s),Jb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Cr.join(e,t);await bs.mkdirp(s?c:e);let u=new Qb(s?c:c+Nc,!1),_=_m.open(u);_.dbis=Object.create(null);let l=new dm(!1);_.openDB(Ns,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Em(e,t,r);return _[jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(XV,"createEnvironment");async function ZV(e,t,r,s=!0){f_(e,t),t=t.toString();let n=Cr.join(e,t);return WV({table:t,database:Cr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ZV,"copyEnvironment");async function Jb(e,t,r=!1){f_(e,t),t=t.toString();let s=Em(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fm(e,t),i=Cr.join(e,t+Nc),o=n!=i,c=new Qb(n,o),u=_m.open(c);u.dbis=Object.create(null);let _=Xb(u);for(let l=0;l<_.length;l++)rs(u,_[l]);return u[jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Jb,"openEnvironment");async function e$(e,t,r=!1){f_(e,t),t=t.toString();let s=Cr.join(e,t+Nc),n=await fm(e,t);if(global.lmdb_map!==void 0){let i=Em(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await jb(o),delete global.lmdb_map[i]}}await bs.remove(n),await bs.remove(n===s?n+jV:Cr.join(Cr.dirname(n),JV))}a(e$,"deleteEnvironment");async function jb(e){__.validateEnv(e);let t=e[jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(jb,"closeEnvironment");function Em(e,t,r=!1){let n=`${Cr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Em,"getCachedEnvironmentName");function t$(e){__.validateEnv(e);let t=Object.create(null),r=rs(e,Ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ns)try{t[s]=Object.assign(new d_,n)}catch{Wb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(t$,"listDBIDefinitions");function Xb(e){__.validateEnv(e);let t=[],r=rs(e,Ns);for(let{key:s}of r.getRange({start:!1}))s!==Ns&&t.push(s);return t}a(Xb,"listDBIs");function r$(e,t){let s=rs(e,Ns).getEntry(t),n=new d_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Wb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(r$,"getDBIDefinition");function Zb(e,t,r,s=!r){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rs(e,t)}catch(n){if(n.message===ir.DBI_DOES_NOT_EXIST){let i=new dm(r,s===!0),o=e.openDB(t,i),c=new d_(r===!0,s);return o[zb]=c,rs(e,Ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Zb,"createDBI");function rs(e,t){if(E_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ns?r=r$(e,t):r=new d_,r===void 0)throw new Error(ir.DBI_DOES_NOT_EXIST);let s;try{let n=new dm(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ir.DBI_DOES_NOT_EXIST):n}return s[zb]=r,e.dbis[t]=s,s}a(rs,"openDBI");function s$(e,t){E_(e,t),t=t.toString();let r=rs(e,t),s=r.getStats();return r[jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(s$,"statDBI");async function n$(e,t){try{let r=Cr.join(e,t+Nc);return(await bs.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(n$,"environmentDataSize");function i$(e,t){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);rs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rs(e,Ns).removeSync(t)}a(i$,"dropDBI");function o$(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{rs(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)Zb(e,i,i!==t,i===t),s=!0;else throw o}}s&&QV()}a(o$,"initializeDBIs");eN.exports={openDBI:rs,openEnvironment:Jb,createEnvironment:XV,listDBIs:Xb,listDBIDefinitions:t$,createDBI:Zb,dropDBI:i$,statDBI:s$,deleteEnvironment:e$,initializeDBIs:o$,TransactionCursor:lm,environmentDataSize:n$,copyEnvironment:ZV,closeEnvironment:jb}});var rN=g((Rce,tN)=>{"use strict";var hm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};tN.exports=hm});var nN=g((Oce,sN)=>{"use strict";var mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};sN.exports=mm});var oN=g((Nce,iN)=>{"use strict";var pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};iN.exports=pm});var Fo=g((Dce,uN)=>{"use strict";var a$=We(),c$=rN(),u$=nN(),l$=oN(),Ks=wr(),yc=yr().LMDB_ERRORS_ENUM,_$=dt(),pn=M(),d$=Q(),f$=require("uuid"),wce=require("lmdb"),{handleHDBError:E$,hdb_errors:h$}=se(),{OVERFLOW_MARKER:Ice,MAX_SEARCH_KEY_LENGTH:Cce}=_$,aN=ee();aN.initSync();var h_=aN.get(pn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sm=pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,xi=pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new c$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];cN(_,!0,n);let l=p$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return gm(o,c,s,i,n)}a(m$,"insertRecords");function p$(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][pn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){h_&&_.prefetch(u.map(l=>({key:l,value:n})),m_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}h_&&e.dbis[t].prefetch([n],m_),e.dbis[t].put(n,s,s[xi])})}a(p$,"insertRecord");function S$(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(S$,"removeSkippedRecords");function cN(e,t,r){let s=r>0;(s||!Number.isInteger(e[xi]))&&(e[xi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sm]))&&(e[Sm]=r||Ks.getNextMonotonicTime()):delete e[Sm]}a(cN,"setTimestamps");function Tm(e,t,r){r.indexOf(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),a$.initializeDBIs(e,t,r)}a(Tm,"initializeTransaction");async function T$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new u$,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Rm(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return gm(c,u,s,i,n,o)}a(T$,"updateRecords");async function g$(e,t,r,s,n=Ks.getNextMonotonicTime()){try{Am(e,t,r,s)}catch(u){throw E$(u,u.message,h$.HTTP_STATUS_CODES.BAD_REQUEST)}Tm(e,t,r);let i=new l$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;d$.isEmpty(_[t])?(l=f$.v4(),_[t]=l):l=_[t];let d=Rm(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return gm(o,c,s,i,n)}a(g$,"upsertRecords");async function gm(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),S$(r,i),s}a(gm,"finalizeWrite");function Rm(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(cN(r,!l,o),Number.isInteger(r[xi])&&_[xi]>r[xi])return!1;l&&n.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 R=p([[_]]);Array.isArray(R)&&(p=R[0][pn.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Ks.getIndexedValues(T);if(b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],s)}if(b=Ks.getIndexedValues(p),b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],s)}}let E=Object.assign({},_,r);c.put(s,E,E[xi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Rm(e,t,r,s,n,i,o))}a(Rm,"updateUpsertRecord");function R$(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(yc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yc.WRITE_ATTRIBUTES_REQUIRED):new Error(yc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(R$,"validateBasic");function Am(e,t,r,s){if(R$(e,t,r),!Array.isArray(s))throw s===void 0?new Error(yc.RECORDS_REQUIRED):new Error(yc.RECORDS_MUST_BE_ARRAY)}a(Am,"validateWrite");function m_(){}a(m_,"noop");uN.exports={insertRecords:m$,updateRecords:T$,upsertRecords:g$}});var qi=g((Mce,A$)=>{A$.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"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Qs=g((Uce,dN)=>{"use strict";var _N=Q(),lN=M(),ko=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Xn={schema_format:{pattern:ko,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},O$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number(),Ws.array()).required(),b$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()),N$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()).required();function y$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:ko.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(y$,"checkValidTable");function w$(e,t){return _N.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(w$,"validateSchemaExists");function I$(e,t){let r=t.state.ancestors[0].schema;return _N.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(I$,"validateTableExists");function C$(e,t){return e.toLowerCase()===lN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${lN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(C$,"validateSchemaName");dN.exports={common_validators:Xn,schema_regex:ko,hdb_schema_table:O$,validateSchemaExists:w$,validateTableExists:I$,validateSchemaName:C$,checkValidTable:y$,hdb_database:b$,hdb_table:N$}});var je=g((vce,fN)=>{"use strict";var or=require("validate.js");or.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||or.validators.type.checks[t](e)?null:` must be a '${t}' value`};or.validators.type.checks={Object:function(e){return or.isObject(e)&&!or.isArray(e)},Array:or.isArray,Integer:or.isInteger,Number:or.isNumber,String:or.isString,Date:or.isDate,Boolean:function(e){return typeof e=="boolean"}};or.validators.hasValidFileExt=function(e,t){return or.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};fN.exports={validateObject:D$,validateObjectAsync:L$,validateBySchema:M$};function D$(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=or(e,t,{format:"flat"});return r?new Error(r):null}a(D$,"validateObject");async function L$(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await or.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(L$,"validateObjectAsync");function M$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(M$,"validateBySchema")});var p_=g((Hce,EN)=>{var{common_validators:zs}=Qs(),Ic=je(),wc="is required",ft={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function Cc(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(Cc,"makeAttributesStrings");function U$(e){return e=Cc(e),ft.table.presence=!1,ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(U$,"schema_object");function P$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(P$,"table_object");function v$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,Ic.validateObject(e,ft)}a(v$,"create_table_object");function B$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence={message:wc},ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(B$,"attribute_object");function H$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(H$,"describe_table");function x$(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(x$,"validateTableResidence");EN.exports={schema_object:U$,create_table_object:v$,table_object:P$,attribute_object:B$,describe_table:H$,validateTableResidence:x$}});var mN=g((qce,hN)=>{"use strict";var q$=require("uuid"),Om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||q$.v4(),this.schema_table=`${this.schema}.${this.table}`}};hN.exports=Om});var S_=g((Fce,pN)=>{"use strict";var G$=mN(),bm=class extends G${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};pN.exports=bm});var TN=g((Vce,SN)=>{"use strict";SN.exports=k$;var F$="inserted";function k$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===F$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(k$,"returnObject")});var T_=g((Yce,bN)=>{"use strict";var V$=M(),Nm=We(),$$=Fo(),{getSystemSchemaPath:Y$,getSchemaPath:K$}=Je(),W$=qi(),Q$=p_(),z$=S_(),J$=TN(),{handleHDBError:gN,hdb_errors:AN}=se(),RN=Q(),{HTTP_STATUS_CODES:j$}=AN,ym=W$.hdb_attribute,ON=[];for(let e=0;e<ym.attributes.length;e++)ON.push(ym.attributes[e].attribute);var X$="inserted";bN.exports=Z$;async function Z$(e){let t=Q$.attribute_object(e);if(t)throw gN(new Error,t.message,AN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&RN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw gN(new Error,r,j$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=RN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new z$(e.schema,e.table,e.attribute,e.id);try{let i=await Nm.openEnvironment(K$(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}`);Nm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nm.openEnvironment(Y$(),V$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await $$.insertRecords(o,ym.hash_attribute,ON,[n]);return J$(X$,c,{records:[n]},u)}catch(i){throw i}}a(Z$,"lmdbCreateAttribute")});var Im=g((Wce,yN)=>{var{hdb_table:e1,hdb_database:NN}=Qs(),t1=je(),wm=require("joi"),r1={undefined:"undefined",null:"null"},s1=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||r1[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),n1=wm.object({database:NN,schema:NN,table:e1,records:wm.array().items(wm.object().custom(s1)).required()});yN.exports=function(e){return t1.validateBySchema(e,n1)}});var Dc=g((Jce,IN)=>{"use strict";var Sn=Q(),wN=$(),zce=Im(),{getDatabases:i1}=(Ae(),ne(Ge)),{ClientError:Gi}=se();IN.exports=o1;function o1(e){if(Sn.isEmpty(e))throw new Gi("invalid update parameters defined.");if(Sn.isEmptyOrZeroLength(e.schema))throw new Gi("invalid schema specified.");if(Sn.isEmptyOrZeroLength(e.table))throw new Gi("invalid table specified.");if(!Array.isArray(e.records))throw new Gi("records must be an array");let t=i1()[e.schema]?.[e.table];if(Sn.isEmpty(t))throw new Gi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Sn.isEmptyOrZeroLength(o[r]))throw wN.error("a valid hash attribute must be provided with update record:",o),new Gi("a valid hash attribute must be provided with update record, check log for more info");if(!Sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw wN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Gi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Sn.isEmpty(o[r])&&o[r]!==""&&s.has(Sn.autoCast(o[r]))&&(o.skip=!0),s.add(Sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(o1,"insertUpdateValidate")});var Lc=g((Xce,CN)=>{"use strict";var a1=M().OPERATIONS_ENUM,Cm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=a1.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};CN.exports=Cm});var Mc=g((tue,LN)=>{"use strict";var eue=Lc(),g_=M(),Dm=Q(),DN=$(),c1=require("uuid"),{handleHDBError:R_,hdb_errors:u1}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=u1;LN.exports=l1;function l1(e,t,r){for(let n=0;n<t.length;n++)_1(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];d1(i,r,e.operation)}}a(l1,"processRows");function _1(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Dm.isEmptyOrZeroLength(e)||Dm.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(_1,"validateAttribute");function d1(e,t,r){if(!e.hasOwnProperty(t)||Dm.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=c1.v4();return}throw DN.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw DN.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(d1,"validateHash")});var UN=g((sue,MN)=>{"use strict";var Lm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};MN.exports=Lm});var BN=g((iue,vN)=>{"use strict";var Mm=We(),f1=$(),PN=yr().LMDB_ERRORS_ENUM;vN.exports=E1;async function E1(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!==PN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mm.closeEnvironment(global.lmdb_map[s]),await Mm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==PN.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){f1.error(t)}}a(E1,"cleanLMDBMap")});var Tn=g((aue,GN)=>{"use strict";var Uc=require("crypto"),h1=ee(),{CONFIG_PARAMS:m1}=M(),xN="aes-256-cbc",p1=32,S1=16,Um=64,qN=32,T1=Um+qN,HN=new Map;GN.exports={encrypt:g1,decrypt:R1,createNatsTableStreamName:A1};function g1(e){let t=Uc.randomBytes(p1),r=Uc.randomBytes(S1),s=Uc.createCipheriv(xN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(g1,"encrypt");function R1(e){let t=e.substr(0,Um),r=e.substr(Um,qN),s=e.substr(T1,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(xN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R1,"decrypt");function A1(e,t){let r=h1.get(m1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=HN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),HN.set(r,s)),s}a(A1,"createNatsTableStreamName")});var Zn=g((lue,kN)=>{"use strict";var uue=Dr(),b_=$(),FN=p_(),O1=Tn(),N_=Q(),{handleHDBError:y_,hdb_errors:b1}=se(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Pm}=b1,N1=ee();N1.initSync();var{getDatabases:vm}=(Ae(),ne(Ge));kN.exports={describeAll:y1,describeTable:I_,describeSchema:w1};async function y1(e){try{let t=N_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await I_({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 I_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){b_.error(E)}}let _={};for(let l in c)t||s?(_[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||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return b_.error("Got an error in describeAll"),b_.error(t),y_(new Error,w_.DESCRIBE_ALL_ERR)}}a(y1,"describeAll");async function I_(e,t){N_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=FN.describe_table(e);if(i)throw i;let c=vm()[r];if(!c)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let u=c[s];if(!u)throw y_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Pm.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(n){let f={};n.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=O1.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){b_.warn(`unable to stat table dbi due to ${f}`)}return d}a(I_,"descTable");async function w1(e){N_.transformReq(e);let t=FN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=vm()[s];if(!i)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await I_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(w1,"describeSchema")});var gn=g((Eue,WN)=>{var I1=qi(),{callbackify:$N,promisify:C1}=require("util"),{getDatabases:YN}=(Ae(),ne(Ge));WN.exports={setSchemaDataToGlobal:VN,getTableSchema:D1,getSystemSchema:L1,setSchemaDataToGlobalAsync:C1(VN)};var KN=Zn(),due=$N(KN.describeAll),fue=$N(KN.describeTable);function VN(e){global.hdb_schema=YN(),e&&e()}a(VN,"setSchemaDataToGlobal");function D1(e,t,r){let s=YN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(D1,"getTableSchema");function L1(){return I1}a(L1,"getSystemSchema")});var Lr=g((mue,jN)=>{"use strict";var D_=Im(),Gt=Q(),M1=require("util"),L_=ys(),U1=gn(),QN=$(),{handleHDBError:Fi,hdb_errors:P1}=se(),{HTTP_STATUS_CODES:ki}=P1,v1=M1.promisify(U1.getTableSchema),B1="updated",zN="inserted",JN="upserted";jN.exports={insert:x1,update:q1,upsert:G1,validation:H1,flush:F1};async function H1(e){if(Gt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Gt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Gt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await v1(e.schema,e.table),r=D_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Gt.isEmptyOrZeroLength(c[s]))throw QN.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(!Gt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw QN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Gt.isEmpty(c[s])&&c[s]!==""&&n.has(Gt.autoCast(c[s]))&&(c.skip=!0),n.add(Gt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(H1,"validation");async function x1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await L_.createRecords(e);return C_(zN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(x1,"insertData");async function q1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await L_.updateRecords(e);return Gt.isEmpty(s.existing_rows)?C_(B1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):C_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(q1,"updateData");async function G1(e){if(e.operation!=="upsert")throw Fi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await L_.upsertRecords(e);return C_(JN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(G1,"upsertData");function C_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===zN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===JN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(C_,"returnObject");function F1(e){return Gt.transformReq(e),L_.flush(e.schema,e.table)}a(F1,"flush")});var Hm=g((Sue,ey)=>{var k1=je(),Bm=require("joi"),{hdb_table:V1,hdb_database:XN}=Qs(),ZN={schema:XN,database:XN,table:V1},$1={date:Bm.date().iso().required()},Y1={timestamp:Bm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ey.exports=function(e,t){let r=t==="timestamp"?{...ZN,...Y1}:{...ZN,...$1},s=Bm.object(r);return k1.validateBySchema(e,s)}});var sy=g((Tue,ry)=>{var K1=je(),xm=require("joi"),{hdb_table:W1,hdb_database:ty}=Qs(),Q1=xm.object({schema:ty,database:ty,table:W1,hash_values:xm.array().required(),ids:xm.array()});ry.exports=function(e){return K1.validateBySchema(e,Q1)}});var iy=g((gue,ny)=>{"use strict";var qm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Gm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Fm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};ny.exports={InsertObject:qm,NoSQLSeachObject:Gm,DeleteResponseObject:Fm}});var ri=g((Aue,ly)=>{"use strict";var ay=Hm(),z1=sy(),Vi=Q(),oy=require("moment"),cy=$(),{promisify:J1,callbackify:j1}=require("util"),$i=M(),X1=gn(),km=J1(X1.getTableSchema),Vm=ys(),{DeleteResponseObject:Z1}=iy(),{handleHDBError:ei,hdb_errors:eY}=se(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:ti}=eY,tY="records successfully deleted",rY=j1(uy);ly.exports={delete:rY,deleteRecord:uy,deleteFilesBefore:sY,deleteAuditLogsBefore:nY};async function sY(e){let t=ay(e,"date");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!oy(e.date,oy.ISO_8601).isValid())throw ei(new Error,M_.INVALID_DATE,ti.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let s=Vi.checkSchemaTableExist(e.schema,e.table);if(s)throw ei(new Error,s,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,s,!0);let n=await Vm.deleteRecordsBefore(e);if(await km(e.schema,e.table),cy.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(sY,"deleteFilesBefore");async function nY(e){let t=ay(e,"timestamp");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw ei(new Error,M_.INVALID_VALUE("Timestamp"),ti.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let s=await Vm.deleteAuditLogsBefore(e);return await km(e.schema,e.table),cy.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(nY,"deleteAuditLogsBefore");async function uy(e){e.ids&&(e.hash_values=e.ids);let t=z1(e);if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await km(e.schema,e.table);let s=await Vm.deleteRecords(e);return Vi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${tY}`),s}catch(s){if(s.message===$i.SEARCH_NOT_FOUND_MESSAGE){let n=new Z1;return n.message=$i.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(uy,"deleteRecord")});var U_=g((bue,fy)=>{var iY=require("crypto"),_y=9;function oY(e){let t=cY(_y),r=dy(e+t);return t+r}a(oY,"createHash");function aY(e,t){let r=e?.substr(0,_y),s=r+dy(t+r);return e===s}a(aY,"validateHash");function cY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(cY,"generateSalt");function dy(e){return iY.createHash("md5").update(e).digest("hex")}a(dy,"md5");fy.exports={hash:oY,validate:aY}});var hy=g((yue,Ey)=>{var $m=je(),Kt={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 uY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,$m.validateObject(e,Kt)}a(uY,"addUserValidation");function lY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(lY,"alterUserValidation");function _Y(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(_Y,"dropUserValidation");Ey.exports={addUserValidation:uY,alterUserValidation:lY,dropUserValidation:_Y}});var Fe=g((Cue,py)=>{"use strict";var{platform:Iue}=require("os"),dY="nats-server.zip",Ym="nats-server",fY=process.platform==="win32"?`${Ym}.exe`:Ym,EY=/^[^\s.,*>]+$/,my="__request__",hY=a(e=>`${e}.${my}`,"REQUEST_SUBJECT"),mY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},pY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},SY={HUB:"hub.pid",LEAF:"leaf.pid"},TY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gY={SUCCESS:"success",ERROR:"error"},RY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},AY={TXN:"txn",MSGID:"msgid"},Vo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},OY={[Vo.ERR]:1,[Vo.WRN]:2,[Vo.INF]:3,[Vo.DBG]:4,[Vo.TRC]:5},bY={debug:"-D",trace:"-DVV"};py.exports={NATS_SERVER_ZIP:dY,NATS_SERVER_NAME:Ym,NATS_BINARY_NAME:fY,PID_FILES:SY,NATS_CONFIG_FILES:pY,SERVER_SUFFIX:TY,NATS_TERM_CONSTRAINTS_RX:EY,REQUEST_SUFFIX:my,UPDATE_REMOTE_RESPONSE_STATUSES:gY,CLUSTER_STATUS_STATUSES:RY,REQUEST_SUBJECT:hY,SUBJECT_PREFIXES:AY,MSG_HEADERS:mY,LOG_LEVELS:Vo,LOG_LEVEL_FLAGS:bY,LOG_LEVEL_HIERARCHY:OY}});var Ty=g((Lue,Sy)=>{"use strict";var NY={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
|
-
`)},X1="certificate.pem",j1="privateKey.pem",Z1="ca.pem";WN.exports={CERTIFICATE_VALUES:J1,CERTIFICATE_PEM_NAME:X1,PRIVATEKEY_PEM_NAME:j1,CA_PEM_NAME:Z1}});var Pm=T((eue,ZN)=>{"use strict";var jN=require("fs-extra"),ce=require("joi"),eY=require("os"),{boolean:Be,string:ts,number:vt,array:Mm}=ce.types(),{totalmem:zN}=require("os"),ki=require("path"),tY=G(),I_=z(),Zce=QN(),JN=D(),rY=Je(),XN="log",sY="components",nY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",iY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",oY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",aY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",cY="rootPath config parameter is undefined",uY="clustering.enabled config parameter is undefined",Vi=vt.min(0).required(),w_=Mm.items({host:ts.required(),port:Vi}).empty(null),Qs;ZN.exports={configValidator:lY,routesValidator:mY,route_constraints:w_};function lY(e){if(Qs=e.rootPath,I_.isEmpty(Qs))throw cY;let t=Be.required(),r=vt.min(0).max(1e3).empty(null).default(hY),s=ts.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Mc),n=ts.optional().empty(null),i=ts.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(Mc),c=ce.custom(dY).empty(null).default(Mc),u=e.clustering?.enabled;if(I_.isEmpty(u))throw uY;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:Vi,routes:w_}).required()}).required(),leafNodes:ce.object({network:ce.object({port:Vi}).required()}).required(),network:ce.object({port:Vi}).required()}).required(),leafServer:ce.object({network:ce.object({port:Vi,routes:w_}).required(),streams:ce.object({maxAge:vt.min(120).allow(null).optional(),maxBytes:vt.min(1).allow(null).optional(),maxMsgs:vt.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:n,certificateAuthority:n,privateKey:n,insecure:Be.required(),verify:Be.optional()}),user:ts.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Be,cacheTTL:vt.required(),enableSessions:Be}),analytics:ce.object({aggregatePeriod:vt}),componentsRoot:s.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:ts.custom(EY).optional().empty(null),maxSize:ts.custom(fY).optional().empty(null),path:ts.optional().empty(null).default(Mc)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:Mm.optional(),headersTimeout:vt.min(1).optional(),keepAliveTimeout:vt.min(1).optional(),port:vt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(Mc),securePort:vt.optional().empty(null),timeout:vt.min(1).optional()}).optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ts.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:Vi,securePort:Vi,mtls:ce.alternatives([Be.optional(),ce.object({user:ts.optional(),certificateAuthority:n})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:vt.optional(),cors:Be.optional(),corsAccessList:Mm.optional(),headersTimeout:vt.min(1).optional(),port:vt.min(0).optional().empty(null),securePort:vt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:vt.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:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ts.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(lY,"configValidator");function _Y(e){return jN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(_Y,"doesPathExist");function dY(e,t){ce.assert(e,ts.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=_Y(e);if(r)return t.message(r)}a(dY,"validatePath");function fY(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(oY):e}a(fY,"validateRotationMaxSize");function EY(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(iY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(aY):e}a(EY,"validateRotationInterval");function hY(e,t){let r=t.state.path.join("."),s=eY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zN();return i=Math.round(Math.min(i,zN())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),tY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(hY,"setDefaultThreads");function Mc(e,t){let r=t.state.path.join(".");if(!I_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(I_.isEmpty(Qs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ki.join(Qs,sY);case"logging.root":return ki.join(Qs,XN);case"clustering.leafServer.streams.path":return ki.join(Qs,"clustering","leaf");case"storage.path":let s=ki.join(Qs,JN.LEGACY_DATABASES_DIR_NAME);return jN.existsSync(s)?s:ki.join(Qs,JN.DATABASES_DIR_NAME);case"logging.rotation.path":return ki.join(Qs,XN);case"operationsApi.network.domainSocket":return r==null?null:ki.join(Qs,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Mc,"setDefaultRoot");function mY(e){let t=ce.object({routes:w_});return rY.validateBySchema({routes:e},t)}a(mY,"routesValidator")});var Pr=T((sue,cy)=>{"use strict";var Mr=D(),Bt=z(),yt=G(),{configValidator:pY,routesValidator:ey}=Pm(),or=require("fs-extra"),SY=require("yaml"),Cs=require("path"),TY=require("is-number"),ry=require("properties-reader"),gY=require("lodash"),{handleHDBError:RY}=Z(),{HTTP_STATUS_CODES:AY,HDB_ERROR_MSGS:C_}=Ir(),rue=require("minimist"),{server:OY}=(sr(),ee(Li)),{DATABASES_PARAM_CONFIG:Pc,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:Ds}=Mr,bY="Unable to get config value because config is uninitialized",NY="Config successfully initialized",yY="Error backing up config file",IY="Empty parameter sent to getConfigValue",sy=Cs.join(Mr.PACKAGE_ROOT,"config","yaml",Mr.HDB_DEFAULT_CONFIG_FILE),wY="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ty={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"},D_,It,L_;cy.exports={createConfigFile:CY,getDefaultConfig:DY,getConfigValue:iy,initConfig:Bm,flattenConfig:Vo,updateConfigValue:oy,updateConfigObject:UY,getConfiguration:vY,setConfiguration:BY,readConfigFile:xm,getClusteringRoutes:HY,initOldConfig:ay,getConfigFromFile:xY,getConfigFilePath:$i,addConfig:qY,deleteConfigFromFile:FY,getConfigObj:GY};function CY(e){let t=ri(sy);D_=Vo(t.toJSON());let r;for(let o in e){let c=Ds[o.toLowerCase()];if(c===Ur.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=vm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){yt.error(l)}}}r&&ny(t,r),Hm(t);let s=t.toJSON();It=Vo(s);let n=t.getIn(["rootPath"]),i=Cs.join(n,Mr.HDB_CONFIG_FILE);or.createFileSync(i),or.writeFileSync(i,String(t)),yt.trace(`Config file written to ${i}`)}a(CY,"createConfigFile");function ny(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Bt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Pc.TABLES))for(let i in s[n][Pc.TABLES])for(let o in s[n][Pc.TABLES][i]){let c=s[n][Pc.TABLES][i][o],u=[Ur.DATABASES,n,Pc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Ur.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){yt.error("Error parsing schemas CLI/env config arguments",s)}}a(ny,"setSchemasConfig");function DY(e){if(D_===void 0){let r=ri(sy);D_=Vo(r.toJSON())}let t=Ds[e.toLowerCase()];if(t!==void 0)return D_[t.toLowerCase()]}a(DY,"getDefaultConfig");function iy(e){if(e==null){yt.error(IY);return}if(It===void 0){yt.trace(bY);return}let t=Ds[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(iy,"getConfigValue");function $i(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Cs.join(t,Mr.HDB_CONFIG_FILE):ry(e).get(Mr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a($i,"getConfigFilePath");function Bm(e=!1){if(It===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{or.accessSync(t,or.constants.F_OK|or.constants.R_OK)}catch(i){throw yt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=$i(t),s;if(r.includes("config/settings.js"))try{ay(r);return}catch(i){if(i.code!==Mr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ri(r)}catch(i){if(i.code===Mr.NODE_ERROR_CODES.ENOENT){yt.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 yt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}LY(s,r),Hm(s);let n=s.toJSON();if(OY.config=n,It=Vo(n),It.logging_rotation_rotate)for(let i in ty)It[i]&&yt.error(`Config ${ty[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);yt.trace(NY)}}a(Bm,"initConfig");function LY(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Cs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Cs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Cs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(yt.trace("Updating config file with missing config params"),or.writeFileSync(t,String(e)))}a(LY,"checkForUpdatedConfig");function Hm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=pY(t);if(r.error)throw C_.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(Hm,"validateConfig");function UY(e,t){It===void 0&&(It={});let r=Ds[e.toLowerCase()];if(r===void 0){yt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(UY,"updateConfigObject");function oy(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&Bm();let o=iy(Ds.hdb_root),c=Cs.join(o,Mr.HDB_CONFIG_FILE),u=ri(c),_;if(r===void 0&&e.toLowerCase()===Ur.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Ds[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=vm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Ds[f.toLowerCase()];if(E===Ur.HTTP_SECUREPORT&&r[f]===It[Ur.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ur.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===It[Ur.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ur.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Mr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=vm(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(R){yt.error(R)}}}_&&ny(u,_),Hm(u);let l=u.getIn(["rootPath"]),d=Cs.join(l,Mr.HDB_CONFIG_FILE);s===!0&&MY(c,l),or.writeFileSync(d,String(u)),n&&(It=Vo(u.toJSON())),yt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oy,"updateConfigValue");function MY(e,t){try{let r=Cs.join(t,"backup",`${Mr.HDB_CONFIG_FILE}.bak`);or.copySync(e,r),yt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){yt.error(yY),yt.error(r)}}a(MY,"backupConfigFile");var PY=["databases"];function Vo(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)),L_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!PY.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Ur[u.toUpperCase()]&&Ds[u]&&(n[Ds[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Vo,"flattenConfig");function vm(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(TY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(vm,"castConfigValue");function vY(){let e=Bt.getPropsFilePath(),t=$i(e);return ri(t).toJSON()}a(vY,"getConfiguration");async function BY(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oy(void 0,void 0,n,!0),wY}catch(i){throw typeof i=="string"||i instanceof String?RY(i,i,AY.BAD_REQUEST,void 0,void 0,!0):i}}a(BY,"setConfiguration");function xm(){let e=Bt.getPropsFilePath();try{or.accessSync(e,or.constants.F_OK|or.constants.R_OK)}catch(s){if(!Bt.noBootFile())throw yt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=$i(e);return ri(t).toJSON()}a(xm,"readConfigFile");function ri(e){return SY.parseDocument(or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ri,"parseYamlDoc");function HY(){let e=xm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=ey(t);if(r)throw C_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Bt.isEmptyOrZeroLength(s)?[]:s;let n=ey(s);if(n)throw C_.CONFIG_VALIDATION(n.message);if(!Bt.isEmptyOrZeroLength(s)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw C_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(HY,"getClusteringRoutes");function ay(e){let t=ry(e);It={};for(let r in Ds){let s=t.get(r.toUpperCase());if(Bt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ds[r].toLowerCase();n===Ur.LOGGING_ROOT?It[n]=Cs.dirname(s):It[n]=s}return It}a(ay,"initOldConfig");function xY(e){let t=xm();return gY.get(t,e.replaceAll("_","."))}a(xY,"getConfigFromFile");async function qY(e,t){let r=ri($i());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await or.writeFile($i(),String(r))}a(qY,"addConfig");function FY(e){let t=$i(Bt.getPropsFilePath()),r=ri(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Cs.join(s,Mr.HDB_CONFIG_FILE);or.writeFileSync(n,String(r))}a(FY,"deleteConfigFromFile");function GY(){return L_||(Bm(),L_)}a(GY,"getConfigObj")});var ly=T((iue,uy)=>{"use strict";var U_=D(),M_=class{static{a(this,"BaseLicense")}constructor(t=0,r=U_.RAM_ALLOCATION_ENUM.DEFAULT,s=U_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},qm=class extends M_{static{a(this,"ExtendedLicense")}constructor(t=0,r=U_.RAM_ALLOCATION_ENUM.DEFAULT,s=U_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};uy.exports={BaseLicense:M_,ExtendedLicense:qm}});var Yi=T((aue,my)=>{"use strict";var Yo=require("fs-extra"),dy=y_(),fy=require("crypto"),kY=require("moment"),VY=require("uuid").v4,zt=G(),Gm=require("path"),$Y=z(),si=D(),{totalmem:_y}=require("os"),YY=ly().ExtendedLicense,$o="invalid license key format",KY="061183",WY="mofi25",QY="aes-256-cbc",zY=16,JY=32,Ey=j();Ey.initSync();var Fm;my.exports={validateLicense:hy,generateFingerPrint:jY,licenseSearch:$m,getLicense:tK,checkMemoryLimit:rK};function km(){return Gm.join(Ey.getHdbBasePath(),si.LICENSE_KEY_DIR_NAME,si.LICENSE_FILE_NAME)}a(km,"getLicenseDirPath");function XY(){let e=km();return Gm.join(e,si.LICENSE_FILE_NAME)}a(XY,"getLicenseFilePath");function Vm(){let e=km();return Gm.join(e,si.REG_KEY_FILE_NAME)}a(Vm,"getFingerPrintFilePath");async function jY(){let e=Vm();try{return await Yo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await ZY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(jY,"generateFingerPrint");async function ZY(){let e=VY(),t=dy.hash(e),r=Vm();try{await Yo.mkdirp(km()),await Yo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(s),new Error("There was an error generating the fingerprint")}return t}a(ZY,"writeFingerprint");function hy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:si.RAM_ALLOCATION_ENUM.DEFAULT,version:si.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let s=Vm(),n=!1;try{n=Yo.statSync(s)}catch(i){zt.error(i)}if(n){let i;try{i=Yo.readFileSync(s,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(WY),c=o[1];c=Buffer.concat([Buffer.from(c)],zY);let u=Buffer.concat([Buffer.from(i)],JY),_=fy.createDecipheriv(QY,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=eK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error($o),zt.error($o),new Error($o)}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($o),zt.error($o),new Error($o)}else r.exp_date=l;r.exp_date<kY().valueOf()&&(r.valid_date=!1),dy.validate(o[1],`${KY}${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(hy,"validateLicense");function eK(e,t){try{let r=fy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{zt.warn("Check old license failed")}}a(eK,"checkOldLicense");function $m(){let e=new YY,t=[];try{t=Yo.readFileSync(XY(),"utf-8").split(si.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 s=t[r];try{if($Y.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=hy(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){zt.error("There was an error parsing the license string."),zt.error(n),e.ram_allocation=si.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Fm=e,e}a($m,"licenseSearch");async function tK(){return Fm||await $m(),Fm}a(tK,"getLicense");function rK(){let e=$m().ram_allocation,t=process.constrainedMemory?.()||_y();if(t=Math.round(Math.min(t,_y())/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(rK,"checkMemoryLimit")});var rs=T((due,Uy)=>{"use strict";var gy="username is required",Ry="nothing to update, must supply active, role or password to update",Ay="password cannot be an empty string",Oy="If role is specified, it cannot be empty.",by="active must be true or false";Uy.exports={addUser:_K,alterUser:dK,dropUser:EK,getSuperUser:SK,userInfo:hK,listUsers:v_,listUsersExternal:mK,setUsersToGlobal:Wo,findAndValidateUser:Dy,getClusterUser:TK,USERNAME_REQUIRED:gy,ALTERUSER_NOTHING_TO_UPDATE:Ry,EMPTY_PASSWORD:Ay,EMPTY_ROLE:Oy,ACTIVE_BOOLEAN:by};var Ny=Lr(),sK=ti(),Wm=y_(),yy=$N(),Iy=es(),Qm=An(),vr=z(),wy=require("validate.js"),Te=G(),{promisify:nK}=require("util"),zm=gn(),py=D(),Sy=qe(),iK=Pr(),uue=j(),lue=Yi(),oK=Bi(),{table:_ue}=(ge(),ee(xe)),{handleHDBError:zs,hdb_errors:aK}=Z(),{HTTP_STATUS_CODES:Js,AUTHENTICATION_ERROR_MSGS:Ym,HDB_ERROR_MSGS:Ko}=aK,{UserEventMsg:Jm}=Ls(),Km=require("lodash"),{server:Xm}=(sr(),ee(Li)),cK=G();Xm.getUser=(e,t)=>Dy(e,t,t!=null);var Cy={username:!0,active:!0,role:!0,password:!0},Ty=new Map,P_=Iy.searchByValue,uK=Iy.searchByHash,lK=nK(sK.delete);async function _K(e){let t=wy.cleanAttributes(e,Cy),r=yy.addUserValidation(t);if(r)throw zs(new Error,r.message,Js.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await P_(s),n=n&&Array.from(n)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!n||n.length<1)throw zs(new Error,Ko.ROLE_NAME_NOT_FOUND(t.role),Js.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw zs(new Error,Ko.DUP_ROLES_FOUND(t.role),Js.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=zm.encrypt(t.password)),t.password=Wm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Ny.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Wo()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw zs(new Error,Ko.USER_ALREADY_EXISTS(t.username),Js.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Qm.signalUserChange(new Jm(process.pid)),`${c.username} successfully added`}a(_K,"addUser");async function dK(e){let t=wy.cleanAttributes(e,Cy);if(vr.isEmptyOrZeroLength(t.username))throw new Error(gy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Ry);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Ay);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(by);let r=fK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=zm.encrypt(t.password)),t.password=Wm.hash(t.password)),t.role==="")throw new Error(Oy);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 P_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Ko.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),zs(new Error,c,Js.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ko.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),zs(new Error,c,Js.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Ny.update(s)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Wo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Qm.signalUserChange(new Jm(process.pid)),n}a(dK,"alterUser");function fK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(fK,"isClusterUser");async function EK(e){try{let t=yy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw zs(new Error,Ko.USER_NOT_EXIST(e.username),Js.NOT_FOUND,void 0,void 0,!0);let s;try{s=await lK(r)}catch(n){throw Te.error("Got an error deleting a user."),Te.error(n),n}Te.debug(s);try{await Wo()}catch(n){throw Te.error("Got an error setting users to global."),Te.error(n),n}return Qm.signalUserChange(new Jm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(EK,"dropUser");async function hK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Km.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await uK(r)}catch(n){throw Te.error("Got an error searching for a role."),Te.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(hK,"userInfo");async function mK(){let e;try{e=await v_()}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(mK,"listUsersExternal");async function v_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await P_(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]=Km.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await P_(s)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of n)o=Km.cloneDeep(o),o.role=r[o.role],pK(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),vr.errorizeMessage(e)}return null}a(v_,"listUsers");function pK(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(oK)){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(pK,"appendSystemTablesToRole");async function Wo(){try{let e=await v_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Wo,"setUsersToGlobal");async function Dy(e,t,r=!0){global.hdb_users||await Wo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw zs(new Error,Ym.GENERIC_AUTH_FAIL,Js.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw zs(new Error,Ym.USER_INACTIVE,Js.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ty.get(t)===s.password)return n;if(Wm.validate(s.password,t))Ty.set(t,s.password);else throw zs(new Error,Ym.GENERIC_AUTH_FAIL,Js.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Dy,"findAndValidateUser");async function SK(){global.hdb_users||await Wo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(SK,"getSuperUser");async function TK(){let e=await v_(),t=iK.getConfigFromFile(py.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===py.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=zm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Sy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Sy.SERVER_SUFFIX.ADMIN,r}a(TK,"getClusterUser");var Ly=[];Xm.invalidateUser=function(e){for(let t of Ly)try{t(e)}catch(r){cK.error("Error invalidating user",r)}};Xm.onInvalidatedUser=function(e){Ly.push(e)}});var Bc=T((mue,By)=>{"use strict";var Ki=G(),Br=D(),gK=_N(),Eue=Rn(),hue=jn(),RK=rs(),{validateEvent:My}=Ls(),vc=ws(),AK=require("process"),{resetDatabases:OK}=(ge(),ee(xe)),bK={[Br.ITC_EVENT_TYPES.SCHEMA]:NK,[Br.ITC_EVENT_TYPES.USER]:vy};async function NK(e){let t=My(e);if(t){Ki.error(t);return}Ki.trace("ITC schemaHandler received schema event:",e),await gK(e.message),await yK(e.message)}a(NK,"schemaHandler");async function yK(e){try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=OK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ki.error(t)}}a(yK,"syncSchemaMetadata");var Py=[];async function vy(e){try{try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ki.warn(r)}let t=My(e);if(t){Ki.error(t);return}Ki.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${AK.pid} received user event:`,e),await RK.setUsersToGlobal();for(let r of Py)r()}catch(t){Ki.error(t)}}a(vy,"userHandler");vy.addListener=function(e){Py.push(e)};By.exports=bK});var Ls=T((Aue,xy)=>{"use strict";var Sue=G(),jm=z(),IK=D(),{ITC_ERRORS:Hc}=Ir(),{parentPort:Tue,threadId:wK,isMainThread:CK,workerData:gue}=require("worker_threads"),{onMessageFromWorkers:DK,broadcast:Rue,broadcastWithAcknowledgement:LK}=Ye();xy.exports={sendItcEvent:UK,validateEvent:Hy,SchemaEventMsg:MK,UserEventMsg:PK};var B_;DK(async(e,t)=>{B_=B_||Bc(),Hy(e),B_[e.type]&&await B_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function UK(e){return!CK&&e.message&&(e.message.originator=wK),LK(e)}a(UK,"sendItcEvent");function Hy(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jm.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||jm.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jm.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(IK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(Hy,"validateEvent");function MK(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(MK,"SchemaEventMsg");function PK(e){this.originator=e}a(PK,"UserEventMsg")});var An=T((Nue,ky)=>{"use strict";var qy=D(),bue=z(),H_=G(),Fy=cN(),Qo,{sendItcEvent:Gy}=Ls();function vK(e){try{H_.trace("signalSchemaChange called with message:",e),Qo=Qo||Bc();let t=new Fy(qy.ITC_EVENT_TYPES.SCHEMA,e);return Qo.schema(t),Gy(t)}catch(t){H_.error(t)}}a(vK,"signalSchemaChange");function BK(e){try{H_.trace("signalUserChange called with message:",e),Qo=Qo||Bc();let t=new Fy(qy.ITC_EVENT_TYPES.USER,e);return Qo.user(t),Gy(t)}catch(t){H_.error(t)}}a(BK,"signalUserChange");ky.exports={signalSchemaChange:vK,signalUserChange:BK}});var x_=T((Iue,$y)=>{"use strict";var Vy=z(),HK=D(),xK=G(),qK=h_(),FK=E_(),GK=An(),{SchemaEventMsg:kK}=Ls(),VK="already exists in";$y.exports=$K;async function $K(e,t,r){if(Vy.isEmptyOrZeroLength(r))return r;let s=[];Vy.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await YK(e,t.schema,t.name,i)})),n}a($K,"lmdbCheckForNewAttributes");async function YK(e,t,r,s){let n=new FK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await KK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(VK))xK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(YK,"createNewAttribute");async function KK(e){let t;return t=await qK(e),GK.signalSchemaChange(new kK(process.pid,HK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(KK,"createAttribute")});var zo=T((Cue,Yy)=>{"use strict";var Zm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Yy.exports=Zm});var Wy=T((Lue,Ky)=>{"use strict";var WK=zo(),QK=D().OPERATIONS_ENUM,ep=class extends WK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(QK.INSERT,r,s,n,i),this.records=t}};Ky.exports=ep});var zy=T((Mue,Qy)=>{"use strict";var zK=zo(),JK=D().OPERATIONS_ENUM,tp=class extends zK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(JK.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Qy.exports=tp});var Xy=T((vue,Jy)=>{"use strict";var XK=zo(),jK=D().OPERATIONS_ENUM,rp=class extends XK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(jK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Jy.exports=rp});var Zy=T((Hue,jy)=>{"use strict";var ZK=zo(),eW=D().OPERATIONS_ENUM,sp=class extends ZK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(eW.DELETE,s,n,t,i),this.original_records=r}};jy.exports=sp});var xc=T((Fue,sI)=>{"use strict";var que=require("path"),eI=Ke(),tW=Wy(),rW=zy(),sW=Xy(),nW=Zy(),Jo=mt(),tI=z(),{CONFIG_PARAMS:iW}=D(),rI=j();rI.initSync();var q_=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:oW}=ze();sI.exports=aW;async function aW(e,t){if(rI.get(iW.LOGGING_AUDITLOG)===!1)return;let r=oW(e.schema,e.table),s=await eI.openEnvironment(r,e.table,!0),n=cW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){eI.initializeDBIs(s,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),tI.isEmpty(n.user_name)||s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(aW,"writeTransaction");function cW(e,t){let r=tI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===q_.INSERT)return new tW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new rW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new sW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new nW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(cW,"createTransactionObject")});var np=T((Vue,nI)=>{"use strict";var uW=yc(),kue=Ic(),qc=D(),lW=Lc(),_W=Fo().insertRecords,dW=Ke(),fW=G(),EW=x_(),{getSchemaPath:hW}=ze(),mW=xc();nI.exports=pW;async function pW(e){try{let{schema_table:t,attributes:r}=uW(e);lW(e,r,t.hash_attribute),e.schema!==qc.SYSTEM_SCHEMA_NAME&&(r.includes(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await EW(e.hdb_auth_header,t,r),n=hW(e.schema,e.table),i=await dW.openEnvironment(n,e.table),o=await _W(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await mW(e,o)}catch(c){fW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(pW,"lmdbCreateRecords")});var aI=T((Yue,oI)=>{"use strict";var iI=D(),SW=np(),TW=Ic(),gW=require("fs-extra"),{getSchemaPath:RW}=ze();oI.exports=AW;async function AW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new TW(iI.SYSTEM_SCHEMA_NAME,iI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await SW(r),await gW.mkdirp(RW(e.schema))}a(AW,"lmdbCreateSchema")});var uI=T((Wue,cI)=>{"use strict";var ip=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};cI.exports=ip});var fI=T((jue,dI)=>{"use strict";var lI=Ke(),op=wr(),ap=Ir().LMDB_ERRORS_ENUM,OW=mt(),_I=G(),zue=z(),bW=require("lmdb"),NW=uI(),yW=D(),{OVERFLOW_MARKER:Jue,MAX_SEARCH_KEY_LENGTH:Xue}=OW,IW=yW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wW(e,t,r,s){if(op.validateEnv(e),t===void 0)throw new Error(ap.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ap.IDS_REQUIRED):new Error(ap.IDS_MUST_BE_ITERABLE);try{let n=lI.listDBIs(e);lI.initializeDBIs(e,t,n);let i=new NW,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||s&&h[IW]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,bW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let I=e.dbis[R],w=h[R];if(w!=null)try{let B=op.getIndexedValues(w);if(B)for(let K=0,q=B.length;K<q;K++)I.remove(B[K],o)}catch{_I.warn(`cannot delete from attribute: ${R}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){_I.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=op.getNextMonotonicTime(),i}catch(n){throw n}}a(wW,"deleteRecords");dI.exports={deleteRecords:wW}});var Fc=T((ele,hI)=>{"use strict";var Xo=z(),CW=fI(),DW=Ke(),{getSchemaPath:LW}=ze(),UW=xc(),MW=G();hI.exports=PW;async function PW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xo.isEmptyOrZeroLength(e.hash_values)&&!Xo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Xo.isEmpty(u)||e.hash_values.push(u)}}if(Xo.isEmptyOrZeroLength(e.hash_values))return EI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=LW(e.schema,e.table),i=await DW.openEnvironment(n,e.table),o=await CW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await UW(e,o)}catch(c){MW.error(`unable to write transaction due to ${c.message}`)}return EI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(PW,"lmdbDeleteRecords");function EI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(EI,"createDeleteResponse")});var up=T((sle,mI)=>{"use strict";var vW=D(),rle=wr();function cp(e,t){let r=Object.create(null);if(t.length===1&&vW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(cp,"parseRow");function BW(e,t,r,s){let n=cp(r,e);s.push(n)}a(BW,"searchAll");function HW(e,t,r,s){let n=cp(r,e);s[t]=n}a(HW,"searchAllToMap");function xW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(xW,"iterateDBI");function Wi(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Wi,"pushResults");function qW(e,t,r,s,n,i){t.toString().endsWith(e)&&Wi(t,r,s,n,i)}a(qW,"endsWith");function FW(e,t,r,s,n,i){t.toString().includes(e)&&Wi(t,r,s,n,i)}a(FW,"contains");function GW(e,t,r,s,n,i){t>e&&Wi(t,r,s,n,i)}a(GW,"greaterThanCompare");function kW(e,t,r,s,n,i){t>=e&&Wi(t,r,s,n,i)}a(kW,"greaterThanEqualCompare");function VW(e,t,r,s,n,i){t<e&&Wi(t,r,s,n,i)}a(VW,"lessThanCompare");function $W(e,t,r,s,n,i){t<=e&&Wi(t,r,s,n,i)}a($W,"lessThanEqualCompare");mI.exports={parseRow:cp,searchAll:BW,searchAllToMap:HW,iterateDBI:xW,endsWith:qW,contains:FW,greaterThanCompare:GW,greaterThanEqualCompare:kW,lessThanCompare:VW,lessThanEqualCompare:$W,pushResults:Wi}});var jo=T((cle,OI)=>{"use strict";var ni=Ke(),ile=G(),Hr=wr(),F_=mt(),ft=Ir().LMDB_ERRORS_ENUM,ole=z(),YW=D(),G_=up(),{parseRow:KW}=G_,ale=require("lmdb"),{OVERFLOW_MARKER:pI,MAX_SEARCH_KEY_LENGTH:WW}=F_;function SI(e,t,r,s=!1,n=void 0,i=void 0){return Qi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(SI,"iterateFullIndex");function Gc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Qi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,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(Gc,"iterateRangeBetween");function Qi(e,t,r,s){let n=e.database||e,i=ni.openDBI(n,r);i[F_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ni.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Qi,"setupTransaction");function TI(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(pI)){if(!n)if(r)n=ni.openDBI(e,r);else{let u=ni.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ni.openDBI(e,u[_]),!n[F_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(TI,"getOverflowCheck");function QW(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return Qi(e,t,t,(o,c,u)=>(k_(r),r=kc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>KW(_.value,r))))}a(QW,"searchAll");function zW(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);k_(r),r=kc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of SI(e,t,t,s,n,i))o.set(c,G_.parseRow(u,r));return o}a(zW,"searchAllToMap");function JW(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=SI(e,void 0,t,r,s,n),c=o.transaction,u=TI(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(JW,"iterateDBI");function XW(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return ni.statDBI(e,t).entryCount}a(XW,"countAll");function jW(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),Qi(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(jW,"equals");function ZW(e,t,r){return ii(e,t,r),ni.openDBI(e,t).getValuesCount(r)}a(ZW,"count");function eQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),Qi(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(eQ,"startsWith");function tQ(e,t,r,s,n=!1,i=void 0,o=void 0){return gI(e,t,r,s,n,i,o,!0)}a(tQ,"endsWith");function gI(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ii(e,r,s),Qi(e,null,r,(u,_,l,d)=>{let f=TI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(pI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[F_.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(gI,"contains");function rQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,s,u,n,i,o,!0,!1)}a(rQ,"greaterThan");function sQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,s,u,n,i,o,!1,!1)}a(sQ,"greaterThanEqual");function nQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,s,n,i,o,!1,!0)}a(nQ,"lessThan");function iQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,s,n,i,o,!1,!1)}a(iQ,"lessThanEqual");function oQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ft.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ft.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ft.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Gc(e,t,r,s,n,i,o,c)}a(oQ,"between");function aQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(k_(r),r=kc(n,r),s===void 0)throw new Error(ft.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=G_.parseRow(c,r)),o}a(aQ,"searchByHash");function cQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(cQ,"checkHashExists");function uQ(e,t,r,s,n=[]){return AI(e,t,r,s,n),RI(e,t,r,s,n).map(i=>i[1])}a(uQ,"batchSearchByHash");function lQ(e,t,r,s,n=[]){AI(e,t,r,s,n);let i=new Map;for(let[o,c]of RI(e,t,r,s,n))i.set(o,c);return i}a(lQ,"batchSearchByHashToMap");function RI(e,t,r,s,n=[]){return Qi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,G_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(RI,"batchHashSearch");function AI(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(k_(r),s==null)throw new Error(ft.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ft.IDS_MUST_BE_ITERABLE)}a(AI,"initializeBatchSearchByHash");function k_(e){if(!Array.isArray(e))throw e===void 0?new Error(ft.FETCH_ATTRIBUTES_REQUIRED):new Error(ft.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(k_,"validateFetchAttributes");function ii(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.SEARCH_VALUE_REQUIRED);if(r?.length>WW)throw new Error(ft.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function kc(e,t){return t.length===1&&YW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ni.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");OI.exports={searchAll:QW,searchAllToMap:zW,count:ZW,countAll:XW,equals:jW,startsWith:eQ,endsWith:tQ,contains:gI,searchByHash:aQ,setGetWholeRowAttributes:kc,batchSearchByHash:uQ,batchSearchByHashToMap:lQ,checkHashExists:cQ,iterateDBI:JW,greaterThan:rQ,greaterThanEqual:sQ,lessThan:nQ,lessThanEqual:iQ,between:oQ}});var Zo=T((lle,wI)=>{var bI=require("lodash"),NI=Je(),fe=require("joi"),_Q=z(),{hdb_schema_table:Vc,checkValidTable:yI,hdb_table:II,hdb_database:V_}=Ks(),{handleHDBError:dQ,hdb_errors:fQ}=Z(),{getDatabases:EQ}=(ge(),ee(xe)),{HTTP_STATUS_CODES:hQ}=fQ,mQ=fe.object({database:V_,schema:V_,table:II,search_attribute:Vc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),pQ=fe.object({database:V_,schema:V_,table:II,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(Vc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(Vc,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(Vc,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()});wI.exports=function(e,t){let r=null;switch(t){case"value":r=NI.validateBySchema(e,mQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(yI("database",e.schema)),i(yI("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=NI.validateBySchema(e,pQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=_Q.checkGlobalSchemaTable(e.schema,e.table);if(n)return dQ(new Error,n,hQ.NOT_FOUND);let o=EQ()[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 _=bI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!bI.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 lp=T((dle,CI)=>{"use strict";var SQ=Ke(),TQ=Zo(),{getSchemaPath:gQ}=ze();CI.exports=RQ;function RQ(e){let t=TQ(e,"hashes");if(t)throw t;let r=gQ(e.schema,e.table);return SQ.openEnvironment(r,e.table)}a(RQ,"initialize")});var _p=T((Ele,DI)=>{"use strict";var AQ=jo(),OQ=lp();DI.exports=bQ;async function bQ(e){let t=await OQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return AQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(bQ,"lmdbGetDataByHash")});var ea=T((mle,LI)=>{"use strict";var dp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};LI.exports=dp});var MI=T((Tle,UI)=>{"use strict";var Sle=ea(),NQ=jo(),yQ=lp();UI.exports=IQ;async function IQ(e){let t=await yQ(e),r=global.hdb_schema[e.schema][e.table];return NQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(IQ,"lmdbSearchByHash")});var Xs=T((Rle,PI)=>{"use strict";var fp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};PI.exports=fp});var $_=T((Ole,FI)=>{"use strict";var Jt=jo(),wQ=Ke(),CQ=z(),Ee=mt(),zi=D(),DQ=Bi(),vI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:LQ}=ze(),On=zi.SEARCH_WILDCARDS;async function UQ(e,t,r){let s;e.schema===zi.SYSTEM_SCHEMA_NAME?s=DQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=qI(e,s.hash_attribute,r,t);return HI(e,n,s.hash_attribute,r)}a(UQ,"prepSearch");async function HI(e,t,r,s){let n=LQ(e.schema,e.table),i=await wQ.openEnvironment(n,e.table),o=xI(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(MQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?BI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?BI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(HI,"executeSearch");function xI(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=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:n=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:n=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,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=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:n=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:n=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:n=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:n=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(xI,"searchByType");function BI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(BI,"createMapFromIterable");function MQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(MQ,"checkToFetchMore");function qI(e,t,r,s){if(CQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),On.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(On[0])<0&&n.indexOf(On[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(On.indexOf(i)>=0&&On.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(On.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(On.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(On[0])||n.includes(On[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(vI.UNKNOWN_SEARCH_TYPE)}else switch(s){case zi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case zi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case zi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case zi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case zi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(vI.UNKNOWN_SEARCH_TYPE)}}a(qI,"createSearchTypeFromSearchObject");FI.exports={executeSearch:HI,createSearchTypeFromSearchObject:qI,prepSearch:UQ,searchByType:xI}});var kI=T((yle,GI)=>{"use strict";var Nle=Xs(),PQ=Zo(),vQ=z(),BQ=D(),HQ=$_();GI.exports=xQ;function xQ(e,t){if(!vQ.isEmpty(t)&&BQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PQ(e,"value");if(s)throw s;return HQ.prepSearch(e,t,!0)}a(xQ,"lmdbGetDataByValue")});var $c=T((Cle,VI)=>{"use strict";var wle=Xs(),qQ=Zo(),FQ=z(),GQ=D(),kQ=$_();VI.exports=VQ;async function VQ(e,t){if(!FQ.isEmpty(t)&&GQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=qQ(e,"value");if(s)throw s;return kQ.prepSearch(e,t,!1)}a(VQ,"lmdbSearchByValue")});var YI=T((Ule,$I)=>{"use strict";var Lle=mt(),Ep=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},hp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},mp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};$I.exports={SearchByConditionsObject:Ep,SearchCondition:hp,SortAttribute:mp}});var JI=T((Ble,zI)=>{"use strict";var Ple=YI().SearchByConditionsObject,$Q=Xs(),YQ=Zo(),pp=jo(),Y_=mt(),{Resource:vle}=(Ns(),ee(Sp)),QI=$_(),KQ=up(),WQ=require("lodash"),{getSchemaPath:QQ}=ze(),KI=Ke(),{handleHDBError:zQ,hdb_errors:JQ}=Z(),{HTTP_STATUS_CODES:XQ}=JQ,jQ=1e8;zI.exports=ZQ;async function ZQ(e){let t=YQ(e,"conditions");if(t)throw zQ(t,t.message,XQ.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=QQ(e.schema,e.table),s=await KI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)KI.openDBI(s,_.search_attribute);let i=WQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Y_.SEARCH_TYPES.EQUALS?_.estimated_count=pp.count(s,_.search_attribute,_.search_value):l===Y_.SEARCH_TYPES.CONTAINS||l===Y_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=jQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await WI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(QI.filterByType),d=l.length,f=pp.setGetWholeRowAttributes(s,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=>KQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await WI(o,e,f,n.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=pp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(ZQ,"lmdbSearchByConditions");async function WI(e,t,r,s){let n=new $Q(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Y_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,QI.searchByType(e,n,i,s).map(o=>o.value)}a(WI,"executeConditionSearch")});var ta=T((xle,XI)=>{"use strict";var ez=D().OPERATIONS_ENUM,Tp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=ez.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};XI.exports=Tp});var gp=T((Fle,iw)=>{"use strict";var tw=Xs(),rw=ta(),sw=$c(),nw=Fc(),ar=D(),jI=z(),ZI=Ke(),{getTransactionAuditStorePath:tz,getSchemaPath:rz}=ze(),ew=G();iw.exports=sz;async function sz(e){try{if(jI.isEmpty(global.hdb_schema[e.schema])||jI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await nz(e),await iz(e);let t=rz(e.schema,e.table);try{await ZI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ew.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tz(e.schema,e.table);await ZI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ew.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(sz,"lmdbDropTable");async function nz(e){let t=new tw(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 sw(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new rw(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await nw(n)}a(nz,"deleteAttributesFromSystem");async function iz(e){let t=new tw(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,s;try{r=Array.from(await sw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new rw(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await nw(n)}catch(i){throw i}}a(iz,"dropTableFromSystem")});var aw=T((kle,ow)=>{"use strict";var oz=require("fs-extra"),az=Xs(),cz=ea(),uz=ta(),lz=gp(),_z=Fc(),dz=_p(),fz=$c(),bn=D(),{getSchemaPath:Ez}=ze(),{handleHDBError:hz,hdb_errors:mz}=Z(),{HDB_ERROR_MSGS:pz,HTTP_STATUS_CODES:Sz}=mz;ow.exports=Tz;async function Tz(e){let t;try{t=await gz(e.schema);let r=new az(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await fz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await lz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new uz(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await _z(n);let i=Ez(t);await oz.remove(i)}catch(r){throw r}}a(Tz,"lmdbDropSchema");async function gz(e){let t=new cz(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await dz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw hz(new Error,pz.SCHEMA_NOT_FOUND(e),Sz.NOT_FOUND,void 0,void 0,!0);return s}a(gz,"validateDropSchema")});var K_=T(($le,cw)=>{"use strict";var Rp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};cw.exports=Rp});var lw=T((Wle,uw)=>{"use strict";var Rz=require("fs-extra"),W_=Ke(),{getTransactionAuditStorePath:Az}=ze(),Ap=mt(),Kle=K_();uw.exports=Oz;async function Oz(e){let t;try{let r=Az(e.schema,e.table);await Rz.mkdirp(r),t=await W_.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{W_.createDBI(t,Ap.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),W_.createDBI(t,Ap.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),W_.createDBI(t,Ap.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(Oz,"createTransactionsAuditEnvironment")});var Ew=T((zle,fw)=>{"use strict";var Op=D(),_w=Ke(),bz=Fo(),{getSystemSchemaPath:Nz,getSchemaPath:yz}=ze(),Iz=Bi(),wz=h_(),bp=E_(),Cz=G(),Dz=lw(),yp=Iz.hdb_table,dw=[];for(let e=0;e<yp.attributes.length;e++)dw.push(yp.attributes[e].attribute);fw.exports=Lz;async function Lz(e,t){let r=yz(t.schema,t.table),s=new bp(t.schema,t.table,Op.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bp(t.schema,t.table,Op.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await _w.createEnvironment(r,t.table),e!==void 0){let o=await _w.openEnvironment(Nz(),Op.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await bz.insertRecords(o,yp.hash_attribute,dw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Np(s),await Np(n),await Np(i)}await Dz(t)}catch(o){throw o}}a(Lz,"lmdbCreateTable");async function Np(e){try{await wz(e)}catch(t){Cz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Np,"createAttribute")});var mw=T((Xle,hw)=>{"use strict";var Uz=yc(),Mz=Lc(),Pz=x_(),Yc=D(),vz=Fo().updateRecords,Bz=Ke(),{getSchemaPath:Hz}=ze(),xz=xc(),qz=G();hw.exports=Fz;async function Fz(e){try{let{schema_table:t,attributes:r}=Uz(e);Mz(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 s=await Pz(e.hdb_auth_header,t,r),n=Hz(e.schema,e.table),i=await Bz.openEnvironment(n,e.table),o=await vz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await xz(e,o)}catch(c){qz.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Fz,"lmdbUpdateRecords")});var Sw=T((Zle,pw)=>{"use strict";var Gz=D().OPERATIONS_ENUM,Ip=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Gz.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};pw.exports=Ip});var gw=T((r_e,Tw)=>{"use strict";var t_e=Sw(),kz=yc(),Vz=Lc(),$z=x_(),Kc=D(),Yz=Fo().upsertRecords,Kz=Ke(),{getSchemaPath:Wz}=ze(),Qz=xc(),zz=G(),{handleHDBError:Jz,hdb_errors:Xz}=Z();Tw.exports=jz;async function jz(e){let t;try{t=kz(e)}catch(u){throw Jz(u,u.message,Xz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Vz(e,s,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(s.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $z(e.hdb_auth_header,r,s),i=Wz(e.schema,e.table),o=await Kz.openEnvironment(i,e.table),c=await Yz(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Qz(e,c)}catch(u){zz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(jz,"lmdbUpsertRecords")});var Aw=T((n_e,Rw)=>{"use strict";var wp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Rw.exports=wp});var bw=T((o_e,Ow)=>{"use strict";var Cp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};Ow.exports=Cp});var Iw=T((u_e,yw)=>{"use strict";var Dp=Ke(),{getTransactionAuditStorePath:Zz}=ze(),c_e=Aw(),Wc=mt(),eJ=z(),Nw=bw(),tJ=require("util").promisify,rJ=tJ(setTimeout),sJ=1e4,nJ=100;yw.exports=iJ;async function iJ(e){let t=Zz(e.schema,e.table),r=await Dp.openEnvironment(t,e.table,!0),s=Dp.listDBIs(r);Dp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Nw;do n=await oJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await rJ(nJ);while(n.transactions_deleted>0);return i}a(iJ,"deleteAuditLogsBefore");async function oJ(e,t){let r=new Nw;try{let s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];eJ.isEmpty(c)||(n=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=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>sJ)break}return await n,r}catch(s){throw s}}a(oJ,"deleteTransactions")});var Cw=T((__e,ww)=>{"use strict";var Lp=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ww.exports=Lp});var Lw=T((E_e,Dw)=>{"use strict";var aJ=Xs(),cJ=ta(),f_e=Cw(),js=D(),uJ=z(),Up=Ke(),lJ=Bi(),_J=$c(),dJ=Fc(),{getSchemaPath:fJ}=ze();Dw.exports=EJ;async function EJ(e,t=!0){let r;e.schema===js.SYSTEM_SCHEMA_NAME?r=lJ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await mJ(e),n=fJ(e.schema,e.table),i=await Up.openEnvironment(n,e.table);return t===!0&&await hJ(e,i,r.hash_attribute),Up.dropDBI(i,e.attribute),s}a(EJ,"lmdbDropAttribute");async function hJ(e,t,r){let s=Up.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(hJ,"removeAttributeFromAllObjects");async function mJ(e){let t=new aJ(js.SYSTEM_SCHEMA_NAME,js.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await _J(t)).filter(o=>o[js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(uJ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new cJ(js.SYSTEM_SCHEMA_NAME,js.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return dJ(i)}a(mJ,"dropAttributeFromSystem")});var Hw=T((p_e,Bw)=>{"use strict";var Mp=Ke(),ra=mt(),m_e=wr(),Pp=D(),Uw=z(),{getTransactionAuditStorePath:pJ}=ze(),SJ=jo(),Q_=zo(),TJ=G();Bw.exports=gJ;async function gJ(e){let t=pJ(e.schema,e.table),r=await Mp.openEnvironment(t,e.table,!0),s=Mp.listDBIs(r);Mp.initializeDBIs(r,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Pp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Mw(r,e.search_values);case Pp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,AJ(r,e.search_values,n);case Pp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return RJ(r,e.search_values);default:return Mw(r)}}a(gJ,"readAuditLog");function Mw(e,t=[0,Date.now()]){Uw.isEmpty(t[0])&&(t[0]=0),Uw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Q_,n))}a(Mw,"searchTransactionsByTimestamp");function RJ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,vw(e,i))}return Object.fromEntries(r)}a(RJ,"searchTransactionsByUsername");function AJ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=SJ.equals(e,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=vw(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);Pw(u,"records",r,l,o),Pw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(AJ,"searchTransactionsByHashValues");function Pw(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Q_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Q_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(Pw,"loopRecords");function vw(e,t){let r=[];try{let s=e.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Q_,i);r.push(o)}}catch(i){TJ.warn(i)}return r}catch(s){throw s}}a(vw,"batchSearchTransactions")});var qw=T((R_e,xw)=>{"use strict";var{getSchemaPath:T_e}=ze(),g_e=Ke(),{database:OJ}=(ge(),ee(xe));xw.exports={writeTransaction:bJ};async function bJ(e,t,r){return OJ({database:e,table:t}).transaction(r)}a(bJ,"writeTransaction")});var Vw=T((O_e,kw)=>{"use strict";var{getSchemaPath:Fw}=ze(),Gw=Ke();kw.exports={flush:NJ,resetReadTxn:yJ};async function NJ(e,t){return(await Gw.openEnvironment(Fw(e,t),t.toString())).flushed}a(NJ,"flush");async function yJ(e,t){try{(await Gw.openEnvironment(Fw(e,t),t.toString())).resetReadTxn()}catch{}}a(yJ,"resetReadTxn")});var Ww=T((N_e,Kw)=>{"use strict";var{Readable:IJ}=require("stream"),{getDatabases:wJ}=(ge(),ee(xe)),{readSync:CJ,openSync:DJ,createReadStream:$w}=require("fs"),{open:LJ}=require("lmdb"),Yw=n_(),UJ=o_(),{AUDIT_STORE_OPTIONS:MJ}=(Pi(),ee(Qw)),{INTERNAL_DBIS_NAME:PJ,AUDIT_STORE_NAME:vJ}=mt();Kw.exports=HJ;var vp=32768,BJ=100;async function HJ(e){let t=e.database||e.schema||"data",r=wJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=LJ({noSync:!0,maxDbs:UJ.MAX_DBS}),f,E=d.openDB(PJ,new Yw(!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:q,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(q,Q,P),p++%BJ===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(n.some(B=>I.startsWith?.(B+"/"))){E.put(I,w);let[,B]=I.split("/"),K=!B,q=new Yw(!K,K);await S(I,q)}e.include_audit&&await S(vJ,Object.assign({},MJ)),await f;let R=$w(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=DJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(vp);CJ(c,_,0,vp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=$w(null,{fd:c,start:vp}),f=new IJ.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",s),_}}a(HJ,"getBackup")});var Xw=T((I_e,Jw)=>{"use strict";var xJ=G(),{handleHDBError:qJ}=Z(),FJ=lb(),GJ=h_(),kJ=np(),VJ=aI(),$J=Fc(),YJ=_p(),KJ=MI(),WJ=kI(),QJ=$c(),zJ=JI(),JJ=aw(),XJ=Ew(),jJ=mw(),ZJ=gw(),e2=Iw(),t2=gp(),r2=Lw(),s2=Hw(),n2=qw(),zw=Vw(),i2=Ww(),Bp=class extends FJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return zJ(t)}async getDataByHash(t){return await YJ(t)}async searchByHash(t){return await KJ(t)}async getDataByValue(t,r){return await WJ(t,r)}async searchByValue(t){return await QJ(t)}async createSchema(t){return await VJ(t)}async dropSchema(t){return await JJ(t)}async createTable(t,r){return await XJ(t,r)}async dropTable(t){return await t2(t)}async createAttribute(t){return await GJ(t)}async createRecords(t){return await kJ(t)}async updateRecords(t){return await jJ(t)}async upsertRecords(t){try{return await ZJ(t)}catch(r){throw qJ(r,null,null,xJ.ERR,r)}}async deleteRecords(t){return await $J(t)}async dropAttribute(t){return await r2(t)}async deleteAuditLogsBefore(t){return await e2(t)}async readAuditLog(t){return await s2(t)}writeTransaction(t,r,s){return n2.writeTransaction(t,r,s)}flush(t,r){return zw.flush(t,r)}resetReadTxn(t,r){return zw.resetReadTxn(t,r)}getBackup(t){return i2(t)}};Jw.exports=Bp});function u2(){c2=setInterval(function(){for(let e of Hp)if(e.stale){let t=e[Re]?.url;jw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},a2).unref()}var xp,jw,o2,Hp,Ji,z_,a2,c2,qp=Ae(()=>{xp=v(wr()),jw=v(G());Ns();o2=100,Hp=new Set,Ji=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(),Hp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Hp.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,xp.getNextMonotonicTime)());let s=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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<o2>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.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=s+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=[]}},z_=class extends Ji{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,xp.getNextMonotonicTime)())}getReadTxn(){}},a2=3e4;a(u2,"startMonitoringTxns");u2()});function Xe(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 s=e.transaction=new Ji;e.timestamp&&(s.timestamp=e.timestamp),s[Re]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit(r?.resetTransaction?{prepared(){s.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var Zw,Xi=Ae(()=>{Zw=require("../index");Ns();qp();a(Xe,"transaction");(0,Zw._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.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 cC={};$e(cC,{ResourceBridge:()=>kp});function Vp({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 tC(e,t){let r=Zs(e),s=Vp(e,r);if(!r)throw new Us.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Xe(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:n,select:s},i);return l=l&&X_(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 Zs(e){let t=e.database||e.schema||_2,r=Ms()[t];if(!r)throw(0,Us.handleHDBError)(new Error,l2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function rC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*sC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var nC,J_,Us,iC,oC,Ps,Fp,Gp,aC,l2,_2,d2,f2,eC,kp,uC=Ae(()=>{"use strict";nC=v(Xw()),J_=v(Zo()),Us=v(Z());ge();iC=v(yc()),oC=v(Lc()),Ps=v(D()),Fp=v(An()),Gp=v(Ls()),aC=v(z());Xi();j_();({HDB_ERROR_MSGS:l2}=Us.hdb_errors),_2="data",d2=1e4,f2=10,kp=class extends nC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),eC=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,J_.default)(t,"conditions");if(r)throw(0,Us.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Zs(t);if(!s)throw new Us.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Vp(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Us.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}dt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Zs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Zs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Zs(t).dropTable()}createSchema(t){return Qc({database:t.schema,table:null}),Fp.signalSchemaChange(new Gp.SchemaEventMsg(process.pid,Ps.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await $p(t.schema),Fp.signalSchemaChange(new Gp.SchemaEventMsg(process.pid,Ps.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,eC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,iC.default)(t);(0,oC.default)(t,s,r.primaryKey);let n,i=Ms()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.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=X_(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:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ms()[t.schema][t.table],s={user:t.hdb_user};return Xe(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return rC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ms()[t.schema][t.table];if(!r.createdTimeProperty)throw new Us.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ps.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,aC.async_set_timeout)(f2),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%d2===0&&await _();return u.length>0&&await _(),n?rC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,J_.default)(t,"hashes");if(r)throw r;return tC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of tC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ps.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 s=(0,J_.default)(t,"value");if(s)throw s;let n=Zs(t);if(!n)throw new Us.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===Ps.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Vp(t,n)})}async getDataByValue(t,r){let s=new Map,n=Zs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Zs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Zs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Zs(t),s={};switch(t.search_type){case Ps.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ps.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of sC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return sC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Vp,"getSelect");a(tC,"getRecords");a(Zs,"getTable");a(rC,"createDeleteResponse");a(sC,"groupRecordsInHistory")});var ws=T((G_e,lC)=>{"use strict";var{ResourceBridge:E2}=(uC(),ee(cC)),h2=j();h2.initSync();var Z_;function m2(){return Z_||(Z_=new E2,Z_)}a(m2,"getBridge");lC.exports=m2()});var EC=T((V_e,fC)=>{"use strict";var _C=require("lodash"),zc=require("mathjs"),p2=require("jsonata"),dC=z();fC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?_C.uniqWith(e,_C.isEqual):e,searchJSON:S2,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,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Jc,"aggregateFunction");function S2(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(dC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),dC.isEmpty(this.__ala__.res[r])){let s=p2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(S2,"searchJSON")});var mC=T((Y_e,hC)=>{"use strict";var St=require("moment"),Yp="YYYY-MM-DDTHH:mm:ss.SSSZZ";St.suppressDeprecationWarnings=!0;hC.exports={current_date:()=>St().utc().format("YYYY-MM-DD"),current_time:()=>St().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return St(e).utc().format("YYYY");case"month":return St(e).utc().format("MM");case"day":return St(e).utc().format("DD");case"hour":return St(e).utc().format("HH");case"minute":return St(e).utc().format("mm");case"second":return St(e).utc().format("ss");case"millisecond":return St(e).utc().format("SSS");default:break}},date:e=>St(e).utc().format(Yp),date_format:(e,t)=>St(e).utc().format(t),date_add:(e,t,r)=>St(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>St(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=St(e).utc(),n=St(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>St().utc().valueOf(),get_server_time:()=>St().format(Yp),offset_utc:(e,t)=>St(e).utc().utcOffset(t).format(Yp)}});var gC=T((K_e,TC)=>{"use strict";var T2=require("@turf/area"),g2=require("@turf/length"),R2=require("@turf/circle"),A2=require("@turf/difference"),O2=require("@turf/distance"),b2=require("@turf/boolean-contains"),N2=require("@turf/boolean-equal"),y2=require("@turf/boolean-disjoint"),I2=require("@turf/helpers"),pC=D(),me=z(),Nn=G();TC.exports={geoArea:w2,geoLength:C2,geoCircle:D2,geoDifference:L2,geoDistance:SC,geoNear:U2,geoContains:M2,geoEqual:P2,geoCrosses:v2,geoConvert:B2};function w2(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return T2.default(e)}catch(t){return Nn.trace(t,e),NaN}}a(w2,"geoArea");function C2(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return g2.default(e,{units:t||"kilometers"})}catch(r){return Nn.trace(r,e),NaN}}a(C2,"geoLength");function D2(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return R2.default(e,t,{units:r||"kilometers"})}catch(s){return Nn.trace(s,e,t),NaN}}a(D2,"geoCircle");function L2(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 A2(e,t)}catch(r){return Nn.trace(r,e,t),NaN}}a(L2,"geoDifference");function SC(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 O2.default(e,t,{units:r||"kilometers"})}catch(s){return Nn.trace(s,e,t),NaN}}a(SC,"geoDistance");function U2(e,t,r,s){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 SC(e,t,s)<=r}catch(n){return Nn.trace(n,e,t),!1}}a(U2,"geoNear");function M2(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 b2.default(e,t)}catch(r){return Nn.trace(r,e,t),!1}}a(M2,"geoContains");function P2(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 N2.default(e,t)}catch(r){return Nn.trace(r,e,t),!1}}a(P2,"geoEqual");function v2(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!y2.default(e,t)}catch(r){return Nn.trace(r,e,t),!1}}a(v2,"geoCrosses");function B2(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(pC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),I2[t](e,r)}a(B2,"geoConvert")});var ed=T((Q_e,RC)=>{var ji=EC(),xr=mC(),en=gC();RC.exports=e=>{e.aggr.mad=e.aggr.MAD=ji.mad,e.aggr.mean=e.aggr.MEAN=ji.mean,e.aggr.mode=e.aggr.MODE=ji.mode,e.aggr.prod=e.aggr.PROD=ji.prod,e.aggr.median=e.aggr.MEDIAN=ji.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ji.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ji.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=en.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=en.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=en.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=en.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=en.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=en.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=en.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=en.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=en.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=en.geoNear}});var NC=T((z_e,bC)=>{"use strict";var Xc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var H2=ed(),AC=require("clone"),td=require("recursive-iterator"),ue=G(),we=z(),sa=ws(),x2=D(),{hdb_errors:q2}=Z(),{getDatabases:OC}=(ge(),ee(xe)),F2="IS NULL",vs="There was a problem performing this search. Please check the logs and try again.";H2(cr);var Kp=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 s=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(s))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(s),new Error(vs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(s),new Error(vs)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(s),new Error(vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(s),new Error(vs)}try{return t=await this._finalSQL(),t}catch(s){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(s),new Error(vs)}}_getColumns(){let t=new td(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(AC(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 s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=OC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__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 td(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let s=we.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new cr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=we.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new cr.yy.LogicValue({value:i}):s instanceof cr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=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 td(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!we.isEmpty(x2.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)?s.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)s.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,...s])}}}_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((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Xc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(we.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);we.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(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 s=this._findColumn(r);s&&this.fetch_attributes.push(AC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(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(F2)>-1&&this.tables.forEach(n=>{let i={columnid:OC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.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 sa.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[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(vs)}else try{c.search_attribute=n.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 sa.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.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(vs)}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 sa.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.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(vs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await sa.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.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(vs)}}}_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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new cr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}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 n=t.is_func?new cr.yy.FuncValue:new cr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.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,n);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,R=p.length;S<R;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 s=[],n=new td(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Xc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(vs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await sa.getDataByHash(c),_=n.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=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();ue.trace(`Final SQL: ${n}`),s=await cr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ue.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ue.error(q2.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await sa.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};bC.exports=Kp});var es=T((X_e,yC)=>{"use strict";var G2=cb();yC.exports={searchByConditions:V2,searchByHash:$2,searchByValue:Y2,search:K2};var Wp=ws(),{transformReq:Qp}=z(),k2=NC();async function V2(e){return Qp(e),Wp.searchByConditions(e)}a(V2,"searchByConditions");async function $2(e){Qp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wp.searchByHash(e))r&&t.push(r);return t}a($2,"searchByHash");async function Y2(e){Qp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wp.searchByValue(e))t.push(r);return t}a(Y2,"searchByValue");function K2(e,t){try{let r=new G2(e);r.validate(),new k2(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(K2,"search")});var rd=T((Z_e,IC)=>{"use strict";var W2=ws();IC.exports={writeTransaction:Q2};function Q2(e,t,r){return W2.writeTransaction(e,t,r)}a(Q2,"writeTransaction")});var LC=T((rde,DC)=>{"use strict";var z2=es(),J2=Rn(),wC=G(),X2=Lr(),tde=rd(),j2=require("clone"),Jp=require("alasql"),Z2=ed(),CC=require("util"),e4=CC.promisify(J2.getTableSchema),t4=CC.promisify(z2.search),r4=D(),zp=z();Z2(Jp);DC.exports={update:n4};var s4="There was a problem performing this update. Please check the logs and try again.";async function n4({statement:e,hdb_user:t}){let r=await e4(e.table.databaseid,e.table.tableid),s=i4(e.columns);zp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=j2(n),c=zp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Jp.parse(u).statements[0],l=await t4(_),d=o4(s,l);return a4(o,d,t)}a(n4,"update");function i4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jp.compile(`SELECT ${r.expression.toString()} AS [${r4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw wC.error(t),new Error(s4)}}a(i4,"createUpdateRecord");function o4(e,t){return zp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(o4,"buildUpdateRecords");async function a4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await X2.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){wC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(a4,"updateRecords")});var MC=T((ode,UC)=>{var c4=require("alasql"),u4=es(),l4=G(),_4=ws(),jp=require("util"),Xp=z(),d4=D(),f4=Rn(),nde=rd(),ide=Lr(),E4="record",h4="successfully deleted",m4=jp.callbackify(g4),p4=jp.promisify(u4.search),S4=jp.promisify(f4.getTableSchema);UC.exports={convertDelete:m4};function T4(e){return`${e.deleted_hashes.length} ${E4}${e.deleted_hashes.length===1?"":"s"} ${h4}`}a(T4,"generateReturnMessage");async function g4({statement:e,hdb_user:t}){let r=await S4(e.table.databaseid,e.table.tableid);Xp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Xp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=c4.parse(o).statements[0],u={operation:d4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await p4(c);let _=await _4.deleteRecords(u);return Xp.isEmptyOrZeroLength(_.message)&&(_.message=T4(_)),delete _.txn_time,_}catch(_){throw l4.error(_),_.hdb_code?_.message:_}}a(g4,"convertDelete")});var xC=T((cde,HC)=>{"use strict";var R4=jn(),{hdb_errors:PC}=Z(),{getDatabases:vC}=(ge(),ee(xe));HC.exports={checkSchemaExists:BC,checkSchemaTableExists:A4,schema_describe:R4};async function BC(e){if(!vC()[e])return PC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(BC,"checkSchemaExists");async function A4(e,t){let r=await BC(e);if(r)return r;if(!vC()[e][t])return PC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(A4,"checkSchemaTableExists")});var jc=T((lde,O4)=>{O4.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={};$e(ru,{addAnalyticsListener:()=>tu,recordAction:()=>qr,recordActionBinary:()=>ss,setAnalyticsEnabled:()=>b4});function b4(e){QC=e}function qr(e,t,r,s,n){if(!QC)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=id.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:s,type:n},id.set(i,o)}sd||N4()}function ss(e,t,r,s,n){qr(!!e,t,r,s,n)}function tu(e){XC.push(e)}function N4(){sd=performance.now(),setTimeout(async()=>{let e=performance.now()-sd;sd=0;let t=[],r={time:Date.now(),period:e,threadId:Zi.threadId,metrics:t};for(let[n,i]of id){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 jC){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 ZC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Zi.threadId,byThread:!0,...s});for(let n of XC)n(t);id=new Map,Zi.parentPort?Zi.parentPort.postMessage({type:JC,report:r}):rD({report:r})},zC).unref()}async function y4(e,t=6e4){let r=tS(),s=eD(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let I of S||[]){let{path:w,method:B,type:K,metric:q,count:P,total:Q,distribution:Y,threads:J,...re}=I;P||(P=1);let Ie=q+(w?"-"+w:"");B!==void 0&&(Ie+="-"+B),K!==void 0&&(Ie+="-"+K);let se=o.get(Ie);if(se){if(se.threads){let de=se.threads[R];if(de)se=de;else{se.threads[R]=Object.assign({},re);continue}}se.count||(se.count=1);let ut=se.count;for(let de in re){let lt=re[de];typeof lt=="number"&&(se[de]=(se[de]*ut+lt*P)/(ut+P))}se.count+=P,Q>=0&&(se.total+=Q,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(Ie,se),se.byThread&&(se.threads=[],se.threads[R]=Object.assign({},re),u.push(se));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let ut=c.get(Ie);ut?ut.push(...Y):c.set(Ie,Y)}}await ZC()}for(let h of u){let{path:p,method:S,type:R,metric:I,count:w,total:B,distribution:K,threads:q,...P}=h;q=q.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let J of q){let re=J[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,lt)=>de.value>lt.value?1:-1);let R=S.count-1,I=[],w=0,B=0,K;for(let de of jC){let lt=R*de;for(;w<lt;)K=p[B++],w+=K.count,B===1&&w--;let gs=p[B>1?B-2:0];K||(K=p[0]),I.push(K.value-(K.value-gs.value)*(w-lt)/K.count)}let[q,P,Q,Y,J,re,Ie,se,ut]=I;Object.assign(S,{p1:q,p10:P,p25:Q,median:Y,p75:J,p90:re,p95:Ie,p99:se,p999:ut})}let l;for(let[h,p]of o)p.id=(0,nd.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.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,nd.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-qC,active:E-FC,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}qC=f,FC=E}async function GC(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function tS(){return kC||(kC=dt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function eD(){return VC||(VC=dt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function C4(){tD=!0;let e=(0,eu.get)(eS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await y4(zC,e),await GC(tS(),I4),await GC(eD(),w4)},Math.min(e/2,2147483647)).unref()}function rD(e,t){let r=e.report;r.threadId=t?.threadId||Zi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&($C+=s.mean*s.count);r.totalBytesProcessed=$C,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(YC.get(t))}),YC.set(t,t.performance.eventLoopUtilization())),r.id=(0,nd.getNextMonotonicTime)(),tS().primaryStore.put(r.id,r),tD||C4(),D4&&(sD=U4(r))}async function U4(e){if(await sD,!oi){let r=(0,Zc.dirname)((0,WC.getLogFilePath)());try{oi=await(0,Zp.open)((0,Zc.join)(r,"analytics.log"),"r+")}catch{oi=await(0,Zp.open)((0,Zc.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>L4){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var
|
|
6
|
+
`)},yY="certificate.pem",wY="privateKey.pem",IY="ca.pem";Sy.exports={CERTIFICATE_VALUES:NY,CERTIFICATE_PEM_NAME:yY,PRIVATEKEY_PEM_NAME:wY,CA_PEM_NAME:IY}});var Wm=g((Uue,by)=>{"use strict";var Oy=require("fs-extra"),ie=require("joi"),CY=require("os"),{boolean:Ne,string:ar,number:At,array:Km}=ie.types(),{totalmem:gy}=require("os"),Yi=require("path"),DY=$(),P_=Q(),Mue=Ty(),Ry=M(),LY=je(),Ay="log",MY="components",UY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",PY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",vY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",BY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",HY="rootPath config parameter is undefined",xY="clustering.enabled config parameter is undefined",Ki=At.min(0).required(),v_=Km.items({host:ar.required(),port:Ki}).empty(null),Js;by.exports={configValidator:qY,routesValidator:YY,route_constraints:v_};function qY(e){if(Js=e.rootPath,P_.isEmpty(Js))throw HY;let t=Ne.required(),r=At.min(0).max(1e3).empty(null).default($Y),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Pc),n=ar.optional().empty(null),i=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(Pc),c=ie.custom(FY).empty(null).default(Pc),u=e.clustering?.enabled;if(P_.isEmpty(u))throw xY;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Ki,routes:v_}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Ki}).required()}).required(),network:ie.object({port:Ki}).required()}).required(),leafServer:ie.object({network:ie.object({port:Ki,routes:v_}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ne.optional(),databaseLevel:Ne.optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required(),verify:Ne.optional()}),user:ar.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:Ne,cacheTTL:At.required(),enableSessions:Ne}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:Ne,logSuccessful:Ne}),file:Ne.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:Ne.optional(),compress:Ne.optional(),interval:ar.custom(VY).optional().empty(null),maxSize:ar.custom(kY).optional().empty(null),path:ar.optional().empty(null).default(Pc)}).required(),root:s,stdStreams:Ne.required(),auditLog:Ne.required()}).required(),operationsApi:ie.object({network:ie.object({cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(Pc),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Ki,securePort:Ki,mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),webSocket:Ne.optional(),requireAuthentication:Ne.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(Ne.optional(),ie.object({startingPort:At.min(1).optional(),host:ar.optional(),waitForDebugger:Ne.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:Ne.required(),overlappingSync:Ne.optional(),caching:Ne.optional(),compression:Ne.optional(),noReadAhead:Ne.optional(),path:c,prefetchWrites:Ne.optional()}).required(),ignoreScripts:Ne.optional(),tls:ie.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(qY,"configValidator");function GY(e){return Oy.existsSync(e)?null:`Specified path ${e} does not exist.`}a(GY,"doesPathExist");function FY(e,t){ie.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=GY(e);if(r)return t.message(r)}a(FY,"validatePath");function kY(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(UY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(vY):e}a(kY,"validateRotationMaxSize");function VY(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(PY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(BY):e}a(VY,"validateRotationInterval");function $Y(e,t){let r=t.state.path.join("."),s=CY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||gy();return i=Math.round(Math.min(i,gy())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),DY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a($Y,"setDefaultThreads");function Pc(e,t){let r=t.state.path.join(".");if(!P_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(P_.isEmpty(Js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Yi.join(Js,MY);case"logging.root":return Yi.join(Js,Ay);case"clustering.leafServer.streams.path":return Yi.join(Js,"clustering","leaf");case"storage.path":let s=Yi.join(Js,Ry.LEGACY_DATABASES_DIR_NAME);return Oy.existsSync(s)?s:Yi.join(Js,Ry.DATABASES_DIR_NAME);case"logging.rotation.path":return Yi.join(Js,Ay);case"operationsApi.network.domainSocket":return r==null?null:Yi.join(Js,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Pc,"setDefaultRoot");function YY(e){let t=ie.object({routes:v_});return LY.validateBySchema({routes:e},t)}a(YY,"routesValidator")});var Pr=g((Bue,Uy)=>{"use strict";var Ur=M(),Lt=Q(),Ot=$(),{configValidator:KY,routesValidator:Ny}=Wm(),cr=require("fs-extra"),WY=require("yaml"),ws=require("path"),QY=require("is-number"),wy=require("properties-reader"),zY=require("lodash"),{handleHDBError:JY}=se(),{HTTP_STATUS_CODES:jY,HDB_ERROR_MSGS:B_}=yr(),vue=require("minimist"),{server:XY}=(nr(),ne(Pi)),{DATABASES_PARAM_CONFIG:vc,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:Is}=Ur,ZY="Unable to get config value because config is uninitialized",eK="Config successfully initialized",tK="Error backing up config file",rK="Empty parameter sent to getConfigValue",Iy=ws.join(Ur.PACKAGE_ROOT,"config","yaml",Ur.HDB_DEFAULT_CONFIG_FILE),sK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",yy={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"},H_,bt,x_;Uy.exports={createConfigFile:nK,getDefaultConfig:iK,getConfigValue:Dy,initConfig:zm,flattenConfig:$o,updateConfigValue:Ly,updateConfigObject:aK,getConfiguration:lK,setConfiguration:_K,readConfigFile:jm,getClusteringRoutes:dK,initOldConfig:My,getConfigFromFile:fK,getConfigFilePath:Wi,addConfig:EK,deleteConfigFromFile:hK,getConfigObj:mK};function nK(e){let t=si(Iy);H_=$o(t.toJSON());let r;for(let o in e){let c=Is[o.toLowerCase()];if(c===Mr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Qm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&Cy(t,r),Jm(t);let s=t.toJSON();bt=$o(s);let n=t.getIn(["rootPath"]),i=ws.join(n,Ur.HDB_CONFIG_FILE);cr.createFileSync(i),cr.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(nK,"createConfigFile");function Cy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(vc.TABLES))for(let i in s[n][vc.TABLES])for(let o in s[n][vc.TABLES][i]){let c=s[n][vc.TABLES][i][o],u=[Mr.DATABASES,n,vc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Ot.error("Error parsing schemas CLI/env config arguments",s)}}a(Cy,"setSchemasConfig");function iK(e){if(H_===void 0){let r=si(Iy);H_=$o(r.toJSON())}let t=Is[e.toLowerCase()];if(t!==void 0)return H_[t.toLowerCase()]}a(iK,"getDefaultConfig");function Dy(e){if(e==null){Ot.error(rK);return}if(bt===void 0){Ot.trace(ZY);return}let t=Is[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(Dy,"getConfigValue");function Wi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?ws.join(t,Ur.HDB_CONFIG_FILE):wy(e).get(Ur.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Wi,"getConfigFilePath");function zm(e=!1){if(bt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{cr.accessSync(t,cr.constants.F_OK|cr.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Wi(t),s;if(r.includes("config/settings.js"))try{My(r);return}catch(i){if(i.code!==Ur.NODE_ERROR_CODES.ENOENT)throw i}try{s=si(r)}catch(i){if(i.code===Ur.NODE_ERROR_CODES.ENOENT){Ot.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 Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}oK(s,r),Jm(s);let n=s.toJSON();if(XY.config=n,bt=$o(n),bt.logging_rotation_rotate)for(let i in yy)bt[i]&&Ot.error(`Config ${yy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(eK)}}a(zm,"initConfig");function oK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(oK,"checkForUpdatedConfig");function Jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=KY(t);if(r.error)throw B_.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):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(Jm,"validateConfig");function aK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(aK,"updateConfigObject");function Ly(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&zm();let o=Dy(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=si(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Qm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Qm(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){Ot.error(T)}}}_&&Cy(u,_),Jm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&cK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=$o(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Ly,"updateConfigValue");function cK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(tK),Ot.error(r)}}a(cK,"backupConfigFile");var uK=["databases"];function $o(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)),x_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!uK.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a($o,"flattenConfig");function Qm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(QY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Qm,"castConfigValue");function lK(){let e=Lt.getPropsFilePath(),t=Wi(e);return si(t).toJSON()}a(lK,"getConfiguration");async function _K(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Ly(void 0,void 0,n,!0),sK}catch(i){throw typeof i=="string"||i instanceof String?JY(i,i,jY.BAD_REQUEST,void 0,void 0,!0):i}}a(_K,"setConfiguration");function jm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Wi(e);return si(t).toJSON()}a(jm,"readConfigFile");function si(e){return WY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(si,"parseYamlDoc");function dK(){let e=jm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=Ny(t);if(r)throw B_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=Ny(s);if(n)throw B_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw B_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(dK,"getClusteringRoutes");function My(e){let t=wy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(My,"initOldConfig");function fK(e){let t=jm();return zY.get(t,e.replaceAll("_","."))}a(fK,"getConfigFromFile");async function EK(e,t){let r=si(Wi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(Wi(),String(r))}a(EK,"addConfig");function hK(e){let t=Wi(Lt.getPropsFilePath()),r=si(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(hK,"deleteConfigFromFile");function mK(){return x_||(zm(),x_)}a(mK,"getConfigObj")});var vy=g((xue,Py)=>{"use strict";var q_=M(),G_=class{static{a(this,"BaseLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Xm=class extends G_{static{a(this,"ExtendedLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};Py.exports={BaseLicense:G_,ExtendedLicense:Xm}});var Qi=g((Gue,Fy)=>{"use strict";var Ko=require("fs-extra"),Hy=U_(),xy=require("crypto"),pK=require("moment"),SK=require("uuid").v4,Wt=$(),ep=require("path"),TK=Q(),ni=M(),{totalmem:By}=require("os"),gK=vy().ExtendedLicense,Yo="invalid license key format",RK="061183",AK="mofi25",OK="aes-256-cbc",bK=16,NK=32,qy=ee();qy.initSync();var Zm;Fy.exports={validateLicense:Gy,generateFingerPrint:wK,licenseSearch:sp,getLicense:DK,checkMemoryLimit:LK};function tp(){return ep.join(qy.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(tp,"getLicenseDirPath");function yK(){let e=tp();return ep.join(e,ni.LICENSE_FILE_NAME)}a(yK,"getLicenseFilePath");function rp(){let e=tp();return ep.join(e,ni.REG_KEY_FILE_NAME)}a(rp,"getFingerPrintFilePath");async function wK(){let e=rp();try{return await Ko.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await IK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(wK,"generateFingerPrint");async function IK(){let e=SK(),t=Hy.hash(e),r=rp();try{await Ko.mkdirp(tp()),await Ko.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(IK,"writeFingerprint");function Gy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=rp(),n=!1;try{n=Ko.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Ko.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(AK),c=o[1];c=Buffer.concat([Buffer.from(c)],bK);let u=Buffer.concat([Buffer.from(i)],NK),_=xy.createDecipheriv(OK,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=CK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Yo),Wt.error(Yo),new Error(Yo)}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(Yo),Wt.error(Yo),new Error(Yo)}else r.exp_date=l;r.exp_date<pK().valueOf()&&(r.valid_date=!1),Hy.validate(o[1],`${RK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(Gy,"validateLicense");function CK(e,t){try{let r=xy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(CK,"checkOldLicense");function sp(){let e=new gK,t=[];try{t=Ko.readFileSync(yK(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(TK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Gy(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Zm=e,e}a(sp,"licenseSearch");async function DK(){return Zm||await sp(),Zm}a(DK,"getLicense");function LK(){let e=sp().ram_allocation,t=process.constrainedMemory?.()||By();if(t=Math.round(Math.min(t,By())/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(LK,"checkMemoryLimit")});var ss=g((Yue,sw)=>{"use strict";var Yy="username is required",Ky="nothing to update, must supply active, role or password to update",Wy="password cannot be an empty string",Qy="If role is specified, it cannot be empty.",zy="active must be true or false";sw.exports={addUser:GK,alterUser:FK,dropUser:VK,getSuperUser:WK,userInfo:$K,listUsers:k_,listUsersExternal:YK,setUsersToGlobal:Qo,findAndValidateUser:tw,getClusterUser:QK,USERNAME_REQUIRED:Yy,ALTERUSER_NOTHING_TO_UPDATE:Ky,EMPTY_PASSWORD:Wy,EMPTY_ROLE:Qy,ACTIVE_BOOLEAN:zy};var Jy=Lr(),MK=ri(),op=U_(),jy=hy(),Xy=Dr(),ap=Rn(),vr=Q(),Zy=require("validate.js"),Se=$(),{promisify:UK}=require("util"),cp=Tn(),ky=M(),Vy=Fe(),PK=Pr(),kue=ee(),Vue=Qi(),vK=qi(),{table:$ue}=(Ae(),ne(Ge)),{handleHDBError:js,hdb_errors:BK}=se(),{HTTP_STATUS_CODES:Xs,AUTHENTICATION_ERROR_MSGS:np,HDB_ERROR_MSGS:Wo}=BK,{UserEventMsg:up}=Cs(),ip=require("lodash"),{server:lp}=(nr(),ne(Pi)),HK=$();lp.getUser=(e,t)=>tw(e,t,t!=null);var ew={username:!0,active:!0,role:!0,password:!0},$y=new Map,F_=Xy.searchByValue,xK=Xy.searchByHash,qK=UK(MK.delete);async function GK(e){let t=Zy.cleanAttributes(e,ew),r=jy.addUserValidation(t);if(r)throw js(new Error,r.message,Xs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await F_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw js(new Error,Wo.ROLE_NAME_NOT_FOUND(t.role),Xs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw js(new Error,Wo.DUP_ROLES_FOUND(t.role),Xs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Jy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await Qo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw js(new Error,Wo.USER_ALREADY_EXISTS(t.username),Xs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ap.signalUserChange(new up(process.pid)),`${c.username} successfully added`}a(GK,"addUser");async function FK(e){let t=Zy.cleanAttributes(e,ew);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Yy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Ky);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Wy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(zy);let r=kK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password)),t.role==="")throw new Error(Qy);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 F_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Wo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),js(new Error,c,Xs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Wo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),js(new Error,c,Xs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Jy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await Qo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return ap.signalUserChange(new up(process.pid)),n}a(FK,"alterUser");function kK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(kK,"isClusterUser");async function VK(e){try{let t=jy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw js(new Error,Wo.USER_NOT_EXIST(e.username),Xs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await qK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await Qo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return ap.signalUserChange(new up(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(VK,"dropUser");async function $K(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ip.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await xK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a($K,"userInfo");async function YK(){let e;try{e=await k_()}catch(t){throw Se.error("Got an error listing users."),Se.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(YK,"listUsersExternal");async function k_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await F_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ip.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await F_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ip.cloneDeep(o),o.role=r[o.role],KK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(k_,"listUsers");function KK(e){try{if(!e){Se.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(vK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(KK,"appendSystemTablesToRole");async function Qo(){try{let e=await k_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(Qo,"setUsersToGlobal");async function tw(e,t,r=!0){global.hdb_users||await Qo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw js(new Error,np.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw js(new Error,np.USER_INACTIVE,Xs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if($y.get(t)===s.password)return n;if(op.validate(s.password,t))$y.set(t,s.password);else throw js(new Error,np.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(tw,"findAndValidateUser");async function WK(){global.hdb_users||await Qo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(WK,"getSuperUser");async function QK(){let e=await k_(),t=PK.getConfigFromFile(ky.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===ky.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Vy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Vy.SERVER_SUFFIX.ADMIN,r}a(QK,"getClusterUser");var rw=[];lp.invalidateUser=function(e){for(let t of rw)try{t(e)}catch(r){HK.error("Error invalidating user",r)}};lp.onInvalidatedUser=function(e){rw.push(e)}});var Hc=g((zue,aw)=>{"use strict";var zi=$(),Br=M(),zK=BN(),Wue=gn(),Que=Zn(),JK=ss(),{validateEvent:nw}=Cs(),Bc=ys(),jK=require("process"),{resetDatabases:XK}=(Ae(),ne(Ge)),ZK={[Br.ITC_EVENT_TYPES.SCHEMA]:eW,[Br.ITC_EVENT_TYPES.USER]:ow};async function eW(e){let t=nw(e);if(t){zi.error(t);return}zi.trace("ITC schemaHandler received schema event:",e),await zK(e.message),await tW(e.message)}a(eW,"schemaHandler");async function tW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=XK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){zi.error(t)}}a(tW,"syncSchemaMetadata");var iw=[];async function ow(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){zi.warn(r)}let t=nw(e);if(t){zi.error(t);return}zi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${jK.pid} received user event:`,e),await JK.setUsersToGlobal();for(let r of iw)r()}catch(t){zi.error(t)}}a(ow,"userHandler");ow.addListener=function(e){iw.push(e)};aw.exports=ZK});var Cs=g((tle,uw)=>{"use strict";var jue=$(),_p=Q(),rW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:Xue,threadId:sW,isMainThread:nW,workerData:Zue}=require("worker_threads"),{onMessageFromWorkers:iW,broadcast:ele,broadcastWithAcknowledgement:oW}=Ke();uw.exports={sendItcEvent:aW,validateEvent:cw,SchemaEventMsg:cW,UserEventMsg:uW};var V_;iW(async(e,t)=>{V_=V_||Hc(),cw(e),V_[e.type]&&await V_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function aW(e){return!nW&&e.message&&(e.message.originator=sW),oW(e)}a(aW,"sendItcEvent");function cw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_p.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||_p.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_p.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(rW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(cw,"validateEvent");function cW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(cW,"SchemaEventMsg");function uW(e){this.originator=e}a(uW,"UserEventMsg")});var Rn=g((nle,fw)=>{"use strict";var lw=M(),sle=Q(),$_=$(),_w=UN(),zo,{sendItcEvent:dw}=Cs();function lW(e){try{$_.trace("signalSchemaChange called with message:",e),zo=zo||Hc();let t=new _w(lw.ITC_EVENT_TYPES.SCHEMA,e);return zo.schema(t),dw(t)}catch(t){$_.error(t)}}a(lW,"signalSchemaChange");function _W(e){try{$_.trace("signalUserChange called with message:",e),zo=zo||Hc();let t=new _w(lw.ITC_EVENT_TYPES.USER,e);return zo.user(t),dw(t)}catch(t){$_.error(t)}}a(_W,"signalUserChange");fw.exports={signalSchemaChange:lW,signalUserChange:_W}});var Y_=g((ole,hw)=>{"use strict";var Ew=Q(),dW=M(),fW=$(),EW=T_(),hW=S_(),mW=Rn(),{SchemaEventMsg:pW}=Cs(),SW="already exists in";hw.exports=TW;async function TW(e,t,r){if(Ew.isEmptyOrZeroLength(r))return r;let s=[];Ew.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await gW(e,t.schema,t.name,i)})),n}a(TW,"lmdbCheckForNewAttributes");async function gW(e,t,r,s){let n=new hW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await RW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(SW))fW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(gW,"createNewAttribute");async function RW(e){let t;return t=await EW(e),mW.signalSchemaChange(new pW(process.pid,dW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(RW,"createAttribute")});var Jo=g((cle,mw)=>{"use strict";var dp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};mw.exports=dp});var Sw=g((lle,pw)=>{"use strict";var AW=Jo(),OW=M().OPERATIONS_ENUM,fp=class extends AW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(OW.INSERT,r,s,n,i),this.records=t}};pw.exports=fp});var gw=g((dle,Tw)=>{"use strict";var bW=Jo(),NW=M().OPERATIONS_ENUM,Ep=class extends bW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(NW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Tw.exports=Ep});var Aw=g((Ele,Rw)=>{"use strict";var yW=Jo(),wW=M().OPERATIONS_ENUM,hp=class extends yW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(wW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=hp});var bw=g((mle,Ow)=>{"use strict";var IW=Jo(),CW=M().OPERATIONS_ENUM,mp=class extends IW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(CW.DELETE,s,n,t,i),this.original_records=r}};Ow.exports=mp});var qc=g((Tle,Iw)=>{"use strict";var Sle=require("path"),Nw=We(),DW=Sw(),LW=gw(),MW=Aw(),UW=bw(),jo=dt(),yw=Q(),{CONFIG_PARAMS:PW}=M(),ww=ee();ww.initSync();var K_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:vW}=Je();Iw.exports=BW;async function BW(e,t){if(ww.get(PW.LOGGING_AUDITLOG)===!1)return;let r=vW(e.schema,e.table),s=await Nw.openEnvironment(r,e.table,!0),n=HW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Nw.initializeDBIs(s,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),yw.isEmpty(n.user_name)||s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(BW,"writeTransaction");function HW(e,t){let r=yw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===K_.INSERT)return new DW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPDATE)return new LW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPSERT)return new MW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.DELETE)return new UW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(HW,"createTransactionObject")});var pp=g((Ale,Cw)=>{"use strict";var xW=Dc(),Rle=Lc(),Gc=M(),qW=Mc(),GW=Fo().insertRecords,FW=We(),kW=$(),VW=Y_(),{getSchemaPath:$W}=Je(),YW=qc();Cw.exports=KW;async function KW(e){try{let{schema_table:t,attributes:r}=xW(e);qW(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 s=await VW(e.hdb_auth_header,t,r),n=$W(e.schema,e.table),i=await FW.openEnvironment(n,e.table),o=await GW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YW(e,o)}catch(c){kW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(KW,"lmdbCreateRecords")});var Mw=g((ble,Lw)=>{"use strict";var Dw=M(),WW=pp(),QW=Lc(),zW=require("fs-extra"),{getSchemaPath:JW}=Je();Lw.exports=jW;async function jW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new QW(Dw.SYSTEM_SCHEMA_NAME,Dw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await WW(r),await zW.mkdirp(JW(e.schema))}a(jW,"lmdbCreateSchema")});var Pw=g((yle,Uw)=>{"use strict";var Sp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};Uw.exports=Sp});var xw=g((Lle,Hw)=>{"use strict";var vw=We(),Tp=wr(),gp=yr().LMDB_ERRORS_ENUM,XW=dt(),Bw=$(),Ile=Q(),ZW=require("lmdb"),eQ=Pw(),tQ=M(),{OVERFLOW_MARKER:Cle,MAX_SEARCH_KEY_LENGTH:Dle}=XW,rQ=tQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function sQ(e,t,r,s){if(Tp.validateEnv(e),t===void 0)throw new Error(gp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(gp.IDS_REQUIRED):new Error(gp.IDS_MUST_BE_ITERABLE);try{let n=vw.listDBIs(e);vw.initializeDBIs(e,t,n);let i=new eQ,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||s&&h[rQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,ZW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Tp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{Bw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Bw.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=Tp.getNextMonotonicTime(),i}catch(n){throw n}}a(sQ,"deleteRecords");Hw.exports={deleteRecords:sQ}});var Fc=g((Ule,Gw)=>{"use strict";var Xo=Q(),nQ=xw(),iQ=We(),{getSchemaPath:oQ}=Je(),aQ=qc(),cQ=$();Gw.exports=uQ;async function uQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xo.isEmptyOrZeroLength(e.hash_values)&&!Xo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Xo.isEmpty(u)||e.hash_values.push(u)}}if(Xo.isEmptyOrZeroLength(e.hash_values))return qw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=oQ(e.schema,e.table),i=await iQ.openEnvironment(n,e.table),o=await nQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await aQ(e,o)}catch(c){cQ.error(`unable to write transaction due to ${c.message}`)}return qw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(uQ,"lmdbDeleteRecords");function qw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(qw,"createDeleteResponse")});var Ap=g((Ble,Fw)=>{"use strict";var lQ=M(),vle=wr();function Rp(e,t){let r=Object.create(null);if(t.length===1&&lQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Rp,"parseRow");function _Q(e,t,r,s){let n=Rp(r,e);s.push(n)}a(_Q,"searchAll");function dQ(e,t,r,s){let n=Rp(r,e);s[t]=n}a(dQ,"searchAllToMap");function fQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(fQ,"iterateDBI");function Ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ji,"pushResults");function EQ(e,t,r,s,n,i){t.toString().endsWith(e)&&Ji(t,r,s,n,i)}a(EQ,"endsWith");function hQ(e,t,r,s,n,i){t.toString().includes(e)&&Ji(t,r,s,n,i)}a(hQ,"contains");function mQ(e,t,r,s,n,i){t>e&&Ji(t,r,s,n,i)}a(mQ,"greaterThanCompare");function pQ(e,t,r,s,n,i){t>=e&&Ji(t,r,s,n,i)}a(pQ,"greaterThanEqualCompare");function SQ(e,t,r,s,n,i){t<e&&Ji(t,r,s,n,i)}a(SQ,"lessThanCompare");function TQ(e,t,r,s,n,i){t<=e&&Ji(t,r,s,n,i)}a(TQ,"lessThanEqualCompare");Fw.exports={parseRow:Rp,searchAll:_Q,searchAllToMap:dQ,iterateDBI:fQ,endsWith:EQ,contains:hQ,greaterThanCompare:mQ,greaterThanEqualCompare:pQ,lessThanCompare:SQ,lessThanEqualCompare:TQ,pushResults:Ji}});var Zo=g((Fle,Qw)=>{"use strict";var ii=We(),xle=$(),Hr=wr(),W_=dt(),ut=yr().LMDB_ERRORS_ENUM,qle=Q(),gQ=M(),Q_=Ap(),{parseRow:RQ}=Q_,Gle=require("lmdb"),{OVERFLOW_MARKER:kw,MAX_SEARCH_KEY_LENGTH:AQ}=W_;function Vw(e,t,r,s=!1,n=void 0,i=void 0){return ji(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Vw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return ji(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function ji(e,t,r,s){let n=e.database||e,i=ii.openDBI(n,r);i[W_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ii.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ji,"setupTransaction");function $w(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(kw)){if(!n)if(r)n=ii.openDBI(e,r);else{let u=ii.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ii.openDBI(e,u[_]),!n[W_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a($w,"getOverflowCheck");function OQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ji(e,t,t,(o,c,u)=>(z_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>RQ(_.value,r))))}a(OQ,"searchAll");function bQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);z_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Vw(e,t,t,s,n,i))o.set(c,Q_.parseRow(u,r));return o}a(bQ,"searchAllToMap");function NQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Vw(e,void 0,t,r,s,n),c=o.transaction,u=$w(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(NQ,"iterateDBI");function yQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ii.statDBI(e,t).entryCount}a(yQ,"countAll");function wQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(wQ,"equals");function IQ(e,t,r){return oi(e,t,r),ii.openDBI(e,t).getValuesCount(r)}a(IQ,"count");function CQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(CQ,"startsWith");function DQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Yw(e,t,r,s,n,i,o,!0)}a(DQ,"endsWith");function Yw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return oi(e,r,s),ji(e,null,r,(u,_,l,d)=>{let f=$w(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(kw)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[W_.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(Yw,"contains");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(LQ,"greaterThan");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(MQ,"greaterThanEqual");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(UQ,"lessThan");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(PQ,"lessThanEqual");function vQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(vQ,"between");function BQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Q_.parseRow(c,r)),o}a(BQ,"searchByHash");function HQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(HQ,"checkHashExists");function xQ(e,t,r,s,n=[]){return Ww(e,t,r,s,n),Kw(e,t,r,s,n).map(i=>i[1])}a(xQ,"batchSearchByHash");function qQ(e,t,r,s,n=[]){Ww(e,t,r,s,n);let i=new Map;for(let[o,c]of Kw(e,t,r,s,n))i.set(o,c);return i}a(qQ,"batchSearchByHashToMap");function Kw(e,t,r,s,n=[]){return ji(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Q_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Kw,"batchHashSearch");function Ww(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(Ww,"initializeBatchSearchByHash");function z_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(z_,"validateFetchAttributes");function oi(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>AQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(oi,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&gQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ii.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Qw.exports={searchAll:OQ,searchAllToMap:bQ,count:IQ,countAll:yQ,equals:wQ,startsWith:CQ,endsWith:DQ,contains:Yw,searchByHash:BQ,setGetWholeRowAttributes:Vc,batchSearchByHash:xQ,batchSearchByHashToMap:qQ,checkHashExists:HQ,iterateDBI:NQ,greaterThan:LQ,greaterThanEqual:MQ,lessThan:UQ,lessThanEqual:PQ,between:vQ}});var ea=g((Vle,Zw)=>{var zw=require("lodash"),Jw=je(),fe=require("joi"),GQ=Q(),{hdb_schema_table:$c,checkValidTable:jw,hdb_table:Xw,hdb_database:J_}=Qs(),{handleHDBError:FQ,hdb_errors:kQ}=se(),{getDatabases:VQ}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:$Q}=kQ,YQ=fe.object({database:J_,schema:J_,table:Xw,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),KQ=fe.object({database:J_,schema:J_,table:Xw,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($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,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($c,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()});Zw.exports=function(e,t){let r=null;switch(t){case"value":r=Jw.validateBySchema(e,YQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(jw("database",e.schema)),i(jw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Jw.validateBySchema(e,KQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=GQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return FQ(new Error,n,$Q.NOT_FOUND);let o=VQ()[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 _=zw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!zw.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 Op=g((Yle,eI)=>{"use strict";var WQ=We(),QQ=ea(),{getSchemaPath:zQ}=Je();eI.exports=JQ;function JQ(e){let t=QQ(e,"hashes");if(t)throw t;let r=zQ(e.schema,e.table);return WQ.openEnvironment(r,e.table)}a(JQ,"initialize")});var bp=g((Wle,tI)=>{"use strict";var jQ=Zo(),XQ=Op();tI.exports=ZQ;async function ZQ(e){let t=await XQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(ZQ,"lmdbGetDataByHash")});var ta=g((zle,rI)=>{"use strict";var Np=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};rI.exports=Np});var nI=g((Xle,sI)=>{"use strict";var jle=ta(),ez=Zo(),tz=Op();sI.exports=rz;async function rz(e){let t=await tz(e),r=global.hdb_schema[e.schema][e.table];return ez.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(rz,"lmdbSearchByHash")});var Zs=g((e_e,iI)=>{"use strict";var yp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};iI.exports=yp});var j_=g((r_e,_I)=>{"use strict";var Qt=Zo(),sz=We(),nz=Q(),Ee=dt(),Xi=M(),iz=qi(),oI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:oz}=Je(),An=Xi.SEARCH_WILDCARDS;async function az(e,t,r){let s;e.schema===Xi.SYSTEM_SCHEMA_NAME?s=iz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=lI(e,s.hash_attribute,r,t);return cI(e,n,s.hash_attribute,r)}a(az,"prepSearch");async function cI(e,t,r,s){let n=oz(e.schema,e.table),i=await sz.openEnvironment(n,e.table),o=uI(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(cz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?aI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?aI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(cI,"executeSearch");function uI(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.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:n=Qt.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:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.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:n=Qt.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:n=Qt.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:n=Qt.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:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(uI,"searchByType");function aI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(aI,"createMapFromIterable");function cz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(cz,"checkToFetchMore");function lI(e,t,r,s){if(nz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[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(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(oI.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Xi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(oI.UNKNOWN_SEARCH_TYPE)}}a(lI,"createSearchTypeFromSearchObject");_I.exports={executeSearch:cI,createSearchTypeFromSearchObject:lI,prepSearch:az,searchByType:uI}});var fI=g((i_e,dI)=>{"use strict";var n_e=Zs(),uz=ea(),lz=Q(),_z=M(),dz=j_();dI.exports=fz;function fz(e,t){if(!lz.isEmpty(t)&&_z.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=uz(e,"value");if(s)throw s;return dz.prepSearch(e,t,!0)}a(fz,"lmdbGetDataByValue")});var Yc=g((c_e,EI)=>{"use strict";var a_e=Zs(),Ez=ea(),hz=Q(),mz=M(),pz=j_();EI.exports=Sz;async function Sz(e,t){if(!hz.isEmpty(t)&&mz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Ez(e,"value");if(s)throw s;return pz.prepSearch(e,t,!1)}a(Sz,"lmdbSearchByValue")});var mI=g((__e,hI)=>{"use strict";var l_e=dt(),wp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Ip=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};hI.exports={SearchByConditionsObject:wp,SearchCondition:Ip,SortAttribute:Cp}});var RI=g((h_e,gI)=>{"use strict";var f_e=mI().SearchByConditionsObject,Tz=Zs(),gz=ea(),Dp=Zo(),X_=dt(),{Resource:E_e}=(Os(),ne(Lp)),TI=j_(),Rz=Ap(),Az=require("lodash"),{getSchemaPath:Oz}=Je(),pI=We(),{handleHDBError:bz,hdb_errors:Nz}=se(),{HTTP_STATUS_CODES:yz}=Nz,wz=1e8;gI.exports=Iz;async function Iz(e){let t=gz(e,"conditions");if(t)throw bz(t,t.message,yz.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=Oz(e.schema,e.table),s=await pI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)pI.openDBI(s,_.search_attribute);let i=Az.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===X_.SEARCH_TYPES.EQUALS?_.estimated_count=Dp.count(s,_.search_attribute,_.search_value):l===X_.SEARCH_TYPES.CONTAINS||l===X_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=wz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await SI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(TI.filterByType),d=l.length,f=Dp.setGetWholeRowAttributes(s,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=>Rz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await SI(o,e,f,n.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=Dp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Iz,"lmdbSearchByConditions");async function SI(e,t,r,s){let n=new Tz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===X_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,TI.searchByType(e,n,i,s).map(o=>o.value)}a(SI,"executeConditionSearch")});var ra=g((p_e,AI)=>{"use strict";var Cz=M().OPERATIONS_ENUM,Mp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Cz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};AI.exports=Mp});var Up=g((T_e,DI)=>{"use strict";var yI=Zs(),wI=ra(),II=Yc(),CI=Fc(),ur=M(),OI=Q(),bI=We(),{getTransactionAuditStorePath:Dz,getSchemaPath:Lz}=Je(),NI=$();DI.exports=Mz;async function Mz(e){try{if(OI.isEmpty(global.hdb_schema[e.schema])||OI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Uz(e),await Pz(e);let t=Lz(e.schema,e.table);try{await bI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")NI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Dz(e.schema,e.table);await bI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")NI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Mz,"lmdbDropTable");async function Uz(e){let t=new yI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await II(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new wI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await CI(n)}a(Uz,"deleteAttributesFromSystem");async function Pz(e){let t=new yI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await II(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new wI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await CI(n)}catch(i){throw i}}a(Pz,"dropTableFromSystem")});var MI=g((R_e,LI)=>{"use strict";var vz=require("fs-extra"),Bz=Zs(),Hz=ta(),xz=ra(),qz=Up(),Gz=Fc(),Fz=bp(),kz=Yc(),On=M(),{getSchemaPath:Vz}=Je(),{handleHDBError:$z,hdb_errors:Yz}=se(),{HDB_ERROR_MSGS:Kz,HTTP_STATUS_CODES:Wz}=Yz;LI.exports=Qz;async function Qz(e){let t;try{t=await zz(e.schema);let r=new Bz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await kz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await qz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Gz(n);let i=Vz(t);await vz.remove(i)}catch(r){throw r}}a(Qz,"lmdbDropSchema");async function zz(e){let t=new Hz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Fz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw $z(new Error,Kz.SCHEMA_NOT_FOUND(e),Wz.NOT_FOUND,void 0,void 0,!0);return s}a(zz,"validateDropSchema")});var Z_=g((O_e,UI)=>{"use strict";var Pp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};UI.exports=Pp});var vI=g((y_e,PI)=>{"use strict";var Jz=require("fs-extra"),ed=We(),{getTransactionAuditStorePath:jz}=Je(),vp=dt(),N_e=Z_();PI.exports=Xz;async function Xz(e){let t;try{let r=jz(e.schema,e.table);await Jz.mkdirp(r),t=await ed.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{ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ed.createDBI(t,vp.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(Xz,"createTransactionsAuditEnvironment")});var qI=g((I_e,xI)=>{"use strict";var Bp=M(),BI=We(),Zz=Fo(),{getSystemSchemaPath:e2,getSchemaPath:t2}=Je(),r2=qi(),s2=T_(),Hp=S_(),n2=$(),i2=vI(),qp=r2.hdb_table,HI=[];for(let e=0;e<qp.attributes.length;e++)HI.push(qp.attributes[e].attribute);xI.exports=o2;async function o2(e,t){let r=t2(t.schema,t.table),s=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Hp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await BI.createEnvironment(r,t.table),e!==void 0){let o=await BI.openEnvironment(e2(),Bp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Zz.insertRecords(o,qp.hash_attribute,HI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xp(s),await xp(n),await xp(i)}await i2(t)}catch(o){throw o}}a(o2,"lmdbCreateTable");async function xp(e){try{await s2(e)}catch(t){n2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xp,"createAttribute")});var FI=g((D_e,GI)=>{"use strict";var a2=Dc(),c2=Mc(),u2=Y_(),Kc=M(),l2=Fo().updateRecords,_2=We(),{getSchemaPath:d2}=Je(),f2=qc(),E2=$();GI.exports=h2;async function h2(e){try{let{schema_table:t,attributes:r}=a2(e);c2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await u2(e.hdb_auth_header,t,r),n=d2(e.schema,e.table),i=await _2.openEnvironment(n,e.table),o=await l2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await f2(e,o)}catch(c){E2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(h2,"lmdbUpdateRecords")});var VI=g((M_e,kI)=>{"use strict";var m2=M().OPERATIONS_ENUM,Gp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=m2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kI.exports=Gp});var YI=g((v_e,$I)=>{"use strict";var P_e=VI(),p2=Dc(),S2=Mc(),T2=Y_(),Wc=M(),g2=Fo().upsertRecords,R2=We(),{getSchemaPath:A2}=Je(),O2=qc(),b2=$(),{handleHDBError:N2,hdb_errors:y2}=se();$I.exports=w2;async function w2(e){let t;try{t=p2(e)}catch(u){throw N2(u,u.message,y2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;S2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await T2(e.hdb_auth_header,r,s),i=A2(e.schema,e.table),o=await R2.openEnvironment(i,e.table),c=await g2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await O2(e,c)}catch(u){b2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(w2,"lmdbUpsertRecords")});var WI=g((H_e,KI)=>{"use strict";var Fp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};KI.exports=Fp});var zI=g((q_e,QI)=>{"use strict";var kp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};QI.exports=kp});var XI=g((k_e,jI)=>{"use strict";var Vp=We(),{getTransactionAuditStorePath:I2}=Je(),F_e=WI(),Qc=dt(),C2=Q(),JI=zI(),D2=require("util").promisify,L2=D2(setTimeout),M2=1e4,U2=100;jI.exports=P2;async function P2(e){let t=I2(e.schema,e.table),r=await Vp.openEnvironment(t,e.table,!0),s=Vp.listDBIs(r);Vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new JI;do n=await v2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await L2(U2);while(n.transactions_deleted>0);return i}a(P2,"deleteAuditLogsBefore");async function v2(e,t){let r=new JI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];C2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>M2)break}return await n,r}catch(s){throw s}}a(v2,"deleteTransactions")});var eC=g(($_e,ZI)=>{"use strict";var $p=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ZI.exports=$p});var rC=g((W_e,tC)=>{"use strict";var B2=Zs(),H2=ra(),K_e=eC(),en=M(),x2=Q(),Yp=We(),q2=qi(),G2=Yc(),F2=Fc(),{getSchemaPath:k2}=Je();tC.exports=V2;async function V2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=q2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Y2(e),n=k2(e.schema,e.table),i=await Yp.openEnvironment(n,e.table);return t===!0&&await $2(e,i,r.hash_attribute),Yp.dropDBI(i,e.attribute),s}a(V2,"lmdbDropAttribute");async function $2(e,t,r){let s=Yp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a($2,"removeAttributeFromAllObjects");async function Y2(e){let t=new B2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await G2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(x2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new H2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return F2(i)}a(Y2,"dropAttributeFromSystem")});var cC=g((J_e,aC)=>{"use strict";var Kp=We(),sa=dt(),z_e=wr(),Wp=M(),sC=Q(),{getTransactionAuditStorePath:K2}=Je(),W2=Zo(),td=Jo(),Q2=$();aC.exports=z2;async function z2(e){let t=K2(e.schema,e.table),r=await Kp.openEnvironment(t,e.table,!0),s=Kp.listDBIs(r);Kp.initializeDBIs(r,sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return nC(r,e.search_values);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,j2(r,e.search_values,n);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return J2(r,e.search_values);default:return nC(r)}}a(z2,"readAuditLog");function nC(e,t=[0,Date.now()]){sC.isEmpty(t[0])&&(t[0]=0),sC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new td,n))}a(nC,"searchTransactionsByTimestamp");function J2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,oC(e,i))}return Object.fromEntries(r)}a(J2,"searchTransactionsByUsername");function j2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=W2.equals(e,sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=oC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);iC(u,"records",r,l,o),iC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(j2,"searchTransactionsByHashValues");function iC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new td(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new td(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(iC,"loopRecords");function oC(e,t){let r=[];try{let s=e.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new td,i);r.push(o)}}catch(i){Q2.warn(i)}return r}catch(s){throw s}}a(oC,"batchSearchTransactions")});var lC=g((ede,uC)=>{"use strict";var{getSchemaPath:X_e}=Je(),Z_e=We(),{database:X2}=(Ae(),ne(Ge));uC.exports={writeTransaction:Z2};async function Z2(e,t,r){return X2({database:e,table:t}).transaction(r)}a(Z2,"writeTransaction")});var EC=g((rde,fC)=>{"use strict";var{getSchemaPath:_C}=Je(),dC=We();fC.exports={flush:eJ,resetReadTxn:tJ};async function eJ(e,t){return(await dC.openEnvironment(_C(e,t),t.toString())).flushed}a(eJ,"flush");async function tJ(e,t){try{(await dC.openEnvironment(_C(e,t),t.toString())).resetReadTxn()}catch{}}a(tJ,"resetReadTxn")});var SC=g((nde,pC)=>{"use strict";var{Readable:rJ}=require("stream"),{getDatabases:sJ}=(Ae(),ne(Ge)),{readSync:nJ,openSync:iJ,createReadStream:hC}=require("fs"),{open:oJ}=require("lmdb"),mC=c_(),aJ=l_(),{AUDIT_STORE_OPTIONS:cJ}=(Hi(),ne(TC)),{INTERNAL_DBIS_NAME:uJ,AUDIT_STORE_NAME:lJ}=dt();pC.exports=dJ;var Qp=32768,_J=100;async function dJ(e){let t=e.database||e.schema||"data",r=sJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=oJ({noSync:!0,maxDbs:aJ.MAX_DBS}),f,E=d.openDB(uJ,new mC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%_J===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new mC(!H,H);await S(b,P)}e.include_audit&&await S(lJ,Object.assign({},cJ)),await f;let T=hC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=iJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Qp);nJ(c,_,0,Qp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=hC(null,{fd:c,start:Qp}),f=new rJ.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",s),_}}a(dJ,"getBackup")});var AC=g((ode,RC)=>{"use strict";var fJ=$(),{handleHDBError:EJ}=se(),hJ=vb(),mJ=T_(),pJ=pp(),SJ=Mw(),TJ=Fc(),gJ=bp(),RJ=nI(),AJ=fI(),OJ=Yc(),bJ=RI(),NJ=MI(),yJ=qI(),wJ=FI(),IJ=YI(),CJ=XI(),DJ=Up(),LJ=rC(),MJ=cC(),UJ=lC(),gC=EC(),PJ=SC(),zp=class extends hJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return bJ(t)}async getDataByHash(t){return await gJ(t)}async searchByHash(t){return await RJ(t)}async getDataByValue(t,r){return await AJ(t,r)}async searchByValue(t){return await OJ(t)}async createSchema(t){return await SJ(t)}async dropSchema(t){return await NJ(t)}async createTable(t,r){return await yJ(t,r)}async dropTable(t){return await DJ(t)}async createAttribute(t){return await mJ(t)}async createRecords(t){return await pJ(t)}async updateRecords(t){return await wJ(t)}async upsertRecords(t){try{return await IJ(t)}catch(r){throw EJ(r,null,null,fJ.ERR,r)}}async deleteRecords(t){return await TJ(t)}async dropAttribute(t){return await LJ(t)}async deleteAuditLogsBefore(t){return await CJ(t)}async readAuditLog(t){return await MJ(t)}writeTransaction(t,r,s){return UJ.writeTransaction(t,r,s)}flush(t,r){return gC.flush(t,r)}resetReadTxn(t,r){return gC.resetReadTxn(t,r)}getBackup(t){return PJ(t)}};RC.exports=zp});function qJ(){xJ=setInterval(function(){for(let e of Jp)if(e.stale){let t=e[Oe]?.url;NC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},HJ).unref()}var jp,bC,NC,vJ,Jp,BJ,zc,OC,Zi,rd,HJ,xJ,Xp=Re(()=>{jp=x(wr()),bC=x(se()),NC=x($());Os();vJ=100,Jp=new Set,BJ=25e3,Zi=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;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===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),Jp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Jp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-OC>BJ)throw new bC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}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,jp.getNextMonotonicTime)());let s=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}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<vJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,OC=performance.now(),zc.then(()=>{zc=null})),n.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=s+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=0,this.writes=[]}},rd=class extends Zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,jp.getNextMonotonicTime)())}getReadTxn(){}},HJ=3e4;a(qJ,"startMonitoringTxns");qJ()});function Xe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new Zi;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var yC,eo=Re(()=>{yC=require("../index");Os();Xp();a(Xe,"transaction");(0,yC._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var vC={};Ye(vC,{ResourceBridge:()=>tS});function rS({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 IC(e,t){let r=tn(e),s=rS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Xe(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:n,select:s},i);return l=l&&nd(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 tn(e){let t=e.database||e.schema||FJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,GJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function CC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*DC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var LC,sd,Ds,MC,UC,Ms,Zp,eS,PC,GJ,FJ,kJ,VJ,wC,tS,BC=Re(()=>{"use strict";LC=x(AC()),sd=x(ea()),Ds=x(se());Ae();MC=x(Dc()),UC=x(Mc()),Ms=x(M()),Zp=x(Rn()),eS=x(Cs()),PC=x(Q());eo();id();({HDB_ERROR_MSGS:GJ}=Ds.hdb_errors),FJ="data",kJ=1e4,VJ=10,tS=class extends LC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),wC=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,sd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sS(t.schema),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.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,wC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,MC.default)(t);(0,UC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.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=nd(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:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return Xe(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return CC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,PC.async_set_timeout)(VJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%kJ===0&&await _();return u.length>0&&await _(),n?CC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,sd.default)(t,"hashes");if(r)throw r;return IC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of IC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.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 s=(0,sd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.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===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of DC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return DC(r,t.search_values?.[0],t.search_values?.[1])}}};a(rS,"getSelect");a(IC,"getRecords");a(tn,"getTable");a(CC,"createDeleteResponse");a(DC,"groupRecordsInHistory")});var ys=g((Rde,HC)=>{"use strict";var{ResourceBridge:$J}=(BC(),ne(vC)),YJ=ee();YJ.initSync();var od;function KJ(){return od||(od=new $J,od)}a(KJ,"getBridge");HC.exports=KJ()});var FC=g((Ode,GC)=>{"use strict";var xC=require("lodash"),jc=require("mathjs"),WJ=require("jsonata"),qC=Q();GC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?xC.uniqWith(e,xC.isEqual):e,searchJSON:QJ,mad:Xc.bind(null,jc.mad),mean:Xc.bind(null,jc.mean),mode:Xc.bind(null,jc.mode),prod:Xc.bind(null,jc.prod),median:Xc.bind(null,jc.median)};function Xc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Xc,"aggregateFunction");function QJ(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(qC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qC.isEmpty(this.__ala__.res[r])){let s=WJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(QJ,"searchJSON")});var VC=g((Nde,kC)=>{"use strict";var Et=require("moment"),nS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;kC.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(nS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(nS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(nS)}});var WC=g((yde,KC)=>{"use strict";var zJ=require("@turf/area"),JJ=require("@turf/length"),jJ=require("@turf/circle"),XJ=require("@turf/difference"),ZJ=require("@turf/distance"),e4=require("@turf/boolean-contains"),t4=require("@turf/boolean-equal"),r4=require("@turf/boolean-disjoint"),s4=require("@turf/helpers"),$C=M(),me=Q(),bn=$();KC.exports={geoArea:n4,geoLength:i4,geoCircle:o4,geoDifference:a4,geoDistance:YC,geoNear:c4,geoContains:u4,geoEqual:l4,geoCrosses:_4,geoConvert:d4};function n4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return zJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(n4,"geoArea");function i4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return JJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(i4,"geoLength");function o4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(o4,"geoCircle");function a4(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 XJ(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(a4,"geoDifference");function YC(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 ZJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(YC,"geoDistance");function c4(e,t,r,s){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 YC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(c4,"geoNear");function u4(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 e4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(u4,"geoContains");function l4(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 t4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(l4,"geoEqual");function _4(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!r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoCrosses");function d4(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($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=me.autoCastJSON(e)),s4[t](e,r)}a(d4,"geoConvert")});var ad=g((Ide,QC)=>{var to=FC(),xr=VC(),rn=WC();QC.exports=e=>{e.aggr.mad=e.aggr.MAD=to.mad,e.aggr.mean=e.aggr.MEAN=to.mean,e.aggr.mode=e.aggr.MODE=to.mode,e.aggr.prod=e.aggr.PROD=to.prod,e.aggr.median=e.aggr.MEDIAN=to.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=to.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=to.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var XC=g((Cde,jC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var f4=ad(),zC=require("clone"),cd=require("recursive-iterator"),le=$(),Ie=Q(),na=ys(),E4=M(),{hdb_errors:h4}=se(),{getDatabases:JC}=(Ae(),ne(Ge)),m4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";f4(lr);var iS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.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(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new cd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(zC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=JC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new cd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new cd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(E4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.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(Ie.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"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.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)s.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,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(zC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.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(m4)>-1&&this.tables.forEach(n=>{let i={columnid:JC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await na.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.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 na.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.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 na.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await na.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_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 lr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.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,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.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=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new cd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await na.getDataByHash(c),_=n.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=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(h4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await na.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};jC.exports=iS});var Dr=g((Lde,ZC)=>{"use strict";var p4=Ub();ZC.exports={searchByConditions:T4,searchByHash:g4,searchByValue:R4,search:A4};var oS=ys(),{transformReq:aS}=Q(),S4=XC();async function T4(e){return aS(e),oS.searchByConditions(e)}a(T4,"searchByConditions");async function g4(e){aS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oS.searchByHash(e))r&&t.push(r);return t}a(g4,"searchByHash");async function R4(e){aS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oS.searchByValue(e))t.push(r);return t}a(R4,"searchByValue");function A4(e,t){try{let r=new p4(e);r.validate(),new S4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(A4,"search")});var ud=g((Ude,eD)=>{"use strict";var O4=ys();eD.exports={writeTransaction:b4};function b4(e,t,r){return O4.writeTransaction(e,t,r)}a(b4,"writeTransaction")});var nD=g((Bde,sD)=>{"use strict";var N4=Dr(),y4=gn(),tD=$(),w4=Lr(),vde=ud(),I4=require("clone"),uS=require("alasql"),C4=ad(),rD=require("util"),D4=rD.promisify(y4.getTableSchema),L4=rD.promisify(N4.search),M4=M(),cS=Q();C4(uS);sD.exports={update:P4};var U4="There was a problem performing this update. Please check the logs and try again.";async function P4({statement:e,hdb_user:t}){let r=await D4(e.table.databaseid,e.table.tableid),s=v4(e.columns);cS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=I4(n),c=cS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=uS.parse(u).statements[0],l=await L4(_),d=B4(s,l);return H4(o,d,t)}a(P4,"update");function v4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uS.compile(`SELECT ${r.expression.toString()} AS [${M4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tD.error(t),new Error(U4)}}a(v4,"createUpdateRecord");function B4(e,t){return cS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(B4,"buildUpdateRecords");async function H4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await w4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(H4,"updateRecords")});var oD=g((Gde,iD)=>{var x4=require("alasql"),q4=Dr(),G4=$(),F4=ys(),_S=require("util"),lS=Q(),k4=M(),V4=gn(),xde=ud(),qde=Lr(),$4="record",Y4="successfully deleted",K4=_S.callbackify(J4),W4=_S.promisify(q4.search),Q4=_S.promisify(V4.getTableSchema);iD.exports={convertDelete:K4};function z4(e){return`${e.deleted_hashes.length} ${$4}${e.deleted_hashes.length===1?"":"s"} ${Y4}`}a(z4,"generateReturnMessage");async function J4({statement:e,hdb_user:t}){let r=await Q4(e.table.databaseid,e.table.tableid);lS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=lS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=x4.parse(o).statements[0],u={operation:k4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await W4(c);let _=await F4.deleteRecords(u);return lS.isEmptyOrZeroLength(_.message)&&(_.message=z4(_)),delete _.txn_time,_}catch(_){throw G4.error(_),_.hdb_code?_.message:_}}a(J4,"convertDelete")});var _D=g((kde,lD)=>{"use strict";var j4=Zn(),{hdb_errors:aD}=se(),{getDatabases:cD}=(Ae(),ne(Ge));lD.exports={checkSchemaExists:uD,checkSchemaTableExists:X4,schema_describe:j4};async function uD(e){if(!cD()[e])return aD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uD,"checkSchemaExists");async function X4(e,t){let r=await uD(e);if(r)return r;if(!cD()[e][t])return aD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(X4,"checkSchemaTableExists")});var eu=g(($de,Z4)=>{Z4.exports={name:"harperdb",version:"4.3.0-beta.10",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.7","nats-server":"2.10.11"},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:"3.0.0-beta.6",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.19.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.1",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"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>e3});function e3(e){gD=e}function qr(e,t,r,s,n){if(!gD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=dd.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:s,type:n},dd.set(i,o)}ld||t3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){OD.push(e)}function t3(){ld=performance.now(),setTimeout(async()=>{let e=performance.now()-ld;ld=0;let t=[],r={time:Date.now(),period:e,threadId:ro.threadId,metrics:t};for(let[n,i]of dd){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 bD){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 ND()}let s=process.memoryUsage();t.push({metric:"memory",threadId:ro.threadId,byThread:!0,...s});for(let n of OD)n(t);dd=new Map,ro.parentPort?ro.parentPort.postMessage({type:AD,report:r}):ID({report:r})},RD).unref()}async function r3(e,t=6e4){let r=ES(),s=yD(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:j,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await ND()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let j of k){let Te=j[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of bD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,j,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:j,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,_d.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,_d.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-dD,active:h-fD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}dD=E,fD=h}async function ED(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function ES(){return hD||(hD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function yD(){return mD||(mD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function i3(){wD=!0;let e=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await r3(RD,e),await ED(ES(),s3),await ED(yD(),n3)},Math.min(e/2,2147483647)).unref()}function ID(e,t){let r=e.report;r.threadId=t?.threadId||ro.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(pD+=s.mean*s.count);r.totalBytesProcessed=pD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(SD.get(t))}),SD.set(t,t.performance.eventLoopUtilization())),r.id=(0,_d.getNextMonotonicTime)(),ES().primaryStore.put(r.id,r),wD||i3(),o3&&(CD=c3(r))}async function c3(e){if(await CD,!ai){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ai=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ai=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ai.stat()).size;if(t>a3){let r=Buffer.alloc(t);await ai.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ai.write(r,{position:0}),await ai.truncate(r.length),t=r.length}await ai.write(JSON.stringify(e)+`
|
|
8
|
+
`,t)}var ro,TD,tu,ru,dS,_d,su,fS,dd,gD,ld,RD,AD,OD,bD,dD,fD,ND,s3,n3,hD,mD,wD,pD,SD,o3,CD,ai,a3,Nn=Re(()=>{ro=require("worker_threads"),TD=x(Ke());Ae();tu=x($()),ru=require("path"),dS=require("fs/promises"),_d=x(wr()),su=x(ee()),fS=x(M());nr();(0,su.initSync)();dd=new Map,gD=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(e3,"setAnalyticsEnabled");a(qr,"recordAction");tt.recordAnalytics=qr;a(ns,"recordActionBinary");ld=0,RD=1e3,AD="analytics-report",OD=[];a(nu,"addAnalyticsListener");bD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(t3,"sendAnalytics");a(r3,"aggregation");dD=0,fD=0,ND=a(()=>new Promise(setImmediate),"rest");a(ED,"cleanup");s3=36e5,n3=31536e6;a(ES,"getRawAnalyticsTable");a(yD,"getAnalyticsTable");(0,TD.setChildListenerByType)(AD,ID);a(i3,"startScheduledTasks");pD=0,SD=new Map,o3=!1;a(ID,"recordAnalytics");a3=1e6;a(c3,"logAnalytics")});var gS=g((rfe,qD)=>{"use strict";var{decode:u3}=require("msgpackr"),{isMainThread:efe,parentPort:l3,threadId:tfe}=require("worker_threads"),ou=st(),ia=Fe(),pS=M(),zt=$(),mS=ee(),LD=M(),{onMessageByType:_3}=Ke(),MD=Tn(),{recordAction:d3,recordActionBinary:f3}=(Nn(),ne(iu)),{publishToStream:E3}=ou,{ConsumerEvents:h3}=require("nats"),m3=Dr(),{promisify:p3}=require("util"),UD=p3(setTimeout),hd=1e4,md,Ed,S3,T3,PD,au=new Map,oa=new Map;qD.exports={initialize:SS,ingestConsumer:TS,setSubscription:g3,setIgnoreOrigin:O3,getDatabaseSubscriptions:A3,updateConsumer:vD};async function SS(){_3(pS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async s=>{await vD(s)}),PD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();md=e,Ed=e.info.server_name,S3=t,T3=r}a(SS,"initialize");async function vD(e){if(e.status==="start"){let{js:t,jsm:r}=await BD(e.node_domain_name);TS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),oa.get(e.node_domain_name)==="failed"&&oa.set(e.node_domain_name,"close")}}a(vD,"updateConsumer");var pd=new Map;function g3(e,t,r){let s=pd.get(e);s||pd.set(e,s=new Map),s.set(t,r),PD||SS().then(R3)}a(g3,"setSubscription");async function R3(){let e=await m3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ia.SERVER_SUFFIX.LEAF,{js:s,jsm:n}=await BD(r);if(n){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=MD.createNatsTableStreamName(o,c);TS(u,s,n,r)}}}}a(R3,"accessConsumers");async function BD(e){let t,r,s=1;for(;!r;)try{t=await md.jetstream({domain:e,timeout:6e4}),r=await md.jetstreamManager({domain:e,timeout:6e4})}catch(n){if(oa.get(e)==="close")break;oa.set(e,"failed"),s%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",n.message);let i=s++*100<hd?s++*100:hd;await UD(i)}return{js:t,jsm:r}}a(BD,"connectToRemoteJS");function A3(){return pd}a(A3,"getDatabaseSubscriptions");var HD;function O3(e){HD=e}a(O3,"setIgnoreOrigin");var xD=100,DD=new Array(xD),fd=0;async function TS(e,t,r,s){let{connection:n}=await ou.getNATSReferences();md=n,Ed=n.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ed),zt.notify("Initializing ingest consumer for node:",s,"stream:",e)}catch(_){if(oa.get(s)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",s,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",s,"stream:",e),i=await ou.createConsumer(r,e,Ed,new Date(Date.now()).toISOString()));let l=o++*100<hd?o++*100:hd;await UD(l)}let c=!1,u;for(l3?.on("message",async _=>{let{type:l}=_;l===LD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(au.get(e+s)==="close"||oa.get(s)==="close"){au.delete(e+s),c=!0;continue}u=await i.consume({max_messages:mS.get(pS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+s,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===h3.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${s} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${s} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await DD[fd],DD[fd]=b3(l).catch(d=>{zt.error(d)}),++fd>=xD&&(fd=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",s,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await SS()}}a(TS,"ingestConsumer");async function b3(e){let t=u3(e.data);d3(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,s=!1,n=mS.get(pS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ia.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ia.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(ia.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!HD),f3(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(ia.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(ia.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=pd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:hS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:hS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:hS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}mS.get(LD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&E3(e.subject.split(".").slice(0,-1).join("."),MD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(b3,"messageProcessor");function hS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(hS,"convertOperation")});var st=g((ufe,rL)=>{"use strict";var Mt=ee();Mt.initSync();var N3=require("fs-extra"),y3=require("semver"),lu=require("path"),{monotonicFactory:w3}=require("ulidx"),FD=w3(),I3=require("util"),kD=require("child_process"),C3=I3.promisify(kD.exec),D3=kD.spawn,Ft=Fe(),Ce=M(),Sd=Q(),Ps=$(),Td=Tn(),L3=ud(),cu=Pr(),{broadcast:M3,onMessageByType:U3,getWorkerIndex:P3}=Ke(),{isMainThread:VD}=require("worker_threads"),{Encoder:v3,decode:bS}=require("msgpackr"),$D=new v3,{isEmpty:oo}=Sd,YD=ss(),nfe=48*36e11;VD&&U3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,io=void 0});var{connect:B3,StorageType:H3,RetentionPolicy:x3,AckPolicy:NS,DeliverPolicy:yS,DiscardPolicy:q3,NatsConnection:ife,JetStreamManager:ofe,JetStreamClient:afe,StringCodec:cfe,JSONCodec:G3,createInbox:wS,headers:F3,ErrorCode:GD}=require("nats"),{PACKAGE_ROOT:k3}=M(),V3=eu(),{recordAction:$3}=(Nn(),ne(iu)),KD=G3(),Y3="clustering",K3=V3.engines[Ft.NATS_SERVER_NAME],W3=lu.join(k3,"dependencies"),OS=lu.join(W3,`${process.platform}-${process.arch}`,Ft.NATS_BINARY_NAME),RS,AS,uu,so,no;rL.exports={runCommand:WD,checkNATSServerInstalled:Q3,createConnection:IS,getConnection:gd,getJetStreamManager:_u,getJetStream:zD,getNATSReferences:vs,getServerList:J3,createLocalStream:CS,listStreams:JD,deleteLocalStream:j3,getServerConfig:du,listRemoteStreams:X3,viewStream:Z3,viewStreamIterator:ej,publishToStream:tj,request:nj,reloadNATS:DS,reloadNATSHub:ij,reloadNATSLeaf:oj,extractServerName:sj,requestErrorHandler:aj,createLocalTableStream:eL,createTableStreams:lj,purgeTableStream:tL,purgeSchemaTableStreams:_j,getStreamInfo:dj,updateLocalStreams:Ej,closeConnection:z3,getJsmServerName:Rd,addNatsMsgHeader:jD,clearClientCache:QD,updateRemoteConsumer:cj,createConsumer:XD,updateConsumerIterator:uj};async function WD(e,t=void 0){let{stdout:r,stderr:s}=await C3(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(dD,"runCommand");async function t3(){try{await M4.access(nS)}catch{return!1}let e=await dD(`${nS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return P4.eq(t,Z4)}a(t3,"checkNATSServerInstalled");async function cS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await cD.getClusterUser();if(so(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 Y4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(Ue.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),fD()}),i}a(cS,"createConnection");function fD(){ns=void 0,eo=void 0,to=void 0,ro=void 0}a(fD,"clearClientCache");async function r3(){ns&&(await ns.drain(),ns=void 0,eo=void 0,to=void 0,ro=void 0)}a(r3,"closeConnection");var ns,ro;async function ud(){return ro||(ro=cS(Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ns=await ro),ns||ro}a(ud,"getConnection");async function ou(){if(eo)return eo;so(ns)&&await ud();let{domain:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return eo=await ns.jetstreamManager({domain:e,timeout:6e4}),eo}a(ou,"getJetStreamManager");async function ED(){if(to)return to;so(ns)&&await ud();let{domain:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=ns.jetstream({domain:e,timeout:6e4}),to}a(ED,"getJetStream");async function ur(){let e=ns||await ud(),t=eo||await ou(),r=to||await ED();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function s3(e){let t=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await cD.getClusterUser(),n=await cS(t,r,s),i=aS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=_D.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await iS.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(s3,"getServerList");async function uS(e,t){let{jsm:r}=await ur(),s=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:uD.File,retention:lD.Limits,subjects:t,discard:K4.Old,max_msgs:n,max_bytes:i,max_age:s})}a(uS,"createLocalStream");async function hD(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(hD,"listStreams");async function n3(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(n3,"deleteLocalStream");async function i3(e){let{connection:t}=await ur(),r=[],s=aS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(_D.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(i3,"listRemoteStreams");async function o3(e,t=void 0,r=void 0){let{jsm:s,js:n}=await ur(),i=iD(),o={durable_name:i,ack_policy:ad.Explicit};t&&(o.deliver_policy=cd.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=oS(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(o3,"viewStream");async function*a3(e,t=void 0,r=void 0){let{jsm:s,js:n}=await ur(),i=iD(),o={durable_name:i,ack_policy:ad.Explicit};t&&(o.deliver_policy=cd.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=oS(_.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(a3,"viewStreamIterator");async function c3(e,t,r,s){Fr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=mD(s,r);let{js:n}=await ur(),i=await cu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:aD.encode(s);try{Fr.trace(`publishToStream publishing to subject: ${o}`),X4(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return gD(async()=>{try{await n.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 uS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(c3,"publishToStream");function mD(e,t){t===void 0&&(t=Q4());let r=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(mD,"addNatsMsgHeader");function au(e){e=e.toLowerCase();let t=iu.join(Gt.get(Ue.CONFIG_PARAMS.ROOTPATH),j4);if(e===Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return so(sS)&&(sS={port:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Ue.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}),sS;if(e===Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return so(rS)&&(rS={port:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:iu.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),rS;Fr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(au,"getServerConfig");async function u3(e){let{jsm:t}=await ur(),r=await cu();try{await t.streams.add({name:e.stream_name,storage:uD.File,retention:lD.Limits,max_age:V4,max_bytes:$4,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ad.Explicit,durable_name:e.durable_name,deliver_policy:cd.All,max_ack_pending:1e4});else throw s}}a(u3,"createWorkQueueStream");async function l3(){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:ad.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:cd.All,max_ack_pending:1e4}))}a(l3,"updateIngestStreamConsumer");async function pD(e,t,r){let{jsm:s}=await ur(),n=await s.streams.info(t),i=SD(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=od.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.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 s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(pD,"addSourceToWorkStream");function SD(e){return e.split(".")[1]}a(SD,"extractServerName");async function TD(e,t,r){let{jsm:s}=await ur(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=od.createNatsTableStreamName(n,i),u=await s.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 s.streams.update(t,u.config)}a(TD,"removeSourceFromWorkStream");async function _3(e,t,r=6e4,s=aS()){if(!iS.isObject(t))throw new Error("data param must be an object");let n=aD.encode(t),{connection:i}=await ur(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return oS(c.data)}a(_3,"request");function lS(e){return new Promise(async(t,r)=>{let s=x4(nS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(lS,"reloadNATS");async function d3(){let{pid_file_path:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lS(e)}a(d3,"reloadNATSHub");async function f3(){let{pid_file_path:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lS(e)}a(f3,"reloadNATSLeaf");function E3(e,t,r){let s;switch(e.code){case nD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(E3,"requestErrorHandler");async function h3(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await gD(async()=>{e.subscribe===!0?await pD(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await TD(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(h3,"updateWorkStream");function gD(e){return q4.writeTransaction(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(gD,"exclusiveLock");async function RD(e,t){let r=od.createNatsTableStreamName(e,t),s=await cu(),n=T3(e,t,s);await uS(r,[n])}a(RD,"createLocalTableStream");async function m3(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await RD(s,n)}}a(m3,"createTableStreams");async function AD(e,t,r=!1){if(Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let s=od.createNatsTableStreamName(e,t),{jsm:n}=await ur();r?await n.streams.purge(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name):await n.streams.purge(s)}catch(s){if(s.message==="stream not found")Fr.warn(s);else throw s}}a(AD,"purgeTableStream");async function p3(e,t){if(Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await AD(e,t[r])}a(p3,"purgeSchemaTableStreams");async function S3(e){return(await ou()).streams.info(e)}a(S3,"getStreamInfo");function T3(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(T3,"createSubjectName");async function cu(){if(nu)return nu;if(nu=(await ou())?.nc?.info?.server_name,nu===void 0)throw new Error("Unable to get jetstream manager server name");return nu}a(cu,"getJsmServerName");async function g3(){let e=await ou(),t=await cu(),r=await hD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=R3(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.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: ${_}`),n.subjects[0]=_}else if(n.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: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Fr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(g3,"updateLocalStreams");function R3(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 s=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(R3,"updateStreamLimits")});var uu=T((Ide,ID)=>{"use strict";var na=f_(),ia=xC(),A3=G(),O3=require("uuid").v4,yde=require("clone"),_d=An(),oa=D(),b3=require("util"),ai=ws(),{handleHDBError:lr,hdb_errors:N3}=Z(),{HDB_ERROR_MSGS:ld,HTTP_STATUS_CODES:_r}=N3,{SchemaEventMsg:dd}=Ls(),bD=nt(),{getDatabases:y3}=(ge(),ee(xe)),{transformReq:aa}=z();ID.exports={createSchema:I3,createSchemaStructure:ND,createTable:w3,createTableStructure:yD,createAttribute:M3,dropSchema:C3,dropTable:D3,dropAttribute:L3,getBackup:P3};async function I3(e){let t=await ND(e);return _d.signalSchemaChange(new dd(process.pid,e.operation,e.schema)),t}a(I3,"createSchema");async function ND(e){let t=na.schema_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(aa(e),!await ia.checkSchemaExists(e.schema))throw lr(new Error,ld.SCHEMA_EXISTS_ERR(e.schema),_r.BAD_REQUEST,oa.LOG_LEVELS.ERROR,ld.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(ND,"createSchemaStructure");async function w3(e){return aa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await yD(e)}a(w3,"createTable");async function yD(e){let t=na.create_table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(na.validateTableResidence(e.residence),!await ia.checkSchemaTableExists(e.schema,e.table))throw lr(new Error,ld.TABLE_EXISTS_ERR(e.schema,e.table),_r.BAD_REQUEST,oa.LOG_LEVELS.ERROR,ld.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:O3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ai.createTable(s,e);else throw lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",_r.BAD_REQUEST);else await ai.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(yD,"createTableStructure");async function C3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=na.schema_object(e),s=t??r;if(s)throw lr(s,s.message,_r.BAD_REQUEST,void 0,void 0,!0);aa(e);let n=await ia.checkSchemaExists(e.schema);if(n)throw lr(new Error,n,_r.NOT_FOUND,oa.LOG_LEVELS.ERROR,n,!0);let i=await ia.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema)),await bD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(C3,"dropSchema");async function D3(e){let t=na.table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await bD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(D3,"dropTable");async function L3(e){let t=na.attribute_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,oa.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(oa.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 ai.dropAttribute(e),U3(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw A3.error(`Got an error deleting attribute ${b3.inspect(e)}.`),s}}a(L3,"dropAttribute");function U3(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(U3,"dropAttributeFromGlobal");async function M3(e){aa(e);let t=y3()[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 ai.createAttribute(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(M3,"createAttribute");function P3(e){return ai.getBackup(e)}a(P3,"getBackup")});var CD=T((Cde,wD)=>{"use strict";var{OPERATIONS_ENUM:v3}=D(),_S=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=v3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};wD.exports=_S});var dS=T((Ude,PD)=>{"use strict";var B3=ws(),Lde=CD(),fd=z(),Ed=D(),H3=j(),{handleHDBError:DD,hdb_errors:x3}=Z(),{HDB_ERROR_MSGS:LD,HTTP_STATUS_CODES:UD}=x3,q3=Object.values(Ed.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),MD="To use this operation audit log must be enabled in harperdb-config.yaml";PD.exports=F3;async function F3(e){if(fd.isEmpty(e.schema))throw new Error(LD.SCHEMA_REQUIRED_ERR);if(fd.isEmpty(e.table))throw new Error(LD.TABLE_REQUIRED_ERR);if(!H3.get(Ed.CONFIG_PARAMS.LOGGING_AUDITLOG))throw DD(new Error,MD,UD.BAD_REQUEST,Ed.LOG_LEVELS.ERROR,MD,!0);let t=fd.checkSchemaTableExist(e.schema,e.table);if(t)throw DD(new Error,t,UD.NOT_FOUND,Ed.LOG_LEVELS.ERROR,t,!0);if(!fd.isEmpty(e.search_type)&&q3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await B3.readAuditLog(e)}a(F3,"readAuditLog")});var BD=T((Pde,vD)=>{"use strict";var{OPERATIONS_ENUM:G3}=D(),fS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=G3.GET_BACKUP,this.schema=t,this.table=r}};vD.exports=fS});var qD=T((xde,xD)=>{"use strict";var k3=ws(),Bde=BD(),ES=z(),V3=D(),Hde=j(),{handleHDBError:$3,hdb_errors:Y3}=Z(),{HDB_ERROR_MSGS:HD,HTTP_STATUS_CODES:K3}=Y3;xD.exports=W3;async function W3(e){if(ES.isEmpty(e.schema))throw new Error(HD.SCHEMA_REQUIRED_ERR);if(ES.isEmpty(e.table))throw new Error(HD.TABLE_REQUIRED_ERR);let t=ES.checkSchemaTableExist(e.schema,e.table);if(t)throw $3(new Error,t,K3.NOT_FOUND,V3.LOG_LEVELS.ERROR,t,!0);return await k3.getBackup(read_audit_log_object)}a(W3,"getBackup")});var YD=T((Fde,$D)=>{var ci=require("validate.js"),GD=Je(),ca=D(),{handleHDBError:Q3,hdb_errors:z3}=Z(),{HDB_ERROR_MSGS:Et,HTTP_STATUS_CODES:J3}=z3,hS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),X3={STRUCTURE_USER:"structure_user"},FD=Object.values(ca.ROLE_TYPES_ENUM),j3="attribute_permissions",Z3="attribute_name",{PERMS_CRUD_ENUM:ua}=ca,eX=[j3,...Object.values(ua)],kD=[ua.READ,ua.INSERT,ua.UPDATE],tX=[Z3,...kD];function rX(e){let t=hS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,VD(e,t)}a(rX,"addRoleValidation");function sX(e){let t=hS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,VD(e,t)}a(sX,"alterRoleValidation");function nX(e){let t=hS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,GD.validateObject(e,t)}a(nX,"dropRoleValidation");var iX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function VD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)iX.includes(s[o])||n.push(s[o]);n.length>0&&Tt(Et.INVALID_ROLE_JSON_KEYS(n),r);let i=GD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Tt(o,r)}),e.permission){let o=oX(e);o&&Tt(o,r),FD.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&Tt(Et.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FD.indexOf(o)<0){if(o===X3.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]||Tt(Et.SCHEMA_NOT_FOUND(d),r)}continue}Tt(Et.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Tt(Et.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]){Tt(Et.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{eX.includes(l)||Tt(Et.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ua).forEach(l=>{ci.isDefined(_[l])?ci.isBoolean(_[l])||Tt(Et.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Tt(Et.TABLE_PERM_MISSING(l),r,o,u)}),ci.isDefined(_.attribute_permissions)){if(!ci.isArray(_.attribute_permissions)){Tt(Et.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Tt(Et.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=>{!tX.includes(p)&&p!==ua.DELETE&&Tt(Et.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ci.isDefined(E.attribute_name)){Tt(Et.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Tt(Et.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}kD.forEach(p=>{ci.isDefined(E[p])?ci.isBoolean(E[p])||Tt(Et.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Tt(Et.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}`;Tt(Et.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return aX(r)}a(VD,"customValidate");$D.exports={addRoleValidation:rX,alterRoleValidation:sX,dropRoleValidation:nX};function oX(e){let{operation:t,permission:r}=e;if(t===ca.OPERATIONS_ENUM.ADD_ROLE||t===ca.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Et.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ca.ROLE_TYPES_ENUM.SUPER_USER:ca.ROLE_TYPES_ENUM.CLUSTER_USER;return Et.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(oX,"validateNoSUPerms");function aX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Et.ROLE_PERMS_ERROR,...e};return Q3(new Error,s,J3.BAD_REQUEST)}else return null}a(aX,"generateRolePermResponse");function Tt(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Tt,"addPermError")});var RS=T((kde,zD)=>{"use strict";var KD=Lr(),WD=es(),cX=ti(),pS=YD(),SS=An(),uX=require("uuid").v4,lX=require("util"),hd=D(),_X=z(),TS=WD.searchByValue,dX=WD.searchByHash,fX=lX.promisify(cX.delete),EX=Xs(),hX=ea(),{hdb_errors:mX,handleHDBError:no}=Z(),{HDB_ERROR_MSGS:QD,HTTP_STATUS_CODES:lu}=mX,{UserEventMsg:gS}=Ls();zD.exports={addRole:pX,alterRole:SX,dropRole:TX,listRoles:gX};function mS(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(mS,"scrubRoleDetails");async function pX(e){let t=pS.addRoleValidation(e);if(t)throw t;e=mS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await TS(r)||[])}catch(i){throw no(i)}if(s&&s.length>0)throw no(new Error,QD.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=uX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await KD.insert(n),SS.signalUserChange(new gS(process.pid)),e=mS(e),e}a(pX,"addRole");async function SX(e){let t=pS.alterRoleValidation(e);if(t)throw t;e=mS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await KD.update(r)}catch(n){throw no(n)}if(s&&s?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",lu.BAD_REQUEST,void 0,void 0,!0);return await SS.signalUserChange(new gS(process.pid)),e}a(SX,"alterRole");async function TX(e){let t=pS.dropRoleValidation(e);if(t)throw no(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new hX(hd.SYSTEM_SCHEMA_NAME,hd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await dX(r));if(s.length===0)throw no(new Error,QD.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let n=new EX(hd.SYSTEM_SCHEMA_NAME,hd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await TS(n)),o=!1;if(_X.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 ${s[0].role} as it has active user(s) tied to this role`,lu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await fX(c),SS.signalUserChange(new gS(process.pid)),`${s[0].role} successfully deleted`}a(TX,"dropRole");async function gX(){return TS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(gX,"listRoles")});var ZD=T(($de,jD)=>{"use strict";var RX=j(),ui=require("joi"),AX=Je(),JD=require("moment"),OX=require("fs-extra"),AS=require("path"),bX=require("lodash"),_u=D(),{LOG_LEVELS:io}=D(),NX="YYYY-MM-DD hh:mm:ss",yX=AS.resolve(__dirname,"../logs");jD.exports=function(e){return AX.validateBySchema(e,IX)};var IX=ui.object({from:ui.custom(XD),until:ui.custom(XD),level:ui.valid(io.NOTIFY,io.FATAL,io.ERROR,io.WARN,io.INFO,io.DEBUG,io.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom(wX)});function XD(e,t){if(JD(e,JD.ISO_8601).format(NX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XD,"validateDatetime");function wX(e,t){if(bX.invert(_u.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=RX.get(_u.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?_u.LOG_NAMES.HDB:e,i=n===_u.LOG_NAMES.INSTALL?AS.join(yX,_u.LOG_NAMES.INSTALL):AS.join(s,n);return OX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(wX,"validateReadLogPath")});var bS=T((Kde,tL)=>{"use strict";var md=D(),CX=G(),DX=j(),LX=ZD(),OS=require("path"),eL=require("fs-extra"),{once:UX}=require("events"),{handleHDBError:MX,hdb_errors:PX}=Z(),{PACKAGE_ROOT:vX}=D(),BX=OS.join(vX,"logs"),HX=1e3,xX=200;tL.exports=qX;async function qX(e){let t=LX(e);if(t)throw MX(t,t.message,PX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=DX.get(md.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?md.LOG_NAMES.HDB:e.log_name,n=s===md.LOG_NAMES.INSTALL?OS.join(BX,md.LOG_NAMES.INSTALL):OS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?HX: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(eL.statSync(n).size-(h+5)*xX,0));let S=eL.createReadStream(n,{start:p});S.on("error",q=>{CX.error(q)});let R=0,I=[],w="",B;S.on("data",q=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=w+q;let Q=0,Y;for(;(Y=P.exec(q))&&!S.destroyed;){B&&(B.message=q.slice(Q,Y.index),K(B));let[J,re,Ie]=Y,se=Ie.split("] ["),ut=se[0],de=se[1];se.splice(0,2),B={timestamp:re,thread:ut,level:de,tags:se,message:""},Q=Y.index+J.length}w=q.slice(Q)}),S.on("end",q=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(q){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),q.level===o&&P>=Q&&P<=Y&&R<E?R++:q.level===o&&P>=Q&&P<=Y&&(li(q,f,I),R++,R===h&&S.destroy());break;case(i&&c):P=new Date(q.timestamp),Q=new Date(u),q.level===o&&P>=Q&&R<E?R++:q.level===o&&P>=Q&&(li(q,f,I),R++,R===h&&S.destroy());break;case(i&&_):P=new Date(q.timestamp),Y=new Date(l),q.level===o&&P<=Y&&R<E?R++:q.level===o&&P<=Y&&(li(q,f,I),R++,R===h&&S.destroy());break;case(c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&R<E?R++:P>=Q&&P<=Y&&(li(q,f,I),R++,R===h&&S.destroy());break;case i:q.level===o&&R<E?R++:q.level===o&&(li(q,f,I),R++,R===h&&S.destroy());break;case c:P=new Date(q.timestamp),Q=new Date(u),P>=Q&&R<E?R++:P>=Q&&R>=E&&(li(q,f,I),R++,R===h&&S.destroy());break;case _:P=new Date(q.timestamp),Y=new Date(l),P<=Y&&R<E?R++:P<=Y&&R>=E&&(li(q,f,I),R++,R===h&&S.destroy());break;default:R<E?R++:(li(q,f,I),R++,R===h&&S.destroy())}}return a(K,"onLogMessage"),await UX(S,"close"),I}a(qX,"readLog");function li(e,t,r){t==="desc"?FX(e,r):t==="asc"?GX(e,r):r.push(e)}a(li,"pushLineToResult");function FX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(FX,"insertDescending");function GX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(GX,"insertAscending")});var pd=T((Xde,iL)=>{"use strict";var NS=require("joi"),{string:du,boolean:rL,date:kX}=NS.types(),VX=Je(),{validateSchemaExists:Qde,validateTableExists:zde,validateSchemaName:Jde}=Ks(),$X=D(),YX=qe(),sL=j();sL.initSync();var KX=du.invalid(sL.get($X.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(),nL={operation:du.valid("add_node","update_node","set_node_replication"),node_name:KX,subscriptions:NS.array().items({table:du.optional(),schema:du.optional(),database:du.optional(),subscribe:rL.required(),publish:rL.required().custom(QX),start_time:kX.iso()}).min(1).required()};function WX(e){return VX.validateBySchema(e,NS.object(nL))}a(WX,"addUpdateNodeValidator");function QX(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(QX,"checkForFalsy");iL.exports={addUpdateNodeValidator:WX,validation_schema:nL}});var aL=T((Zde,oL)=>{var zX=Je(),JX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};oL.exports=function(e){return zX.validateObject(e,JX)}});var Sd=T((efe,cL)=>{"use strict";var XX=D().OPERATIONS_ENUM,yS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=XX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cL.exports=yS});var lL=T((rfe,uL)=>{"use strict";var jX={OPERATION:"operation",REFRESH:"refresh"},IS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},wS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};uL.exports={JWTTokens:IS,TOKEN_TYPE_ENUM:jX,JWTRSAKeys:wS}});var hu=T((nfe,EL)=>{"use strict";var Eu=require("jsonwebtoken"),CS=require("fs-extra"),DS=z(),is=D(),{handleHDBError:dr,hdb_errors:ZX}=Z(),{HTTP_STATUS_CODES:fr,AUTHENTICATION_ERROR_MSGS:Er}=ZX,fu=G(),_L=y_(),MS=rs(),ej=Lr().update,tj=Sd(),rj=An(),{UserEventMsg:sj}=Ls(),_i=j();_i.initSync();var LS=require("path"),{JWTTokens:nj,JWTRSAKeys:ij,TOKEN_TYPE_ENUM:Td}=lL(),oj=_i.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",aj=_i.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",gd="RS256",US;EL.exports={createTokens:cj,validateOperationToken:lj,refreshOperationToken:uj,validateRefreshToken:fL};async function cj(e){if(DS.isEmpty(e)||typeof e!="object")throw dr(new Error,Er.INVALID_AUTH_OBJECT,fr.BAD_REQUEST,void 0,void 0,!0);if(DS.isEmpty(e.username))throw dr(new Error,Er.USERNAME_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);if(DS.isEmpty(e.password))throw dr(new Error,Er.PASSWORD_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await MS.findAndValidateUser(e.username,e.password),!t)throw dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw fu.error(f),dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Rd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await dL(i,r.private_key,r.passphrase),c=await Eu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:aj,algorithm:gd,subject:Td.REFRESH}),u=_L.hash(c),_=new tj(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await ej(_)}catch(f){fu.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 rj.signalUserChange(new sj(process.pid)),new nj(o,c)}a(cj,"createTokens");async function dL(e,t,r){return await Eu.sign(e,{key:t,passphrase:r},{expiresIn:oj,algorithm:gd,subject:Td.OPERATION})}a(dL,"signOperationToken");async function Rd(){if(US===void 0)try{let e=LS.join(_i.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=LS.join(_i.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=LS.join(_i.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await CS.readFile(e)).toString(),n=(await CS.readFile(t)).toString(),i=(await CS.readFile(r)).toString();US=new ij(i,n,s)}catch(e){throw fu.error(e),dr(new Error,Er.NO_ENCRYPTION_KEYS,fr.INTERNAL_SERVER_ERROR)}return US}a(Rd,"getJWTRSAKeys");async function uj(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 fL(e.refresh_token);let t=await Rd(),r=await Eu.decode(e.refresh_token);return{operation_token:await dL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(uj,"refreshOperationToken");async function lj(e){try{let t=await Rd(),r=await Eu.verify(e,t.public_key,{algorithms:gd,subject:Td.OPERATION});return await MS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw fu.warn(t),t.name&&t.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}}a(lj,"validateOperationToken");async function fL(e){let t;try{let r=await Rd(),s=await Eu.verify(e,r.public_key,{algorithms:gd,subject:Td.REFRESH});t=await MS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw fu.warn(r),r.name&&r.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}if(!_L.validate(t.refresh_token,e))throw dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED);return t}a(fL,"validateRefreshToken")});var PS=T((afe,pL)=>{"use strict";var _j=aL(),la=require("passport"),dj=require("passport-local").Strategy,fj=require("passport-http").BasicStrategy,Ej=require("util"),hj=rs(),mL=Ej.callbackify(hj.findAndValidateUser),ofe=Ir(),mj=D(),hL=hu();la.use(new dj(function(e,t,r){mL(e,t,r)}));la.use(new fj(function(e,t,r){mL(e,t,r)}));la.serializeUser(function(e,t){t(null,e)});la.deserializeUser(function(e,t){t(null,e)});function pj(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":la.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===mj.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?hL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):hL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:la.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(pj,"authorize");function Sj(e,t){let r=_j(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Sj,"checkPermissions");pL.exports={authorize:pj,checkPermissions:Sj}});var di=T((ufe,SL)=>{"use strict";var vS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},BS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};SL.exports={Node:vS,NodeSubscription:BS}});var gL=T((_fe,TL)=>{"use strict";var Tj=D().OPERATIONS_ENUM,HS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Tj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};TL.exports=HS});var mu=T((ffe,RL)=>{"use strict";var xS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},qS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};RL.exports={RemotePayloadObject:xS,RemotePayloadSubscription:qS}});var OL=T((hfe,AL)=>{"use strict";var FS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};AL.exports=FS});var yL=T((gfe,NL)=>{"use strict";var gj=OL(),pfe=mt(),bL=Ke(),Rj=G(),{getSchemaPath:Sfe,getTransactionAuditStorePath:Tfe}=ze(),{getDatabases:Aj}=(ge(),ee(xe));NL.exports=Oj;async function Oj(e){let t=new gj;try{let r=Aj()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await bL.environmentDataSize(schema_path,e.name),o=await bL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){Rj.warn(`unable to stat table dbi due to ${r}`)}return t}a(Oj,"lmdbGetTableSize")});var wL=T((Afe,IL)=>{"use strict";var GS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};IL.exports=GS});var _a=T((yfe,UL)=>{"use strict";var bj=require("fs-extra"),Nj=require("path"),Xt=require("systeminformation"),fi=G(),yj=nt(),kS=qe(),Od=D(),Ij=yL(),LL=jn(),{getThreadInfo:CL}=Ye(),jS=j();jS.initSync();var wj=wL(),{openEnvironment:bfe}=Ke(),{getSchemaPath:Nfe}=ze(),{database:Cj}=(ge(),ee(xe)),Ad;UL.exports={getHDBProcessInfo:KS,getNetworkInfo:QS,getDiskInfo:WS,getMemoryInfo:YS,getCPUInfo:$S,getTimeInfo:VS,getSystemInformation:zS,systemInformation:Dj,getTableSize:JS,getMetrics:XS};function VS(){return Xt.time()}a(VS,"getTimeInfo");async function $S(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,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:R,...I}=await Xt.currentLoad();return I.cpus=[],R.forEach(w=>{let{raw_load:B,raw_load_idle:K,raw_load_irq:q,raw_load_nice:P,raw_load_system:Q,raw_load_user:Y,...J}=w;I.cpus.push(J)}),l.current_load=I,l}catch(e){return fi.error(`error in getCPUInfo: ${e}`),{}}}a($S,"getCPUInfo");async function YS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return fi.error(`error in getMemoryInfo: ${e}`),{}}}a(YS,"getMemoryInfo");async function KS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await bj.readFile(Nj.join(jS.get(Od.CONFIG_PARAMS.ROOTPATH),Od.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Od.NODE_ERROR_CODES.ENOENT)fi.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return fi.error(`error in getHDBProcessInfo: ${t}`),e}}a(KS,"getHDBProcessInfo");async function WS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...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 fi.error(`error in getDiskInfo: ${t}`),e}}a(WS,"getDiskInfo");async function QS(){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(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return fi.error(`error in getNetworkInfo: ${t}`),e}}a(QS,"getNetworkInfo");async function zS(){if(Ad!==void 0)return Ad;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,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,Ad=e,Ad}catch(t){return fi.error(`error in getSystemInformation: ${t}`),e}}a(zS,"getSystemInformation");async function JS(){let e=[],t=await LL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Ij(s));return e}a(JS,"getTableSize");async function XS(){let e=await LL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Cj({database:r,table:n}),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}}),s[n]=o}catch(i){fi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(XS,"getMetrics");async function DL(){if(jS.get(Od.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await yj.getNATSReferences(),r=await t.streams.info(kS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(kS.WORK_QUEUE_CONSUMER_NAMES.stream_name,kS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.sources&&(n.ingest.stream.sources=r.sources),n}}a(DL,"getNatsStreamInfo");async function Dj(e){let t=new wj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zS(),t.time=VS(),t.cpu=await $S(),t.memory=await YS(),t.disk=await WS(),t.network=await QS(),t.harperdb_processes=await KS(),t.table_size=await JS(),t.metrics=await XS(),t.threads=await CL(),t.replication=await DL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zS();break;case"time":t.time=VS();break;case"cpu":t.cpu=await $S();break;case"memory":t.memory=await YS();break;case"disk":t.disk=await WS();break;case"network":t.network=await QS();break;case"harperdb_processes":t.harperdb_processes=await KS();break;case"table_size":t.table_size=await JS();break;case"database_metrics":case"metrics":t.metrics=await XS();break;case"threads":t.threads=await CL();break;case"replication":t.replication=await DL();break;default:break}return t}a(Dj,"systemInformation")});var ZS=T((wfe,ML)=>{"use strict";ML.exports={version:Lj,printVersion:Uj};var bd=jc();function Lj(){if(bd)return bd.version}a(Lj,"version");function Uj(){bd&&console.log(`HarperDB Version ${bd.version}`)}a(Uj,"printVersion")});var os=T((Ufe,HL)=>{"use strict";var Mj=Lr(),eT=z(),Pj=require("util"),oo=D(),PL=j();PL.initSync();var vj=PS(),vL=es(),{Node:Dfe,NodeSubscription:Lfe}=di(),Bj=ea(),Hj=gL(),{RemotePayloadObject:xj,RemotePayloadSubscription:qj}=mu(),{handleHDBError:Fj,hdb_errors:Gj}=Z(),{HTTP_STATUS_CODES:kj,HDB_ERROR_MSGS:Vj}=Gj,$j=Xs(),Yj=_a(),Kj=ZS(),{getDatabases:Wj}=(ge(),ee(xe)),Qj=Pj.promisify(vj.authorize),zj=vL.searchByHash,Jj=vL.searchByValue;HL.exports={authHeaderToUser:Xj,isEmpty:jj,getNodeRecord:Zj,upsertNodeRecord:eZ,buildNodePayloads:tZ,checkClusteringEnabled:rZ,getAllNodeRecords:sZ,getSystemInfo:nZ,reverseSubscription:BL};async function Xj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Qj(t,null),e}a(Xj,"authHeaderToUser");function jj(e){return e==null}a(jj,"isEmpty");async function Zj(e){let t=new Bj(oo.SYSTEM_SCHEMA_NAME,oo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return zj(t)}a(Zj,"getNodeRecord");async function eZ(e){let t=new Hj(oo.SYSTEM_SCHEMA_NAME,oo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Mj.upsert(t)}a(eZ,"upsertNodeRecord");function BL(e){if(eT.isEmpty(e.subscribe)||eT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(BL,"reverseSubscription");function tZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=eT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=BL(c),E=Wj()[u]?.[_],h=new qj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new xj(r,t,n,s)}a(tZ,"buildNodePayloads");function rZ(){if(!PL.get(oo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Fj(new Error,Vj.CLUSTERING_NOT_ENABLED,kj.BAD_REQUEST,void 0,void 0,!0)}a(rZ,"checkClusteringEnabled");async function sZ(){let e=new $j(oo.SYSTEM_SCHEMA_NAME,oo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Jj(e))}a(sZ,"getAllNodeRecords");async function nZ(){let e=await Yj.getSystemInformation();return{hdb_version:Kj.version(),node_version:e.node_version,platform:e.platform}}a(nZ,"getSystemInfo")});var tT=T((Pfe,YL)=>{"use strict";var Nd=nt(),xL=z(),qL=qe(),FL=D(),yd=G(),GL=uu(),iZ=K_(),{RemotePayloadObject:oZ}=mu(),{handleHDBError:kL,hdb_errors:aZ}=Z(),{HTTP_STATUS_CODES:VL}=aZ,{NodeSubscription:$L}=di();YL.exports=cZ;async function cZ(e,t){let r;try{r=await Nd.request(`${t}.${qL.REQUEST_SUFFIX}`,new oZ(FL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),yd.trace("Response from remote describe all request:",r)}catch(o){yd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Nd.requestErrorHandler(o,"add_node",t);throw kL(new Error,c,VL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw kL(new Error,o,VL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FL.SYSTEM_SCHEMA_NAME){await Nd.createLocalTableStream(u,c);let h=new $L(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=xL.doesSchemaExist(u),l=s[u]!==void 0,d=c?xL.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(yd.trace(`addNode creating schema: ${u}`),await GL.createSchema({operation:"create_schema",schema:u})),!d&&f){yd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new iZ(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await GL.createTable(h)}await Nd.createLocalTableStream(u,c);let E=new $L(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(cZ,"reviewSubscriptions")});var Cd=T((Bfe,QL)=>{"use strict";var{handleHDBError:Id,hdb_errors:uZ}=Z(),{HTTP_STATUS_CODES:wd}=uZ,{addUpdateNodeValidator:lZ}=pd(),pu=G(),WL=D(),KL=qe(),_Z=z(),rT=nt(),Su=os(),dZ=j(),fZ=tT(),{Node:EZ,NodeSubscription:hZ}=di(),{broadcast:mZ}=Ye(),pZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",SZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",TZ=dZ.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME);QL.exports=gZ;async function gZ(e,t=!1){pu.trace("addNode called with:",e),Su.checkClusteringEnabled();let r=lZ(e);if(r)throw Id(r,r.message,wd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Su.getNodeRecord(s);if(!_Z.isEmptyOrZeroLength(d))throw Id(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,wd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await fZ(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=pZ,o;let c=Su.buildNodePayloads(n,TZ,WL.OPERATIONS_ENUM.ADD_NODE,await Su.getSystemInfo());pu.trace("addNode sending remote payload:",c);let u;try{u=await rT.request(`${s}.${KL.REQUEST_SUFFIX}`,c)}catch(d){pu.error(`addNode received error from request: ${d}`);let f=rT.requestErrorHandler(d,"add_node",s);throw Id(new Error,f,wd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===KL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Id(new Error,d,wd.INTERNAL_SERVER_ERROR,"error",d)}pu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];pu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await rT.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new hZ(E.schema,E.table,E.publish,E.subscribe))}let l=new EZ(s,_,u.system_info);return await Su.upsertNodeRecord(l),mZ({type:"nats_update"}),i.length>0?o.message=SZ:o.message=`Successfully added '${s}' to manifest`,o}a(gZ,"addNode")});var oT=T((qfe,XL)=>{"use strict";var{handleHDBError:sT,hdb_errors:RZ}=Z(),{HTTP_STATUS_CODES:nT}=RZ,{addUpdateNodeValidator:AZ}=pd(),Tu=G(),JL=D(),zL=qe(),xfe=z(),iT=nt(),gu=os(),OZ=j(),{cloneDeep:bZ}=require("lodash"),NZ=tT(),{Node:yZ,NodeSubscription:IZ}=di(),{broadcast:wZ}=Ye(),CZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",DZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",LZ=OZ.get(JL.CONFIG_PARAMS.CLUSTERING_NODENAME);XL.exports=UZ;async function UZ(e){Tu.trace("updateNode called with:",e),gu.checkClusteringEnabled();let t=AZ(e);if(t)throw sT(t,t.message,nT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await gu.getNodeRecord(r);n.length>0&&(s=bZ(n));let{added:i,skipped:o}=await NZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=CZ,c;let u=gu.buildNodePayloads(i,LZ,JL.OPERATIONS_ENUM.UPDATE_NODE,await gu.getSystemInfo());Tu.trace("updateNode sending remote payload:",u);let _;try{_=await iT.request(`${r}.${zL.REQUEST_SUFFIX}`,u)}catch(l){Tu.error(`updateNode received error from request: ${l}`);let d=iT.requestErrorHandler(l,"update_node",r);throw sT(new Error,d,nT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===zL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw sT(new Error,l,nT.INTERNAL_SERVER_ERROR,"error",l)}Tu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Tu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await iT.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return s||(s=[new yZ(r,[],_.system_info)]),await MZ(s[0],i,_.system_info),o.length>0?c.message=DZ:c.message=`Successfully updated '${r}'`,c}a(UZ,"updateNode");async function MZ(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new IZ(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await gu.upsertNodeRecord(s),wZ({type:"nats_update"})}a(MZ,"updateNodeTable")});var rU=T((Gfe,tU)=>{"use strict";var eU=require("joi"),{string:jL}=eU.types(),PZ=Je(),ZL=D(),vZ=j(),BZ=qe();tU.exports=HZ;function HZ(e){let t=jL.invalid(vZ.get(ZL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(BZ.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=eU.object({operation:jL.valid(ZL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return PZ.validateBySchema(e,r)}a(HZ,"removeNodeValidator")});var Ld=T((Vfe,cU)=>{"use strict";var{handleHDBError:sU,hdb_errors:xZ}=Z(),{HTTP_STATUS_CODES:nU}=xZ,qZ=rU(),Ru=G(),iU=os(),FZ=z(),Dd=D(),oU=qe(),aU=nt(),GZ=j(),{RemotePayloadObject:kZ}=mu(),{NodeSubscription:VZ}=di(),$Z=ta(),YZ=ti(),{broadcast:KZ}=Ye(),WZ=GZ.get(Dd.CONFIG_PARAMS.CLUSTERING_NODENAME);cU.exports=QZ;async function QZ(e){Ru.trace("removeNode called with:",e),iU.checkClusteringEnabled();let t=qZ(e);if(t)throw sU(t,t.message,nU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await iU.getNodeRecord(r);if(FZ.isEmptyOrZeroLength(s))throw sU(new Error,`Node '${r}' was not found.`,nU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new kZ(Dd.OPERATIONS_ENUM.REMOVE_NODE,WZ,[]),i,o=!1;try{i=await aU.request(`${r}.${oU.REQUEST_SUFFIX}`,n),Ru.trace("Remove node reply from remote node:",r,i)}catch(u){Ru.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Ru.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new VZ(l.schema,l.table,!1,!1);await aU.updateWorkStream(d,r)}let c=new $Z(Dd.SYSTEM_SCHEMA_NAME,Dd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await YZ.deleteRecord(c),KZ({type:"nats_update"}),i?.status===oU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ru.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(QZ,"removeNode")});var _U=T((Yfe,lU)=>{"use strict";var uU=require("joi"),{string:zZ,array:JZ}=uU.types(),XZ=Je(),jZ=pd();lU.exports=ZZ;function ZZ(e){let t=uU.object({operation:zZ.valid("configure_cluster").required(),connections:JZ.items(jZ.validation_schema).required()});return XZ.validateBySchema(e,t)}a(ZZ,"configureClusterValidator")});var aT=T((Wfe,mU)=>{"use strict";var e5=D(),Ud=G(),t5=z(),r5=Ld(),s5=Cd(),dU=os(),n5=_U(),{handleHDBError:fU,hdb_errors:i5}=Z(),{HTTP_STATUS_CODES:EU}=i5,o5="Configure cluster complete.",a5="Failed to configure the cluster. Check the logs for more details.",c5="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mU.exports=u5;async function u5(e){Ud.trace("configure cluster called with:",e),dU.checkClusteringEnabled();let t=n5(e);if(t)throw fU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=await dU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(hU(r5,{operation:e5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Ud.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(hU(s5,E,E.node_name))}let c=await Promise.allSettled(i);Ud.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Ud.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(t5.isEmptyOrZeroLength(u))return{message:o5,connections:_};if(l)return{message:c5,failed_nodes:u,connections:_};throw fU(new Error,a5,EU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(u5,"configureCluster");async function hU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(hU,"functionWrapper")});var SU=T((zfe,pU)=>{"use strict";var Md=require("joi"),l5=Je(),{validateSchemaExists:_5,validateTableExists:d5,validateSchemaName:f5}=Ks(),E5=Md.object({operation:Md.string().valid("purge_stream"),schema:Md.string().custom(_5).custom(f5).required(),table:Md.string().custom(d5).required()});function h5(e){return l5.validateBySchema(e,E5)}a(h5,"purgeStreamValidator");pU.exports=h5});var cT=T((Xfe,TU)=>{"use strict";var{handleHDBError:m5,hdb_errors:p5}=Z(),{HTTP_STATUS_CODES:S5}=p5,T5=SU(),g5=nt(),R5=os();TU.exports=A5;async function A5(e){if(e.purge_ingest!==!0){let n=T5(e);if(n)throw m5(n,n.message,S5.BAD_REQUEST,void 0,void 0,!0)}R5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await g5.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(A5,"purgeStream")});var _T=T((Zfe,NU)=>{"use strict";var lT=os(),O5=nt(),AU=j(),Pd=D(),ao=qe(),b5=z(),uT=G(),{RemotePayloadObject:N5}=mu(),{ErrorCode:gU}=require("nats"),RU=AU.get(Pd.CONFIG_PARAMS.CLUSTERING_ENABLED),OU=AU.get(Pd.CONFIG_PARAMS.CLUSTERING_NODENAME);NU.exports={clusterStatus:y5,buildNodeStatus:bU};async function y5(){let e={node_name:OU,is_enabled:RU,connections:[]};if(!RU)return e;let t=await lT.getAllNodeRecords();if(b5.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(bU(t[s],e.connections));return await Promise.allSettled(r),e}a(y5,"clusterStatus");async function bU(e,t){let r=e.name,s=new N5(Pd.OPERATIONS_ENUM.CLUSTER_STATUS,OU,void 0,await lT.getSystemInfo()),n,i,o=ao.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await O5.request(ao.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ao.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ao.CLUSTER_STATUS_STATUSES.CLOSED,uT.error(`Error getting node status from ${r} `,n))}catch(u){uT.warn(`Error getting node status from ${r}`,u),u.code===gU.NoResponders?o=ao.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===gU.Timeout?o=ao.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ao.CLUSTER_STATUS_STATUSES.CLOSED}let c=new I5(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Pd.PRE_4_0_0_VERSION&&await lT.upsertNodeRecord(u)}catch(u){uT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(bU,"buildNodeStatus");function I5(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(I5,"NodeStatusObject")});var fT=T((tEe,yU)=>{"use strict";var{handleHDBError:w5,hdb_errors:C5}=Z(),{HTTP_STATUS_CODES:D5}=C5,L5=nt(),U5=os(),dT=z(),vd=require("joi"),M5=Je(),P5=2e3,v5=vd.object({timeout:vd.number().min(1),connected_nodes:vd.boolean(),routes:vd.boolean()});yU.exports=B5;async function B5(e){U5.checkClusteringEnabled();let t=M5.validateBySchema(e,v5);if(t)throw w5(t,t.message,D5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||dT.autoCastBoolean(s),o=n===void 0||dT.autoCastBoolean(n),c={nodes:[]},u=await L5.getServerList(r??P5),_={};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:dT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(B5,"clusterNetwork")});var DU=T((sEe,CU)=>{"use strict";var ET=require("joi"),IU=Je(),{route_constraints:wU}=Pm();CU.exports={setRoutesValidator:H5,deleteRoutesValidator:x5};function H5(e){let t=ET.object({server:ET.valid("hub","leaf").required(),routes:wU.required()});return IU.validateBySchema(e,t)}a(H5,"setRoutesValidator");function x5(e){let t=ET.object({routes:wU.required()});return IU.validateBySchema(e,t)}a(x5,"deleteRoutesValidator")});var mT=T((iEe,PU)=>{"use strict";var co=Pr(),hT=z(),Bd=D(),LU=DU(),{handleHDBError:UU,hdb_errors:q5}=Z(),{HTTP_STATUS_CODES:MU}=q5,F5="cluster routes successfully set",G5="cluster routes successfully deleted";PU.exports={setRoutes:k5,getRoutes:V5,deleteRoutes:$5};function k5(e){let t=LU.setRoutesValidator(e);if(t)throw UU(t,t.message,MU.BAD_REQUEST,void 0,void 0,!0);let r=co.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=hT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:F5,set:o,skipped:i}}a(k5,"setRoutes");function V5(){let e=co.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(V5,"getRoutes");function $5(e){let t=LU.deleteRoutesValidator(e);if(t)throw UU(t,t.message,MU.BAD_REQUEST,void 0,void 0,!0);let r=co.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=hT.isEmptyOrZeroLength(s)?null:s,co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=hT.isEmptyOrZeroLength(n)?null:n,co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:G5,deleted:i,skipped:o}}a($5,"deleteRoutes")});var BU=T((aEe,vU)=>{"use strict";var Au=require("alasql"),uo=require("recursive-iterator"),Bs=G(),Y5=z(),Ou=D(),pT=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,W5(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Ou.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ou.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ou.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=K5(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(_=>!Ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Au.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function K5(e){return e.filter(t=>t[Ou.PERMS_CRUD_ENUM.READ])}a(K5,"filterReadRestrictedAttrs");function W5(e,t,r,s,n){Q5(e,t,r,s,n)}a(W5,"interpretAST");function bu(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(bu,"addSchemaTableToMap");function Q5(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Au.yy.Insert?j5(e,t,r):e instanceof Au.yy.Select?z5(e,t,r,s,n):e instanceof Au.yy.Update?J5(e,t,r):e instanceof Au.yy.Delete?X5(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Q5,"getRecordAttributesAST");function z5(e,t,r,s,n){if(!e){Bs.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)){Bs.error("No schema specified");return}e.from.forEach(c=>{bu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bu(c.table,t,r,s,n)});let o=new uo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.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 uo(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{Bs.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 uo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.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 uo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(z5,"getSelectAttributes");function J5(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new uo(e.columns),n=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ST(e.table.tableid,n,i.columnid,t,r)}a(J5,"getUpdateAttributes");function X5(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new uo(e.where),n=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ST(e.table.tableid,n,i.columnid,t,r)}a(X5,"getDeleteAttributes");function j5(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new uo(e.columns),n=e.into.databaseid;bu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ST(e.into.tableid,n,i.columnid,t,r)}a(j5,"getInsertAttributes");function ST(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ST,"pushAttribute");vU.exports=pT});var RT=T((uEe,FU)=>{var Hd=Yi(),HU=require("chalk"),Gr=G(),xU=require("prompt"),{promisify:Z5}=require("util"),TT=D(),e8=require("fs-extra"),t8=require("path"),r8=z(),s8=ZS(),qU=j();qU.initSync();var n8=require("moment"),i8=Z5(xU.get),o8=t8.join(qU.getHdbBasePath(),TT.LICENSE_KEY_DIR_NAME,TT.LICENSE_FILE_NAME,TT.LICENSE_FILE_NAME);FU.exports={getFingerprint:c8,setLicense:a8,parseLicense:gT,register:u8,getRegistrationInfo:_8};async function a8(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await gT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(a8,"setLicense");async function c8(){let e={};try{e=await Hd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(c8,"getFingerprint");async function gT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Hd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await e8.writeFile(o8,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(gT,"parseLicense");async function u8(){let e=await l8();return gT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(u8,"register");async function l8(){let e=await Hd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:HU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:HU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{xU.start()}catch(s){Gr.error(s)}let r;try{r=await i8(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(l8,"promptForRegistration");async function _8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Hd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(r8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=s8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=n8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(_8,"getRegistrationInfo")});var kU=T((_Ee,GU)=>{"use strict";var d8=qe(),AT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+d8.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};GU.exports=AT});var YU=T((fEe,$U)=>{"use strict";var VU=qe(),OT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+VU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+VU.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"}};$U.exports=OT});var WU=T((hEe,KU)=>{"use strict";var bT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};KU.exports=bT});var zU=T((pEe,QU)=>{"use strict";var f8=qe(),NT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+f8.SERVER_SUFFIX.ADMIN,this.password=r}};QU.exports=NT});var wT=T((TEe,jU)=>{"use strict";var da=require("path"),Fd=require("fs-extra"),E8=kU(),h8=YU(),m8=WU(),p8=zU(),yT=rs(),Ea=z(),hr=Pr(),qd=D(),Nu=qe(),{CONFIG_PARAMS:ht}=qd,yu=G(),Iu=j(),JU=gn(),IT=nt(),fa="clustering",S8=1e4,XU=5;jU.exports={generateNatsConfig:g8,removeNatsConfig:R8,getHubConfigPath:T8};function T8(){let e=Iu.get(ht.ROOTPATH);return da.join(e,fa,Nu.NATS_CONFIG_FILES.HUB_SERVER)}a(T8,"getHubConfigPath");async function g8(e=!1,t=void 0){Iu.initSync();let r=Iu.get(ht.ROOTPATH),s=da.join(r,fa,Nu.PID_FILES.HUB),n=da.join(r,fa,Nu.PID_FILES.LEAF),i=hr.getConfigFromFile(ht.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=da.join(r,fa,Nu.NATS_CONFIG_FILES.HUB_SERVER),c=da.join(r,fa,Nu.NATS_CONFIG_FILES.LEAF_SERVER),u=hr.getConfigFromFile(ht.CLUSTERING_TLS_CERTIFICATE),_=hr.getConfigFromFile(ht.CLUSTERING_TLS_PRIVATEKEY),l=hr.getConfigFromFile(ht.CLUSTERING_TLS_CERT_AUTH),d=hr.getConfigFromFile(ht.CLUSTERING_TLS_INSECURE),f=hr.getConfigFromFile(ht.CLUSTERING_TLS_VERIFY),E=hr.getConfigFromFile(ht.CLUSTERING_NODENAME),h=hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await IT.checkNATSServerInstalled()||Gd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await yT.listUsers(),S=hr.getConfigFromFile(ht.CLUSTERING_USER),R=await yT.getClusterUser();(Ea.isEmpty(R)||R.active!==!0)&&Gd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await xd(ht.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await xd(ht.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await xd(ht.CLUSTERING_HUBSERVER_NETWORK_PORT),await xd(ht.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[J,re]of p.entries())re.role.role===qd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new p8(re.username,JU.decrypt(re.hash))),w.push(new m8(re.username,JU.decrypt(re.hash))));let B=[],{hub_routes:K}=hr.getClusteringRoutes();if(!Ea.isEmptyOrZeroLength(K))for(let J of K)B.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${J.host}:${J.port}`);let q=new E8(hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_CLUSTER_NAME),hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,I,w);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=Ea.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===qd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Fd.writeJson(o,q),yu.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new h8(hr.getConfigFromFile(ht.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[P],[Q],I,w,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===qd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Fd.writeJson(c,Y),yu.trace(`Leaf server config written to ${c}`))}a(g8,"generateNatsConfig");async function xd(e){let t=Iu.get(e);return Ea.isEmpty(t)&&Gd(`port undefined for '${e}'`),await Ea.isPortTaken(t)&&Gd(`'${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(xd,"isPortAvailable");function Gd(e){let t=`Error generating clustering config: ${e}`;yu.error(t),console.error(t),process.exit(1)}a(Gd,"generateNatsConfigError");async function R8(e){let{port:t,config_file:r}=IT.getServerConfig(e),{username:s,decrypt_hash:n}=await yT.getClusterUser(),i=0,o=2e3;for(;i<XU;){try{let _=await IT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){yu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=XU)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 Ea.async_set_timeout(o*(i*2))}let c="0".repeat(S8),u=da.join(Iu.get(ht.ROOTPATH),fa,r);await Fd.writeFile(u,c),await Fd.remove(u),yu.notify(e,"started.")}a(R8,"removeNatsConfig")});var nM=T((REe,sM)=>{"use strict";var kr=j(),A8=Yi(),he=D(),wu=qe(),In=require("path"),{PACKAGE_ROOT:Vd}=D(),ZU=j(),kd=z(),ha="/dev/null",O8=In.join(Vd,"launchServiceScripts"),eM=In.join(Vd,"utility/scripts"),b8=In.join(eM,he.HDB_RESTART_SCRIPT),tM=In.resolve(Vd,"dependencies",`${process.platform}-${process.arch}`,wu.NATS_BINARY_NAME);function rM(){let t=A8.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return kd.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kd.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Vd}}a(rM,"generateMainServerConfig");var N8=9930;function y8(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=In.join(e,"clustering",wu.NATS_CONFIG_FILES.HUB_SERVER),r=In.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=ZU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==N8?"-"+s:""),script:tM,args:n?`${n} -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 kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ha,i.error_file=ha),i}a(y8,"generateNatsHubServerConfig");var I8=9940;function w8(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=In.join(e,"clustering",wu.NATS_CONFIG_FILES.LEAF_SERVER),r=In.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=ZU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==I8?"-"+s:""),script:tM,args:n?`${n} -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 kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ha,i.error_file=ha),i}a(w8,"generateNatsLeafServerConfig");function C8(){kr.initSync();let e=In.join(kr.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:O8,autorestart:!1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ha,t.error_file=ha),t}a(C8,"generateClusteringUpgradeV4ServiceConfig");function D8(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return kd.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kd.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:eM},script:b8}}a(D8,"generateRestart");function L8(){return{apps:[rM()]}}a(L8,"generateAllServiceConfigs");sM.exports={generateAllServiceConfigs:L8,generateMainServerConfig:rM,generateRestart:D8,generateNatsHubServerConfig:y8,generateNatsLeafServerConfig:w8,generateClusteringUpgradeV4ServiceConfig:C8}});var SM=T((bEe,pM)=>{"use strict";var Ce=D(),U8=z(),wn=wT(),Cu=nt(),tn=qe(),Ei=nM(),$d=j(),hi=G(),M8=os(),{startWorker:iM,onMessageFromWorkers:P8}=Ye(),v8=_a(),OEe=require("util"),B8=require("child_process"),H8=require("fs"),{execFile:x8}=B8,be;pM.exports={enterPM2Mode:q8,start:mi,stop:CT,reload:aM,restart:cM,list:DT,describe:lM,connect:Cn,kill:$8,startAllServices:Y8,startService:LT,getUniqueServicesList:_M,restartAllServices:K8,isServiceRegistered:dM,reloadStopStart:fM,restartHdb:uM,deleteProcess:k8,startClusteringProcesses:hM,startClusteringThreads:mM,isHdbRestartRunning:V8,isClusteringRunning:Q8,stopClustering:W8,reloadClustering:z8};var Du=!1;P8(e=>{e.type==="restart"&&$d.initSync(!0)});function q8(){Du=!0}a(q8,"enterPM2Mode");function Cn(){return be||(be=require("pm2")),new Promise((e,t)=>{be.connect((r,s)=>{hi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var mr,F8=10,oM;function mi(e,t=!1){if(Du)return G8(e);let r=x8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=mr.indexOf(r);o>-1&&mr.splice(o,1),!oM&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<F8&&(H8.existsSync(wn.getHubConfigPath())?mi(e):(await wn.generateNatsConfig(!0),mi(e),await new Promise(c=>setTimeout(c,3e3)),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=$d.get(Ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&tn.LOG_LEVEL_HIERARCHY[o]>=tn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===tn.LOG_LEVELS.ERR||l===tn.LOG_LEVELS.WRN?hi.OUTPUTS.STDERR:hi.OUTPUTS.STDOUT;hi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=tn.LOG_LEVELS[f]}if(tn.LOG_LEVEL_HIERARCHY[o]>=tn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===tn.LOG_LEVELS.ERR||l===tn.LOG_LEVELS.WRN?hi.OUTPUTS.STDERR:hi.OUTPUTS.STDOUT;hi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),mr=[],!mr&&!t){let i=a(()=>{oM=!0,mr&&(mr.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)}mr.push(r)}a(mi,"start");function G8(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.start(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(G8,"startWithPM2");function CT(e){if(!Du){for(let t of mr||[])t.name===e&&(mr.splice(mr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.stop(e,async(s,n)=>{s&&(be.disconnect(),r(s)),be.delete(e,(i,o)=>{i&&(be.disconnect(),r(s)),be.disconnect(),t(o)})})})}a(CT,"stop");function aM(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.reload(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(aM,"reload");function cM(e){if(!Du)for(let t of mr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.restart(e,(s,n)=>{be.disconnect(),t(n)})})}a(cM,"restart");function k8(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.delete(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(k8,"deleteProcess");async function uM(){await mi(Ei.generateRestart())}a(uM,"restartHdb");async function V8(){let e=await DT();for(let t in e)if(e[t].name===Ce.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(V8,"isHdbRestartRunning");function DT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}be.list((r,s)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(s)})})}a(DT,"list");function lM(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.describe(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(lM,"describe");function $8(){if(!Du){for(let e of mr||[])e.kill();mr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}be.killDaemon((r,s)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(s)})})}a($8,"kill");async function Y8(){try{await hM(),await mM(),await mi(Ei.generateAllServiceConfigs())}catch(e){throw be?.disconnect(),e}}a(Y8,"startAllServices");async function LT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ce.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ei.generateMainServerConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ei.generateNatsIngestServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ei.generateNatsReplyServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ei.generateNatsHubServerConfig(),await mi(r,t),await wn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ei.generateNatsLeafServerConfig(),await mi(r,t),await wn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ei.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mi(r)}catch(r){throw be?.disconnect(),r}}a(LT,"startService");async function _M(){try{let e=await DT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw be?.disconnect(),e}}a(_M,"getUniqueServicesList");async function K8(e=[]){try{let t=!1,r=await _M();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ce.PROCESS_DESCRIPTORS.HDB?t=!0:await cM(o))}t&&await fM(Ce.PROCESS_DESCRIPTORS.HDB)}catch(t){throw be?.disconnect(),t}}a(K8,"restartAllServices");async function dM(e){if(mr?.find(r=>r.name===e))return!0;let t=await v8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(dM,"isServiceRegistered");async function fM(e){let t=e===Ce.PROCESS_DESCRIPTORS.HDB?$d.get(Ce.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$d.get(Ce.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await lM(e),s=U8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await CT(e),await LT(e)):e===Ce.PROCESS_DESCRIPTORS.HDB?await uM():await aM(e)}a(fM,"reloadStopStart");var EM;async function hM(e=!1){for(let t in Ce.CLUSTERING_PROCESSES){let r=Ce.CLUSTERING_PROCESSES[t];await LT(r,e)}}a(hM,"startClusteringProcesses");async function mM(){EM=iM(Ce.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Cu.createWorkQueueStream(tn.WORK_QUEUE_CONSUMER_NAMES),await Cu.updateIngestStreamConsumer(),await Cu.updateLocalStreams();let e=await M8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ce.PRE_4_0_0_VERSION){hi.info("Starting clustering upgrade 4.0.0 process"),iM(Ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(mM,"startClusteringThreads");async function W8(){for(let e in Ce.CLUSTERING_PROCESSES)if(e!==Ce.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ce.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await EM.terminate();else{let t=Ce.CLUSTERING_PROCESSES[e];await CT(t)}}a(W8,"stopClustering");async function Q8(){for(let e in Ce.CLUSTERING_PROCESSES){let t=Ce.CLUSTERING_PROCESSES[e];if(await dM(t)===!1)return!1}return!0}a(Q8,"isClusteringRunning");async function z8(){await wn.generateNatsConfig(!0),await Cu.reloadNATSHub(),await Cu.reloadNATSLeaf(),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(z8,"reloadClustering")});var Qd=T((yEe,NM)=>{"use strict";var J8=require("minimist"),{isMainThread:PT,parentPort:RM}=require("worker_threads"),it=D(),{PROCESS_DESCRIPTORS_VALIDATE:Lu}=it,rn=G(),vT=z(),Yd=wT(),ma=nt(),UT=qe(),AM=Pr(),sn=SM(),TM=_a(),X8=lh(),{restartWorkers:Kd,onMessageByType:j8}=Ye(),{handleHDBError:Z8,hdb_errors:e6}=Z(),{HTTP_STATUS_CODES:t6}=e6,Wd=j();Wd.initSync();var Uu=`Restarting HarperDB. This may take up to ${it.RESTART_TIMEOUT_MS/1e3} seconds.`,r6="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",s6="Invalid service",pa,as;NM.exports={restart:OM,restartService:BT};PT&&j8(it.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?BT({service:e.workerType}):OM({operation:"restart"})});async function OM(e){as=Object.keys(e).length===0,pa=await sn.isServiceRegistered(it.HDB_PROC_DESCRIPTOR);let t=J8(process.argv);if(t.service){await BT(t);return}if(as&&!pa){console.error(r6);return}if(as&&console.log(Uu),pa){sn.enterPM2Mode(),rn.notify(Uu);let r=X8(Object.keys(it.CONFIG_PARAM_MAP),!0);return vT.isEmptyOrZeroLength(Object.keys(r))||AM.updateConfigValue(void 0,void 0,r,!0,!0),i6(),Uu}return PT?(rn.notify(Uu),setTimeout(()=>{Kd()},50)):RM.postMessage({type:it.ITC_EVENT_TYPES.RESTART}),Uu}a(OM,"restart");async function BT(e){let{service:t}=e;if(it.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Z8(new Error,s6,t6.BAD_REQUEST,void 0,void 0,!0);if(pa=await sn.isServiceRegistered(it.HDB_PROC_DESCRIPTOR),!PT)return RM.postMessage({type:it.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Lu.clustering:if(!Wd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gM;break}as&&console.log("Restarting clustering"),rn.notify("Restarting clustering"),await bM();break;case Lu.clustering_config:case Lu["clustering config"]:if(!Wd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gM;break}as&&console.log("Restarting clustering_config"),rn.notify("Restarting clustering_config"),await sn.reloadClustering();break;case"custom_functions":case"custom functions":case Lu.harperdb:case Lu.http_workers:if(as&&!pa){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}as&&console.log("Restarting http_workers"),rn.notify("Restarting http_workers"),as?await sn.restart(it.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Kd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(BT,"restartService");async function n6(){await ma.publishToStream(`${UT.SUBJECT_PREFIXES.TXN}.${UT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,UT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ma.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(n6,"postDummyNatsMsg");async function i6(){await bM(),await sn.restart(it.HDB_PROC_DESCRIPTOR),await vT.async_set_timeout(2e3),Wd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await MT(),as&&(await ma.closeConnection(),process.exit(0))}a(i6,"restartPM2Mode");async function bM(){if(!AM.getConfigFromFile(it.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await TM.getHDBProcessInfo()).clustering.length===0)rn.trace("Clustering not running, restart will start clustering services"),await Yd.generateNatsConfig(!0),await sn.startClusteringProcesses(),await sn.startClusteringThreads(),await MT(),as&&await ma.closeConnection();else{await n6(),await Yd.generateNatsConfig(!0),pa?(rn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sn.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sn.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await TM.getHDBProcessInfo()).clustering.forEach(n=>{rn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await vT.async_set_timeout(3e3),await MT(),await ma.updateLocalStreams(),as&&await ma.closeConnection(),rn.trace("Restart clustering restarting ingest and reply service threads");let t=Kd(it.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Kd(it.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(bM,"restartClustering");async function MT(){await Yd.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Yd.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(MT,"removeNatsConfig")});var BM=T((CEe,vM)=>{"use strict";var wEe=require("lodash"),pr=D(),{handleHDBError:yM,hdb_errors:o6}=Z(),{HDB_ERROR_MSGS:a6,HTTP_STATUS_CODES:c6}=o6,HT=G();vM.exports={getRolePermissions:l6};var lo=Object.create(null),u6=a(e=>({key:e,perms:{}}),"perms_template_obj"),DM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),LM=a((e=!1,t=!1,r=!1,s=!1)=>({[pr.PERMS_CRUD_ENUM.READ]:e,[pr.PERMS_CRUD_ENUM.INSERT]:t,[pr.PERMS_CRUD_ENUM.UPDATE]:r,[pr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),xT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...LM(t,r,s,n)}),"table_perms_template"),IM=a((e,t=LM())=>({attribute_name:e,describe:PM(t),[Mu]:t[Mu],[qT]:t[qT],[FT]:t[FT]}),"attr_perms_template"),wM=a((e,t=!1)=>({attribute_name:e,describe:t,[Mu]:t}),"timestamp_attr_perms_template"),{READ:Mu,INSERT:qT,UPDATE:FT}=pr.PERMS_CRUD_ENUM,UM=Object.values(pr.PERMS_CRUD_ENUM),MM=[Mu,qT,FT];function l6(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[pr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(lo[t]&&lo[t].key===s)return lo[t].perms;let n=_6(e,r);return lo[t]?lo[t].key=s:lo[t]=u6(s),lo[t].perms=n,n}catch(r){if(!e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<pr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw HT.error(s),HT.debug(r),yM(new Error,a6.OUTDATED_PERMS_TRANSLATION_ERROR,c6.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
-
${r.stack}`;throw HT.error(s),yM(new Error)}}}a(l6,"getRolePermissions");function _6(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[pr.SYSTEM_SCHEMA_NAME]=s[pr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=d6(t[i]);return}r[i]=DM(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=f6(c,u);r[i].describe||UM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=xT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=xT()})}),r}a(_6,"translateRolePermissions");function d6(e){let t=DM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=xT(!0,!0,!0,!0,!0)}),t}a(d6,"createStructureUserPermissions");function f6(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return pr.TIME_STAMP_NAMES.includes(d)&&(f=wM(d,l[Mu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=IM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=PM(l),n.attribute_permissions.push(l),c||E6(l,u)}else if(_!==o){let l;pr.TIME_STAMP_NAMES.includes(_)?l=wM(_):l=IM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=CM(n),n}else return e.describe=CM(e),e}a(f6,"getTableAttrPerms");function CM(e){return UM.filter(t=>e[t]).length>0}a(CM,"getSchemaTableDescribePerm");function PM(e){return MM.filter(t=>e[t]).length>0}a(PM,"getAttributeDescribePerm");function E6(e,t){MM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(E6,"checkForHashPerms")});var HM={};$e(HM,{Resources:()=>zd,keyArrayToString:()=>Sa,resetResources:()=>h6,resources:()=>pi});function h6(){return pi=new zd}function Sa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var zd,pi,Pu=Ae(()=>{Xi();zd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(h6,"resetResources");a(Sa,"keyArrayToString")});var xM={};$e(xM,{Headers:()=>Si});var Si,Jd=Ae(()=>{Si=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var vu={};$e(vu,{authentication:()=>KM,bypassAuth:()=>A6,login:()=>b6,logout:()=>N6,start:()=>O6});function A6(){YM=!0}async function KM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?T6?S6:[]:p6?m6:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Si([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Xd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Xd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Xd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await FM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Zd.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?qM.notify(S):qM.error(S)},"authAuditLog"),d;if(s){if(d=_o.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await _t.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,jd.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,jd.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return R6&&(_o.get(h)||(_o.set(h,h),l(p,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ti({error:R.message},e)})}_o.set(s,d),g6&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await _t.getUser(_.user,null,e):(YM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,kM.getSuperUser)());Xd&&(e.session.update=function(E){if(!u){u=(0,VM.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,FM.put(E)},e.login=async function(E,h){e.user=await _t.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")&&pi.loginPath?(f.status=302,f.headers.set("Location",pi.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 Si);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function O6({server:e,port:t}){e.request(KM,{port:t||"all"}),GM||(GM=!0,setInterval(()=>{_o=new Map},cs.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),$M.user.addListener(()=>{_o=new Map}))}async function b6(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 N6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var kM,jd,VM,cs,kt,Zd,$M,qM,m6,p6,S6,T6,FM,Xd,YM,g6,R6,_o,GM,ef=Ae(()=>{kM=v(rs());sr();Pu();jd=v(hu());ge();VM=require("uuid"),cs=v(j()),kt=v(D()),Zd=v(G()),$M=v(Bc());Jd();Ta();qM=(0,Zd.loggerWithTag)("auth-event");cs.initSync();m6=cs.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),p6=cs.get(kt.CONFIG_PARAMS.HTTP_CORS),S6=cs.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),T6=cs.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),FM=dt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Xd=cs.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,YM=cs.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,g6=cs.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,R6=cs.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,_o=new Map;_t.onInvalidatedUser(()=>{_o=new Map});a(A6,"bypassAuth");a(KM,"authentication");a(O6,"start");a(b6,"login");a(N6,"logout")});var ZM=T((FEe,jM)=>{"use strict";var Ne=require("joi"),WM=require("fs-extra"),QM=require("path"),Ln=Je(),zM=j(),JM=D(),XM=G(),{hdb_errors:y6}=Z(),{HDB_ERROR_MSGS:jt}=y6,Dn=/^[a-zA-Z0-9-_]+$/;jM.exports={getDropCustomFunctionValidator:w6,setCustomFunctionValidator:C6,addComponentValidator:M6,dropCustomFunctionProjectValidator:P6,packageComponentValidator:v6,deployComponentValidator:B6,setComponentFileValidator:D6,getComponentFileValidator:U6,dropComponentFileValidator:L6};function tf(e,t,r){try{let s=zM.get(JM.CONFIG_PARAMS.COMPONENTSROOT),n=QM.join(s,t);return WM.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return XM.error(s),r.message(jt.VALIDATION_ERR)}}a(tf,"checkProjectExists");function Bu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Bu,"checkFilePath");function I6(e,t,r,s){try{let n=zM.get(JM.CONFIG_PARAMS.COMPONENTSROOT),i=QM.join(n,e,t,r+".js");return WM.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return XM.error(n),s.message(jt.VALIDATION_ERR)}}a(I6,"checkFileExists");function w6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Dn).custom(I6.bind(null,e.project,e.type)).custom(Bu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(w6,"getDropCustomFunctionValidator");function C6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Bu).required(),function_content:Ne.string().required()});return Ln.validateBySchema(e,t)}a(C6,"setCustomFunctionValidator");function D6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(D6,"setComponentFileValidator");function L6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).optional()});return Ln.validateBySchema(e,t)}a(L6,"dropComponentFileValidator");function U6(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Bu).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(U6,"getComponentFileValidator");function M6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(M6,"addComponentValidator");function P6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(P6,"dropCustomFunctionProjectValidator");function v6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean()});return Ln.validateBySchema(e,t)}a(v6,"packageComponentValidator");function B6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Ne.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Ne.string().optional()});return Ln.validateBySchema(e,t)}a(B6,"deployComponentValidator")});var of=T((kEe,oP)=>{"use strict";var rf=require("joi"),sf=require("path"),eP=require("fs-extra"),{exec:H6}=require("child_process"),x6=require("util"),tP=x6.promisify(H6),Hu=D(),{handleHDBError:ga,hdb_errors:q6}=Z(),{HTTP_STATUS_CODES:Ra}=q6,xu=j(),F6=Je(),Aa=G();xu.initSync();var GT=xu.get(Hu.CONFIG_PARAMS.COMPONENTSROOT),rP="npm install --omit=dev --json",G6=`${rP} --dry-run`;oP.exports={installModules:Y6,auditModules:K6,installAllRootModules:k6,uninstallRootModule:V6,linkHarperdb:$6};async function k6(e=!1){await nf(),await qu(e?"npm install --ignore-scripts":"npm install",xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(k6,"installAllRootModules");async function V6(e){await qu(`npm uninstall ${e}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(V6,"uninstallRootModule");async function $6(){await nf(),await qu(`npm link ${Hu.PACKAGE_ROOT}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a($6,"linkHarperdb");async function qu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await tP(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
-
`,""))}return s&&!s.includes("Debugger listening")&&
|
|
13
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(WD,"runCommand");async function Q3(){try{await N3.access(OS)}catch{return!1}let e=await WD(`${OS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return y3.eq(t,K3)}a(Q3,"checkNATSServerInstalled");async function IS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await YD.getClusterUser();if(oo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ps.trace("create nats connection called");let i=await B3({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ps.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ps.error("Error with Nats client connection, connection closed",o),QD()}),i}a(IS,"createConnection");function QD(){_r=void 0,so=void 0,no=void 0,io=void 0}a(QD,"clearClientCache");async function z3(){_r&&(await _r.drain(),_r=void 0,so=void 0,no=void 0,io=void 0)}a(z3,"closeConnection");var _r,io;async function gd(){return io||(io=IS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await io),_r||io}a(gd,"getConnection");async function _u(){if(so)return so;oo(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=await _r.jetstreamManager({domain:e,timeout:6e4}),so}a(_u,"getJetStreamManager");async function zD(){if(no)return no;oo(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=_r.jetstream({domain:e,timeout:6e4}),no}a(zD,"getJetStream");async function vs(){let e=_r||await gd(),t=so||await _u(),r=no||await zD();return{connection:e,jsm:t,js:r}}a(vs,"getNATSReferences");async function J3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await YD.getClusterUser(),n=await IS(t,r,s),i=wS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=KD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Sd.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(J3,"getServerList");async function CS(e,t){let{jsm:r}=await vs(),s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:H3.File,retention:x3.Limits,subjects:t,discard:q3.Old,max_msgs:n,max_bytes:i,max_age:s})}a(CS,"createLocalStream");async function JD(){let{jsm:e}=await vs(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(JD,"listStreams");async function j3(e){let{jsm:t}=await vs();await t.streams.delete(e)}a(j3,"deleteLocalStream");async function X3(e){let{connection:t}=await vs(),r=[],s=wS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(KD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(X3,"listRemoteStreams");async function Z3(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=FD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=bS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ft.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Z3,"viewStream");async function*ej(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=FD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=bS(_.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(Ft.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(ej,"viewStreamIterator");async function tj(e,t,r,s){Ps.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=jD(s,r);let{js:n}=await vs(),i=await Rd(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:$D.encode(s);try{Ps.trace(`publishToStream publishing to subject: ${o}`),$3(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return ZD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Ps.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await CS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(tj,"publishToStream");function jD(e,t){t===void 0&&(t=F3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ft.MSG_HEADERS.ORIGIN)&&r&&t.append(Ft.MSG_HEADERS.ORIGIN,r),t}a(jD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),Y3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return oo(AS)&&(AS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.HUB,config_file:Ft.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Ft.PID_FILES.HUB),hdb_nats_path:t}),AS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return oo(RS)&&(RS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,config_file:Ft.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Ft.PID_FILES.LEAF),hdb_nats_path:t}),RS;Ps.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function XD(e,t,r,s){try{await e.consumers.add(t,{ack_policy:NS.Explicit,durable_name:r,deliver_policy:yS.StartTime,opt_start_time:s})}catch(n){if(n.message!=="consumer already exists")throw n}}a(XD,"createConsumer");async function rj(e,t,r){await e.consumers.delete(t,r)}a(rj,"removeConsumer");function sj(e){return e.split(".")[1]}a(sj,"extractServerName");async function nj(e,t,r=6e4,s=wS()){if(!Sd.isObject(t))throw new Error("data param must be an object");let n=$D.encode(t),{connection:i}=await vs(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return bS(c.data)}a(nj,"request");function DS(e){return new Promise(async(t,r)=>{let s=D3(OS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(DS,"reloadNATS");async function ij(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await DS(e)}a(ij,"reloadNATSHub");async function oj(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await DS(e)}a(oj,"reloadNATSLeaf");function aj(e,t,r){let s;switch(e.code){case GD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case GD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(aj,"requestErrorHandler");async function cj(e,t){let r=t+Ft.SERVER_SUFFIX.LEAF,{connection:s}=await vs(),{jsm:n}=await mj(r),{schema:i,table:o}=e,c=Td.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await ZD(async()=>{if(e.subscribe===!0)await XD(n,c,s.info.server_name,u);else try{await rj(n,c,s.info.server_name)}catch(_){Ps.trace(_)}})}a(cj,"updateRemoteConsumer");async function uj(e,t,r,s){let n=Td.createNatsTableStreamName(e,t),i=r+Ft.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:s,stream_name:n,node_domain_name:i};if(!VD&&P3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=gS();await c(o)}await M3(o),s==="stop"&&await Sd.async_set_timeout(1e3)}a(uj,"updateConsumerIterator");function ZD(e){return L3.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ZD,"exclusiveLock");async function eL(e,t){let r=Td.createNatsTableStreamName(e,t),s=await Rd(),n=fj(e,t,s);await CS(r,[n])}a(eL,"createLocalTableStream");async function lj(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await eL(s,n)}}a(lj,"createTableStreams");async function tL(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Td.createNatsTableStreamName(e,t),{jsm:s}=await vs();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ps.warn(r);else throw r}}a(tL,"purgeTableStream");async function _j(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await tL(e,t[r])}a(_j,"purgeSchemaTableStreams");async function dj(e){return(await _u()).streams.info(e)}a(dj,"getStreamInfo");function fj(e,t,r){return`${Ft.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(fj,"createSubjectName");async function Rd(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(Rd,"getJsmServerName");async function Ej(){let e=await _u(),t=await Rd(),r=await JD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=hj(s),c=i.split(".");if(c[c.length-1]===t&&!o||n.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Ps.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l,await e.streams.update(n.name,n)}}a(Ej,"updateLocalStreams");function hj(e){let{config:t}=e,r=!1,s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(hj,"updateStreamLimits");async function mj(e){let t,r;try{t=await _r.jetstream({domain:e,timeout:6e4}),r=await _r.jetstreamManager({domain:e,timeout:6e4})}catch(s){throw Ps.error("Unable to connect to:",e),s}return{js:t,jsm:r}}a(mj,"connectToRemoteJS")});var fu=g((dfe,oL)=>{"use strict";var aa=p_(),ca=_D(),pj=$(),Sj=require("uuid").v4,_fe=require("clone"),Od=Rn(),ua=M(),Tj=require("util"),ci=ys(),{handleHDBError:dr,hdb_errors:gj}=se(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:fr}=gj,{SchemaEventMsg:bd}=Cs(),sL=st(),{getDatabases:Rj}=(Ae(),ne(Ge)),{transformReq:la}=Q();oL.exports={createSchema:Aj,createSchemaStructure:nL,createTable:Oj,createTableStructure:iL,createAttribute:Ij,dropSchema:bj,dropTable:Nj,dropAttribute:yj,getBackup:Cj};async function Aj(e){let t=await nL(e);return Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),t}a(Aj,"createSchema");async function nL(e){let t=aa.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(la(e),!await ca.checkSchemaExists(e.schema))throw dr(new Error,Ad.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,ua.LOG_LEVELS.ERROR,Ad.SCHEMA_EXISTS_ERR(e.schema),!0);return await ci.createSchema(e),`database '${e.schema}' successfully created`}a(nL,"createSchemaStructure");async function Oj(e){return la(e),e.hash_attribute=e.primary_key??e.hash_attribute,await iL(e)}a(Oj,"createTable");async function iL(e){let t=aa.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(aa.validateTableResidence(e.residence),!await ca.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,Ad.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,ua.LOG_LEVELS.ERROR,Ad.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Sj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ci.createTable(s,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ci.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(iL,"createTableStructure");async function bj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=aa.schema_object(e),s=t??r;if(s)throw dr(s,s.message,fr.BAD_REQUEST,void 0,void 0,!0);la(e);let n=await ca.checkSchemaExists(e.schema);if(n)throw dr(new Error,n,fr.NOT_FOUND,ua.LOG_LEVELS.ERROR,n,!0);let i=await ca.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ci.dropSchema(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),await sL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(bj,"dropSchema");async function Nj(e){let t=aa.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);la(e);let r=await ca.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,ua.LOG_LEVELS.ERROR,r,!0);return await ci.dropTable(e),await sL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Nj,"dropTable");async function yj(e){let t=aa.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);la(e);let r=await ca.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,ua.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(ua.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ci.dropAttribute(e),wj(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw pj.error(`Got an error deleting attribute ${Tj.inspect(e)}.`),s}}a(yj,"dropAttribute");function wj(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(wj,"dropAttributeFromGlobal");async function Ij(e){la(e);let t=Rj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ci.createAttribute(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Ij,"createAttribute");function Cj(e){return ci.getBackup(e)}a(Cj,"getBackup")});var cL=g((Efe,aL)=>{"use strict";var{OPERATIONS_ENUM:Dj}=M(),LS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Dj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};aL.exports=LS});var MS=g((pfe,fL)=>{"use strict";var Lj=ys(),mfe=cL(),Nd=Q(),yd=M(),Mj=ee(),{handleHDBError:uL,hdb_errors:Uj}=se(),{HDB_ERROR_MSGS:lL,HTTP_STATUS_CODES:_L}=Uj,Pj=Object.values(yd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),dL="To use this operation audit log must be enabled in harperdb-config.yaml";fL.exports=vj;async function vj(e){if(Nd.isEmpty(e.schema))throw new Error(lL.SCHEMA_REQUIRED_ERR);if(Nd.isEmpty(e.table))throw new Error(lL.TABLE_REQUIRED_ERR);if(!Mj.get(yd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw uL(new Error,dL,_L.BAD_REQUEST,yd.LOG_LEVELS.ERROR,dL,!0);let t=Nd.checkSchemaTableExist(e.schema,e.table);if(t)throw uL(new Error,t,_L.NOT_FOUND,yd.LOG_LEVELS.ERROR,t,!0);if(!Nd.isEmpty(e.search_type)&&Pj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Lj.readAuditLog(e)}a(vj,"readAuditLog")});var hL=g((Tfe,EL)=>{"use strict";var{OPERATIONS_ENUM:Bj}=M(),US=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Bj.GET_BACKUP,this.schema=t,this.table=r}};EL.exports=US});var SL=g((Ofe,pL)=>{"use strict";var Hj=ys(),Rfe=hL(),PS=Q(),xj=M(),Afe=ee(),{handleHDBError:qj,hdb_errors:Gj}=se(),{HDB_ERROR_MSGS:mL,HTTP_STATUS_CODES:Fj}=Gj;pL.exports=kj;async function kj(e){if(PS.isEmpty(e.schema))throw new Error(mL.SCHEMA_REQUIRED_ERR);if(PS.isEmpty(e.table))throw new Error(mL.TABLE_REQUIRED_ERR);let t=PS.checkSchemaTableExist(e.schema,e.table);if(t)throw qj(new Error,t,Fj.NOT_FOUND,xj.LOG_LEVELS.ERROR,t,!0);return await Hj.getBackup(read_audit_log_object)}a(kj,"getBackup")});var bL=g((Nfe,OL)=>{var ui=require("validate.js"),gL=je(),_a=M(),{handleHDBError:Vj,hdb_errors:$j}=se(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:Yj}=$j,vS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Kj={STRUCTURE_USER:"structure_user"},TL=Object.values(_a.ROLE_TYPES_ENUM),Wj="attribute_permissions",Qj="attribute_name",{PERMS_CRUD_ENUM:da}=_a,zj=[Wj,...Object.values(da)],RL=[da.READ,da.INSERT,da.UPDATE],Jj=[Qj,...RL];function jj(e){let t=vS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,AL(e,t)}a(jj,"addRoleValidation");function Xj(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,AL(e,t)}a(Xj,"alterRoleValidation");function Zj(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,gL.validateObject(e,t)}a(Zj,"dropRoleValidation");var eX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function AL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)eX.includes(s[o])||n.push(s[o]);n.length>0&&ht(lt.INVALID_ROLE_JSON_KEYS(n),r);let i=gL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ht(o,r)}),e.permission){let o=tX(e);o&&ht(o,r),TL.forEach(c=>{e.permission[c]&&!ui.isBoolean(e.permission[c])&&ht(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(TL.indexOf(o)<0){if(o===Kj.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]||ht(lt.SCHEMA_NOT_FOUND(d),r)}continue}ht(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ht(lt.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]){ht(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{zj.includes(l)||ht(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(da).forEach(l=>{ui.isDefined(_[l])?ui.isBoolean(_[l])||ht(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ht(lt.TABLE_PERM_MISSING(l),r,o,u)}),ui.isDefined(_.attribute_permissions)){if(!ui.isArray(_.attribute_permissions)){ht(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ht(lt.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=>{!Jj.includes(p)&&p!==da.DELETE&&ht(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ui.isDefined(E.attribute_name)){ht(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ht(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}RL.forEach(p=>{ui.isDefined(E[p])?ui.isBoolean(E[p])||ht(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ht(lt.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}`;ht(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return rX(r)}a(AL,"customValidate");OL.exports={addRoleValidation:jj,alterRoleValidation:Xj,dropRoleValidation:Zj};function tX(e){let{operation:t,permission:r}=e;if(t===_a.OPERATIONS_ENUM.ADD_ROLE||t===_a.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?_a.ROLE_TYPES_ENUM.SUPER_USER:_a.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(tX,"validateNoSUPerms");function rX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:lt.ROLE_PERMS_ERROR,...e};return Vj(new Error,s,Yj.BAD_REQUEST)}else return null}a(rX,"generateRolePermResponse");function ht(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ht,"addPermError")});var FS=g((wfe,IL)=>{"use strict";var NL=Lr(),yL=Dr(),sX=ri(),HS=bL(),xS=Rn(),nX=require("uuid").v4,iX=require("util"),wd=M(),oX=Q(),qS=yL.searchByValue,aX=yL.searchByHash,cX=iX.promisify(sX.delete),uX=Zs(),lX=ta(),{hdb_errors:_X,handleHDBError:ao}=se(),{HDB_ERROR_MSGS:wL,HTTP_STATUS_CODES:Eu}=_X,{UserEventMsg:GS}=Cs();IL.exports={addRole:dX,alterRole:fX,dropRole:EX,listRoles:hX};function BS(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(BS,"scrubRoleDetails");async function dX(e){let t=HS.addRoleValidation(e);if(t)throw t;e=BS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await qS(r)||[])}catch(i){throw ao(i)}if(s&&s.length>0)throw ao(new Error,wL.ROLE_ALREADY_EXISTS(e.role),Eu.CONFLICT,void 0,void 0,!0);e.id||(e.id=nX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await NL.insert(n),xS.signalUserChange(new GS(process.pid)),e=BS(e),e}a(dX,"addRole");async function fX(e){let t=HS.alterRoleValidation(e);if(t)throw t;e=BS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await NL.update(r)}catch(n){throw ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw ao(new Error,"Invalid role id",Eu.BAD_REQUEST,void 0,void 0,!0);return await xS.signalUserChange(new GS(process.pid)),e}a(fX,"alterRole");async function EX(e){let t=HS.dropRoleValidation(e);if(t)throw ao(new Error,t,Eu.BAD_REQUEST,void 0,void 0,!0);let r=new lX(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await aX(r));if(s.length===0)throw ao(new Error,wL.ROLE_NOT_FOUND,Eu.NOT_FOUND,void 0,void 0,!0);let n=new uX(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await qS(n)),o=!1;if(oX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ao(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,Eu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await cX(c),xS.signalUserChange(new GS(process.pid)),`${s[0].role} successfully deleted`}a(EX,"dropRole");async function hX(){return qS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(hX,"listRoles")});var ML=g((Cfe,LL)=>{"use strict";var mX=ee(),li=require("joi"),pX=je(),CL=require("moment"),SX=require("fs-extra"),kS=require("path"),TX=require("lodash"),hu=M(),{LOG_LEVELS:co}=M(),gX="YYYY-MM-DD hh:mm:ss",RX=kS.resolve(__dirname,"../logs");LL.exports=function(e){return pX.validateBySchema(e,AX)};var AX=li.object({from:li.custom(DL),until:li.custom(DL),level:li.valid(co.NOTIFY,co.FATAL,co.ERROR,co.WARN,co.INFO,co.DEBUG,co.TRACE),order:li.valid("asc","desc"),limit:li.number().min(1),start:li.number().min(0),log_name:li.custom(OX)});function DL(e,t){if(CL(e,CL.ISO_8601).format(gX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(DL,"validateDatetime");function OX(e,t){if(TX.invert(hu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=mX.get(hu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?hu.LOG_NAMES.HDB:e,i=n===hu.LOG_NAMES.INSTALL?kS.join(RX,hu.LOG_NAMES.INSTALL):kS.join(s,n);return SX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(OX,"validateReadLogPath")});var $S=g((Lfe,PL)=>{"use strict";var Id=M(),bX=$(),NX=ee(),yX=ML(),VS=require("path"),UL=require("fs-extra"),{once:wX}=require("events"),{handleHDBError:IX,hdb_errors:CX}=se(),{PACKAGE_ROOT:DX}=M(),LX=VS.join(DX,"logs"),MX=1e3,UX=200;PL.exports=PX;async function PX(e){let t=yX(e);if(t)throw IX(t,t.message,CX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=NX.get(Id.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Id.LOG_NAMES.HDB:e.log_name,n=s===Id.LOG_NAMES.INSTALL?VS.join(LX,Id.LOG_NAMES.INSTALL):VS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?MX: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(UL.statSync(n).size-(h+5)*UX,0));let S=UL.createReadStream(n,{start:p});S.on("error",P=>{bX.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[z,j,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:j,thread:de,level:Le,tags:ce,message:""},B=J.index+z.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(_i(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(_i(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(_i(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(_i(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await wX(S,"close"),b}a(PX,"readLog");function _i(e,t,r){t==="desc"?vX(e,r):t==="asc"?BX(e,r):r.push(e)}a(_i,"pushLineToResult");function vX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(vX,"insertDescending");function BX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(BX,"insertAscending")});var Cd=g((Bfe,xL)=>{"use strict";var YS=require("joi"),{string:mu,boolean:vL,date:HX}=YS.types(),xX=je(),{validateSchemaExists:Ufe,validateTableExists:Pfe,validateSchemaName:vfe}=Qs(),qX=M(),GX=Fe(),BL=ee();BL.initSync();var FX=mu.invalid(BL.get(qX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(GX.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(),HL={operation:mu.valid("add_node","update_node","set_node_replication"),node_name:FX,subscriptions:YS.array().items({table:mu.optional(),schema:mu.optional(),database:mu.optional(),subscribe:vL.required(),publish:vL.required().custom(VX),start_time:HX.iso()}).min(1).required()};function kX(e){return xX.validateBySchema(e,YS.object(HL))}a(kX,"addUpdateNodeValidator");function VX(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(VX,"checkForFalsy");xL.exports={addUpdateNodeValidator:kX,validation_schema:HL}});var GL=g((xfe,qL)=>{var $X=je(),YX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};qL.exports=function(e){return $X.validateObject(e,YX)}});var Dd=g((qfe,FL)=>{"use strict";var KX=M().OPERATIONS_ENUM,KS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=KX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};FL.exports=KS});var VL=g((Ffe,kL)=>{"use strict";var WX={OPERATION:"operation",REFRESH:"refresh"},WS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},QS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};kL.exports={JWTTokens:WS,TOKEN_TYPE_ENUM:WX,JWTRSAKeys:QS}});var Tu=g((Vfe,WL)=>{"use strict";var Su=require("jsonwebtoken"),zS=require("fs-extra"),JS=Q(),is=M(),{handleHDBError:Er,hdb_errors:QX}=se(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=QX,pu=$(),$L=U_(),ZS=ss(),zX=Lr().update,JX=Dd(),jX=Rn(),{UserEventMsg:XX}=Cs(),di=ee();di.initSync();var jS=require("path"),{JWTTokens:ZX,JWTRSAKeys:eZ,TOKEN_TYPE_ENUM:Ld}=VL(),tZ=di.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?di.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",rZ=di.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?di.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Md="RS256",XS;WL.exports={createTokens:sZ,validateOperationToken:iZ,refreshOperationToken:nZ,validateRefreshToken:KL};async function sZ(e){if(JS.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZS.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw pu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ud(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await YL(i,r.private_key,r.passphrase),c=await Su.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:rZ,algorithm:Md,subject:Ld.REFRESH}),u=$L.hash(c),_=new JX(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await zX(_)}catch(f){pu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return jX.signalUserChange(new XX(process.pid)),new ZX(o,c)}a(sZ,"createTokens");async function YL(e,t,r){return await Su.sign(e,{key:t,passphrase:r},{expiresIn:tZ,algorithm:Md,subject:Ld.OPERATION})}a(YL,"signOperationToken");async function Ud(){if(XS===void 0)try{let e=jS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=jS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=jS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await zS.readFile(e)).toString(),n=(await zS.readFile(t)).toString(),i=(await zS.readFile(r)).toString();XS=new eZ(i,n,s)}catch(e){throw pu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return XS}a(Ud,"getJWTRSAKeys");async function nZ(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await KL(e.refresh_token);let t=await Ud(),r=await Su.decode(e.refresh_token);return{operation_token:await YL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(nZ,"refreshOperationToken");async function iZ(e){try{let t=await Ud(),r=await Su.verify(e,t.public_key,{algorithms:Md,subject:Ld.OPERATION});return await ZS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw pu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(iZ,"validateOperationToken");async function KL(e){let t;try{let r=await Ud(),s=await Su.verify(e,r.public_key,{algorithms:Md,subject:Ld.REFRESH});t=await ZS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw pu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!$L.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(KL,"validateRefreshToken")});var eT=g((Kfe,JL)=>{"use strict";var oZ=GL(),fa=require("passport"),aZ=require("passport-local").Strategy,cZ=require("passport-http").BasicStrategy,uZ=require("util"),lZ=ss(),zL=uZ.callbackify(lZ.findAndValidateUser),Yfe=yr(),_Z=M(),QL=Tu();fa.use(new aZ(function(e,t,r){zL(e,t,r)}));fa.use(new cZ(function(e,t,r){zL(e,t,r)}));fa.serializeUser(function(e,t){t(null,e)});fa.deserializeUser(function(e,t){t(null,e)});function dZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":fa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_Z.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?QL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):QL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:fa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(dZ,"authorize");function fZ(e,t){let r=oZ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(fZ,"checkPermissions");JL.exports={authorize:dZ,checkPermissions:fZ}});var fi=g((Qfe,jL)=>{"use strict";var tT=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},rT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};jL.exports={Node:tT,NodeSubscription:rT}});var ZL=g((Jfe,XL)=>{"use strict";var EZ=M().OPERATIONS_ENUM,sT=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=EZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};XL.exports=sT});var gu=g((Xfe,eM)=>{"use strict";var nT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},iT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};eM.exports={RemotePayloadObject:nT,RemotePayloadSubscription:iT}});var rM=g((eEe,tM)=>{"use strict";var oT=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};tM.exports=oT});var iM=g((iEe,nM)=>{"use strict";var hZ=rM(),rEe=dt(),sM=We(),mZ=$(),{getSchemaPath:sEe,getTransactionAuditStorePath:nEe}=Je(),{getDatabases:pZ}=(Ae(),ne(Ge));nM.exports=SZ;async function SZ(e){let t=new hZ;try{let r=pZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await sM.environmentDataSize(schema_path,e.name),o=await sM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){mZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(SZ,"lmdbGetTableSize")});var aM=g((aEe,oM)=>{"use strict";var aT=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};oM.exports=aT});var Ea=g((dEe,dM)=>{"use strict";var TZ=require("fs-extra"),gZ=require("path"),Jt=require("systeminformation"),Ei=$(),cM=st(),uEe=Fe(),vd=M(),RZ=iM(),_M=Zn(),{getThreadInfo:uM}=Ke(),pT=ee();pT.initSync();var AZ=aM(),{openEnvironment:lEe}=We(),{getSchemaPath:_Ee}=Je(),{database:OZ}=(Ae(),ne(Ge)),Pd;dM.exports={getHDBProcessInfo:_T,getNetworkInfo:fT,getDiskInfo:dT,getMemoryInfo:lT,getCPUInfo:uT,getTimeInfo:cT,getSystemInformation:ET,systemInformation:bZ,getTableSize:hT,getMetrics:mT};function cT(){return Jt.time()}a(cT,"getTimeInfo");async function uT(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.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,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return Ei.error(`error in getCPUInfo: ${e}`),{}}}a(uT,"getCPUInfo");async function lT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ei.error(`error in getMemoryInfo: ${e}`),{}}}a(lT,"getMemoryInfo");async function _T(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await TZ.readFile(gZ.join(pT.get(vd.CONFIG_PARAMS.ROOTPATH),vd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===vd.NODE_ERROR_CODES.ENOENT)Ei.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(_T,"getHDBProcessInfo");async function dT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return Ei.error(`error in getDiskInfo: ${t}`),e}}a(dT,"getDiskInfo");async function fT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ei.error(`error in getNetworkInfo: ${t}`),e}}a(fT,"getNetworkInfo");async function ET(){if(Pd!==void 0)return Pd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Pd=e,Pd}catch(t){return Ei.error(`error in getSystemInformation: ${t}`),e}}a(ET,"getSystemInformation");async function hT(){let e=[],t=await _M.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await RZ(s));return e}a(hT,"getTableSize");async function mT(){let e=await _M.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=OZ({database:r,table:n}),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}}),s[n]=o}catch(i){Ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(mT,"getMetrics");async function lM(){if(pT.get(vd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await cM.getNATSReferences(),t=await cM.listStreams(),r=[];for(let s of t){let n=[],i=await e.consumers.list(s.config.name);for await(let c of i)n.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:s.config.name,database:s.config.subjects[0].split(".")[1],table:s.config.subjects[0].split(".")[2],state:s.state,consumers:n};r.push(o)}return r}}a(lM,"getNatsStreamInfo");async function bZ(e){let t=new AZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ET(),t.time=cT(),t.cpu=await uT(),t.memory=await lT(),t.disk=await dT(),t.network=await fT(),t.harperdb_processes=await _T(),t.table_size=await hT(),t.metrics=await mT(),t.threads=await uM(),t.replication=await lM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ET();break;case"time":t.time=cT();break;case"cpu":t.cpu=await uT();break;case"memory":t.memory=await lT();break;case"disk":t.disk=await dT();break;case"network":t.network=await fT();break;case"harperdb_processes":t.harperdb_processes=await _T();break;case"table_size":t.table_size=await hT();break;case"database_metrics":case"metrics":t.metrics=await mT();break;case"threads":t.threads=await uM();break;case"replication":t.replication=await lM();break;default:break}return t}a(bZ,"systemInformation")});var Hd=g((EEe,fM)=>{"use strict";fM.exports={version:NZ,printVersion:yZ};var Bd=eu();function NZ(){if(Bd)return Bd.version}a(NZ,"version");function yZ(){Bd&&console.log(`HarperDB Version ${Bd.version}`)}a(yZ,"printVersion")});var os=g((SEe,pM)=>{"use strict";var wZ=Lr(),ST=Q(),IZ=require("util"),uo=M(),EM=ee();EM.initSync();var CZ=eT(),hM=Dr(),{Node:mEe,NodeSubscription:pEe}=fi(),DZ=ta(),LZ=ZL(),{RemotePayloadObject:MZ,RemotePayloadSubscription:UZ}=gu(),{handleHDBError:PZ,hdb_errors:vZ}=se(),{HTTP_STATUS_CODES:BZ,HDB_ERROR_MSGS:HZ}=vZ,xZ=Zs(),qZ=Ea(),GZ=Hd(),{getDatabases:FZ}=(Ae(),ne(Ge)),kZ=IZ.promisify(CZ.authorize),VZ=hM.searchByHash,$Z=hM.searchByValue;pM.exports={authHeaderToUser:YZ,isEmpty:KZ,getNodeRecord:WZ,upsertNodeRecord:QZ,buildNodePayloads:zZ,checkClusteringEnabled:JZ,getAllNodeRecords:jZ,getSystemInfo:XZ,reverseSubscription:mM};async function YZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await kZ(t,null),e}a(YZ,"authHeaderToUser");function KZ(e){return e==null}a(KZ,"isEmpty");async function WZ(e){let t=new DZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return VZ(t)}a(WZ,"getNodeRecord");async function QZ(e){let t=new LZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wZ.upsert(t)}a(QZ,"upsertNodeRecord");function mM(e){if(ST.isEmpty(e.subscribe)||ST.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(mM,"reverseSubscription");function zZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=ST.getTableHashAttribute(u,_),{subscribe:d,publish:f}=mM(c),E=FZ()[u]?.[_],h=new UZ(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new MZ(r,t,n,s)}a(zZ,"buildNodePayloads");function JZ(){if(!EM.get(uo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw PZ(new Error,HZ.CLUSTERING_NOT_ENABLED,BZ.BAD_REQUEST,void 0,void 0,!0)}a(JZ,"checkClusteringEnabled");async function jZ(){let e=new xZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $Z(e))}a(jZ,"getAllNodeRecords");async function XZ(){let e=await qZ.getSystemInformation();return{hdb_version:GZ.version(),node_version:e.node_version,platform:e.platform}}a(XZ,"getSystemInfo")});var TT=g((gEe,NM)=>{"use strict";var xd=st(),SM=Q(),TM=Fe(),gM=M(),qd=$(),RM=fu(),ZZ=Z_(),{RemotePayloadObject:e5}=gu(),{handleHDBError:AM,hdb_errors:t5}=se(),{HTTP_STATUS_CODES:OM}=t5,{NodeSubscription:bM}=fi();NM.exports=r5;async function r5(e,t){let r;try{r=await xd.request(`${t}.${TM.REQUEST_SUFFIX}`,new e5(gM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),qd.trace("Response from remote describe all request:",r)}catch(o){qd.error(`addNode received error from describe all request to remote node: ${o}`);let c=xd.requestErrorHandler(o,"add_node",t);throw AM(new Error,c,OM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===TM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw AM(new Error,o,OM.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===gM.SYSTEM_SCHEMA_NAME){await xd.createLocalTableStream(u,c);let h=new bM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=SM.doesSchemaExist(u),l=s[u]!==void 0,d=c?SM.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(qd.trace(`addNode creating schema: ${u}`),await RM.createSchema({operation:"create_schema",schema:u})),!d&&f){qd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new ZZ(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await RM.createTable(h)}await xd.createLocalTableStream(u,c);let E=new bM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(r5,"reviewSubscriptions")});var Vd=g((AEe,IM)=>{"use strict";var{handleHDBError:Gd,hdb_errors:s5}=se(),{HTTP_STATUS_CODES:Fd}=s5,{addUpdateNodeValidator:n5}=Cd(),kd=$(),wM=M(),yM=Fe(),i5=Q(),Ru=st(),Au=os(),o5=ee(),a5=TT(),{Node:c5,NodeSubscription:u5}=fi(),{broadcast:l5}=Ke(),_5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",d5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",f5=o5.get(wM.CONFIG_PARAMS.CLUSTERING_NODENAME);IM.exports=E5;async function E5(e,t=!1){kd.trace("addNode called with:",e),Au.checkClusteringEnabled();let r=n5(e);if(r)throw Gd(r,r.message,Fd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Au.getNodeRecord(s);if(!i5.isEmptyOrZeroLength(d))throw Gd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Fd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await a5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=_5,o;let c=Au.buildNodePayloads(n,f5,wM.OPERATIONS_ENUM.ADD_NODE,await Au.getSystemInfo()),u=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];n[d].start_time===void 0&&delete n[d].start_time,u.push(new u5(E.schema,E.table,E.publish,E.subscribe))}kd.trace("addNode sending remote payload:",c);let _;try{_=await Ru.request(`${s}.${yM.REQUEST_SUFFIX}`,c)}catch(d){kd.error(`addNode received error from request: ${d}`);for(let E=0,h=n.length;E<h;E++){let p=n[E];p.publish=!1,p.subscribe=!1,await Ru.updateRemoteConsumer(p,s)}let f=Ru.requestErrorHandler(d,"add_node",s);throw Gd(new Error,f,Fd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===yM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${_.message}`;throw Gd(new Error,d,Fd.INTERNAL_SERVER_ERROR,"error",d)}kd.trace(_);for(let d=0,f=n.length;d<f;d++){let E=n[d];await Ru.updateRemoteConsumer(E,s),E.subscribe===!0&&await Ru.updateConsumerIterator(E.schema,E.table,s,"start")}let l=new c5(s,u,_.system_info);return await Au.upsertNodeRecord(l),l5({type:"nats_update"}),i.length>0?o.message=d5:o.message=`Successfully added '${s}' to manifest`,o}a(E5,"addNode")});var AT=g((NEe,LM)=>{"use strict";var{handleHDBError:gT,hdb_errors:h5}=se(),{HTTP_STATUS_CODES:RT}=h5,{addUpdateNodeValidator:m5}=Cd(),Ou=$(),DM=M(),CM=Fe(),bEe=Q(),bu=st(),Nu=os(),p5=ee(),{cloneDeep:S5}=require("lodash"),T5=TT(),{Node:g5,NodeSubscription:R5}=fi(),{broadcast:A5}=Ke(),O5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",b5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",N5=p5.get(DM.CONFIG_PARAMS.CLUSTERING_NODENAME);LM.exports=y5;async function y5(e){Ou.trace("updateNode called with:",e),Nu.checkClusteringEnabled();let t=m5(e);if(t)throw gT(t,t.message,RT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Nu.getNodeRecord(r);n.length>0&&(s=S5(n));let{added:i,skipped:o}=await T5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=O5,c;let u=Nu.buildNodePayloads(i,N5,DM.OPERATIONS_ENUM.UPDATE_NODE,await Nu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Ou.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Ou.trace("updateNode sending remote payload:",u);let _;try{_=await bu.request(`${r}.${CM.REQUEST_SUFFIX}`,u)}catch(l){Ou.error(`updateNode received error from request: ${l}`);let d=bu.requestErrorHandler(l,"update_node",r);throw gT(new Error,d,RT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===CM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw gT(new Error,l,RT.INTERNAL_SERVER_ERROR,"error",l)}Ou.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await bu.updateRemoteConsumer(f,r),f.subscribe===!0?await bu.updateConsumerIterator(f.schema,f.table,r,"start"):await bu.updateConsumerIterator(f.schema,f.table,r,"stop")}return s||(s=[new g5(r,[],_.system_info)]),await w5(s[0],i,_.system_info),o.length>0?c.message=b5:c.message=`Successfully updated '${r}'`,c}a(y5,"updateNode");async function w5(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new R5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Nu.upsertNodeRecord(s),A5({type:"nats_update"})}a(w5,"updateNodeTable")});var BM=g((wEe,vM)=>{"use strict";var PM=require("joi"),{string:MM}=PM.types(),I5=je(),UM=M(),C5=ee(),D5=Fe();vM.exports=L5;function L5(e){let t=MM.invalid(C5.get(UM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(D5.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=PM.object({operation:MM.valid(UM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return I5.validateBySchema(e,r)}a(L5,"removeNodeValidator")});var Yd=g((CEe,FM)=>{"use strict";var{handleHDBError:HM,hdb_errors:M5}=se(),{HTTP_STATUS_CODES:xM}=M5,U5=BM(),yu=$(),qM=os(),P5=Q(),$d=M(),GM=Fe(),OT=st(),v5=ee(),{RemotePayloadObject:B5}=gu(),{NodeSubscription:H5}=fi(),x5=ra(),q5=ri(),{broadcast:G5}=Ke(),F5=v5.get($d.CONFIG_PARAMS.CLUSTERING_NODENAME);FM.exports=k5;async function k5(e){yu.trace("removeNode called with:",e),qM.checkClusteringEnabled();let t=U5(e);if(t)throw HM(t,t.message,xM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await qM.getNodeRecord(r);if(P5.isEmptyOrZeroLength(s))throw HM(new Error,`Node '${r}' was not found.`,xM.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new B5($d.OPERATIONS_ENUM.REMOVE_NODE,F5,[]),i,o=!1;for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];l.subscribe===!0&&await OT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await OT.updateRemoteConsumer(new H5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await OT.request(`${r}.${GM.REQUEST_SUFFIX}`,n),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new x5($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await q5.deleteRecord(c),G5({type:"nats_update"}),i?.status===GM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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(k5,"removeNode")});var $M=g((LEe,VM)=>{"use strict";var kM=require("joi"),{string:V5,array:$5}=kM.types(),Y5=je(),K5=Cd();VM.exports=W5;function W5(e){let t=kM.object({operation:V5.valid("configure_cluster").required(),connections:$5.items(K5.validation_schema).required()});return Y5.validateBySchema(e,t)}a(W5,"configureClusterValidator")});var bT=g((UEe,zM)=>{"use strict";var Q5=M(),Kd=$(),z5=Q(),J5=Yd(),j5=Vd(),YM=os(),X5=$M(),{handleHDBError:KM,hdb_errors:Z5}=se(),{HTTP_STATUS_CODES:WM}=Z5,e8="Configure cluster complete.",t8="Failed to configure the cluster. Check the logs for more details.",r8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";zM.exports=s8;async function s8(e){Kd.trace("configure cluster called with:",e),YM.checkClusteringEnabled();let t=X5(e);if(t)throw KM(t,t.message,WM.BAD_REQUEST,void 0,void 0,!0);let r=await YM.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(QM(J5,{operation:Q5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Kd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(QM(j5,E,E.node_name))}let c=await Promise.allSettled(i);Kd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Kd.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(z5.isEmptyOrZeroLength(u))return{message:e8,connections:_};if(l)return{message:r8,failed_nodes:u,connections:_};throw KM(new Error,t8,WM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(s8,"configureCluster");async function QM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(QM,"functionWrapper")});var jM=g((vEe,JM)=>{"use strict";var Wd=require("joi"),n8=je(),{validateSchemaExists:i8,validateTableExists:o8,validateSchemaName:a8}=Qs(),c8=Wd.object({operation:Wd.string().valid("purge_stream"),schema:Wd.string().custom(i8).custom(a8).required(),table:Wd.string().custom(o8).required()});function u8(e){return n8.validateBySchema(e,c8)}a(u8,"purgeStreamValidator");JM.exports=u8});var NT=g((HEe,XM)=>{"use strict";var{handleHDBError:l8,hdb_errors:_8}=se(),{HTTP_STATUS_CODES:d8}=_8,f8=jM(),E8=st(),h8=os();XM.exports=m8;async function m8(e){if(e.purge_ingest!==!0){let n=f8(e);if(n)throw l8(n,n.message,d8.BAD_REQUEST,void 0,void 0,!0)}h8.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await E8.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(m8,"purgeStream")});var IT=g((qEe,nU)=>{"use strict";var wT=os(),p8=st(),tU=ee(),Qd=M(),lo=Fe(),S8=Q(),yT=$(),{RemotePayloadObject:T8}=gu(),{ErrorCode:ZM}=require("nats"),eU=tU.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED),rU=tU.get(Qd.CONFIG_PARAMS.CLUSTERING_NODENAME);nU.exports={clusterStatus:g8,buildNodeStatus:sU};async function g8(){let e={node_name:rU,is_enabled:eU,connections:[]};if(!eU)return e;let t=await wT.getAllNodeRecords();if(S8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(sU(t[s],e.connections));return await Promise.allSettled(r),e}a(g8,"clusterStatus");async function sU(e,t){let r=e.name,s=new T8(Qd.OPERATIONS_ENUM.CLUSTER_STATUS,rU,void 0,await wT.getSystemInfo()),n,i,o=lo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await p8.request(lo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===lo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=lo.CLUSTER_STATUS_STATUSES.CLOSED,yT.error(`Error getting node status from ${r} `,n))}catch(u){yT.warn(`Error getting node status from ${r}`,u),u.code===ZM.NoResponders?o=lo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===ZM.Timeout?o=lo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=lo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new R8(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qd.PRE_4_0_0_VERSION&&await wT.upsertNodeRecord(u)}catch(u){yT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(sU,"buildNodeStatus");function R8(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(R8,"NodeStatusObject")});var DT=g((FEe,iU)=>{"use strict";var{handleHDBError:A8,hdb_errors:O8}=se(),{HTTP_STATUS_CODES:b8}=O8,N8=st(),y8=os(),CT=Q(),zd=require("joi"),w8=je(),I8=2e3,C8=zd.object({timeout:zd.number().min(1),connected_nodes:zd.boolean(),routes:zd.boolean()});iU.exports=D8;async function D8(e){y8.checkClusteringEnabled();let t=w8.validateBySchema(e,C8);if(t)throw A8(t,t.message,b8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||CT.autoCastBoolean(s),o=n===void 0||CT.autoCastBoolean(n),c={nodes:[]},u=await N8.getServerList(r??I8),_={};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:CT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(D8,"clusterNetwork")});var uU=g((VEe,cU)=>{"use strict";var LT=require("joi"),oU=je(),{route_constraints:aU}=Wm();cU.exports={setRoutesValidator:L8,deleteRoutesValidator:M8};function L8(e){let t=LT.object({server:LT.valid("hub","leaf").required(),routes:aU.required()});return oU.validateBySchema(e,t)}a(L8,"setRoutesValidator");function M8(e){let t=LT.object({routes:aU.required()});return oU.validateBySchema(e,t)}a(M8,"deleteRoutesValidator")});var UT=g((YEe,fU)=>{"use strict";var _o=Pr(),MT=Q(),Jd=M(),lU=uU(),{handleHDBError:_U,hdb_errors:U8}=se(),{HTTP_STATUS_CODES:dU}=U8,P8="cluster routes successfully set",v8="cluster routes successfully deleted";fU.exports={setRoutes:B8,getRoutes:H8,deleteRoutes:x8};function B8(e){let t=lU.setRoutesValidator(e);if(t)throw _U(t,t.message,dU.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=MT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:P8,set:o,skipped:i}}a(B8,"setRoutes");function H8(){let e=_o.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(H8,"getRoutes");function x8(e){let t=lU.deleteRoutesValidator(e);if(t)throw _U(t,t.message,dU.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=MT.isEmptyOrZeroLength(s)?null:s,_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=MT.isEmptyOrZeroLength(n)?null:n,_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:v8,deleted:i,skipped:o}}a(x8,"deleteRoutes")});var hU=g((WEe,EU)=>{"use strict";var wu=require("alasql"),fo=require("recursive-iterator"),Bs=$(),q8=Q(),Iu=M(),PT=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,F8(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Iu.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Iu.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=G8(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(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new wu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function G8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(G8,"filterReadRestrictedAttrs");function F8(e,t,r,s,n){k8(e,t,r,s,n)}a(F8,"interpretAST");function Cu(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Cu,"addSchemaTableToMap");function k8(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wu.yy.Insert?K8(e,t,r):e instanceof wu.yy.Select?V8(e,t,r,s,n):e instanceof wu.yy.Update?$8(e,t,r):e instanceof wu.yy.Delete?Y8(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(k8,"getRecordAttributesAST");function V8(e,t,r,s,n){if(!e){Bs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(q8.isEmptyOrZeroLength(i)){Bs.error("No schema specified");return}e.from.forEach(c=>{Cu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Cu(c.table,t,r,s,n)});let o=new fo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.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 fo(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{Bs.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 fo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.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 fo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(V8,"getSelectAttributes");function $8(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a($8,"getUpdateAttributes");function Y8(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new fo(e.where),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a(Y8,"getDeleteAttributes");function K8(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.into.databaseid;Cu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.into.tableid,n,i.columnid,t,r)}a(K8,"getInsertAttributes");function vT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(vT,"pushAttribute");EU.exports=PT});var xT=g((zEe,TU)=>{var jd=Qi(),mU=require("chalk"),Gr=$(),pU=require("prompt"),{promisify:W8}=require("util"),BT=M(),Q8=require("fs-extra"),z8=require("path"),J8=Q(),j8=Hd(),SU=ee();SU.initSync();var X8=require("moment"),Z8=W8(pU.get),e6=z8.join(SU.getHdbBasePath(),BT.LICENSE_KEY_DIR_NAME,BT.LICENSE_FILE_NAME,BT.LICENSE_FILE_NAME);TU.exports={getFingerprint:r6,setLicense:t6,parseLicense:HT,register:s6,getRegistrationInfo:i6};async function t6(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await HT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(t6,"setLicense");async function r6(){let e={};try{e=await jd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(r6,"getFingerprint");async function HT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=jd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await Q8.writeFile(e6,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(HT,"parseLicense");async function s6(){let e=await n6();return HT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(s6,"register");async function n6(){let e=await jd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:mU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:mU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{pU.start()}catch(s){Gr.error(s)}let r;try{r=await Z8(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(n6,"promptForRegistration");async function i6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await jd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(J8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=j8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=X8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(i6,"getRegistrationInfo")});var RU=g((jEe,gU)=>{"use strict";var o6=Fe(),qT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+o6.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};gU.exports=qT});var bU=g((ZEe,OU)=>{"use strict";var AU=Fe(),GT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+AU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+AU.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"}};OU.exports=GT});var yU=g((the,NU)=>{"use strict";var FT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};NU.exports=FT});var IU=g((she,wU)=>{"use strict";var a6=Fe(),kT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+a6.SERVER_SUFFIX.ADMIN,this.password=r}};wU.exports=kT});var YT=g((ihe,LU)=>{"use strict";var ha=require("path"),ef=require("fs-extra"),c6=RU(),u6=bU(),l6=yU(),_6=IU(),VT=ss(),pa=Q(),pr=Pr(),Zd=M(),Du=Fe(),{CONFIG_PARAMS:_t}=Zd,Lu=$(),Mu=ee(),CU=Tn(),$T=st(),ma="clustering",d6=1e4,DU=5;LU.exports={generateNatsConfig:E6,removeNatsConfig:h6,getHubConfigPath:f6};function f6(){let e=Mu.get(_t.ROOTPATH);return ha.join(e,ma,Du.NATS_CONFIG_FILES.HUB_SERVER)}a(f6,"getHubConfigPath");async function E6(e=!1,t=void 0){Mu.initSync();let r=Mu.get(_t.ROOTPATH),s=ha.join(r,ma,Du.PID_FILES.HUB),n=ha.join(r,ma,Du.PID_FILES.LEAF),i=pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ha.join(r,ma,Du.NATS_CONFIG_FILES.HUB_SERVER),c=ha.join(r,ma,Du.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $T.checkNATSServerInstalled()||tf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await VT.listUsers(),S=pr.getConfigFromFile(_t.CLUSTERING_USER),T=await VT.getClusterUser();(pa.isEmpty(T)||T.active!==!0)&&tf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Xd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Xd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Xd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await Xd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,j]of p.entries())j.role.role===Zd.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(b.push(new _6(j.username,CU.decrypt(j.hash))),R.push(new l6(j.username,CU.decrypt(j.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!pa.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new c6(pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=pa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ef.writeJson(o,P),Lu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new u6(pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ef.writeJson(c,J),Lu.trace(`Leaf server config written to ${c}`))}a(E6,"generateNatsConfig");async function Xd(e){let t=Mu.get(e);return pa.isEmpty(t)&&tf(`port undefined for '${e}'`),await pa.isPortTaken(t)&&tf(`'${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(Xd,"isPortAvailable");function tf(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(tf,"generateNatsConfigError");async function h6(e){let{port:t,config_file:r}=$T.getServerConfig(e),{username:s,decrypt_hash:n}=await VT.getClusterUser(),i=0,o=2e3;for(;i<DU;){try{let _=await $T.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=DU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await pa.async_set_timeout(o*(i*2))}let c="0".repeat(d6),u=ha.join(Mu.get(_t.ROOTPATH),ma,r);await ef.writeFile(u,c),await ef.remove(u),Lu.notify(e,"started.")}a(h6,"removeNatsConfig")});var HU=g((ahe,BU)=>{"use strict";var Fr=ee(),m6=Qi(),he=M(),Uu=Fe(),yn=require("path"),{PACKAGE_ROOT:sf}=M(),MU=ee(),rf=Q(),Sa="/dev/null",p6=yn.join(sf,"launchServiceScripts"),UU=yn.join(sf,"utility/scripts"),S6=yn.join(UU,he.HDB_RESTART_SCRIPT),PU=yn.resolve(sf,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME);function vU(){let t=m6.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return rf.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:sf}}a(vU,"generateMainServerConfig");var T6=9930;function g6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=MU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==T6?"-"+s:""),script:PU,args:n?`${n} -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 Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Sa,i.error_file=Sa),i}a(g6,"generateNatsHubServerConfig");var R6=9940;function A6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=MU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==R6?"-"+s:""),script:PU,args:n?`${n} -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 Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Sa,i.error_file=Sa),i}a(A6,"generateNatsLeafServerConfig");function O6(){Fr.initSync();let e=yn.join(Fr.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:p6,autorestart:!1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Sa,t.error_file=Sa),t}a(O6,"generateClusteringUpgradeV4ServiceConfig");function b6(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return rf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:UU},script:S6}}a(b6,"generateRestart");function N6(){return{apps:[vU()]}}a(N6,"generateAllServiceConfigs");BU.exports={generateAllServiceConfigs:N6,generateMainServerConfig:vU,generateRestart:b6,generateNatsHubServerConfig:g6,generateNatsLeafServerConfig:A6,generateClusteringUpgradeV4ServiceConfig:O6}});var jU=g((lhe,JU)=>{"use strict";var ve=M(),y6=Q(),In=YT(),nf=st(),wn=Fe(),hi=HU(),of=ee(),mi=$(),w6=os(),{startWorker:xU,onMessageFromWorkers:I6}=Ke(),C6=Ea(),uhe=require("util"),D6=require("child_process"),L6=require("fs"),{execFile:M6}=D6,ye;JU.exports={enterPM2Mode:U6,start:pi,stop:KT,reload:GU,restart:FU,list:WT,describe:VU,connect:Cn,kill:x6,startAllServices:q6,startService:QT,getUniqueServicesList:$U,restartAllServices:G6,isServiceRegistered:YU,reloadStopStart:KU,restartHdb:kU,deleteProcess:B6,startClusteringProcesses:QU,startClusteringThreads:zU,isHdbRestartRunning:H6,isClusteringRunning:k6,stopClustering:F6,reloadClustering:V6};var Pu=!1;I6(e=>{e.type==="restart"&&of.initSync(!0)});function U6(){Pu=!0}a(U6,"enterPM2Mode");function Cn(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,s)=>{mi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var Sr,P6=10,qU;function pi(e,t=!1){if(Pu)return v6(e);let r=M6(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Sr.indexOf(r);o>-1&&Sr.splice(o,1),!qU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<P6&&(L6.existsSync(In.getHubConfigPath())?pi(e):(await In.generateNatsConfig(!0),pi(e),await new Promise(c=>setTimeout(c,3e3)),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=of.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=wn.LOG_LEVELS[f]}if(wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Sr=[],!Sr&&!t){let i=a(()=>{qU=!0,Sr&&(Sr.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)}Sr.push(r)}a(pi,"start");function v6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.start(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(v6,"startWithPM2");function KT(e){if(!Pu){for(let t of Sr||[])t.name===e&&(Sr.splice(Sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.stop(e,async(s,n)=>{s&&(ye.disconnect(),r(s)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(s)),ye.disconnect(),t(o)})})})}a(KT,"stop");function GU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.reload(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(GU,"reload");function FU(e){if(!Pu)for(let t of Sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.restart(e,(s,n)=>{ye.disconnect(),t(n)})})}a(FU,"restart");function B6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.delete(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(B6,"deleteProcess");async function kU(){await pi(hi.generateRestart())}a(kU,"restartHdb");async function H6(){let e=await WT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(H6,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.list((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(WT,"list");function VU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.describe(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(VU,"describe");function x6(){if(!Pu){for(let e of Sr||[])e.kill();Sr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.killDaemon((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(x6,"kill");async function q6(){try{await QU(),await zU(),await pi(hi.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(q6,"startAllServices");async function QT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=hi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=hi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=hi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=hi.generateNatsHubServerConfig(),await pi(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=hi.generateNatsLeafServerConfig(),await pi(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=hi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await pi(r)}catch(r){throw ye?.disconnect(),r}}a(QT,"startService");async function $U(){try{let e=await WT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw ye?.disconnect(),e}}a($U,"getUniqueServicesList");async function G6(e=[]){try{let t=!1,r=await $U();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await FU(o))}t&&await KU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(G6,"restartAllServices");async function YU(e){if(Sr?.find(r=>r.name===e))return!0;let t=await C6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(YU,"isServiceRegistered");async function KU(e){let t=of.get(ve.CONFIG_PARAMS.THREADS_COUNT)??of.get(ve.CONFIG_PARAMS.THREADS),r=await VU(e),s=y6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await kU():await GU(e)}a(KU,"reloadStopStart");var WU;async function QU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await QT(r,e)}}a(QU,"startClusteringProcesses");async function zU(){WU=xU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await nf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await nf.updateLocalStreams();let e=await w6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){mi.info("Starting clustering upgrade 4.0.0 process"),xU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(zU,"startClusteringThreads");async function F6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await WU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await KT(t)}}a(F6,"stopClustering");async function k6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await YU(t)===!1)return!1}return!0}a(k6,"isClusteringRunning");async function V6(){await In.generateNatsConfig(!0),await nf.reloadNATSHub(),await nf.reloadNATSLeaf(),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(V6,"reloadClustering")});var _f=g((fhe,nP)=>{"use strict";var $6=require("minimist"),{isMainThread:JT,parentPort:eP}=require("worker_threads"),nt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=nt,sn=$(),jT=Q(),cf=YT(),af=st(),dhe=Fe(),tP=Pr(),nn=jU(),XU=Ea(),Y6=Oh(),{restartWorkers:uf,onMessageByType:K6}=Ke(),{handleHDBError:W6,hdb_errors:Q6}=se(),{HTTP_STATUS_CODES:z6}=Q6,lf=ee();lf.initSync();var Bu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,J6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",ZU="Clustering is not enabled so cannot be restarted",j6="Invalid service",Ta,as;nP.exports={restart:rP,restartService:XT};JT&&K6(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?XT({service:e.workerType}):rP({operation:"restart"})});async function rP(e){as=Object.keys(e).length===0,Ta=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=$6(process.argv);if(t.service){await XT(t);return}if(as&&!Ta){console.error(J6);return}if(as&&console.log(Bu),Ta){nn.enterPM2Mode(),sn.notify(Bu);let r=Y6(Object.keys(nt.CONFIG_PARAM_MAP),!0);return jT.isEmptyOrZeroLength(Object.keys(r))||tP.updateConfigValue(void 0,void 0,r,!0,!0),X6(),Bu}return JT?(sn.notify(Bu),setTimeout(()=>{uf()},50)):eP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Bu}a(rP,"restart");async function XT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw W6(new Error,j6,z6.BAD_REQUEST,void 0,void 0,!0);if(Ta=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!JT)return eP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case vu.clustering:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZU;break}as&&console.log("Restarting clustering"),sn.notify("Restarting clustering"),await sP();break;case vu.clustering_config:case vu["clustering config"]:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZU;break}as&&console.log("Restarting clustering_config"),sn.notify("Restarting clustering_config"),await nn.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:if(as&&!Ta){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}as&&console.log("Restarting http_workers"),sn.notify("Restarting http_workers"),as?await nn.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{uf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(sn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(XT,"restartService");async function X6(){await sP(),await nn.restart(nt.HDB_PROC_DESCRIPTOR),await jT.async_set_timeout(2e3),lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await zT(),as&&(await af.closeConnection(),process.exit(0))}a(X6,"restartPM2Mode");async function sP(){if(!tP.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await XU.getHDBProcessInfo()).clustering.length===0)sn.trace("Clustering not running, restart will start clustering services"),await cf.generateNatsConfig(!0),await nn.startClusteringProcesses(),await nn.startClusteringThreads(),await zT(),as&&await af.closeConnection();else{await cf.generateNatsConfig(!0),Ta?(sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await XU.getHDBProcessInfo()).clustering.forEach(n=>{sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await jT.async_set_timeout(3e3),await zT(),await af.updateLocalStreams(),as&&await af.closeConnection(),sn.trace("Restart clustering restarting ingest and reply service threads");let t=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(sP,"restartClustering");async function zT(){await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(zT,"removeNatsConfig")});var hP=g((mhe,EP)=>{"use strict";var hhe=require("lodash"),Tr=M(),{handleHDBError:iP,hdb_errors:Z6}=se(),{HDB_ERROR_MSGS:e9,HTTP_STATUS_CODES:t9}=Z6,ZT=$();EP.exports={getRolePermissions:s9};var Eo=Object.create(null),r9=a(e=>({key:e,perms:{}}),"perms_template_obj"),uP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),lP=a((e=!1,t=!1,r=!1,s=!1)=>({[Tr.PERMS_CRUD_ENUM.READ]:e,[Tr.PERMS_CRUD_ENUM.INSERT]:t,[Tr.PERMS_CRUD_ENUM.UPDATE]:r,[Tr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),eg=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...lP(t,r,s,n)}),"table_perms_template"),oP=a((e,t=lP())=>({attribute_name:e,describe:fP(t),[Hu]:t[Hu],[tg]:t[tg],[rg]:t[rg]}),"attr_perms_template"),aP=a((e,t=!1)=>({attribute_name:e,describe:t,[Hu]:t}),"timestamp_attr_perms_template"),{READ:Hu,INSERT:tg,UPDATE:rg}=Tr.PERMS_CRUD_ENUM,_P=Object.values(Tr.PERMS_CRUD_ENUM),dP=[Hu,tg,rg];function s9(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[Tr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Eo[t]&&Eo[t].key===s)return Eo[t].perms;let n=n9(e,r);return Eo[t]?Eo[t].key=s:Eo[t]=r9(s),Eo[t].perms=n,n}catch(r){if(!e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Tr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw ZT.error(s),ZT.debug(r),iP(new Error,e9.OUTDATED_PERMS_TRANSLATION_ERROR,t9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
+
${r.stack}`;throw ZT.error(s),iP(new Error)}}}a(s9,"getRolePermissions");function n9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Tr.SYSTEM_SCHEMA_NAME]=s[Tr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=i9(t[i]);return}r[i]=uP(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=o9(c,u);r[i].describe||_P.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=eg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=eg()})}),r}a(n9,"translateRolePermissions");function i9(e){let t=uP(!0);return Object.keys(e).forEach(r=>{t.tables[r]=eg(!0,!0,!0,!0,!0)}),t}a(i9,"createStructureUserPermissions");function o9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Tr.TIME_STAMP_NAMES.includes(d)&&(f=aP(d,l[Hu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=oP(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=fP(l),n.attribute_permissions.push(l),c||a9(l,u)}else if(_!==o){let l;Tr.TIME_STAMP_NAMES.includes(_)?l=aP(_):l=oP(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=cP(n),n}else return e.describe=cP(e),e}a(o9,"getTableAttrPerms");function cP(e){return _P.filter(t=>e[t]).length>0}a(cP,"getSchemaTableDescribePerm");function fP(e){return dP.filter(t=>e[t]).length>0}a(fP,"getAttributeDescribePerm");function a9(e,t){dP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(a9,"checkForHashPerms")});var mP={};Ye(mP,{Resources:()=>df,keyArrayToString:()=>ga,resetResources:()=>c9,resources:()=>Si});function c9(){return Si=new df}function ga(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var df,Si,xu=Re(()=>{eo();df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(c9,"resetResources");a(ga,"keyArrayToString")});var pP={};Ye(pP,{Headers:()=>Ti,appendHeader:()=>sg});function sg(e,t,r,s){if(e.append)e.append(t,r,s);else if(e.set){let n=e.get(t);if(n)if(s)r=(typeof n=="string"?n:n.join(", "))+", "+r;else if(typeof n=="string")r=[n,r];else{n.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ti,qu=Re(()=>{Ti=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];if(s)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(sg,"appendHeader")});var Gu={};Ye(Gu,{authentication:()=>NP,bypassAuth:()=>h9,login:()=>p9,logout:()=>S9,start:()=>m9});function h9(){bP=!0}async function NP(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?d9?_9:[]:l9?u9:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ti([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return ff&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),ff&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(ff){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await TP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Ra.AuthAuditLog(E,h,Ut.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===Ut.AUTH_AUDIT_STATUS.SUCCESS?SP.notify(S):SP.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 tt.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ra.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(s){if(d=ho.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await tt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Ef.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,Ef.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return E9&&(ho.get(h)||(ho.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:gi({error:T.message},e)})}ho.set(s,d),f9&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await tt.getUser(_.user,null,e):(bP&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,RP.getSuperUser)());ff&&(e.session.update=function(E){if(!u){u=(0,AP.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,TP.put(E)},e.login=async function(E,h){e.user=await tt.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")&&Si.loginPath?(f.status=302,f.headers.set("Location",Si.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 Ti);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function m9({server:e,port:t}){e.request(NP,{port:t||"all"}),gP||(gP=!0,setInterval(()=>{ho=new Map},cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),OP.user.addListener(()=>{ho=new Map}))}async function p9(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 S9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var RP,Ef,AP,cs,Ut,Ra,OP,SP,u9,l9,_9,d9,TP,ff,bP,f9,E9,ho,gP,hf=Re(()=>{RP=x(ss());nr();xu();Ef=x(Tu());Ae();AP=require("uuid"),cs=x(ee()),Ut=x(M()),Ra=x($()),OP=x(Hc());qu();Aa();SP=(0,Ra.loggerWithTag)("auth-event");cs.initSync();u9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),l9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORS),_9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),d9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),TP=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),ff=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,bP=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,f9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,E9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ho=new Map;tt.onInvalidatedUser(()=>{ho=new Map});a(h9,"bypassAuth");a(NP,"authentication");a(m9,"start");a(p9,"login");a(S9,"logout")});var MP=g((whe,LP)=>{"use strict";var we=require("joi"),yP=require("fs-extra"),wP=require("path"),Ln=je(),IP=ee(),CP=M(),DP=$(),{hdb_errors:T9}=se(),{HDB_ERROR_MSGS:jt}=T9,Dn=/^[a-zA-Z0-9-_]+$/;LP.exports={getDropCustomFunctionValidator:R9,setCustomFunctionValidator:A9,addComponentValidator:y9,dropCustomFunctionProjectValidator:w9,packageComponentValidator:I9,deployComponentValidator:C9,setComponentFileValidator:O9,getComponentFileValidator:N9,dropComponentFileValidator:b9};function mf(e,t,r){try{let s=IP.get(CP.CONFIG_PARAMS.COMPONENTSROOT),n=wP.join(s,t);return yP.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return DP.error(s),r.message(jt.VALIDATION_ERR)}}a(mf,"checkProjectExists");function Fu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fu,"checkFilePath");function g9(e,t,r,s){try{let n=IP.get(CP.CONFIG_PARAMS.COMPONENTSROOT),i=wP.join(n,e,t,r+".js");return yP.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return DP.error(n),s.message(jt.VALIDATION_ERR)}}a(g9,"checkFileExists");function R9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Dn).custom(g9.bind(null,e.project,e.type)).custom(Fu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(R9,"getDropCustomFunctionValidator");function A9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Fu).required(),function_content:we.string().required()});return Ln.validateBySchema(e,t)}a(A9,"setCustomFunctionValidator");function O9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(O9,"setComponentFileValidator");function b9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).optional()});return Ln.validateBySchema(e,t)}a(b9,"dropComponentFileValidator");function N9(e){let t=we.object({project:we.string().required(),file:we.string().custom(Fu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(N9,"getComponentFileValidator");function y9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(y9,"addComponentValidator");function w9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(w9,"dropCustomFunctionProjectValidator");function I9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Ln.validateBySchema(e,t)}a(I9,"packageComponentValidator");function C9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:we.string().optional()});return Ln.validateBySchema(e,t)}a(C9,"deployComponentValidator")});var gf=g((Che,qP)=>{"use strict";var pf=require("joi"),Sf=require("path"),UP=require("fs-extra"),{exec:D9}=require("child_process"),L9=require("util"),PP=L9.promisify(D9),ku=M(),{handleHDBError:Oa,hdb_errors:M9}=se(),{HTTP_STATUS_CODES:ba}=M9,Vu=ee(),U9=je(),Na=$();Vu.initSync();var ng=Vu.get(ku.CONFIG_PARAMS.COMPONENTSROOT),vP="npm install --omit=dev --json",P9=`${vP} --dry-run`;qP.exports={installModules:x9,auditModules:q9,installAllRootModules:v9,uninstallRootModule:B9,linkHarperdb:H9};async function v9(e=!1){await Tf(),await $u(e?"npm install --ignore-scripts":"npm install",Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(v9,"installAllRootModules");async function B9(e){await $u(`npm uninstall ${e}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(B9,"uninstallRootModule");async function H9(){await Tf(),await $u(`npm link ${ku.PACKAGE_ROOT}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(H9,"linkHarperdb");async function $u(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await PP(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
+
`,""))}return s&&!s.includes("Debugger listening")&&Na.error("Error running NPM command:",e,s),Na.trace(r,s),r?.replace(`
|
|
13
|
+
`,"")}a($u,"runCommand");async function x9(e){Na.info(`starting installModules for request: ${e}`);let t=xP(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?P9:vP;await Tf(),await HP(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 _=Sf.join(ng,u),l,d=null;try{let{stdout:f,stderr:E}=await PP(n,{cwd:_});l=f?f.replace(`
|
|
14
14
|
`,""):null,d=E?E.replace(`
|
|
15
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=
|
|
16
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(sP,"parseNPMStdErr");async function K6(e){Aa.info(`starting auditModules for request: ${e}`);let t=iP(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST);let{projects:r}=e;await nf(),await nP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=sf.join(GT,o);s[o]={npm_output:null,npm_error:null};try{let u=await qu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=sP(u.stderr)}}return Aa.info(`finished auditModules with response ${s}`),s}a(K6,"auditModules");async function nf(){try{return await qu("npm -v"),!0}catch{throw ga(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ra.BAD_REQUEST,void 0,void 0,!0)}}a(nf,"checkNPMInstalled");async function nP(e){if(!Array.isArray(e)||e.length===0)throw ga(new Error,"projects argument must be an array with at least 1 element",Ra.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=sf.join(GT,i.toString());if(!await eP.pathExists(o)){t.push(i);continue}let u=sf.join(o,"package.json");await eP.pathExists(u)||r.push(i)}if(t.length>0)throw ga(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ra.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ga(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ra.BAD_REQUEST,void 0,void 0,!0)}a(nP,"checkProjectPaths");function iP(e){let t=rf.object({projects:rf.array().min(1).items(rf.string()).required(),dry_run:rf.boolean().default(!1)});return F6.validateBySchema(e,t)}a(iP,"modulesValidator")});var VT=T(($Ee,_P)=>{"use strict";var Oa=require("fs-extra"),kT=require("path"),af=G(),aP=z(),cf=D(),lP=j(),W6=Pr();_P.exports=Q6;async function Q6(){let e=z6(),t=lP.get(cf.CONFIG_PARAMS.ROOTPATH),r=kT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+cf.PACKAGE_ROOT}},n=kT.join(t,"node_modules");await Oa.ensureDir(n);let i,o=!0,c=!1;try{i=await Oa.readJson(r)}catch(u){if(aP.isEmptyOrZeroLength(e))return;if(u.code!==cf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!aP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await cP(_);s.dependencies[u]=l+_}if(!o){af.notify("Installing components"),await uP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await cP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(af.notify("Removing component",u),c=!0);c&&(af.notify("Updating components."),await uP(r,s,i))}a(Q6,"installComponents");function z6(){let e=W6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(z6,"getComponentsConfig");async function cP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":kT.extname(e)||await Oa.pathExists(e)?"file:":"github:"}a(cP,"getPkgPrefix");async function uP(e,t,r){af.trace("npm installing components package.json",t),await Oa.writeFile(e,JSON.stringify(t,null," "));try{await of().installAllRootModules(lP.get(cf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Oa.writeFile(e,JSON.stringify(r,null," ")):await Oa.unlink(e),s}}a(uP,"installPackages")});var KT=T((WEe,hP)=>{"use strict";var Fe=require("fs-extra"),$T=require("fast-glob"),pe=require("path"),fP=require("tar-fs"),KEe=require("uuid").v4,YT=require("normalize-path"),nn=ZM(),wt=G(),We=D(),gt=j(),Fu=Pr(),J6=z(),{PACKAGE_ROOT:X6}=D(),{handleHDBError:Ht,hdb_errors:j6}=Z(),{basename:Z6}=require("path"),e9=VT(),EP=j(),t9=D(),{Readable:r9}=require("stream"),{isMainThread:s9}=require("worker_threads"),{HDB_ERROR_MSGS:fo,HTTP_STATUS_CODES:xt}=j6,n9=pe.join(X6,"application-template"),dP=pe.join(gt.get(We.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function i9(){wt.trace("getting custom api status");let e={};try{e={port:gt.get(We.CONFIG_PARAMS.HTTP_PORT),directory:gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ht(new Error,fo.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(i9,"customFunctionsStatus");function o9(){wt.trace("getting custom api endpoints");let e={},t=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT);try{$T.sync(YT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:$T.sync(YT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:$T.sync(YT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ht(new Error,fo.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(o9,"getCustomFunctions");function a9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=nn.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=pe.join(r,s,n,i+".js");try{return Fe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,fo.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(a9,"getCustomFunction");function c9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=nn.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Fe.outputFileSync(pe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ht(new Error,fo.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(c9,"setCustomFunction");function u9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=nn.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Fe.unlinkSync(pe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ht(new Error,fo.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(u9,"dropCustomFunction");function l9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=pe.join(r,s);return Fe.mkdirSync(n,{recursive:!0}),Fe.copySync(n9,n),`Successfully added project: ${s}`}catch(n){throw Ht(new Error,fo.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,n)}}a(l9,"addComponent");function _9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=gt.get(We.CONFIG_PARAMS.APPS);if(!J6.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Fu.updateConfigValue(We.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=pe.join(r,s);return Fe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Ht(new Error,fo.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(_9,"dropCustomFunctionProject");async function d9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;wt.trace("packaging component",s);let n;try{n=await Fe.realpath(pe.join(r,s))}catch(u){if(u.code!==We.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Fe.realpath(pe.join(gt.get(We.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===We.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Fe.ensureDir(dP);let i=pe.join(dP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(n,"node_modules"))}),fP.pack(n,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:s,payload:c}}a(d9,"packageComponent");async function f9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(wt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=pe.join(r,s),i="file:"+o,await Fe.ensureDir(o);let f=r9.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(fP.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 Fu.addConfig(s,{package:i}),!n){await e9();let f=EP.get(t9.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",s)}if(s9)return;let c=new Map;c.isWorker=!0;let u=(lf(),ee(uf)),_;u.setErrorReporter(f=>_=f);let l=Z6(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: ${s}`}a(f9,"deployComponent");async function E9(){let e=Fu.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"),s=await r(gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{name:gt.get(We.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(pe.join(gt.get(We.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(lf(),ee(uf)).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 s}a(E9,"getComponents");async function h9(e){let t=nn.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let s=Fu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(EP.get(We.CONFIG_PARAMS.ROOTPATH),"node_modules"):gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Fe.stat(pe.join(s,e.project,e.file));return{message:await Fe.readFile(pe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===We.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(h9,"getComponentFile");async function m9(e){let t=nn.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=pe.join(gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Fe.ensureFile(s),await Fe.outputFile(s,e.payload,r)):await Fe.ensureDir(s),"Successfully set component: "+e.file}a(m9,"setComponentFile");async function p9(e){let t=nn.dropComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,s=pe.join(gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),r);return await Fe.pathExists(s)&&await Fe.remove(s),Fu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(p9,"dropComponent");hP.exports={customFunctionsStatus:i9,getCustomFunctions:o9,getCustomFunction:a9,setCustomFunction:c9,dropCustomFunction:u9,addComponent:l9,dropCustomFunctionProject:_9,packageComponent:d9,deployComponent:f9,getComponents:E9,getComponentFile:h9,setComponentFile:m9,dropComponent:p9}});var WT=T((zEe,pP)=>{"use strict";var on=require("joi"),mP=Je();pP.exports={readTransactionLogValidator:S9,deleteTransactionLogsBeforeValidator:T9};function S9(e){let t=on.object({schema:on.string().required(),table:on.string().required(),from:on.date().timestamp(),to:on.date().timestamp(),limit:on.number().min(1)});return mP.validateBySchema(e,t)}a(S9,"readTransactionLogValidator");function T9(e){let t=on.object({schema:on.string().required(),table:on.string().required(),timestamp:on.date().timestamp().required()});return mP.validateBySchema(e,t)}a(T9,"deleteTransactionLogsBeforeValidator")});var df=T((XEe,AP)=>{"use strict";var QT=D(),_f=nt(),SP=z(),TP=j(),gP=gn(),{handleHDBError:ba,hdb_errors:g9}=Z(),{HTTP_STATUS_CODES:Na}=g9,{readTransactionLogValidator:R9,deleteTransactionLogsBeforeValidator:A9}=WT(),RP="This operation relies on clustering and cannot run with it disable.",O9="Logs successfully deleted from transaction log.",b9="All logs successfully deleted from transaction log.";AP.exports={readTransactionLog:N9,deleteTransactionLogsBefore:y9};async function*N9(e){let t=R9(e);if(t)throw ba(t,t.message,Na.BAD_REQUEST,void 0,void 0,!0);if(!TP.get(QT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ba(new Error,RP,Na.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=SP.checkSchemaTableExist(r,s);if(n)throw ba(new Error,n,Na.NOT_FOUND,void 0,void 0,!0);let i=gP.createNatsTableStreamName(r,s),o=await _f.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===QT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(N9,"readTransactionLog");async function y9(e){let t=A9(e);if(t)throw ba(t,t.message,Na.BAD_REQUEST,void 0,void 0,!0);if(!TP.get(QT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ba(new Error,RP,Na.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=SP.checkSchemaTableExist(r,s);if(i)throw ba(new Error,i,Na.NOT_FOUND,void 0,void 0,!0);let o=gP.createNatsTableStreamName(r,s),{jsm:c}=await _f.getNATSReferences(),u=await _f.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=O9,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=b9):d=(await _f.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(y9,"deleteTransactionLogsBefore")});var bP=T((ZEe,OP)=>{"use strict";var zT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};OP.exports=zT});var yP=T((the,NP)=>{"use strict";var JT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};NP.exports=JT});var jT=T((she,wP)=>{"use strict";var IP=bP(),I9=yP(),{HDB_ERROR_MSGS:w9}=Ir(),XT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=w9.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,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new IP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new I9(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new IP(r,s,[],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}};wP.exports=XT});var mf=T((ihe,$P)=>{"use strict";var ZT=Lr(),ff=es(),ls=uu(),Vu=jn(),eg=ti(),C9=dS(),D9=qD(),$u=rs(),Ef=RS(),Ct=G(),L9=bS(),U9=Cd(),M9=oT(),P9=Ld(),v9=aT(),B9=cT(),H9=_T(),x9=fT(),tg=mT(),Un=z(),q9=BU(),rg=RT(),LP=Qd(),us=D(),UP=BM(),F9=_a(),MP=hu(),PP=(ef(),ee(vu)),vP=Pr(),Vr=KT(),G9=require("alasql"),BP=df(),HP=of(),xP=jT(),{handleHDBError:Sr,hdb_errors:qP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Gu}=qP,F=new Map,FP="delete",gi="insert",Mn="read",Eo="update",ku="describe",CP=Vu.describeSchema.name,DP=Vu.describeTable.name,GP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},k9="catchup",V9="handleGetJob",$9="handleGetJobsByStartDate",hf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Y9=[ls.createTable.name,ls.createAttribute.name,ls.dropTable.name,ls.dropAttribute.name],kP={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}};F.set(ZT.insert.name,new $(!1,[gi]));F.set(ZT.update.name,new $(!1,[Eo]));F.set(ZT.upsert.name,new $(!1,[gi,Eo]));F.set(ff.searchByConditions.name,new $(!1,[Mn]));F.set(ff.searchByHash.name,new $(!1,[Mn]));F.set(ff.searchByValue.name,new $(!1,[Mn]));F.set(ff.search.name,new $(!1,[Mn]));F.set(ls.createSchema.name,new $(!0,[]));F.set(ls.createTable.name,new $(!0,[]));F.set(ls.createAttribute.name,new $(!1,[gi]));F.set(ls.dropSchema.name,new $(!0,[]));F.set(ls.dropTable.name,new $(!0,[]));F.set(ls.dropAttribute.name,new $(!0,[]));F.set(Vu.describeSchema.name,new $(!1,[Mn]));F.set(Vu.describeTable.name,new $(!1,[Mn]));F.set(eg.deleteRecord.name,new $(!1,[FP]));F.set($u.addUser.name,new $(!0,[]));F.set($u.alterUser.name,new $(!0,[]));F.set($u.dropUser.name,new $(!0,[]));F.set($u.listUsersExternal.name,new $(!0,[]));F.set(Ef.listRoles.name,new $(!0,[]));F.set(Ef.addRole.name,new $(!0,[]));F.set(Ef.alterRole.name,new $(!0,[]));F.set(Ef.dropRole.name,new $(!0,[]));F.set(L9.name,new $(!0,[]));F.set(U9.name,new $(!0,[]));F.set(M9.name,new $(!0,[]));F.set(P9.name,new $(!0,[]));F.set(v9.name,new $(!0,[]));F.set(B9.name,new $(!0,[]));F.set(tg.setRoutes.name,new $(!0,[]));F.set(tg.getRoutes.name,new $(!0,[]));F.set(tg.deleteRoutes.name,new $(!0,[]));F.set(vP.setConfiguration.name,new $(!0,[]));F.set(H9.clusterStatus.name,new $(!0,[]));F.set(x9.name,new $(!0,[]));F.set(rg.getFingerprint.name,new $(!0,[]));F.set(rg.setLicense.name,new $(!0,[]));F.set(eg.deleteFilesBefore.name,new $(!0,[]));F.set(eg.deleteAuditLogsBefore.name,new $(!0,[]));F.set(LP.restart.name,new $(!0,[]));F.set(LP.restartService.name,new $(!0,[]));F.set(C9.name,new $(!0,[]));F.set(D9.name,new $(!0,[Mn]));F.set(F9.systemInformation.name,new $(!0,[]));F.set(vP.getConfiguration.name,new $(!0,[]));F.set(BP.readTransactionLog.name,new $(!0,[]));F.set(BP.deleteTransactionLogsBefore.name,new $(!0,[]));F.set(HP.installModules.name,new $(!0,[]));F.set(HP.auditModules.name,new $(!0,[]));F.set(MP.createTokens.name,new $(!1,[]));F.set(MP.refreshOperationToken.name,new $(!1,[]));F.set(PP.login.name,new $(!1,[]));F.set(PP.logout.name,new $(!1,[]));F.set(Vr.customFunctionsStatus.name,new $(!0,[]));F.set(Vr.getCustomFunctions.name,new $(!0,[]));F.set(Vr.getComponents.name,new $(!0,[]));F.set(Vr.getComponentFile.name,new $(!0,[]));F.set(Vr.setComponentFile.name,new $(!0,[]));F.set(Vr.dropComponent.name,new $(!0,[]));F.set(Vr.getCustomFunction.name,new $(!0,[]));F.set(Vr.setCustomFunction.name,new $(!0,[]));F.set(Vr.dropCustomFunction.name,new $(!0,[]));F.set(Vr.addComponent.name,new $(!0,[]));F.set(Vr.dropCustomFunctionProject.name,new $(!0,[]));F.set(Vr.packageComponent.name,new $(!0,[]));F.set(Vr.deployComponent.name,new $(!0,[]));F.set(rg.getRegistrationInfo.name,new $(!1,[]));F.set($u.userInfo.name,new $(!1,[]));F.set(Vu.describeAll.name,new $(!1,[]));F.set(V9,new $(!1,[]));F.set($9,new $(!0,[]));F.set(k9,new $(!0,[]));F.set(hf.CSV_DATA_LOAD,new $(!1,[gi,Eo]));F.set(hf.CSV_URL_LOAD,new $(!1,[gi,Eo]));F.set(hf.CSV_FILE_LOAD,new $(!1,[gi,Eo]));F.set(hf.IMPORT_FROM_S3,new $(!1,[gi,Eo]));F.set(kP.EXPORT_TO_S3,new $(!0,[]));F.set(kP.EXPORT_LOCAL,new $(!0,[]));F.set(us.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[FP]));F.set(us.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Mn]));F.set(us.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[gi]));F.set(us.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[Eo]));$P.exports={verifyPerms:W9,verifyPermsAst:K9,verifyBulkLoadAttributePerms:z9};function K9(e,t,r){if(Un.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Un.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Un.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),Sr(new Error);try{let s=new xP,n=new q9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Ct.info("No schemas defined in verifyPermsAst(), will not continue."),Sr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&GP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(c&&!u)return null;let _=UP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof G9.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=VP(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=ng(t.role.permission,f,d[E]);sg(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw Sr(s)}}a(K9,"verifyPermsAst");function W9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),Sr(new Error,Vt.DEFAULT_INVALID_REQUEST,Gu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new xP;if(Un.isEmptyOrZeroLength(e.hdb_user.role)||Un.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(us.SYSTEM_SCHEMA_NAME)||n===us.SYSTEM_SCHEMA_NAME;if(l&&GP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(u&&!l||_===!0&&(r===ls.createSchema.name||r===ls.dropSchema.name))return null;if(Y9.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=UP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===CP||r===DP){if(n===us.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===CP&&(!d[n]||!d[n][ku]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(n));if(r===DP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ku]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(n,i))}}let f=VP(e.hdb_user,r,o,c,s);if(f)return f;if(F.get(r)&&F.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&us.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[us.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[us.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=Q9(e),h=ng(e.hdb_user.role.permission,n,i);return sg(E,h,r,i,n,c,s),c.getPermsResponse()}a(W9,"verifyPerms");function VP(e,t,r,s,n){if(Un.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),Sr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||F.get(t).requires_su))return null;if(!F.get(t))throw Ct.info(`operation ${t} not found.`),Sr(new Error,Vt.OP_NOT_FOUND(t),Gu.BAD_REQUEST);if(F.get(t)&&F.get(t).requires_su)return Ct.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Vt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ku]===!1){s.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ku]===!1)s.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=F.get(t).perms;!Un.isEmpty(n)&&E.includes(n)&&(E=[n]);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} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Vt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ct.error(E),Ct.error(f),Sr(qP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(VP,"hasPermissions");function sg(e,t,r,s,n,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),Sr(new Error);let c=F.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),Sr(new Error);if(Un.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[ku]===!1){i.addInvalidItem(Vt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(us.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Mn)throw Sr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Gu.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(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(sg,"checkAttributePerms");function Q9(e){let t=new Set;try{if(e.action)return t;if(e.operation===us.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 s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Ct.info(r)}return t}a(Q9,"getRecordAttributes");function ng(e,t,r){let s=new Map;if(Un.isEmpty(e))return Ct.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ng,"getAttributePermissions");function z9(e,t,r,s,n,i,o){let c=new Set(i),u=ng(e,s,n);sg(c,u,t,n,s,o,r)}a(z9,"verifyBulkLoadAttributePerms")});var Sf=T((ahe,zP)=>{"use strict";zP.exports={evaluateSQL:c7,processAST:QP,convertSQLToAST:WP,checkASTPermissions:KP};var J9=Lr(),YP=require("util"),X9=YP.callbackify(J9.insert),j9=es().search,Z9=LC().update,e7=YP.callbackify(Z9),t7=MC().convertDelete,Ri=require("alasql"),r7=mf(),pf=G(),s7=ed(),n7=z(),Yu=D(),{hdb_errors:i7,handleHDBError:ig}=Z(),{HTTP_STATUS_CODES:og}=i7;s7(Ri);var o7=403,a7="There was a problem performing this insert. Please check the logs and try again.",ag=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function c7(e,t){let r=e.parsed_sql_object;if(!r){r=WP(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ri.yy.Insert?s=n.into.databaseid:n instanceof Ri.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ri.yy.Update||n instanceof Ri.yy.Delete?s=n.table.databaseid:pf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ri.yy.Select)&&n7.isEmptyOrZeroLength(s))return t("No schema specified",null)}QP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(c7,"evaluateSQL");function KP(e,t){let r;try{r=r7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(KP,"checkASTPermissions");function WP(e){let t=new ag;if(!e)throw ig(new Error,"The 'sql' parameter is missing from the request body",og.BAD_REQUEST);try{let r=e.trim(),s=Ri.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
-
`);throw s[1]?ig(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,og.BAD_REQUEST):ig(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",og.BAD_REQUEST)}return t}a(WP,"convertSQLToAST");function QP(e,t,r){try{let s=u7;if(!e.bypass_auth&&!t.permissions_checked){let i=KP(e,t);if(i&&i.length>0)return r(o7,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Yu.VALID_SQL_OPS_ENUM.SELECT:s=j9,n=t.ast.statements[0];break;case Yu.VALID_SQL_OPS_ENUM.INSERT:s=l7;break;case Yu.VALID_SQL_OPS_ENUM.UPDATE:s=e7;break;case Yu.VALID_SQL_OPS_ENUM.DELETE:s=t7;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(QP,"processAST");function u7(e,t){pf.info(e),t("unknown sql statement")}a(u7,"nullFunction");function l7({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=_7(i,e.values)}catch(o){return r(o)}X9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){pf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(l7,"convertInsert");function _7(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 s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Ri.compile(`SELECT ${n.toString()} AS [${Yu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw pf.error(r),new Error(a7)}}a(_7,"createDataObjects")});var cg=T((uhe,XP)=>{"use strict";var{S3:d7,GetObjectCommand:f7}=require("@aws-sdk/client-s3");XP.exports={getFileStreamFromS3:E7,getS3AuthObj:JP};async function E7(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await JP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new f7(r))).Body}a(E7,"getFileStreamFromS3");function JP(e,t,r){return new d7({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(JP,"getS3AuthObj")});var Tf=T((_he,ov)=>{"use strict";var lg=es(),h7=Sf(),m7=cg(),{AsyncParser:p7,Transform:S7}=require("json2csv"),Wu=require("stream"),$r=z(),ug=require("fs-extra"),T7=require("path"),_s=G(),{promisify:ev}=require("util"),Ku=z(),{handleHDBError:Rt,hdb_errors:g7}=Z(),{HDB_ERROR_MSGS:Tr,HTTP_STATUS_CODES:At}=g7,{streamAsJSON:R7}=(Dh(),ee(zO)),{Upload:A7}=require("@aws-sdk/lib-storage"),jP=["search_by_value","search_by_hash","sql","search_by_conditions"],ZP=["json","csv"],tv="json",rv="csv",O7="Successfully exported JSON locally.",b7="Successfully exported CSV locally.",N7=1e3,y7=lg.searchByHash,I7=lg.searchByValue,w7=ev(h7.evaluateSQL),C7=ev(Wu.finished);ov.exports={export_to_s3:M7,export_local:D7,toCsvStream:sv};async function D7(e){_s.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=nv(e);if(!$r.isEmpty(t))throw _s.error(t),Rt(new Error,t,At.BAD_REQUEST,void 0,void 0,!0);if($r.isEmpty(e.path))throw _s.error(Tr.MISSING_VALUE("path")),Rt(new Error,Tr.MISSING_VALUE("path"),At.BAD_REQUEST,void 0,void 0,!0);let r=($r.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(T7.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=$r.buildFolderPath(e.path,r);await L7(e.path);let n=await iv(e);return await U7(s,e.format,n)}a(D7,"export_local");async function L7(e){if(_s.trace("in confirmPath"),$r.isEmptyOrZeroLength(e))throw Rt(new Error,`Invalid path: ${e}`,At.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ug.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,_s.error(s),Rt(new Error,s,At.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 _s.error(r),Rt(new Error,r,At.BAD_REQUEST,void 0,void 0,!0)}return!0}a(L7,"confirmPath");async function U7(e,t,r){if(_s.trace("in saveToLocal"),Ku.isEmptyOrZeroLength(e))throw Rt(new Error,Tr.INVALID_VALUE("file_path"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmptyOrZeroLength(t))throw Rt(new Error,Tr.INVALID_VALUE("Source format"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmpty(r))throw Rt(new Error,Tr.NOT_FOUND("Data"),At.BAD_REQUEST,void 0,void 0,!0);if(t===tv){let s=ug.createWriteStream(e);return R7(r).pipe(s),await C7(s),{message:O7,path:e}}else if(t===rv){let s=ug.createWriteStream(e),n=Wu.Readable.from(r),i={},o={objectMode:!0};return await new p7(i,o).fromInput(n).toOutput(s).promise(!1),{message:b7,path:e}}throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST)}a(U7,"saveToLocal");async function M7(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rt(new Error,Tr.MISSING_VALUE("S3 object"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rt(new Error,Tr.MISSING_VALUE("aws_access_key_id"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rt(new Error,Tr.MISSING_VALUE("aws_secret_access_key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.bucket))throw Rt(new Error,Tr.MISSING_VALUE("bucket"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.key))throw Rt(new Error,Tr.MISSING_VALUE("key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.region))throw Rt(new Error,Tr.MISSING_VALUE("region"),At.BAD_REQUEST);let t=nv(e);if(!$r.isEmpty(t))throw Rt(new Error,t,At.BAD_REQUEST);_s.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await iv(e)}catch(u){throw _s.error(u),u}let s,n=await m7.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Wu.PassThrough;if(e.format===rv){i=e.s3.key+".csv";let u=sv(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===tv){i=e.s3.key+".json";let u=new Wu.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%N7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST);return new A7({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(M7,"export_to_s3");function sv(e){let t=Wu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new S7(r,s);return t.pipe(n)}a(sv,"toCsvStream");function nv(e){if(_s.trace("in exportCoreValidation"),$r.isEmpty(e.format))return"format missing";if(ZP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${ZP.join(", ")}`;let t=e.search_operation.operation;if($r.isEmpty(t))return"search_operation.operation missing";if(jP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${jP.join(", ")}`}a(nv,"exportCoreValidation");async function iv(e){_s.trace("in getRecords");let t,r;if(Ku.isEmpty(e.search_operation)||Ku.isEmptyOrZeroLength(e.search_operation.operation))throw Rt(new Error,Tr.INVALID_VALUE("Search operation"),At.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=I7;break;case"search_by_hash":t=y7;break;case"search_by_conditions":t=lg.searchByConditions;break;case"sql":t=w7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_s.error(r),Rt(new Error,r,At.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(iv,"getRecords")});var fv={};$e(fv,{contentTypes:()=>hg,findBestSerializer:()=>Rf,getDeserializer:()=>mo,registerContentHandlers:()=>mg,serialize:()=>Af,serializeMessage:()=>Ti});function P7(e){try{return e?.[0]===123?Eg(e):e}catch{return e}}function mg(e){e.register(B7,{serializers:[{regex:/^application\/json$/,serializer:Ec},{regex:/^application\/cbor$/,serializer:function(t){return new ho.EncoderStream(zu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?gf.Readable.from((0,an.encodeIter)(t,zu)):(0,an.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_g.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,an.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ho.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Rf(e){let r=(e.headers.asObject||e.headers).accept,s,n=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>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from($t.keys()).join(", "))}};s=$t.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Af(e,t,r){let s=cv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Rf(t);if(i.serializer.compressible===!1&&(s=!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 s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Pn.createBrotliCompress)({params:{[Pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pn.constants.BROTLI_MODE_TEXT:Pn.constants.BROTLI_MODE_GENERIC,[Pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>cv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ti(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 s=Rf(t);return r=t.serialize=s.serializer.serialize,r(e)}function H7(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function mo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=$t.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=$t.get(e)?.deserialize||uv(e,s);return o=>H7(o).then(i)}return e&&$t.get(e)?.deserialize||uv(e,s)}function uv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Eg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function x7(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var _g,an,ho,Pn,gf,lv,dg,fg,_v,Qu,Eg,zu,$t,hg,av,dv,v7,B7,cv,Ta=Ae(()=>{Dh();_g=v(Tf()),an=require("msgpackr"),ho=require("cbor-x"),Pn=require("zlib"),gf=require("stream");sr();lv=require("../index"),dg=v(j()),fg=v(D()),_v=dg.default.get(fg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Qu=_v?Ui:JSON.stringify,Eg=_v?Ch:JSON.parse,zu={useRecords:!1,useToJSON:!0},$t=new Map,hg=$t;_t.contentTypes=hg;(0,lv._assignPackageExport)("contentTypes",hg);$t.set("application/json",{serializeStream:Ec,serialize:Qu,deserialize:Eg,q:.8});av=new ho.Encoder(zu);$t.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ho.EncoderStream(zu).end(e)},serialize:av.encode,deserialize:av.decode,q:1});$t.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?gf.Readable.from((0,an.encodeIter)(e,zu)):(0,an.pack)(e)},serialize:an.pack,deserialize:an.unpack,q:.9});$t.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_g.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 gf.Readable.from(x7(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=
|
|
15
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=BP(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 Na.info(`finished installModules with response ${i}`),i}a(x9,"installModules");function BP(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
16
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(BP,"parseNPMStdErr");async function q9(e){Na.info(`starting auditModules for request: ${e}`);let t=xP(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST);let{projects:r}=e;await Tf(),await HP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Sf.join(ng,o);s[o]={npm_output:null,npm_error:null};try{let u=await $u("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=BP(u.stderr)}}return Na.info(`finished auditModules with response ${s}`),s}a(q9,"auditModules");async function Tf(){try{return await $u("npm -v"),!0}catch{throw Oa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ba.BAD_REQUEST,void 0,void 0,!0)}}a(Tf,"checkNPMInstalled");async function HP(e){if(!Array.isArray(e)||e.length===0)throw Oa(new Error,"projects argument must be an array with at least 1 element",ba.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Sf.join(ng,i.toString());if(!await UP.pathExists(o)){t.push(i);continue}let u=Sf.join(o,"package.json");await UP.pathExists(u)||r.push(i)}if(t.length>0)throw Oa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ba.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Oa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ba.BAD_REQUEST,void 0,void 0,!0)}a(HP,"checkProjectPaths");function xP(e){let t=pf.object({projects:pf.array().min(1).items(pf.string()).required(),dry_run:pf.boolean().default(!1)});return U9.validateBySchema(e,t)}a(xP,"modulesValidator")});var og=g((Lhe,$P)=>{"use strict";var ya=require("fs-extra"),ig=require("path"),Rf=$(),GP=Q(),Af=M(),VP=ee(),G9=Pr();$P.exports=F9;async function F9(){let e=k9(),t=VP.get(Af.CONFIG_PARAMS.ROOTPATH),r=ig.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Af.PACKAGE_ROOT}},n=ig.join(t,"node_modules");await ya.ensureDir(n);let i,o=!0,c=!1;try{i=await ya.readJson(r)}catch(u){if(GP.isEmptyOrZeroLength(e))return;if(u.code!==Af.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!GP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await FP(_);s.dependencies[u]=l+_}if(!o){Rf.notify("Installing components"),await kP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await FP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Rf.notify("Removing component",u),c=!0);c&&(Rf.notify("Updating components."),await kP(r,s,i))}a(F9,"installComponents");function k9(){let e=G9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(k9,"getComponentsConfig");async function FP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ig.extname(e)||await ya.pathExists(e)?"file:":"github:"}a(FP,"getPkgPrefix");async function kP(e,t,r){Rf.trace("npm installing components package.json",t),await ya.writeFile(e,JSON.stringify(t,null," "));try{await gf().installAllRootModules(VP.get(Af.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ya.writeFile(e,JSON.stringify(r,null," ")):await ya.unlink(e),s}}a(kP,"installPackages")});var ug=g((Phe,QP)=>{"use strict";var ke=require("fs-extra"),ag=require("fast-glob"),pe=require("path"),KP=require("tar-fs"),Uhe=require("uuid").v4,cg=require("normalize-path"),on=MP(),Nt=$(),Qe=M(),mt=ee(),Yu=Pr(),V9=Q(),{PACKAGE_ROOT:$9}=M(),{handleHDBError:Pt,hdb_errors:Y9}=se(),{basename:K9}=require("path"),W9=og(),WP=ee(),Q9=M(),{Readable:z9}=require("stream"),{isMainThread:J9}=require("worker_threads"),{HDB_ERROR_MSGS:mo,HTTP_STATUS_CODES:vt}=Y9,j9=pe.join($9,"application-template"),YP=pe.join(mt.get(Qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function X9(){Nt.trace("getting custom api status");let e={};try{e={port:mt.get(Qe.CONFIG_PARAMS.HTTP_PORT),directory:mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Pt(new Error,mo.FUNCTION_STATUS,vt.INTERNAL_SERVER_ERROR,Nt.ERR,t)}return e}a(X9,"customFunctionsStatus");function Z9(){Nt.trace("getting custom api endpoints");let e={},t=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT);try{ag.sync(cg(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:ag.sync(cg(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ag.sync(cg(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Pt(new Error,mo.GET_FUNCTIONS,vt.INTERNAL_SERVER_ERROR,Nt.ERR,r)}return e}a(Z9,"getCustomFunctions");function e7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("getting custom api endpoint file content");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=pe.join(r,s,n,i+".js");try{return ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw Pt(new Error,mo.GET_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,c)}}a(e7,"getCustomFunction");function t7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.setCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("setting custom function file content");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return ke.outputFileSync(pe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Pt(new Error,mo.SET_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,c)}}a(t7,"setCustomFunction");function r7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("dropping custom function file");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return ke.unlinkSync(pe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Pt(new Error,mo.DROP_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,o)}}a(r7,"dropCustomFunction");function s7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.addComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("adding component");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=pe.join(r,s);return ke.mkdirSync(n,{recursive:!0}),ke.copySync(j9,n),`Successfully added project: ${s}`}catch(n){throw Pt(new Error,mo.ADD_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,n)}}a(s7,"addComponent");function n7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.dropCustomFunctionProjectValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("dropping custom function project");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=mt.get(Qe.CONFIG_PARAMS.APPS);if(!V9.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Yu.updateConfigValue(Qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=pe.join(r,s);return ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Pt(new Error,mo.DROP_FUNCTION_PROJECT,vt.INTERNAL_SERVER_ERROR,Nt.ERR,i)}}a(n7,"dropCustomFunctionProject");async function i7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.packageComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;Nt.trace("packaging component",s);let n;try{n=await ke.realpath(pe.join(r,s))}catch(u){if(u.code!==Qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ke.realpath(pe.join(mt.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ke.ensureDir(YP);let i=pe.join(YP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(n,"node_modules"))}),KP.pack(n,o).pipe(ke.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ke.readFileSync(i,{encoding:"base64"});return await ke.remove(i),{project:s,payload:c}}a(i7,"packageComponent");async function o7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.deployComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(Nt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=pe.join(r,s),i="file:"+o,await ke.ensureDir(o);let f=z9.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(KP.extract(o,{finish:h})).on("error",p)});let E=await ke.readdir(o);E.length===1&&E[0]==="package"&&(await ke.copy(pe.join(o,"package"),o),await ke.remove(pe.join(o,"package")))}if(await Yu.addConfig(s,{package:i}),!n){await W9();let f=WP.get(Q9.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",s)}if(J9)return;let c=new Map;c.isWorker=!0;let u=(bf(),ne(Of)),_;u.setErrorReporter(f=>_=f);let l=K9(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Nt.info("Installed component"),`Successfully deployed: ${s}`}a(o7,"deployComponent");async function a7(){let e=Yu.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 ke.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 ke.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return Nt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{name:mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(pe.join(mt.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(bf(),ne(Of)).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 s}a(a7,"getComponents");async function c7(e){let t=on.getComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let s=Yu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(WP.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await ke.stat(pe.join(s,e.project,e.file));return{message:await ke.readFile(pe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(c7,"getComponentFile");async function u7(e){let t=on.setComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=pe.join(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await ke.ensureFile(s),await ke.outputFile(s,e.payload,r)):await ke.ensureDir(s),"Successfully set component: "+e.file}a(u7,"setComponentFile");async function l7(e){let t=on.dropComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,s=pe.join(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await ke.pathExists(s)&&await ke.remove(s),Yu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(l7,"dropComponent");QP.exports={customFunctionsStatus:X9,getCustomFunctions:Z9,getCustomFunction:e7,setCustomFunction:t7,dropCustomFunction:r7,addComponent:s7,dropCustomFunctionProject:n7,packageComponent:i7,deployComponent:o7,getComponents:a7,getComponentFile:c7,setComponentFile:u7,dropComponent:l7}});var lg=g((Bhe,JP)=>{"use strict";var an=require("joi"),zP=je();JP.exports={readTransactionLogValidator:_7,deleteTransactionLogsBeforeValidator:d7};function _7(e){let t=an.object({schema:an.string().required(),table:an.string().required(),from:an.date().timestamp(),to:an.date().timestamp(),limit:an.number().min(1)});return zP.validateBySchema(e,t)}a(_7,"readTransactionLogValidator");function d7(e){let t=an.object({schema:an.string().required(),table:an.string().required(),timestamp:an.date().timestamp().required()});return zP.validateBySchema(e,t)}a(d7,"deleteTransactionLogsBeforeValidator")});var yf=g((xhe,tv)=>{"use strict";var _g=M(),Nf=st(),jP=Q(),XP=ee(),ZP=Tn(),{handleHDBError:wa,hdb_errors:f7}=se(),{HTTP_STATUS_CODES:Ia}=f7,{readTransactionLogValidator:E7,deleteTransactionLogsBeforeValidator:h7}=lg(),ev="This operation relies on clustering and cannot run with it disable.",m7="Logs successfully deleted from transaction log.",p7="All logs successfully deleted from transaction log.";tv.exports={readTransactionLog:S7,deleteTransactionLogsBefore:T7};async function*S7(e){let t=E7(e);if(t)throw wa(t,t.message,Ia.BAD_REQUEST,void 0,void 0,!0);if(!XP.get(_g.CONFIG_PARAMS.CLUSTERING_ENABLED))throw wa(new Error,ev,Ia.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=jP.checkSchemaTableExist(r,s);if(n)throw wa(new Error,n,Ia.NOT_FOUND,void 0,void 0,!0);let i=ZP.createNatsTableStreamName(r,s),o=await Nf.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===_g.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(S7,"readTransactionLog");async function T7(e){let t=h7(e);if(t)throw wa(t,t.message,Ia.BAD_REQUEST,void 0,void 0,!0);if(!XP.get(_g.CONFIG_PARAMS.CLUSTERING_ENABLED))throw wa(new Error,ev,Ia.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=jP.checkSchemaTableExist(r,s);if(i)throw wa(new Error,i,Ia.NOT_FOUND,void 0,void 0,!0);let o=ZP.createNatsTableStreamName(r,s),{jsm:c}=await Nf.getNATSReferences(),u=await Nf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=m7,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=p7):d=(await Nf.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(T7,"deleteTransactionLogsBefore")});var sv=g((Ghe,rv)=>{"use strict";var dg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};rv.exports=dg});var iv=g((khe,nv)=>{"use strict";var fg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};nv.exports=fg});var hg=g(($he,av)=>{"use strict";var ov=sv(),g7=iv(),{HDB_ERROR_MSGS:R7}=yr(),Eg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=R7.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,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new ov(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new g7(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new ov(r,s,[],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}};av.exports=Eg});var Df=g((Khe,Ov)=>{"use strict";var mg=Lr(),wf=Dr(),ls=fu(),Qu=Zn(),pg=ri(),A7=MS(),O7=SL(),zu=ss(),If=FS(),yt=$(),b7=$S(),N7=Vd(),y7=AT(),w7=Yd(),I7=bT(),C7=NT(),D7=IT(),L7=DT(),Sg=UT(),Mn=Q(),M7=hU(),Tg=xT(),lv=_f(),us=M(),_v=hP(),U7=Ea(),dv=Tu(),fv=(hf(),ne(Gu)),Ev=Pr(),kr=ug(),P7=require("alasql"),hv=yf(),mv=gf(),pv=hg(),{handleHDBError:gr,hdb_errors:Sv}=se(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:Ku}=Sv,V=new Map,Tv="delete",Ri="insert",Un="read",po="update",Wu="describe",cv=Qu.describeSchema.name,uv=Qu.describeTable.name,gv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},v7="catchup",B7="handleGetJob",H7="handleGetJobsByStartDate",Cf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},x7=[ls.createTable.name,ls.createAttribute.name,ls.dropTable.name,ls.dropAttribute.name],Rv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(mg.insert.name,new W(!1,[Ri]));V.set(mg.update.name,new W(!1,[po]));V.set(mg.upsert.name,new W(!1,[Ri,po]));V.set(wf.searchByConditions.name,new W(!1,[Un]));V.set(wf.searchByHash.name,new W(!1,[Un]));V.set(wf.searchByValue.name,new W(!1,[Un]));V.set(wf.search.name,new W(!1,[Un]));V.set(ls.createSchema.name,new W(!0,[]));V.set(ls.createTable.name,new W(!0,[]));V.set(ls.createAttribute.name,new W(!1,[Ri]));V.set(ls.dropSchema.name,new W(!0,[]));V.set(ls.dropTable.name,new W(!0,[]));V.set(ls.dropAttribute.name,new W(!0,[]));V.set(Qu.describeSchema.name,new W(!1,[Un]));V.set(Qu.describeTable.name,new W(!1,[Un]));V.set(pg.deleteRecord.name,new W(!1,[Tv]));V.set(zu.addUser.name,new W(!0,[]));V.set(zu.alterUser.name,new W(!0,[]));V.set(zu.dropUser.name,new W(!0,[]));V.set(zu.listUsersExternal.name,new W(!0,[]));V.set(If.listRoles.name,new W(!0,[]));V.set(If.addRole.name,new W(!0,[]));V.set(If.alterRole.name,new W(!0,[]));V.set(If.dropRole.name,new W(!0,[]));V.set(b7.name,new W(!0,[]));V.set(N7.name,new W(!0,[]));V.set(y7.name,new W(!0,[]));V.set(w7.name,new W(!0,[]));V.set(I7.name,new W(!0,[]));V.set(C7.name,new W(!0,[]));V.set(Sg.setRoutes.name,new W(!0,[]));V.set(Sg.getRoutes.name,new W(!0,[]));V.set(Sg.deleteRoutes.name,new W(!0,[]));V.set(Ev.setConfiguration.name,new W(!0,[]));V.set(D7.clusterStatus.name,new W(!0,[]));V.set(L7.name,new W(!0,[]));V.set(Tg.getFingerprint.name,new W(!0,[]));V.set(Tg.setLicense.name,new W(!0,[]));V.set(pg.deleteFilesBefore.name,new W(!0,[]));V.set(pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(lv.restart.name,new W(!0,[]));V.set(lv.restartService.name,new W(!0,[]));V.set(A7.name,new W(!0,[]));V.set(O7.name,new W(!0,[Un]));V.set(U7.systemInformation.name,new W(!0,[]));V.set(Ev.getConfiguration.name,new W(!0,[]));V.set(hv.readTransactionLog.name,new W(!0,[]));V.set(hv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(mv.installModules.name,new W(!0,[]));V.set(mv.auditModules.name,new W(!0,[]));V.set(dv.createTokens.name,new W(!1,[]));V.set(dv.refreshOperationToken.name,new W(!1,[]));V.set(fv.login.name,new W(!1,[]));V.set(fv.logout.name,new W(!1,[]));V.set(kr.customFunctionsStatus.name,new W(!0,[]));V.set(kr.getCustomFunctions.name,new W(!0,[]));V.set(kr.getComponents.name,new W(!0,[]));V.set(kr.getComponentFile.name,new W(!0,[]));V.set(kr.setComponentFile.name,new W(!0,[]));V.set(kr.dropComponent.name,new W(!0,[]));V.set(kr.getCustomFunction.name,new W(!0,[]));V.set(kr.setCustomFunction.name,new W(!0,[]));V.set(kr.dropCustomFunction.name,new W(!0,[]));V.set(kr.addComponent.name,new W(!0,[]));V.set(kr.dropCustomFunctionProject.name,new W(!0,[]));V.set(kr.packageComponent.name,new W(!0,[]));V.set(kr.deployComponent.name,new W(!0,[]));V.set(Tg.getRegistrationInfo.name,new W(!1,[]));V.set(zu.userInfo.name,new W(!1,[]));V.set(Qu.describeAll.name,new W(!1,[]));V.set(B7,new W(!1,[]));V.set(H7,new W(!0,[]));V.set(v7,new W(!0,[]));V.set(Cf.CSV_DATA_LOAD,new W(!1,[Ri,po]));V.set(Cf.CSV_URL_LOAD,new W(!1,[Ri,po]));V.set(Cf.CSV_FILE_LOAD,new W(!1,[Ri,po]));V.set(Cf.IMPORT_FROM_S3,new W(!1,[Ri,po]));V.set(Rv.EXPORT_TO_S3,new W(!0,[]));V.set(Rv.EXPORT_LOCAL,new W(!0,[]));V.set(us.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[Tv]));V.set(us.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[Un]));V.set(us.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ri]));V.set(us.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[po]));Ov.exports={verifyPerms:G7,verifyPermsAst:q7,verifyBulkLoadAttributePerms:k7};function q7(e,t,r){if(Mn.isEmptyOrZeroLength(e))throw yt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Mn.isEmptyOrZeroLength(t))throw yt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Mn.isEmptyOrZeroLength(r))throw yt.info("verify_perms_ast has a null operation parameter"),gr(new Error);try{let s=new pv,n=new M7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw yt.info("No schemas defined in verifyPermsAst(), will not continue."),gr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&gv[r])throw gr(new Error,kt.DROP_SYSTEM,Ku.FORBIDDEN);if(c&&!u)return null;let _=_v.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof P7.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=Av(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=Rg(t.role.permission,f,d[E]);gg(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw gr(s)}}a(q7,"verifyPermsAst");function G7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw yt.info("null required parameter in verifyPerms"),gr(new Error,kt.DEFAULT_INVALID_REQUEST,Ku.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new pv;if(Mn.isEmptyOrZeroLength(e.hdb_user.role)||Mn.isEmptyOrZeroLength(e.hdb_user.role.permission))return yt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.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(us.SYSTEM_SCHEMA_NAME)||n===us.SYSTEM_SCHEMA_NAME;if(l&&gv[r])throw gr(new Error,kt.DROP_SYSTEM,Ku.FORBIDDEN);if(u&&!l||_===!0&&(r===ls.createSchema.name||r===ls.dropSchema.name))return null;if(x7.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=_v.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===cv||r===uv){if(n===us.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===cv&&(!d[n]||!d[n][Wu]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(n));if(r===uv&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Wu]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(n,i))}}let f=Av(e.hdb_user,r,o,c,s);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&us.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[us.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[us.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let E=F7(e),h=Rg(e.hdb_user.role.permission,n,i);return gg(E,h,r,i,n,c,s),c.getPermsResponse()}a(G7,"verifyPerms");function Av(e,t,r,s,n){if(Mn.arrayHasEmptyValues([e,t,r]))throw yt.info("hasPermissions has an invalid parameter"),gr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw yt.info(`operation ${t} not found.`),gr(new Error,kt.OP_NOT_FOUND(t),Ku.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return yt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Wu]===!1){s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Wu]===!1)s.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=V.get(t).perms;!Mn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(yt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw yt.error(E),yt.error(f),gr(Sv.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(Av,"hasPermissions");function gg(e,t,r,s,n,i,o){if(!e||!t)throw yt.info("no attributes specified in checkAttributePerms."),gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw yt.info(`no permissions found for ${r} in checkAttributePerms().`),gr(new Error);if(Mn.isEmptyOrZeroLength(t))return yt.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[Wu]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(us.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Un)throw gr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,Ku.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(gg,"checkAttributePerms");function F7(e){let t=new Set;try{if(e.action)return t;if(e.operation===us.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 s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){yt.info(r)}return t}a(F7,"getRecordAttributes");function Rg(e,t,r){let s=new Map;if(Mn.isEmpty(e))return yt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{yt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Rg,"getAttributePermissions");function k7(e,t,r,s,n,i,o){let c=new Set(i),u=Rg(e,s,n);gg(c,u,t,n,s,o,r)}a(k7,"verifyBulkLoadAttributePerms")});var Mf=g((Qhe,Iv)=>{"use strict";Iv.exports={evaluateSQL:tee,processAST:wv,convertSQLToAST:yv,checkASTPermissions:Nv};var V7=Lr(),bv=require("util"),$7=bv.callbackify(V7.insert),Y7=Dr().search,K7=nD().update,W7=bv.callbackify(K7),Q7=oD().convertDelete,Ai=require("alasql"),z7=Df(),Lf=$(),J7=ad(),j7=Q(),Ju=M(),{hdb_errors:X7,handleHDBError:Ag}=se(),{HTTP_STATUS_CODES:Og}=X7;J7(Ai);var Z7=403,eee="There was a problem performing this insert. Please check the logs and try again.",bg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function tee(e,t){let r=e.parsed_sql_object;if(!r){r=yv(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ai.yy.Insert?s=n.into.databaseid:n instanceof Ai.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ai.yy.Update||n instanceof Ai.yy.Delete?s=n.table.databaseid:Lf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ai.yy.Select)&&j7.isEmptyOrZeroLength(s))return t("No schema specified",null)}wv(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(tee,"evaluateSQL");function Nv(e,t){let r;try{r=z7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Nv,"checkASTPermissions");function yv(e){let t=new bg;if(!e)throw Ag(new Error,"The 'sql' parameter is missing from the request body",Og.BAD_REQUEST);try{let r=e.trim(),s=Ai.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
+
`);throw s[1]?Ag(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Og.BAD_REQUEST):Ag(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Og.BAD_REQUEST)}return t}a(yv,"convertSQLToAST");function wv(e,t,r){try{let s=ree;if(!e.bypass_auth&&!t.permissions_checked){let i=Nv(e,t);if(i&&i.length>0)return r(Z7,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ju.VALID_SQL_OPS_ENUM.SELECT:s=Y7,n=t.ast.statements[0];break;case Ju.VALID_SQL_OPS_ENUM.INSERT:s=see;break;case Ju.VALID_SQL_OPS_ENUM.UPDATE:s=W7;break;case Ju.VALID_SQL_OPS_ENUM.DELETE:s=Q7;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(wv,"processAST");function ree(e,t){Lf.info(e),t("unknown sql statement")}a(ree,"nullFunction");function see({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=nee(i,e.values)}catch(o){return r(o)}$7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Lf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(see,"convertInsert");function nee(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 s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Ai.compile(`SELECT ${n.toString()} AS [${Ju.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Lf.error(r),new Error(eee)}}a(nee,"createDataObjects")});var Ng=g((Jhe,Dv)=>{"use strict";var{S3:iee,GetObjectCommand:oee}=require("@aws-sdk/client-s3");Dv.exports={getFileStreamFromS3:aee,getS3AuthObj:Cv};async function aee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Cv(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new oee(r))).Body}a(aee,"getFileStreamFromS3");function Cv(e,t,r){return new iee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Cv,"getS3AuthObj")});var Uf=g((Xhe,qv)=>{"use strict";var wg=Dr(),cee=Mf(),uee=Ng(),{AsyncParser:lee,Transform:_ee}=require("json2csv"),Xu=require("stream"),Vr=Q(),yg=require("fs-extra"),dee=require("path"),_s=$(),{promisify:Uv}=require("util"),ju=Q(),{handleHDBError:pt,hdb_errors:fee}=se(),{HDB_ERROR_MSGS:Rr,HTTP_STATUS_CODES:St}=fee,{streamAsJSON:Eee}=($h(),ne(gb)),{Upload:hee}=require("@aws-sdk/lib-storage"),Lv=["search_by_value","search_by_hash","sql","search_by_conditions"],Mv=["json","csv"],Pv="json",vv="csv",mee="Successfully exported JSON locally.",pee="Successfully exported CSV locally.",See=1e3,Tee=wg.searchByHash,gee=wg.searchByValue,Ree=Uv(cee.evaluateSQL),Aee=Uv(Xu.finished);qv.exports={export_to_s3:yee,export_local:Oee,toCsvStream:Bv};async function Oee(e){_s.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Hv(e);if(!Vr.isEmpty(t))throw _s.error(t),pt(new Error,t,St.BAD_REQUEST,void 0,void 0,!0);if(Vr.isEmpty(e.path))throw _s.error(Rr.MISSING_VALUE("path")),pt(new Error,Rr.MISSING_VALUE("path"),St.BAD_REQUEST,void 0,void 0,!0);let r=(Vr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(dee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Vr.buildFolderPath(e.path,r);await bee(e.path);let n=await xv(e);return await Nee(s,e.format,n)}a(Oee,"export_local");async function bee(e){if(_s.trace("in confirmPath"),Vr.isEmptyOrZeroLength(e))throw pt(new Error,`Invalid path: ${e}`,St.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yg.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,_s.error(s),pt(new Error,s,St.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 _s.error(r),pt(new Error,r,St.BAD_REQUEST,void 0,void 0,!0)}return!0}a(bee,"confirmPath");async function Nee(e,t,r){if(_s.trace("in saveToLocal"),ju.isEmptyOrZeroLength(e))throw pt(new Error,Rr.INVALID_VALUE("file_path"),St.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmptyOrZeroLength(t))throw pt(new Error,Rr.INVALID_VALUE("Source format"),St.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmpty(r))throw pt(new Error,Rr.NOT_FOUND("Data"),St.BAD_REQUEST,void 0,void 0,!0);if(t===Pv){let s=yg.createWriteStream(e);return Eee(r).pipe(s),await Aee(s),{message:mee,path:e}}else if(t===vv){let s=yg.createWriteStream(e),n=Xu.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new lee(i,c).fromInput(n).toOutput(s).promise(!1),{message:pee,path:e}}throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST)}a(Nee,"saveToLocal");async function yee(e){if(!e.s3||Object.keys(e.s3).length===0)throw pt(new Error,Rr.MISSING_VALUE("S3 object"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw pt(new Error,Rr.MISSING_VALUE("aws_access_key_id"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw pt(new Error,Rr.MISSING_VALUE("aws_secret_access_key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.bucket))throw pt(new Error,Rr.MISSING_VALUE("bucket"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.key))throw pt(new Error,Rr.MISSING_VALUE("key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.region))throw pt(new Error,Rr.MISSING_VALUE("region"),St.BAD_REQUEST);let t=Hv(e);if(!Vr.isEmpty(t))throw pt(new Error,t,St.BAD_REQUEST);_s.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await xv(e)}catch(u){throw _s.error(u),u}let s,n=await uee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Xu.PassThrough;if(e.format===vv){i=e.s3.key+".csv";let u=Bv(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===Pv){i=e.s3.key+".json";let u=new Xu.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%See===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST);return new hee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(yee,"export_to_s3");function Bv(e,t){let r=Xu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),s={};t&&(s.fields=t.map(o=>({label:o,value:o})));let n={objectMode:!0},i=new _ee(s,n);return r.pipe(i)}a(Bv,"toCsvStream");function Hv(e){if(_s.trace("in exportCoreValidation"),Vr.isEmpty(e.format))return"format missing";if(Mv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Mv.join(", ")}`;let t=e.search_operation.operation;if(Vr.isEmpty(t))return"search_operation.operation missing";if(Lv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Lv.join(", ")}`}a(Hv,"exportCoreValidation");async function xv(e){_s.trace("in getRecords");let t,r;if(ju.isEmpty(e.search_operation)||ju.isEmptyOrZeroLength(e.search_operation.operation))throw pt(new Error,Rr.INVALID_VALUE("Search operation"),St.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=gee;break;case"search_by_hash":t=Tee;break;case"search_by_conditions":t=wg.searchByConditions;break;case"sql":t=Ree;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_s.error(r),pt(new Error,r,St.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(xv,"getRecords")});var Wv={};Ye(Wv,{contentTypes:()=>Mg,findBestSerializer:()=>vf,getDeserializer:()=>To,registerContentHandlers:()=>Ug,serialize:()=>Bf,serializeMessage:()=>gi});function wee(e){try{return e?.[0]===123?Lg(e):e}catch{return e}}function Ug(e){e.register(Cee,{serializers:[{regex:/^application\/json$/,serializer:Sc},{regex:/^application\/cbor$/,serializer:function(t){return new So.EncoderStream(el).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Pf.Readable.from((0,cn.encodeIter)(t,el)):(0,cn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ig.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,cn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,So.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function vf(e){let r=(e.headers.asObject||e.headers).accept,s,n=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=Bt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Bt.keys()).join(", "))}};s=Bt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Bf(e,t,r){let s=Fv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=vf(t);if(i.serializer.compressible===!1&&(s=!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 s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Pn.createBrotliCompress)({params:{[Pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pn.constants.BROTLI_MODE_TEXT:Pn.constants.BROTLI_MODE_GENERIC,[Pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e,r)}return s&&n?.length>Fv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function gi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Zu(e);let r=t.serialize;if(r)return r(e);let s=vf(t);return r=t.serialize=s.serializer.serialize,r(e)}function Dee(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function To(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Bt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Bt.get(e)?.deserialize||kv(e,s);return o=>Dee(o).then(i)}return e&&Bt.get(e)?.deserialize||kv(e,s)}function kv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Lg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Lee(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Ig,cn,So,Pn,Pf,Vv,Cg,Dg,$v,Yv,Zu,Lg,el,Bt,Mg,Gv,Kv,Iee,Cee,Fv,Aa=Re(()=>{$h();Ig=x(Uf()),cn=require("msgpackr"),So=require("cbor-x"),Pn=require("zlib"),Pf=require("stream");nr();Vv=require("../index"),Cg=x(ee()),Dg=x(M()),$v=x(require("yaml")),Yv=Cg.default.get(Dg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Zu=Yv?vi:JSON.stringify,Lg=Yv?Vh:JSON.parse,el={useRecords:!1,useToJSON:!0},Bt=new Map,Mg=Bt;tt.contentTypes=Mg;(0,Vv._assignPackageExport)("contentTypes",Mg);Bt.set("application/json",{serializeStream:Sc,serialize:Zu,deserialize:Lg,q:.8});Gv=new So.Encoder(el);Bt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new So.EncoderStream(el).end(e)},serialize:Gv.encode,deserialize:Gv.decode,q:1});Bt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Pf.Readable.from((0,cn.encodeIter)(e,el)):(0,cn.pack)(e)},serialize:cn.pack,deserialize:cn.unpack,q:.9});Bt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Ig.toCsvStream)(e,e?.getColumns?.())},q:.1});Bt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Bt.set("text/yaml",{serialize(e){return $v.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Bt.set("text/event-stream",{serializeStream:function(e){return Pf.Readable.from(Lee(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=Zu(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: ${
|
|
22
|
+
`}else return typeof e=="object"?`data: ${Zu(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,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});dv={type:"application/json",serializeStream:Ec,serialize:Qu,deserialize:P7,q:.8};$t.set("*/*",dv);$t.set("",dv);a(P7,"tryJSONParse");a(mg,"registerContentHandlers");v7=require("fastify-plugin"),B7=v7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Rf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Rf,"findBestSerializer");cv=dg.default.get(fg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Af,"serialize");a(Ti,"serializeMessage");a(H7,"streamToBuffer");a(mo,"getDeserializer");a(uv,"deserializerUnknownType");a(x7,"transformIterable")});function ju(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],I=vn(s.attributes,R);if(I.relationship){if(o.length<2)throw new po.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=ju({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,w,n,B);if(I.relationship.to){i[o[0]]=B;let q=!!vn(w.attributes,I.relationship.to)?.elements;K=k7(K,I,w.primaryStore,q,B)}if(I.relationship.from){let q=a(P=>ju({attribute:I.relationship.from,value:P},t,r,s,n,B),"searchEntry");I.elements?(i[o[0]]=B,K=V7(K,I,w.primaryStore,B,q)):K=K.flatMap(q)}return K}else if(o.length===1)o=o[0];else throw new po.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(hv[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]=un.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 je.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 po.ClientError(`Unknown query comparator "${u}"`)}if(r){let R=_;_=l,l=R,R=!f,f=!d,d=R}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!n)throw new po.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 R=Zu(e);if(!R)throw new po.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:I,value:w})=>new Promise((B,K)=>setImmediate(()=>{try{B(w&&R(w)?I:pg.SKIP)}catch(q){K(q)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let R=p.getRange(S).map(I=>I.value==null?pg.SKIP:I);return R.hasEntries=!0,R}else return p.getRange(S).map(({value:R})=>R)}function vn(e,t){if(Array.isArray(t))if(t.length>1){let r=vn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?vn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function k7(e,t,r,s,n){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=Oi(d),o=!0);let h=n.get(E);h?h.push(f):n.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&&!n.filters?.some(h=>!h(f))){if(s)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?n:n.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 V7(e,t,r,s,n){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;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(Oi(d)));let _=0;for await(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}u.set(Oi(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=n(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Zu(e,t,r,s){if(e.conditions){let c=e.conditions.map(Zu);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let n=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=vn(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=s?.[c],d=Zu({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:n},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()),hv[n]||n){case je.SEARCH_TYPES.EQUALS:case void 0:return cn(i,c=>c===o);case je.SEARCH_TYPES.CONTAINS:return cn(i,c=>c?.toString().includes(o));case je.SEARCH_TYPES.ENDS_WITH:case je.SEARCH_TYPES._ENDS_WITH:return cn(i,c=>c?.toString().endsWith(o));case je.SEARCH_TYPES.STARTS_WITH:case je.SEARCH_TYPES._STARTS_WITH:return cn(i,c=>typeof c=="string"&&c.startsWith(o));case je.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),cn(i,c=>(0,un.compareKeys)(c,o[0])>=0&&(0,un.compareKeys)(c,o[1])<=0);case"gt":case je.SEARCH_TYPES.GREATER_THAN:case je.SEARCH_TYPES._GREATER_THAN:return cn(i,c=>(0,un.compareKeys)(c,o)>0);case"ge":case je.SEARCH_TYPES.GREATER_THAN_EQUAL:case je.SEARCH_TYPES._GREATER_THAN_EQUAL:return cn(i,c=>(0,un.compareKeys)(c,o)>=0);case je.SEARCH_TYPES.LESS_THAN:case"lt":case je.SEARCH_TYPES._LESS_THAN:return cn(i,c=>(0,un.compareKeys)(c,o)<0);case"le":case je.SEARCH_TYPES.LESS_THAN_EQUAL:case je.SEARCH_TYPES._LESS_THAN_EQUAL:return cn(i,c=>(0,un.compareKeys)(c,o)<=0);case"ne":return cn(i,c=>(0,un.compareKeys)(c,o)!==0);default:throw new po.ClientError(`Unknown query comparator "${n}"`)}}function cn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sg(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let s;if(t.operator==="or"){s=0;for(let n of t.conditions)s+=n.estimated_count}else{s=1/0;for(let n of t.conditions)s=1/(1/s+1/n.estimated_count)}return t.estimated_count=s,t.estimated_count}let r=t.comparator||t.search_type;if(r===je.SEARCH_TYPES.EQUALS){let s=t[0]??t.attribute;if(s==null||s===e.primaryKey)t.estimated_count=1;else if(Array.isArray(s)){let n=vn(e.attributes,s[0]),i=n.definition?.tableClass||n.elements.definition?.tableClass,o=Sg(i)({value:t.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[n.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let n=e.indices[s];t.estimated_count=n?n.getValuesCount(t[1]??t.value):1/0}}else r===je.SEARCH_TYPES.CONTAINS||r===je.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=Ev:t.estimated_count=1/0:r===je.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=Ev:r===je.SEARCH_TYPES.BETWEEN?t.estimated_count=F7:t.estimated_count=q7;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function Of(e){if(e)if(Ai=e,ya.lastIndex=0,$7.test(e))try{let t=Ju(new Ia,"");if(gr!==Ai.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 ${gr} in '${Ai}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ju(e,t){let r=ya,s,n,i,o,c;for(;s=r.exec(Ai);){gr=r.lastIndex;let[,u,_]=s;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(n)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");n=Xu(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=G7[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);n=Xu(u);break;case"|":e.operator="or";case"":case void 0:case"&":if(n==null){if(n===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:n,value:decodeURIComponent(u)})}n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Xu(u)),n=void 0;break;case"(":ya.lastIndex=gr;let d=Ju(u?[]:new Ia,")");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=mv(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Ai[gr]===","?r.lastIndex=++gr:o=!0,n=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");ya.lastIndex=gr,l=Ju([],"}"),l.name=u,e.push(l),Ai[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":ya.lastIndex=gr,u?(l=Ju(new Ia,"]"),l.name=u):l=Ju(e.conditions?new Ia:[],"]"),e.conditions?(e.conditions.push(l),n=null):e.push(l),Ai[gr]===","?r.lastIndex=++gr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(n)e.conditions.push({comparator:i||"equals",attribute:n,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Xu(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=n?Y7:ya,r.lastIndex=gr),gr===Ai.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xu(e){return e.indexOf(".")>-1?e.split(".").map(Xu):decodeURIComponent(e)}function mv(e){let t=pv(e[0]);return e.length>1&&(t.next=mv(e.slice(1))),t}function pv(e){if(Array.isArray(e)){let t=pv(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 Oi(e){return Array.isArray(e)?e.join("\0"):e}var po,je,un,pg,q7,F7,Ev,G7,hv,$7,ya,Y7,gr,Ai,Ia,bf=Ae(()=>{po=v(Z()),je=v(mt()),un=require("ordered-binary"),pg=require("lmdb"),q7=1e8,F7=15e6,Ev=1e7,G7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ju,"searchByIndex");a(vn,"findAttribute");a(k7,"joinTo");a(V7,"joinFrom");hv={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(cn,"attributeComparator");a(Sg,"estimateCondition");$7=/[()[\]|!<>.]|(=\w+=)/,ya=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Y7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Of,"parseQuery");a(Ju,"parseBlock");a(Xu,"decodeProperty");a(mv,"toSortObject");a(pv,"toSortEntry");Ia=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(Oi,"flattenKey")});var Nf={};$e(Nf,{start:()=>Q7});async function W7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Of(e);let n=new Si;try{e.responseHeaders=n;let i=e.url.slice(1),o=gg.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 Xe(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=mo(r["content-type"],!0)(e.body)}catch(p){throw new tl.ClientError(p,400)}switch(e.authorize=!0,s){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":n.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 tl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new tl.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,Tg.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){K7[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):n.setIfNone("ETag",p),Tg.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Af(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?So.warn(i):So.info(i):So.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Af(i.contentType?i:i.toString(),e,o),o}}function Q7(e){Tg=e,!Sv&&(Sv=!0,gg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return W7(t,r)}),e.server.ws(async(t,r,s)=>{el++;let n=new bs;Tv||(Tv=!0,tu(l=>{el>0&&l.push({metric:"ws-connections",connections:el,byThread:!0})}));let i;t.on("error",l=>{i=!0,So.warn(l)});let o;t.on("message",a(function(d){o||(o=mo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{el--,ss(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=gg.getMatch(u);if(ss(!!_,"connection","ws","connect"),!_)t.send(Ti(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:el}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ti(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var So,tl,Yt,K7,Tg,Sv,gg,Tv,el,gv=Ae(()=>{Ta();yn();So=v(G()),tl=v(Z());bf();dc();Xi();Jd();Yt=new Uint8Array(8),K7=new Float64Array(Yt.buffer,0,1),Tg={};a(W7,"http");el=0;a(Q7,"start")});var Rg=T((yhe,Rv)=>{var{recordAction:yf,recordActionBinary:z7}=(yn(),ee(ru)),J7=require("fastify-plugin"),X7=200;Rv.exports=J7(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),yf(o,"duration",_,d,l),z7(n.raw.statusCode<400,"success",_,d,l);let f=X7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{yf(performance.now()-c,"transfer",_,d,l),yf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,yf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Ng=T((Ihe,yv)=>{var Lf=require("clone"),Uf=Je(),j7=z(),Cf=D(),Z7=G(),If=require("fs"),Ag=require("joi"),{string:Df}=Ag.types(),{hdb_errors:eee,handleHDBError:rl}=Z(),{HDB_ERROR_MSGS:tee,HTTP_STATUS_CODES:wf}=eee,{common_validators:wa}=Ks(),Av=1e9,Ov=" is required",ree=["insert","update","upsert"],Og={database:{presence:!1,format:wa.schema_format,length:wa.schema_length},schema:{presence:!1,format:wa.schema_format,length:wa.schema_length},table:{presence:!0,format:wa.schema_format,length:wa.schema_length},action:{inclusion:{within:ree,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},see={schema:Df.required(),table:Df.required(),action:Df.valid("insert","update","upsert")},{AWS_ACCESS_KEY:nee,AWS_SECRET:iee,AWS_BUCKET:oee,AWS_FILE_KEY:aee,REGION:cee}=Cf.S3_BUCKET_AUTH_KEYS,uee={s3:{presence:!0},[`s3.${nee}`]:{presence:!0,type:"String"},[`s3.${iee}`]:{presence:!0,type:"String"},[`s3.${oee}`]:{presence:!0,type:"String"},[`s3.${aee}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${cee}`]:{presence:!0,type:"String"}},bv=Lf(Og);bv.data.presence={message:Ov};var Nv=Lf(Og);Nv.file_path.presence={message:Ov};var lee=Object.assign(Lf(Og),uee),bg=Lf(see);bg.csv_url=Df.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bg.passthrough_headers=Ag.object();function _ee(e){let t=Uf.validateObject(e,bv);return Mf(e,t)}a(_ee,"dataObject");function dee(e){let t=Uf.validateBySchema(e,Ag.object(bg));return Mf(e,t)}a(dee,"urlObject");function fee(e){let t=Uf.validateObject(e,Nv);return Mf(e,t)}a(fee,"fileObject");function Eee(e){let t=Uf.validateObject(e,lee);return Mf(e,t)}a(Eee,"s3FileObject");function Mf(e,t){if(!t){let r=j7.checkGlobalSchemaTable(e.schema,e.table);if(r)return rl(new Error,r,wf.BAD_REQUEST);if(e.operation===Cf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{If.accessSync(e.file_path,If.constants.R_OK|If.constants.F_OK)}catch(s){return s.code===Cf.NODE_ERROR_CODES.ENOENT?rl(s,`No such file or directory ${s.path}`,wf.BAD_REQUEST):s.code===Cf.NODE_ERROR_CODES.EACCES?rl(s,`Permission denied ${s.path}`,wf.BAD_REQUEST):rl(s)}try{let s=If.statSync(e.file_path).size;if(s>Av)return rl(new Error,tee.MAX_FILE_SIZE_ERR(s,Av),wf.BAD_REQUEST)}catch(s){Z7.error(s),console.error(s)}}}return t}a(Mf,"postValidateChecks");yv.exports={dataObject:_ee,urlObject:dee,fileObject:fee,s3FileObject:Eee}});var yg=T((Che,Iv)=>{"use strict";var sl=G(),Pf=D();async function hee(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Pf.OPERATIONS_ENUM.INSERT||t.operation===Pf.OPERATIONS_ENUM.UPDATE||t.operation===Pf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Pf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sl.info(i.message),i):i.http_resp_msg?(sl.error(`Error calling operation: ${e.name}`),sl.error(i.http_resp_msg),i):(sl.error(`Error calling operation: ${e.name}`),sl.error(i),i)}}a(hee,"callOperationFunctionAsAwait");Iv.exports={callOperationFunctionAsAwait:hee}});var Cv=T((Lhe,wv)=>{"use strict";var Ig=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},wg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};wv.exports={BulkLoadFileObject:Ig,BulkLoadDataObject:wg}});var Lv=T((Mhe,Dv)=>{"use strict";var Cg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Dv.exports=Cg});var vg=T((qhe,Qv)=>{"use strict";var vf=Lr(),Hf=Ng(),mee=require("needle"),Hs=D(),vhe=qe(),Ca=z(),{handleHDBError:ot,hdb_errors:Fv}=Z(),{HTTP_STATUS_CODES:Kt,HDB_ERROR_MSGS:Dt,CHECK_LOGS_WRAPPER:go}=Fv,Da=G(),Dg=require("papaparse");Ca.promisifyPapaParse();var xs=require("fs-extra"),pee=require("path"),{chain:Uv}=require("stream-chain"),Mv=require("stream-json/streamers/StreamArray"),Pv=require("stream-json/utils/Batch"),vv=require("stream-chain/utils/comp"),{finished:Bv}=require("stream"),See=j(),Gv=yg(),Tee=cg(),{BulkLoadFileObject:Ug,BulkLoadDataObject:gee}=Cv(),Mg=jT(),{verifyBulkLoadAttributePerms:kv}=mf(),Bhe=Lv(),Hhe=nt(),xhe=gn(),{databases:Ree}=(ge(),ee(xe)),{coerceType:Aee}=(xf(),ee(Bg)),Hv="No records parsed from csv file.",To=`${See.get("HDB_ROOT")}/tmp`,{schema_regex:Oee}=Ks(),xv=1024*1024*2,qv=5e3,bee={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Qv.exports={csvDataLoad:Nee,csvURLLoad:yee,csvFileLoad:Iee,importFromS3:wee};async function Nee(e,t){let r=Hf.dataObject(e);if(r)throw ot(r,r.message,Kt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=Yv(e.schema,e.table),i=Dg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Lg.bind(null,n),dynamicTyping:!1}),o=new Mg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&kv(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 ot(new Error,c,Kt.BAD_REQUEST,void 0,void 0,!0);let u=new gee(e.action,e.schema,e.table,i.data);return s=await Gv.callOperationFunctionAsAwait(Kv,u,null),s.message===Hv?Hv:Wv(s.records,s.number_written)}catch(n){throw Ro(n)}}a(Nee,"csvDataLoad");async function yee(e){let t=Hf.urlObject(e);if(t)throw ot(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${To}/${r}`;try{await Cee(e,r)}catch(n){throw Da.error(Dt.DOWNLOAD_FILE_ERR(r)+" - "+n),ot(n,go(Dt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,s,Hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Pg(n);return await Bf(s),i}catch(n){throw await Bf(s),Ro(n)}}a(yee,"csvURLLoad");async function Iee(e){let t=Hf.fileObject(e);if(t)throw ot(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Pg(r)}catch(s){throw Ro(s)}}a(Iee,"csvFileLoad");async function wee(e){let t=Hf.s3FileObject(e);if(t)throw ot(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=pee.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${To}/${n}`;let i=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Dee(n,e);let o=await Pg(i);return await Bf(r),o}catch(s){throw await Bf(r),Ro(s)}}a(wee,"importFromS3");async function Cee(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await mee("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw ot(s,n,s.statusCode,Hs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Uee(r,e.csv_url),await Lee(t,r.raw)}a(Cee,"downloadCSVFile");async function Dee(e,t){try{let r=`${To}/${e}`;await xs.mkdirp(To),await xs.writeFile(`${To}/${e}`,"",{flag:"a+"});let s=await xs.createWriteStream(r),n=await Tee.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Da.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Da.error(Dt.S3_DOWNLOAD_ERR+" - "+r),ot(r,go(Dt.S3_DOWNLOAD_ERR))}}a(Dee,"downloadFileFromS3");async function Lee(e,t){try{await xs.mkdirp(To),await xs.writeFile(`${To}/${e}`,t)}catch(r){throw Da.error(Dt.WRITE_TEMP_FILE_ERR),ot(r,go(Dt.DEFAULT_BULK_LOAD_ERR))}}a(Lee,"writeFileToTempFolder");async function Bf(e){if(e)try{await xs.access(e),await xs.unlink(e)}catch{Da.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Bf,"deleteTempFile");function Uee(e,t){if(e.statusCode!==Fv.HTTP_STATUS_CODES.OK)throw ot(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Kt.BAD_REQUEST);if(!bee[e.headers["content-type"]])throw ot(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Kt.BAD_REQUEST);if(!e.raw)throw ot(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Kt.BAD_REQUEST)}a(Uee,"validateURLResponse");async function Pg(e){try{let t;switch(e.file_type){case Hs.VALID_S3_FILE_TYPES.CSV:t=await Mee(e);break;case Hs.VALID_S3_FILE_TYPES.JSON:t=await Pee(e);break;default:throw ot(new Error,Dt.DEFAULT_BULK_LOAD_ERR,Kt.BAD_REQUEST,Hs.LOG_LEVELS.ERROR,Dt.INVALID_FILE_EXT_ERR(e))}return Wv(t.records,t.number_written)}catch(t){throw Ro(t)}}a(Pg,"fileLoad");async function Vv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await vf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&kv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=ot(c);r(u)}}a(Vv,"validateChunk");async function $v(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Ca.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Ca.isEmpty(c)&&!Ca.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 Gv.callOperationFunctionAsAwait(Kv,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=ot(c,go(Dt.INSERT_CSV_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.INSERT_CSV_ERR+" - "+c);r(u)}}a($v,"insertChunk");async function Mee(e){let t={records:0,number_written:0},r=Yv(e.schema,e.table);try{let s=new Mg,n=xs.createReadStream(e.file_path,{highWaterMark:xv});n.setEncoding("utf8"),await Dg.parsePromise(n,Vv.bind(null,e,s),Lg.bind(null,r));let i=s.getPermsResponse();if(i)throw ot(new Error,i,Kt.BAD_REQUEST);return n=xs.createReadStream(e.file_path,{highWaterMark:xv}),n.setEncoding("utf8"),await Dg.parsePromise(n,$v.bind(null,e,t),Lg.bind(null,r)),n.destroy(),t}catch(s){throw ot(s,go(Dt.PAPA_PARSE_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.PAPA_PARSE_ERR+s)}}a(Mee,"callPapaParse");function Yv(e,t){let r=Ree[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Aee(i,n));return s}a(Yv,"createTransformMap");function Lg(e,t,r){let s=e.get(r);return s?s(t):Ca.autoCast(t)}a(Lg,"typeFunction");async function Pee(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Mg,n=Uv([xs.createReadStream(e.file_path,{encoding:"utf-8"}),Mv.withParser(),c=>c.value,new Pv({batchSize:qv}),vv(async c=>{await Vv(e,s,r,c)})]);await new Promise((c,u)=>{Bv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ot(new Error,i,Kt.BAD_REQUEST);let o=Uv([xs.createReadStream(e.file_path,{encoding:"utf-8"}),Mv.withParser(),c=>c.value,new Pv({batchSize:qv}),vv(async c=>{await $v(e,t,r,c)})]);return await new Promise((c,u)=>{Bv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw ot(s,go(Dt.INSERT_JSON_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.INSERT_JSON_ERR+s)}}a(Pee,"insertJson");async function Kv(e){let t={};try{e.data&&e.data.length>0&&vee(e.data[0])?t=await Bee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Da.info(t.message))}catch(r){throw Ro(r)}return t}a(Kv,"callBulkFileLoad");function vee(e){let t=Object.keys(e);for(let r of t)if(!Oee.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(vee,"validateColumnNames");async function Bee(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=vf.insert;break;case"update":i=vf.update;break;case"upsert":i=vf.upsert;break;default:throw ot(new Error,Dt.INVALID_ACTION_PARAM_ERR(s),Kt.BAD_REQUEST,Hs.LOG_LEVELS.ERROR,Dt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=Ca.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ro(o)}}a(Bee,"bulkFileLoad");function Wv(e,t){return`successfully loaded ${t} of ${e} records`}a(Wv,"buildResponseMsg");function Ro(e){return ot(e,go(Dt.DEFAULT_BULK_LOAD_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ro,"buildTopLevelErrMsg")});var Jv=T((Ghe,zv)=>{"use strict";var Hg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};zv.exports=Hg});var Zv=T((Vhe,jv)=>{"use strict";var Hee=D(),Xv=require("moment"),xee=require("uuid").v4,xg=class{static{a(this,"JobObject")}constructor(){this.id=xee(),this.type=void 0,this.start_datetime=Xv().valueOf(),this.created_datetime=Xv().valueOf(),this.end_datetime=void 0,this.status=Hee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};jv.exports=xg});var qg=T((Yhe,i0)=>{"use strict";var qee=require("uuid").v4,r0=Lr(),s0=es(),Fee=Xs(),Gee=ea(),kee=Jv(),at=D(),Vee=Zv(),$ee=Sd(),ds=G(),Yee=Ic(),La=z(),{promisify:Kee}=require("util"),Ao=require("moment"),Wee=Sf(),qf=Ng(),e0=Om(),{deleteTransactionLogsBeforeValidator:Qee}=WT(),{handleHDBError:zee,hdb_errors:Jee}=Z(),{HTTP_STATUS_CODES:Xee}=Jee,t0=s0.searchByValue,jee=s0.searchByHash,Zee=r0.insert,ete=Kee(Wee.evaluateSQL),tte=r0.update;i0.exports={addJob:nte,updateJob:ote,handleGetJob:rte,handleGetJobsByStartDate:ste,getJobById:n0};async function rte(e){try{let t=await n0(e.id);return La.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 ds.error("There was an error getting job",t),new Error(r)}}a(rte,"handleGetJob");async function ste(e){try{let t=await ite(e);if(ds.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=Ao(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ao(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 ds.error(r),new Error(r)}}a(ste,"handleGetJobsByStartDate");async function nte(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||La.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ds.info(l),t.error=l,t}if(!at.JOB_TYPE_ENUM[e.operation])return ds.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case at.OPERATIONS_ENUM.CSV_FILE_LOAD:s=qf.fileObject(e);break;case at.OPERATIONS_ENUM.CSV_URL_LOAD:s=qf.urlObject(e);break;case at.OPERATIONS_ENUM.CSV_DATA_LOAD:s=qf.dataObject(e);break;case at.OPERATIONS_ENUM.IMPORT_FROM_S3:s=qf.s3FileObject(e);break;case at.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case at.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=e0(e,"date");break;case at.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=e0(e,"timestamp");break;case at.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Qee(e);break;default:break}if(s)throw zee(s,s.message,Xee.BAD_REQUEST,void 0,void 0,!0);let n=new Vee;n.type=e.operation===at.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?at.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Fee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await t0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=qee();try{o=await t0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ds.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Yee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await Zee(u)}catch(l){return ds.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,ds.trace(l)}return t}a(nte,"addJob");async function ite(e){let t=Ao(e.from_date,Ao.ISO_8601),r=Ao(e.to_date,Ao.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new kee(s,e.hdb_user);try{return await ete(n)}catch(i){throw ds.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(ite,"getJobsInDateRange");async function n0(e){if(La.isEmptyOrZeroLength(e))return La.errorizeMessage("Invalid job ID specified.");let t=new Gee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await jee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ds.error(s),La.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(n0,"getJobById");async function ote(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(La.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===at.JOB_STATUS_ENUM.COMPLETE||e.status===at.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ao().valueOf());let t=new $ee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await tte(t),r}a(ote,"updateJob")});var _0=T((Whe,l0)=>{"use strict";var o0=z(),Rr=D(),ate=require("moment"),Ff=vg(),Gf=G(),a0=qg(),c0=Tf(),u0=ti(),cte=Ye(),ute=df(),Fg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function lte(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(o0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(o0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Bn(e,Ff.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Bn(e,Ff.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Bn(e,Ff.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Bn(e,Ff.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Bn(e,c0.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Bn(e,c0.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Bn(e,u0.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Bn(e,u0.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Bn(e,ute.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(lte,"parseMessage");async function Bn(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=ate().valueOf(),await a0.updateJob(e.job),await _te(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Gf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Gf.error(s),e.job.message=s,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await a0.updateJob(e.job)}catch(n){throw Gf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Bn,"runJob");async function _te(e){Gf.trace("launching job thread:",e),cte.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(_te,"launchJobThread");l0.exports={parseMessage:lte,RunnerMessage:Fg}});var f0=T((zhe,d0)=>{"use strict";var Gg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};d0.exports=Gg});var D0=T((Xhe,Wg)=>{"use strict";var Yf=es(),$g=Sf(),kf=vg(),Hn=uu(),Vf=jn(),il=ti(),dte=dS(),nl=rs(),$f=RS(),Wt=KT(),Lt=G(),fte=bS(),Ete=Cd(),E0=oT(),hte=Ld(),mte=aT(),pte=cT(),Ste=_T(),Tte=fT(),kg=mT(),h0=Tf(),gte=mf(),Yg=qg(),H=D(),{hdb_errors:al,handleHDBError:ol}=Z(),{HTTP_STATUS_CODES:m0}=al,Vg=RT(),p0=Qd(),y0=require("util"),Ua=Lr(),Rte=Rn(),Ate=_a(),S0=_0(),T0=hu(),g0=(ef(),ee(vu)),R0=Pr(),A0=df(),O0=of(),{setServerUtilities:Ote}=(xf(),ee(Bg)),{CONTEXT:bte}=(Ns(),ee(Sp)),{_assignPackageExport:Nte}=require("../index"),{transformReq:yte}=z(),{server:Ite}=(sr(),ee(Li)),wte=yg(),b0=Yf.searchByHash,Cte=Yf.searchByValue,Dte=y0.promisify(Yf.search),Lte=y0.promisify($g.evaluateSQL),Ute={[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},k=f0();async function I0(e,t){try{if(e.body.operation!=="read_log"&&(Lt.log_level===H.LOG_LEVELS.INFO||Lt.log_level===H.LOG_LEVELS.DEBUG||Lt.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Lt.info(o)}}catch(s){Lt.error(s)}let r=await wte.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Ute[e.body.operation]&&Rte.setSchemaDataToGlobal(s=>{s&&Lt.error(s)}),r}a(I0,"processLocalTransaction");var N0=Pte();Wg.exports={chooseOperation:w0,getOperationFunction:C0,operation:Kg,processLocalTransaction:I0};Ote(Wg.exports);Ite.operation=Kg;function w0(e){let t;try{t=C0(e)}catch(n){throw Lt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=$g.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$g.checkASTPermissions(e,i);if(o)throw Lt.error(`${m0.FORBIDDEN} from operation ${e.operation}`),Lt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ol(new Error,o,al.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 n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=gte.verifyPerms(i,n);if(o)throw Lt.error(`${m0.FORBIDDEN} from operation ${e.operation}`),Lt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw ol(n,"There was an error when trying to choose an operation path")}return r}a(w0,"chooseOperation");function C0(e){if(Lt.trace(`getOperationFunction with operation: ${e.operation}`),N0.has(e.operation))return N0.get(e.operation);throw ol(new Error,al.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),al.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(C0,"getOperationFunction");Nte("operation",Kg);function Kg(e,t){e.hdb_user=this[bte]?.user,e.bypass_auth=!t;let r=w0(e);return I0({body:e},r)}a(Kg,"operation");async function Mte(e){Lt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await Ua.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await Ua.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await Ua.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await il.deleteRecord(i);break;default:Lt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Lt.info("Invalid operation in transaction"),Lt.error(o)}}a(Mte,"catchup");async function ln(e){yte(e);let t,r;try{r=await Yg.addJob(e),t=r.createdJob,Lt.info("addJob result",r);let s=new S0.RunnerMessage(t,e);return await S0.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Lt.error(n),ol(s,n)}}a(ln,"executeJob");function Pte(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new k(Ua.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new k(Ua.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new k(Ua.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new k(Yf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new k(b0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new k(b0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new k(Cte)),e.set(H.OPERATIONS_ENUM.SEARCH,new k(Dte)),e.set(H.OPERATIONS_ENUM.SQL,new k(Lte)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new k(ln,kf.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new k(ln,kf.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new k(ln,kf.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new k(ln,kf.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new k(Hn.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new k(Hn.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new k(Hn.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new k(Hn.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new k(Hn.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new k(Hn.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new k(Hn.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new k(Hn.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new k(Vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new k(Vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new k(Vf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new k(Vf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new k(il.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new k(nl.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new k(nl.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new k(nl.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new k(nl.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new k($f.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new k($f.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new k($f.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new k($f.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new k(nl.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new k(fte)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new k(Ete)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new k(E0)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new k(E0)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new k(hte)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new k(mte)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new k(pte)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new k(R0.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new k(Ste.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new k(Tte)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new k(kg.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new k(kg.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new k(kg.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new k(ln,h0.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new k(ln,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new k(ln,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new k(ln,h0.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new k(Yg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new k(Yg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new k(Vg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new k(Vg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new k(Vg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new k(p0.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new k(p0.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new k(Mte)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new k(Ate.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new k(ln,il.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new k(dte)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new k(T0.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new k(T0.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new k(g0.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new k(g0.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new k(R0.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new k(Wt.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new k(Wt.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new k(Wt.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new k(Wt.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new k(Wt.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new k(Wt.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new k(Wt.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new k(Wt.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new k(Wt.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new k(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new k(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new k(Wt.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new k(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new k(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new k(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new k(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new k(A0.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new k(ln,A0.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new k(O0.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new k(O0.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new k(Hn.getBackup)),e}a(Pte,"initializeOperationFunctionMap")});var Wf=T((Zhe,M0)=>{"use strict";var Qg=D(),vte=z(),cl=G(),{handleHDBError:zg,hdb_errors:Kf}=Z(),{isMainThread:Bte}=require("worker_threads"),{Readable:Hte}=require("stream"),L0=require("os"),xte=require("util"),qte=PS(),Fte=xte.promisify(qte.authorize),U0=D0(),{createGzip:Gte,constants:kte}=require("zlib");function Vte(e){let t=`Found an uncaught exception with message: ${e.message}. ${L0.EOL}Stack: ${e.stack} ${L0.EOL}Terminating ${Bte?"HDB":"thread"}.`;console.error(t),cl.fatal(t),process.exit(1)}a(Vte,"handleServerUncaughtException");function $te(e,t,r){if(cl[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 s=e.statusCode?e.statusCode:Kf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a($te,"serverErrorHandler");function Yte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=zg(new Error,"Invalid JSON.",Kf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(vte.isEmpty(e.body.operation)){let s=zg(new Error,"Request body must include an 'operation' property.",Kf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Yte,"reqBodyValidationHandler");function Kte(e,t,r){let s;e.body.operation!==Qg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Qg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Qg.OPERATIONS_ENUM.LOGOUT?Fte(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{cl.warn(n),cl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(zg(n,i,Kf.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(Kte,"authHandler");async function Wte(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=U0.chooseOperation(e.body);let n=await U0.processLocalTransaction(e,s);if(n instanceof Hte&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Gte({level:kte.Z_BEST_SPEED})))}return n}catch(n){throw cl.error(n),n}}a(Wte,"handlePostRequest");M0.exports={authHandler:Kte,handlePostRequest:Wte,handleServerUncaughtException:Vte,serverErrorHandler:$te,reqBodyValidationHandler:Yte}});var H0=T((tme,B0)=>{"use strict";var Qte=require("fastify-plugin"),{handlePostRequest:P0,authHandler:zte,reqBodyValidationHandler:Jte}=Wf();async function Xte(e){e.decorate("hdbCore",{preValidation:[Jte,zte],request:t=>v0(P0(t,response)),requestWithoutAuthentication:(t,r)=>v0(P0(t,r,!0))})}a(Xte,"hdbCore");async function v0(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(v0,"convertAsyncIterators");B0.exports=Qte(Xte)});var F0=T((nme,q0)=>{"use strict";var sme=require("fs"),Jg=j();Jg.initSync();var{CONFIG_PARAMS:x0}=D(),jte=1024*1024*1024;function Zte(e){let t=Jg.get(x0.HTTP_TIMEOUT),r=Jg.get(x0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:jte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Zte,"getServerOptions");q0.exports=Zte});var V0=T((ome,k0)=>{"use strict";var Xg=j();Xg.initSync();var{CONFIG_PARAMS:G0}=D();function ere(){let e=Xg.get(G0.HTTP_CORSACCESSLIST),t=Xg.get(G0.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(ere,"getCORSOptions");k0.exports=ere});var K0=T((cme,Y0)=>{"use strict";var $0=j();$0.initSync();var tre=D();function rre(){return $0.get(tre.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(rre,"getHeaderTimeoutConfig");Y0.exports=rre});var Zg={};$e(Zg,{customFunctionsServer:()=>ire,ready:()=>aB,start:()=>nre});function nre(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){xn||(xn=oB(t),_t.http((await xn).server));let o=await xn,c=(0,jg.dirname)(n),u=(0,jg.dirname)(s);if(u.startsWith("/")&&(u=u.slice(1)),!W0.has(c)){W0.add(c);try{o.register(are(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ge.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}},ready:aB}}async function ire(){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 ore();let e=Z0.get(eB.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=xn=await oB(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 ore(){try{Ge.info("Custom Functions starting configuration."),await tB.setUsersToGlobal(),Ge.info("Custom Functions completed configuration.")}catch(e){Ge.error(e)}}function are(e,t){return async function(r){try{Ge.info("Custom Functions starting buildRoutes"),Ge.trace("Loading fastify routes folder "+e),(0,Q0.existsSync)(e)&&r.register(j0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ge.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ge.error(n.message):n&&Ge.error(n),o()})}catch(s){Ge.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function oB(e){Ge.info("Custom Functions starting buildServer.");let t=(0,rB.default)(e),r=(0,z0.default)(t);r.server.headersTimeout=(0,nB.default)(),r.setErrorHandler(iB.serverErrorHandler);let s=(0,sB.default)();return s&&r.register(J0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(X0.default),await r.register(sre),await r.after(),mg(r),Ge.info("Custom Functions completed buildServer."),r}function aB(){if(xn)return xn.then?xn.then(e=>e.ready()):xn.ready()}var jg,Q0,z0,J0,X0,j0,Z0,eB,Ge,sre,tB,rB,sB,nB,iB,xn,W0,cB=Ae(()=>{jg=require("path"),Q0=require("fs"),z0=v(require("fastify")),J0=v(require("@fastify/cors")),X0=v(Rg()),j0=v(require("@fastify/autoload")),Z0=v(j()),eB=v(D()),Ge=v(G()),sre=v(H0()),tB=v(rs()),rB=v(F0()),sB=v(V0()),nB=v(K0()),iB=v(Wf());Ta();sr();W0=new Set;a(nre,"start");a(ire,"customFunctionsServer");a(ore,"setUp");a(are,"buildRouteFolder");a(oB,"buildServer");a(aB,"ready")});var eR={};$e(eR,{start:()=>cre});function cre(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,fB.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){lB||(lB=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=uB.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,_B.default)(n,(0,dB.realpathSync)(o))}}return i(n)},{runFirst:!0})),uB.set(r,s)}}}var _B,dB,fB,uB,lB,EB=Ae(()=>{_B=v(require("send")),dB=require("fs"),fB=v(require("serve-static")),uB=new Map;a(cre,"start")});function _re(e,t=1,r){if(tR++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:Jf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Jf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});lre.push(n),await n,Ma.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=zf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ma.indexOf(s);o>-1&&Ma.splice(o,1)}if(a(i,"removeWorker"),Pa){let o=Pa;Pa=[];for(let c of o)SB[c.localPort](null,c)}}}),r){let s=setInterval(()=>{rR?rR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),tR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function TB(e=0,t){if(typeof e=="string")try{(0,Xf.existsSync)(e)&&(0,Xf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=dre:r=fre(t):r=nR;let s=(0,va.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=SB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),rR=!0,r(o,(c,u)=>{if(!c){if(hB){let l=o._socket||new va.Socket({handle:o,writable:!0,readable:!0});hB.deliverSocket(l,e,u),l.resume()}else tR>0?(Pa.length===0&&setTimeout(()=>{Pa.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,Pa.push(o)):(console.log("start up a dynamic thread to handle request"),_re(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new va.Socket({handle:o,writable:!0,readable:!0});pre(l,c,e)}qr(!0,"socket-routed")})};let n=jc();sR.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function nR(e,t){let r,s=0;for(let n of Ma){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Qf)return Qf=i,t(r);s=i}Qf=0,t(r)}function dre(e,t){let r={};e.getpeername(r);let s=r.address,n=Ba.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);nR(e,o=>{Ba.set(s,{worker:o,lastUsed:i}),t(o)})}function fre(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new va.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ba.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);nR(s,d=>{Ba.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function hre(){Qf=0;for(let e of Ma)e.expectedIdle=e.recentELU.idle+Ere,e.requests=1;Ma.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function pre(e,t,r){let s=mre++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),zf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),zf.delete(s)),n.event=="destroy"&&(e.destroy(),zf.delete(s))})}var Oo,va,Jf,sR,Xf,pB,ure,Ma,Pa,SB,hB,tR,lre,rR,Qf,mB,Ba,Ere,zf,mre,gB=Ae(()=>{Oo=v(Ye()),va=require("net"),Jf=v(D()),sR=v(G()),Xf=require("fs");yn();pB=require("worker_threads"),ure=v(Yi()),Ma=[],Pa=[],SB=[],tR=0,lre=[];pB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(_re,"startHTTPWorker");a(TB,"startSocketServer");Qf=0;a(nR,"findMostIdleWorker");mB=36e5,Ba=new Map;a(dre,"findByRemoteAddressAffinity");a(fre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ba)r.lastUsed+mB<e&&Ba.delete(t)},mB).unref();Ere=1e3;a(hre,"updateWorkerIdleness");(0,Oo.setMonitorListener)(hre);zf=new Map,mre=1;a(pre,"proxySocket")});var cR={};$e(cR,{Request:()=>iR,createReuseportFd:()=>jf});var RB,iR,oR,aR,jf,Zf=Ae(()=>{RB=require("os"),iR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new aR(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 oR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},oR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},aR=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,s]of this)t(s,r,this)}};(0,RB.platform)()!="win32"&&(jf=require("node-unix-socket").createReuseportFd)});var NB=T((Ome,bB)=>{"use strict";var Sre=require("cluster"),bo=j();bo.initSync();var OB=D(),Sme=require("util"),qn=G(),Tme=require("fs"),Tre=require("fastify"),gme=jc(),gre=require("@fastify/cors"),Rre=require("@fastify/compress"),Are=require("@fastify/static"),Ore=Rg(),bre=require("path"),{PACKAGE_ROOT:Nre}=D(),yre=Rn(),Ire=z(),wre=rs(),Cre=Yi(),{server:Dre}=(sr(),ee(Li)),{node_request_key:Rme}=(Zf(),ee(cR)),{authHandler:Lre,handlePostRequest:Ure,serverErrorHandler:Mre,reqBodyValidationHandler:Pre}=Wf(),Ame=require("net"),{registerContentHandlers:vre}=(Ta(),ee(fv)),Bre=6e4,Hre=1024*1024*1024,xre="TRUE",{CONFIG_PARAMS:ul}=OB,Ha;bB.exports={hdbServer:AB,start:AB};async function AB(e){try{qn.info("In Fastify server"+process.cwd()),qn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Sre.isMaster,await qre();let t=e.securePort>0;Ha=Fre(t),await Ha.ready(),e||(e={}),e.isOperationsServer=!0;try{Dre.http(Ha.server,e),Ha.server.closeIdleConnections||await Ha.listen({port:0,host:"::"})}catch(r){throw Ha.close(),qn.error(r),qn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),qn.fatal(t),process.exit(1)}}a(AB,"operationsServer");async function qre(){qn.trace("Configuring HarperDB process."),yre.setSchemaDataToGlobal(),await wre.setUsersToGlobal(),await Cre.getLicense()}a(qre,"setUp");function Fre(e){qn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Gre(e),r=Tre(t);r.server.headersTimeout=Vre(),r.setErrorHandler(Mre);let s=kre();s&&r.register(gre,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Ore),r.register(Rre),r.register(Are,{root:bre.join(Nre,"studio/build-local")}),vre(r);let n=bo.get(OB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ire.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Pre,Lre],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ure(i,o)}),r.get("/health",()=>"HarperDB is running."),qn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Fre,"buildServer");function Gre(e){let t=bo.get(ul.OPERATIONSAPI_NETWORK_TIMEOUT),r=bo.get(ul.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Hre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Gre,"getServerOptions");function kre(){let e=bo.get(ul.OPERATIONSAPI_NETWORK_CORS),t=bo.get(ul.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===xre)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(kre,"getCORSOpts");function Vre(){return bo.get(ul.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Bre}a(Vre,"getHeaderTimeoutConfig")});var vB=T((wme,PB)=>{"use strict";var{decode:$re}=require("msgpackr"),{isMainThread:Nme,parentPort:Yre,threadId:yme}=require("worker_threads"),lR=nt(),Fn=qe(),Kre=D(),bi=G(),yB=j(),wB=D();Ye();var Wre=gn(),{recordAction:Qre,recordActionBinary:zre}=(yn(),ee(ru)),{publishToStream:Jre}=lR,{ConsumerEvents:Xre}=require("nats"),Ime={durable:Fn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Fn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},jre,Zre,ese,CB,DB;PB.exports={initialize:_R,workQueueListener:MB,setSubscription:tse,setIgnoreOrigin:sse,getDatabaseSubscriptions:rse};async function _R(){DB=!0,bi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await lR.getNATSReferences();jre=e,Zre=e.info.server_name,ese=t,CB=r}a(_R,"initialize");var tE=new Map;function tse(e,t,r){let s=tE.get(e);s||tE.set(e,s=new Map),s.set(t,r),DB||_R().then(MB)}a(tse,"setSubscription");function rse(){return tE}a(rse,"getDatabaseSubscriptions");var LB;function sse(e){LB=e}a(sse,"setIgnoreOrigin");var UB=100,IB=new Array(UB),eE=0;async function MB(){let e=await CB.consumers.get(Fn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Fn.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Yre?.on("message",async s=>{let{type:n}=s;n===wB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let s of await r.status())if(s.type===Xre.HeartbeatsMissed){let n=s.data;bi.trace(`${n} clustering ingest consumer heartbeats missed`),n===2&&(bi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let s of r)await IB[eE],IB[eE]=nse(s).catch(n=>{bi.error(n)}),++eE>=UB&&(eE=0)}catch(s){bi.error("Error consuming clustering ingest, restarting consumer",s)}lR.clearClientCache(),await _R()}}a(MB,"workQueueListener");async function nse(e){let t=$re(e.data);Qre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=yB.get(Kre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Fn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Fn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Fn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!LB),zre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Fn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;bi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),bi.trace(`messageProcessor nats msg id: ${e.headers.get(Fn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},I=tE.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:uR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let w=l.map((B,K)=>({type:uR(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:uR(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:R})}yB.get(wB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Jre(e.subject.split(".").slice(0,-1).join("."),Wre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){bi.error(o)}e.ack()}a(nse,"messageProcessor");function uR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(uR,"convertOperation")});var pR={};$e(pR,{disableNATS:()=>ose,publishToStream:()=>oE,setNATSReplicator:()=>dR,setPublishToStream:()=>ase,setSubscription:()=>mR,start:()=>ise});function ise(){sE.default.get(nE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&use()}function ose(e=!0){FB=e}function ase(e,t){oE=e,mR=t}function use(){if(FB||process.env._DISABLE_NATS)return;let e=Ms(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];dR(n,r,i)}}SR((r,s)=>{dR(r.tableName,r.databaseName,r),s&&kB(r)}),!BB&&(BB=!0)}function dR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends qt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[De],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}patch(i){return s(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[De],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){kB(i)}static subscribe(){let i=new bs;return mR(t,e,i),i}static subscribeOnThisThread(i){return i<cse}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new rE(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=GB;return i}a(s,"getNATSTransaction")}function kB(e){let t=sE.default.get(nE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);oE(`${ER.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,hR.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 HB,ER,hR,xB,qB,sE,nE,iE,FB,oE,mR,cse,GB,BB,rE,fR,VB=Ae(()=>{ge();Ns();HB=v(nt()),ER=v(qe()),hR=v(gn());dc();xB=v(vB()),qB=v(wr()),sE=v(j()),nE=v(D()),iE=v(G());a(ise,"start");a(ose,"disableNATS");oE=HB.publishToStream,mR=xB.setSubscription;a(ase,"setPublishToStream");cse=2;a(use,"assignReplicationSource");a(dR,"setNATSReplicator");a(kB,"publishSchema");rE=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=sE.default.get(nE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,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||(iE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,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&&s.push(oE(`${ER.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,hR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw iE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},fR=class extends rE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,qB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};GB=new fR});var sH=T(yo=>{"use strict";var{isMainThread:lse,parentPort:dl,threadId:ll}=require("worker_threads"),{Socket:_se,createServer:dse}=require("net"),{createServer:fse,IncomingMessage:Ese}=require("http"),{createServer:hse}=require("https"),{readFileSync:xa,unlinkSync:$B,existsSync:mse}=require("fs"),qs=G(),ke=j(),Ar=D(),{server:uE}=(sr(),ee(Li)),{WebSocketServer:pse}=require("ws"),{createServer:Sse}=require("tls"),{getTicketKeys:Tse,restartNumber:gse,getWorkerIndex:YB}=Ye(),{Headers:JB}=(Jd(),ee(xM)),{recordAction:_l,recordActionBinary:Rse}=(yn(),ee(ru)),{Request:XB,createReuseportFd:KB}=(Zf(),ee(cR)),{checkMemoryLimit:Ase}=Yi(),jB=require("tls"),WB=jB.createSecureContext;jB.createSecureContext=function(e){if(!e.cert||!e.key)return WB(e);let t={...e};delete t.key,delete t.cert;let r=WB(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){gse<=1&&qs.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:vme,CONFIG_PARAMS:Ose}=Ar;ke.initSync();var bse=ke.get(Ose.HTTP_SESSIONAFFINITY),_n={};yo.registerServer=OR;yo.httpServer=bR;yo.deliverSocket=AR;yo.startServers=ZB;yo.when_components_loaded=null;uE.http=bR;uE.request=wse;uE.socket=Cse;uE.ws=Dse;var TR=[],aE=[],Nse,No={},cE={},yse=[],gR=[];function ZB(){return yo.when_components_loaded=NR().loadRootComponents(!0).then(()=>{dl?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)AR(s,r,n);else if(t.requestId)Ise(t);else if(t.type===Ar.ITC_EVENT_TYPES.SHUTDOWN){qs.trace("received shutdown request",ll);for(let i in _n){let o=_n[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),qs.info("Closed all http connections",i,ll)},4e3).unref()),o.close?.(()=>{if(ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&YB()==0)try{$B(ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ll),o.cantCleanupProperly||qs.warn("Had to forcefully exit the thread",ll),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(KB&&!bse)for(let t in _n){let r=_n[t];if(isNaN(t)&&YB()==0){mse(t)&&$B(t),e.push(new Promise((n,i)=>{r.listen({path:t},()=>{n(),qs.info("Domain socket listening on "+t)}).on("error",i)}));continue}let s;try{s=KB(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),qs.trace("Listening on port "+t,ll)}).on("error",i)}))}Promise.all(e).then(()=>{dl?.postMessage({type:Ar.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(ZB,"startServers");lse||ZB();function AR(e,t,r){let s=e?.read?e:new _se({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=_n[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=_n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(qs.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(AR,"deliverSocket");var QB=new Map;function Ise(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=QB.get(n),r){case"connection":i=AR(void 0,t),QB.set(n,i),i.write=(c,u,_)=>(dl.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(dl.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),dl.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(Ise,"proxyRequest");function OR(e,t,r=!0){!+t&&t!==ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(ke.get(Ar.CONFIG_PARAMS.HTTP_PORT),10));let s=_n[t];if(s){let n=s.lastServer||s;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",zB),n.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(s.cantCleanupProperly=!0),e.emit("request",i,o)}),s.lastServer=e}else _n[t]=e;e.on("unhandled",zB)}a(OR,"registerServer");function eH(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=[],ke.get(Ar.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ke.get(Ar.CONFIG_PARAMS.HTTP_PORT),secure:ke.get(Ar.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ke.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ke.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(eH,"getPorts");function bR(e,t){for(let{port:r,secure:s}of eH(t))tH(r,s,t?.isOperationsServer),typeof e=="function"?gR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=s,OR(e,r,!1)),cE[r]=RR(gR,r),Nse=RR(yse,r)}a(bR,"httpServer");function tH(e,t,r){if(!No[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:ke.get(s+"_keepAliveTimeout"),headersTimeout:ke.get(s+"_headersTimeout"),requestTimeout:ke.get(s+"_timeout")},i=ke.get(s+"_mtls");if(t){s=r?"operationsApi_":"";let c=ke.get(s+"tls_privateKey"),u=ke.get(s+"tls_certificate"),_=ke.get(s+"tls_certificateAuthority");Object.assign(n,{allowHTTP1:!0,key:xa(c),ciphers:ke.get("tls_ciphers"),cert:xa(u),ca:_&&xa(_),requestCert:!!i,ticketKeys:Tse()})}let o=Ase();No[e]=(t?hse:fse)(n,async(c,u)=>{try{let l=performance.now(),d=new XB(c,u);r&&(d.isOperationsServer=!0);let f=await cE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=rH(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,No[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),p=h-l,S=f.body,R;if(!f.handlesHeaders){let B=f.headers||new JB;if(S?S.length>=0&&(typeof S=="string"?B.set("Content-Length",Buffer.byteLength(S)):B.set("Content-Length",S.length),R=!0):(B.set("Content-Length","0"),R=!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)),R&&u.end(S)}let I=d.handlerPath,w=d.method;if(_l(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Rse(E<400,"success",I,w),!R)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",()=>{_l(performance.now()-h,"transfer",I,w),_l(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?qs.warn(l):qs.info(l):qs.error(l)}a(_,"onError")}),t&&(No[e].on("secureConnection",c=>{c._parent.startTime&&_l(performance.now()-c._parent.startTime,"tls-handshake",e),_l(c.isSessionReused(),"tls-reused",e)}),No[e].isSecure=!0),OR(No[e],e)}return No[e]}a(tH,"getHTTPServer");function RR(e,t){let r=rH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(RR,"makeCallbackChain");function rH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new JB}}a(rH,"unhandled");function wse(e,t){bR(e,{requestOnly:!0,...t})}a(wse,"onRequest");function Cse(e,t){let r;if(t.securePort){let s=ke.get("tls_privateKey"),n=ke.get("tls_certificate"),i=t.mtls?.certificateAuthority||ke.get("tls_certificateAuthority");r=Sse({ciphers:ke.get("tls_ciphers"),key:xa(s),cert:xa(n),ca:i&&xa(i),requestCert:!!t.mtls},e),_n[t.securePort]=r}return t.port&&(r=dse(e),_n[t.port]=r),r}a(Cse,"onSocket");Object.defineProperty(Ese.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 Dse(e,t){for(let{port:r,secure:s}of eH(t)){aE[r]||(aE[r]=new pse({server:tH(r,s)}),aE[r].on("connection",async(i,o)=>{try{let c=new XB(o);c.isWebSocket=!0;let u=cE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<TR.length;l++){let d=TR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){qs.warn("Error handling WebSocket connection",c)}}),aE[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let n=t?.subProtocol||"";TR.push({listener:e,protocol:n}),cE[r]=RR(gR,r)}}a(Dse,"onWebSocket");function zB(e,t){t.writeHead(404),t.end(`Not found
|
|
27
|
-
`)}a(zB,"defaultNotFound")});async function aH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await yR.getResource(e,{});n=new CR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await yR.get(e);i&&i.delete()}n=new _E(e,t)}return s&&(s.id=e,s.user={username:t?.username},fl.put(s)),n}function IR(){return lE++,lE>65500&&(lE=1),lE}function wR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=pi.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Xe(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var nH,Io,iH,oH,yR,fl,lE,_E,CR,cH=Ae(()=>{ge();Pu();nH=v(wr()),Io=v(G());Xi();iH=v(Ye()),oH=v(sH());sr();yR=dt({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"}]}}]}),fl=dt({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,iH.getWorkerIndex)()===0&&(async()=>{await oH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of fl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await _t.getUser(r.user.username)),Xe(r,()=>{try{wR(r,t)}finally{fl.delete(e.id,r)}})}})();a(aH,"getSession");lE=1;a(IR,"getNextMessageId");_E=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(R=>R.topic===n),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,Io.trace)("Resuming subscription from",n,"from",o);let E=pi.getMatch(_);if(!E){let R=new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let I=R.split("/"),w;for(let q=0;q<I.length;q++)if(I[q].indexOf("+")>-1)if(I[q]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&w)throw new Error("Filters can not be combined");let B=!0;I[I.length-1]==="#"&&(I.length--,B=!1),w&&(s=a(q=>{let P=q.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 Xe(f,async()=>{let R=await p.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let I of R)try{let w;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||s&&!s(I))continue;r?(I.topic=n,w=this.needsAcknowledge(I)):(I.acknowledge?.(),w=IR());let B=I.id;Array.isArray(B)&&(B=Sa(B)),B==null&&(B=""),this.listener(h+"/"+B,I.value,w,t)}catch(w){(0,Io.warn)(w)}})(),R});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=IR();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(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,wR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let s=await fl.get(this.sessionId,r);s?.doesExist()&&await wR(s,s.data,r)}await fl.delete(this.sessionId,r)}).catch(s=>{(0,Io.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(wR,"publish");CR=class extends _E{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=IR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Io.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,nH.getNextMonotonicTime)()),(0,Io.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),yR.put(this.sessionRecord)),t.qos}}});var DR={};$e(DR,{bypassAuth:()=>Lse,start:()=>Use});function Lse(){fH=!0}function Use({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=_H(_,(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,Or.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||n)&&(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,Or.error)(E)}else return(0,Or.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&fH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,dH.getSuperUser)());let{onMessage:d,onClose:f}=_H(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Or.info)("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function _H(e,t,r,s,n){lH||(lH=!0,tu(d=>{dE>0&&d.push({metric:"mqtt-connections",connections:dE,byThread:!0})}));let i;dE++;let o,c={protocolVersion:4},u=(0,EE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){dE--,i||(i=!0,o?.disconnect(),ss(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await _t.getUser(d.username,d.password.toString(),r),(0,fE.get)(dn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&uH.notify({username:s.username,status:dn.AUTH_AUDIT_STATUS.SUCCESS,type:dn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,fE.get)(dn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&uH.error({username:s.username,status:dn.AUTH_AUDIT_STATUS.FAILURE,type:dn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ss(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let w=e.deserialize||(e.deserialize=mo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?w(d.will.payload):void 0,delete d.will.payload}o=aH({user:s,...d}),o=await o}catch(w){return(0,Or.error)(w),ss(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:w.code||5,returnCode:w.code||128})}ss(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((w,B,K,q)=>{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:q.qos},Q)}catch(P){(0,Or.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,Or.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=mo(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,R)}catch(w){(0,Or.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),ss(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Or.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,EE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ti(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var EE,dH,fE,dn,Or,uH,fH,lH,dE,EH=Ae(()=>{EE=require("mqtt-packet");cH();dH=v(rs());Ta();yn();sr();fE=v(j()),dn=v(D()),Or=v(G()),uH=(0,Or.loggerWithTag)("auth-event"),fH=(0,fE.get)(dn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Lse,"bypassAuth");a(Use,"start");dE=0;a(_H,"onSocket")});var uf={};$e(uf,{component_errors:()=>Fa,loadComponent:()=>hE,loadComponentDirectories:()=>OH,setErrorReporter:()=>Bse});function OH(e,t){t&&(UR=t),e&&(MR=e);let r=[];if((0,Fs.existsSync)(LR)){let n=(0,Fs.readdirSync)(LR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ot.join)(LR,o);r.push(hE(c,UR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(hE(s,UR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{AH=!0})}function Bse(e){hl=e}async function hE(e,t,r,s,n,i){if(!mH.has(e)){mH.set(e,!0),n&&(MR=n);try{let o;s&&(Fa=new Map);let c=(0,Ot.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Fs.existsSync)(c)?o=s?(0,RH.getConfigObj)():(0,pH.parseDocument)((0,Fs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=PR;let u=[],_=s;for(let l in o){let d=o[l];if(Fa.set(s?l:(0,Ot.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,Fs.existsSync)(w=(0,Ot.join)(I,"node_modules",l));)if(I=(0,Ot.dirname)(I),I.length<(0,gH.getHdbBasePath)().length){w=null;break}if(w)f=await hE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=vse[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,dt(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(qa.isMainThread&&(f=await f.startOnMainThread?.({server:_t,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let I of[R,S])try{if(+I&&!hH.includes(I)){let w=vR.get(BR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&El.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!jf)&&(hH.push(I),TB(I,w))}}catch(w){console.error("Error listening on socket",I,w,l)}if(t.isWorker&&(f=await f.start?.({server:_t,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),MR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,TH.handleHDBError)("Can not reference parent directories");let I=(0,Ot.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==PR[l]?.files&&!(0,Fs.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,Ot.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let q,P,Q;if(d.root){let J=d.root;J.startsWith("/")&&(J=J.slice(1)),J.endsWith("/")&&(J=J.slice(0,-1)),J+="/",P=(0,Ot.join)(e,J)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),q=(0,Ot.relative)(e,P));let Y=!1;if(qa.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 J of await(0,SH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=J;_=!0;let se=(0,Ot.relative)(e,re).replace(/\\/g,"/");if(q)if(se.startsWith(q))se=se.slice(q.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${se}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ut=K+(K.endsWith("/")?"":"/")+se;try{if(Ie.isFile()){let de=await Pse(re);qa.isMainThread&&await f.setupFile?.(de,ut,re,t),t.isWorker&&await f.handleFile?.(de,ut,re,t)}else qa.isMainThread&&await f.setupDirectory?.(ut,re,t),t.isWorker&&await f.handleDirectory?.(ut,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}`,hl?.(de),((0,Ga.getWorkerIndex)()===0?console:El.default).error(de),t.set(d.path||"/",new ml(de)),Fa.set(s?l:(0,Ot.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Ot.basename)(e)}' due to: ${h.message}`,hl?.(h),((0,Ga.getWorkerIndex)()===0?console:El.default).error(h),t.set(d.path||"/",new ml(h),null,!0),Fa.set(s?l:(0,Ot.basename)(e),h.message)}}if(qa.isMainThread&&!AH&&i&&(0,Ga.watchDir)(e,async()=>OH()),o.extensionModule)return await Xl((0,Ot.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;hl?.(new Error(l)),((0,Ga.getWorkerIndex)()===0?console:El.default).error(l),Fa.set((0,Ot.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,hl?.(o),t.set("",new ml(o))}}}var Fs,Ot,qa,pH,vR,BR,SH,Ga,El,TH,gH,Mse,RH,Pse,LR,MR,AH,UR,Fa,vse,PR,hH,mH,hl,ml,lf=Ae(()=>{Fs=require("fs"),Ot=require("path"),qa=require("worker_threads"),pH=require("yaml"),vR=v(j()),BR=v(D());HO();GO();kO();gv();cB();EB();SH=v(require("fast-glob")),Ga=v(Ye()),El=v(G());Oh();sr();TH=v(Z());Ns();ge();gB();gH=v(j()),Mse=v(NB());ef();VB();EH();RH=v(Pr());Zf();({readFile:Pse}=Fs.promises),LR=vR.get(BR.CONFIG_PARAMS.COMPONENTSROOT),MR=new Map,Fa=new Map;a(OH,"loadComponentDirectories");vse={REST:Nf,rest:Nf,graphqlSchema:Ah,jsResource:Nh,fastifyRoutes:Zg,login:Ih,static:eR,operationsApi:Mse,customFunctions:{},http:{},clustering:pR,authentication:vu,mqtt:DR},PR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(PR,"static",{value:{files:"web/**"}});hH=[],mH=new Map;a(Bse,"setErrorReporter");a(hE,"loadComponent");ml=class extends qt{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 NR=T((ape,NH)=>{var{isMainThread:bH}=require("worker_threads"),{getTables:Hse}=(ge(),ee(xe)),{loadComponentDirectories:xse,loadComponent:qse}=(lf(),ee(uf)),{resetResources:Fse}=(Pu(),ee(HM)),Gse=VT(),kse=Pr(),{dirname:Vse}=require("path"),{getConnection:$se}=nt(),Yse=j(),Kse=D(),HR=new Map;async function Wse(e=!1){!bH&&Yse.get(Kse.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$se();try{bH&&await Gse()}catch(s){console.error(s)}let t=Fse();Hse(),t.isWorker=e,await qse(Vse(kse.getConfigFilePath()),t,"hdb",!0,HR),await xse(HR,t);let r=[];for(let[s]of HR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Wse,"loadRootComponents");NH.exports.loadRootComponents=Wse});var Ye=T((upe,yi)=>{"use strict";var{Worker:Qse,MessageChannel:zse,parentPort:fn,isMainThread:kR,threadId:Jse,workerData:Gn}=require("worker_threads"),{PACKAGE_ROOT:Xse}=D(),{join:CH,isAbsolute:jse,extname:Zse}=require("path"),{server:DH}=(sr(),ee(Li)),{watch:ene,readdir:tne}=require("fs/promises"),{totalmem:yH}=require("os"),pl=D(),LH=j(),kn=G(),{randomBytes:rne}=require("crypto"),{_assignPackageExport:sne}=require("../index"),nne=D(),IH=1024*1024,Ni=[],Es=[],ine=50,VR=1e4,one="restart",UH="request_thread_info",MH="resource_report",PH="thread_info",vH="added-port",ane="ack",xR;sne("threads",Es);yi.exports={startWorker:qR,restartWorkers:YR,shutdownWorkers:dne,workers:Ni,setMonitorListener:gne,onMessageFromWorkers:fne,onMessageByType:GH,broadcast:hne,broadcastWithAcknowledgement:pne,setChildListenerByType:_ne,getWorkerIndex:BH,getWorkerCount:HH,getTicketKeys:xH,setMainIsWorker:une,setTerminateTimeout:cne,restartNumber:Gn?.restartNumber||1};Es.onMessageByType=GH;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var $R;function cne(e){VR=e}a(cne,"setTerminateTimeout");function BH(){return Gn?Gn.workerIndex:$R?0:void 0}a(BH,"getWorkerIndex");function HH(){return Gn?Gn.workerCount:$R?1:void 0}a(HH,"getWorkerCount");function une(e){$R=e}a(une,"setMainIsWorker");var mE;function xH(){return mE||(mE=kR?rne(48):Gn.ticketKeys,mE)}a(xH,"getTicketKeys");Object.defineProperty(DH,"workerIndex",{get(){return BH()}});Object.defineProperty(DH,"workerCount",{get(){return HH()}});var qH={[UH](e,t){Sne(t)},[MH](e,t){Tne(t,e)}};function qR(e,t={}){let r=process.constrainedMemory?.()||yH();r=Math.min(r,yH(),2e4*IH);let s=LH.get(pl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/IH/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new zse;_.existingPort=u,i.push(_),o.push(_.port2)}Zse(e)||(e+=".js");let c=new Qse(jse(e)?e:CH(Xse,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},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:yi.exports.restartNumber,ticketKeys:xH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:vH,port:u,threadId:c.threadId},[u]);return SE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qR(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ni.splice(Ni.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ine?(t.unexpectedRestarts=c.unexpectedRestarts+1,qR(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{qH[u.type]?.(u,c)}),Ni.push(c),Ane(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qR,"startWorker");var lne=[pl.THREAD_TYPES.HTTP];async function YR(e=null,t=2,r=!0){if(kR){if(r){let{loadRootComponents:o}=NR();await o()}yi.exports.restartNumber++,t<1&&(t=t*Ni.length);let s=[],n=[];for(let o of Ni.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:yi.exports.restartNumber,type:pl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),VR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===nne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Qd();r&&(e==="http"||!e)&&LH.get(pl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else fn.postMessage({type:one,workerType:e})}a(YR,"restartWorkers");function _ne(e,t){qH[e]=t}a(_ne,"setChildListenerByType");function dne(e){return YR(e,1/0,!1)}a(dne,"shutdownWorkers");var FH=[];function fne(e){FH.push(e)}a(fne,"onMessageFromWorkers");var FR=new Map;function GH(e,t){let r=FR.get(e);r||FR.set(e,r=[]),r.push(t)}a(GH,"onMessageByType");var Ene=10;async function hne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>Ene&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(hne,"broadcast");var pE=new Map,mne=1;function pne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=mne++,i=a(()=>{pE.delete(n),--r===0&&t(),s!==fn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,pE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of pE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(pne,"broadcastWithAcknowledgement");function Sne(e){e.postMessage({type:PH,workers:kH()})}a(Sne,"sendThreadInfo");function kH(){let e=Date.now();return Ni.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(kH,"getChildWorkerInfo");function Tne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tne,"recordResourceReport");var GR;function gne(e){GR=e}a(gne,"setMonitorListener");var Rne=1e3,wH=!1;function Ane(){wH||(wH=!0,setInterval(()=>{for(let e of Ni){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}GR&&GR()},Rne).unref())}a(Ane,"startMonitoring");var One=1e3;if(fn){SE(fn);for(let e=0,t=Gn.addPorts.length;e<t;e++){let r=Gn.addPorts[e];r.threadId=Gn.addThreadIds[e],SE(r)}setInterval(()=>{let e=process.memoryUsage();fn.postMessage({type:MH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},One).unref(),xR=a(()=>new Promise((e,t)=>{fn.on("message",r),fn.postMessage({type:UH});function r(s){s.type===PH&&(fn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else xR=kH;yi.exports.getThreadInfo=xR;function SE(e,t){Es.push(e),e.on("message",r=>{if(r.type===vH)r.port.threadId=r.threadId,SE(r.port);else if(r.type===ane){let s=pE.get(r.id);s&&s()}else{for(let n of FH)n(r,e);let s=FR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(SE,"addPort");if(kR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await tne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(CH(s,i.name));try{for await(let{filename:i}of ene(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await YR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");yi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else fn.on("message",async e=>{let{type:t}=e;t===pl.ITC_EVENT_TYPES.SHUTDOWN&&(yi.exports.restartNumber=e.restartNumber,fn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Jse),process.exit(0)},VR).unref())})});var Qw={};$e(Qw,{AUDIT_STORE_OPTIONS:()=>jH,createAuditEntry:()=>r_,openAuditStore:()=>AE,readAuditEntry:()=>Pt,setAuditRetention:()=>Nne,transactionKeyEncoder:()=>XH});function AE(e){let t=e.auditStore=e.openDB(QH.AUDIT_STORE_NAME,jH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=TE){clearTimeout(s),s=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()-KR})){if((_[0]&15)===zR){let l=Pt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=bne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,KR/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,RE.getWorkerIndex)()===(0,RE.getWorkerCount)()-1&&n(TE),t}function Nne(e,t=TE){KR=e,TE=t}function r_(e,t,r,s,n,i,o){let c=ZH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?ka.setFloat64(0,s):hs.set(kh),u=9),f(0),f(t),d(r),ka.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Va.writeKey)(E,hs,u);let p=u-h-1;p>127?p>16383?(XR.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),ka.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(ka.setUint16(u,E|32768),u+=2):E<1056964608?(ka.setUint32(u,E|3221225472),u+=4):(hs[u]=255,ka.setUint32(u+1,E),u+=5)}}function Pt(e){try{let t=e.dataView||(e.dataView=new JR(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:ZH[s&7],tableId:i,get recordId(){return WH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?WH(e,l,d):void 0},getValue(f,E,h){if(s&WR||s&QR&&!E)return f.decoder.decode(e.subarray(t.position));if(s&QR&&h)return jR(f.getEntry(this.recordId),h,f)}}}catch{return XR.error("Reading audit entry error",e),{}}}function WH(e,t,r){let s=e.subarray(t,r);return(0,Va.readKey)(s,0,r-t)}var Va,gE,QH,zH,RE,JH,XR,hs,ka,XH,jH,KR,bne,TE,WR,QR,VH,zR,$H,YH,KH,ZH,JR,Pi=Ae(()=>{Va=require("ordered-binary"),gE=v(j()),QH=v(mt()),zH=v(D()),RE=v(Ye()),JH=v(z());Tc();XR=v(G());OE();(0,gE.initSync)();hs=Buffer.alloc(1024),ka=new DataView(hs.buffer,hs.byteOffset,1024),XH={writeKey(e,t,r){return e===Sc?(t.set(Sc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Va.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,Va.readKey)(e,t,r)}},jH={encoding:"binary",keyEncoder:XH},KR=(0,JH.convertToMS)((0,gE.get)(zH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,bne=1e3,TE=1e4;a(AE,"openAuditStore");a(Nne,"setAuditRetention");WR=16,QR=32,VH=1,zR=2,$H=3,YH=4,KH=5,ZH={put:VH|WR,[VH]:"put",delete:zR,[zR]:"delete",message:$H|WR,[$H]:"message",invalidate:YH,[YH]:"invalidate",patch:KH|QR,[KH]:"patch"};a(r_,"createAuditEntry");a(Pt,"readAuditEntry");JR=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(WH,"readKeySafely")});var ZR={};$e(ZR,{add:()=>bE,applyReverse:()=>ex,getRecordAtTime:()=>jR,rebuildUpdateBefore:()=>NE});function bE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function NE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,bE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function ex(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=yne[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=tx}}function jR(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Pt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":ex(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===tx&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.get(i),_=Pt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var yne,tx,OE=Ae(()=>{Pi();a(bE,"add");bE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};yne={add:bE};a(NE,"rebuildUpdateBefore");a(ex,"applyReverse");tx={};a(jR,"getRecordAtTime")});function Yr(e){return e[Ut]||(e[Ut]=Object.create(null))}function DE(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){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 ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(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 ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(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 ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Yr(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 ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Yr(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 ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Yr(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 ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Yr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Yr(this)[c]=l},"set")}_={get(){let l=this[Ut];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[ye]?.[c];return f.update(E)}return f}let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=rx(d,o);if(f)return l||(l=this[Ut]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Ut];return u?.[o]!==void 0?u[o]:this[ye]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Yr(this)[o]=c}),i("deleteProperty",function(o){Yr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ut],c;for(let _ in o){c||(c=Object.assign({},this[ye]));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[ye])),Object.assign(c,this)),c||this[ye]}),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 rx(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ye]=n}},DE(r,t)),new r(e)):new yE(e);case Array:let s=new wE(e.length);s[ye]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=rx(o,t?.elements)),s[n]=o}return s;default:return e}}function X_(e){let t=e[Ut],r;for(let n in t){r||(r=Object.assign({},e[ye]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=X_(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function Co(e,t=e[Ut]){let r;if(e[ye]&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Co(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[ye]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=ZR[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Co(n);r[s]=n}return r?Object.freeze(r):e[ye]||e}function IE(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[wo]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ye]===n){if(IE(i))return!0}else return!0}}else{let r=e[Ut];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ye]===i){if(IE(n))return!0}else return!0}else return!0}}return!1}var ms,Ut,yE,wo,wE,CE,j_=Ae(()=>{Ns();ms=v(Z());OE();Ut=Symbol("own-data");a(Yr,"getChanges");a(DE,"assignTrackedAccessors");a(rx,"trackObject");yE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};DE(yE,{});a(X_,"collapseData");a(Co,"deepFreeze");a(IE,"hasChanges");wo=Symbol.for("has-array-changes"),wE=class extends Array{static{a(this,"TrackedArray")}[wo];constructor(t){super(t)}splice(...t){return this[wo]=!0,super.splice(...t)}push(...t){return this[wo]=!0,super.push(...t)}pop(){return this[wo]=!0,super.pop()}unshift(...t){return this[wo]=!0,super.unshift(...t)}shift(){return this[wo]=!0,super.shift()}};wE.prototype.constructor=Array;CE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Sp={};$e(Sp,{CONTEXT:()=>Re,ID_PROPERTY:()=>De,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>ye,Resource:()=>qt,snake_case:()=>wne,transformForSelect:()=>UE});function wne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function sx(e,t){if(Sl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Sl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new tA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Sl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Kr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?o?(l=i,o=o[Re]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Re]||i):l=i:(l=n,c=l[De]??l[this.primaryKey]??null):i?o=i[Re]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.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=n.id??null,c==null&&(_=!0))}else c=n??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,Xe(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 LE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new LE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Wr(e,t){let r=new ox.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function eA(e,t,r){let s=e[ye];if(s){let n=e[Ut];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function UE(e,t){let r=t?.propertyResolvers,s=t[Re],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):eA(c,r,s)(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(eA(u,r,s));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(eA(u,r,s)),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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=UE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var nx,ix,ox,Re,De,ps,ye,Ine,qt,LE,Sl,tA,Ns=Ae(()=>{nx=require("crypto");dc();ix=require("../index"),ox=v(Z());j_();Xi();bf();Re=Symbol.for("context"),De=Symbol.for("primary-key"),ps=Symbol("is-collection"),ye=Symbol("stored-record"),Ine={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let s=r?.[Re];this[Re]=s!==void 0?s:r||null}static get=Kr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=UE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Kr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Wr(t,"put")},{hasContent:!0,type:"update"});static patch=Kr(function(t,r,s,n){return t.patch?t.patch(n,r):Wr(t,"patch")},{hasContent:!0,type:"update"});static delete=Kr(function(t,r,s,n){return t.delete?t.delete(r):Wr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,nx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Xe(s,()=>{let i=new this(n,s),o=i.update?i.update(r):Wr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Kr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Wr(t,"delete")},{hasContent:!1,type:"update"});static post=Kr(function(t,r,s,n){return t[De]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Kr(function(t,r,s,n){return t.connect?t.connect(n,r):Wr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Kr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Wr(t,"subscribe")},{type:"read"});static publish=Kr(function(t,r,s,n){return t[De]!=null&&t.update?.(),t.publish?t.publish(n,r):Wr(t,"publish")},{hasContent:!0,type:"create"});static search=Kr(function(t,r,s,n){let i=t.search?t.search(r):Wr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=UE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Kr(function(t,r,s,n){return t.search?t.search(n,r):Wr(t,"search")},{hasContent:!0,type:"read"});static copy=Kr(function(t,r,s,n){return t.copy?t.copy(n,r):Wr(t,"copy")},{type:"create"});static move=Kr(function(t,r,s,n){return t.move?t.move(n,r):Wr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[De],t,this[Re]);Wr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return Of(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&Ine[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:sx(t,this),isCollection:Sl}}let i=sx(t,this);return Sl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Re],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[De]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[De],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new bs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new bs}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[De]}getContext(){return this[Re]}};qt.prototype[Re]=null;(0,ix._assignPackageExport)("Resource",qt);a(wne,"snake_case");LE=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(sx,"pathToId");tA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Kr,"transactional");a(Wr,"missingMethod");a(eA,"selectFromObject");a(UE,"transformForSelect")});function cx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;$a||((0,ME.onMessageByType)(ax,l=>{ux(l.path)}),$a=Object.create(null));let o=$a[n]||($a[n]=[]);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=Sa(t);let u=new sA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function ux(e,t){if(!$a)return;let r=$a[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Pt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Sa(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>=n){(0,rA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,rA.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(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function lx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,ME.broadcast)({type:ax,path:n}),ux(n,!0)})}}var rA,ME,ax,$a,Lpe,sA,_x=Ae(()=>{rA=v(G()),ME=v(Ye());dc();Pu();Pi();ax="transaction",Lpe=Buffer.alloc(4096);a(cx,"addSubscription");sA=class extends bs{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(ux,"notifyFromTransactionData");a(lx,"listenToCommits")});var Bg={};$e(Bg,{coerceType:()=>PE,makeTable:()=>HE,setServerUtilities:()=>Hne,updateResource:()=>vE});function HE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,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=[]),lx(i,u);let S=Yh(i,s,u),R=0,I,w,B,K={},q=Promise.resolve(),P,Q,Y;for(let V of p)(V.assignCreatedTime||V.name==="__createdtime__")&&(P=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&(Q=V),V.expiresAt&&(Y=V),V.isPrimaryKey&&(K=V);let J,re=[],Ie=[],se=1,ut=2,de={},lt={},gs=864e5,bA,vl,Yn,NA=!1,eh,hq=i.getRange({start:!1,end:!1}).constructor,mq=10,pq=6;E&&wA();class Qe extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=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(U,M,x)=>{if(U?.source!==L)return L[b](M,x,U)}}else return(L,U,M)=>{let x=[];for(let W of y){if(L?.source===W)break;x.push(W[b](U,M,L))}return Promise.all(x)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1],O=a(b=>{if(A[b]&&(!A[b].reliesOnPrototype||A.prototype[b]))return(y,L,U)=>{if(!y?.source)return A[b](L,U,y)}},"getApplyToCanonicalSource");return de={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},lt={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")},(async()=>{let b=!1,y=a(async(L,U)=>{let M=L.value,x=L.table?st[c][L.table]:Qe;if(c===Gs.SYSTEM_SCHEMA_NAME&&(L.table===Gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),L.id===void 0&&(L.id=M[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,U,Ya);switch(L.type){case"put":return W._writeUpdate(M,!0,Ya);case"patch":return W._writeUpdate(M,!1,Ya);case"delete":return W._writeDelete(Ya);case"publish":return W._writePublish(M,Ya);case"invalidate":return W.invalidate(Ya);default:Ze.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let U=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Do.getWorkerIndex)()):(0,Do.getWorkerIndex)()===0,M=L&&U&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(M){let x;for await(let W of M)try{if(!(W.type==="transaction"?W.writes[0]:W)){Ze.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=Xe(W,()=>{if(W.type==="transaction"){let te=[];for(let ne of W.writes)try{te.push(y(ne,W))}catch(He){throw He.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(W),He}return Promise.all(te)}else if(W.type==="define_schema"){let te=this.attributes.slice(0),ne;for(let He of W.attributes)te.find(ie=>ie.name===He.name)||(te.push(He),ne=!0);ne&&(dt({table:n,database:c,attributes:te,origin:"cluster"}),Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return W.beginTxn?(x=W,y(W,W),new Promise(te=>{x.resolve=te})):y(W,W)});b&&(await le,Nl.signalUserChange(new yl.UserEventMsg(process.pid))),W.onCommit&&(le?.then?le.then(W.onCommit):W.onCommit())}catch(Se){Ze.error("error in subscription handler",Se)}}}catch(L){Ze.error(L)}})(),this}static getResource(m,g,N){let A=super.getResource(m,g,N);if(m!=null){Xa(m);try{if(A.hasOwnProperty(ye))return A;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 th(m,g,{transaction:y},O,L=>{if(L?vE(A,L):A[ye]=null,g.onlyIfCached&&g.noCacheStore){if(!A.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let U=rh(m,L,g,A);if(U)return b?.disregardReadTxn(),A[nA]=!0,oA(U,M=>(vE(A,M),A))}return A})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return A}ensureLoaded(){let m=rh(this[De],this[Qr],this[Re]);if(m)return this[nA]=!0,oA(m,g=>{this[Qr]=g,this[ye]=g.value,this[Ol]=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,gs=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");gs=gs||(d+f)/4,nh()}static enableAuditing(m=!0){E=m,m&&wA(),Qe.audit=m}static coerceId(m){return m===""?null:PE(m,K)}static async dropTable(){if(delete st[c][n],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));Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let g=Qe.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:n,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=Hl(m);if(N?.read){if(N.isSuperUser)return!0;let A=N.attribute_permissions,O=g?.select;if(A?.length>0||NA&&O){if(g||(g={}),O){let b=A?.length>0&&iA(A,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let U=Yn[L]?.definition?.tableClass;if(U){if(y.name||(y={name:y}),!U.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else g.select=A.filter(b=>b.read&&!Yn[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Hl(m);if(N?.update){let A=N.attribute_permissions;if(A?.length>0){let O=iA(A,"update");for(let b in g)if(!O[b])return!1;for(let b of A){let y=b.attribute_name;!b.update&&!(y in g)&&(g[y]=this.getProperty(y))}}return!0}}allowCreate(m,g){if(this[ps]){let N=Hl(m);if(N?.insert){let A=N.attribute_permissions;if(A?.length>0){let O=iA(A,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Hl(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 A;return typeof m=="object"&&m&&(g?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[ye]={},this[Ut]=m):(A=this[Ut],A&&(m=Object.assign(A,m)),this[Ut]=A=m)),this._writeUpdate(this[Ut],g),this}addTo(m,g){if(typeof g=="number")this[Tl]===fx?this.set(m,(+this.getProperty(m)||0)+g):(this[Tl]||this.update(),this.set(m,new CE(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[De];Xa(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Re]?.nodeName,before:de.invalidate?.bind(this,g,N),beforeIntermediate:lt.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[Qr],O,gl,E,this[Re],0,"invalidate")}})}static evict(m,g,N){let A=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,Rl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Bl(m,g,null)}),E?S(m,null,O,N,Rl,null,null,0,null,!0):i.remove(m,N)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,Tx.operation(m,g)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,g,N){let A=this[Re],O=Nr(A),b=this[De];Xa(b);let y=this[Qr];this[Tl]=g?fx:Pne;let L={key:b,store:i,entry:y,nodeName:A?.nodeName,validate:U=>{m||(m=this[Ut]),g||m&&IE(m)?(this.validate(m,!g),A?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(U):Q.type==="String"?new Date(U).toISOString():U),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(U):P.type==="String"?new Date(U).toISOString():U),m=Co(m)))):O.removeWrite(L)},before:g?de.put?()=>de.put(A,b,m):null:de.patch?()=>de.patch(A,b,m):de.put?()=>de.put(A,b,Co(this)):null,beforeIntermediate:g?lt.put?()=>lt.put(A,b,m):null:lt.patch?()=>lt.patch(A,b,m):lt.put?()=>lt.put(A,b,Co(this)):null,commit:(U,M,x)=>{x&&(A&&M?.version>(A.lastModified||0)&&(A.lastModified=M.version),this[Qr]=M,g||(this[ye]=M?.value??null)),this[Ut]=m,this[Ol]=U;let W=M?.value,Se=m;if(this[Tl]=0,M?.version>U)if(E){let He=M.localTime,ie=M.version;for(;Se&&(He>U||ie>U&&He>0);){let _e=u.get(He),Ve=Pt(_e);if(ie=Ve.version,ie>U)if(Ve.type==="patch"){let Me=Ve.getValue(i);Se=NE(Se,Me)}else(Ve.type==="put"||Ve.type==="delete")&&(Se=null);He=Ve.previousLocalTime}}else g?Se=null:Se=NE(Se,W);let le=Co(this,Se);this[ye]=le;let te;g||(te=m),Bl(b,W,le);let ne=g?"put":"patch";S(b,le,M,U,0,E,A,A.expiresAt||(d?d+Date.now():0),ne,!1,te)}};O.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let g of this.search(m))(await Qe.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[De];Xa(N);let A=this[Re];return g.addWrite({key:N,store:i,resource:this,nodeName:A?.nodeName,before:de.delete?.bind(this,A,N),beforeIntermediate:lt.delete?.bind(this,A,N),commit:(O,b,y)=>{let L=b?.value;y&&(A&&b?.version>(A.lastModified||0)&&(A.lastModified=b.version),vE(this,b)),!(b?.version>O)&&(Bl(this[De],L),Ze.trace("Write delete entry",N,O),E||h?(S(N,null,this[Qr],O,0,E,this[Re],0,"delete"),E||nh()):i.remove(this[De]))}}),!0}search(m){let g=this[Re],N=Nr(g);if(!m)throw new Error("No query provided");let A=m.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(A=[{attribute:null,comparator:"prefix",value:this[De]}].concat(A));let O,b={};function y(oe,bt){let tt;switch(bt){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');tt=!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 "+bt)}let Mt=tt&&{},Rs;for(let Pe of oe){if(Pe.conditions){Pe.conditions=y(Pe.conditions,Pe.operator);continue}let rt=Pe[0]??Pe.attribute,As=rt==null?K:vn(p,rt);if(As){if(tt){let Ci=Oi(rt),ks=Mt[Ci];ks?(ks.push(Pe),Rs=!0):Mt[Ci]=[Pe]}As.type&&(Pe[1]===void 0?Pe.value=U(Pe.value,As):Pe[1]=U(Pe[1],As))}else if(rt!=null)throw(0,Ss.handleHDBError)(new Error,`${rt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return oe;if(Rs)for(let Pe in Mt){let rt=Mt[Pe],As=rt.length;if(As>1)for(let Ci=0;Ci<As;Ci++){let ks=rt[Ci];if(ks.comparator==="ge"||ks.comparator==="greater_than_equal")for(let Kn=0;Kn<As;Kn++){let Po=rt[Kn];(Po.comparator==="le"||Po.comparator==="less_than_equal")&&(ks.comparator="between",ks.value=[ks.value,Po.value],oe.splice(oe.indexOf(Po),1))}if(ks.comparator==="equals"||!ks.comparator){for(let Kn=0;Kn<As;Kn++)if(Kn!==Ci){let Po=rt[Kn];oe.splice(oe.indexOf(Po),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,bt){if(m.enforceExecutionOrder)return oe;for(let tt of oe)tt.conditions&&(tt.conditions=L(tt.conditions,tt.operator));return oe.length>1&&bt!=="or"?(0,Sx.sortBy)(oe,Sg(Qe)):oe}a(L,"orderConditions");function U(oe,bt){return Array.isArray(oe)?oe.map(tt=>PE(tt,bt)):PE(oe,bt)}a(U,"coerceTypedValues");let M=m.operator;(A.length>0||M)&&(A=y(A,M));let x=typeof m.sort=="object"&&m.sort,W;if(x&&M!=="or"){let oe=x.attribute;if(O=A.find(bt=>Oi(bt.attribute)===Oi(oe)),!O){if(!vn(p,oe))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);O={attribute:oe},A.push(O)}O.descending=!!x.descending}A=L(A,M),x&&(A[0]===O?x.next&&(W={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&A.splice(A.indexOf(O),1),W=x));function Se(oe,bt){let tt=oe[0];if(bt==="or"){let Mt=te(tt);for(let Pe=1;Pe<oe.length;Pe++){let rt=oe[Pe],As=te(rt);Mt=Mt.concat(As)}let Rs=new Set;return Mt.filter(Pe=>{let rt=Pe.key??Pe;return Rs.has(rt)?!1:(Rs.add(rt),!0)})}else{let Mt=te(tt),Rs=oe.slice(1).map(Pe=>Zu(Pe,Qe,g,b)).filter(Boolean);return Rs.length>0?yA(Mt,ne,g,Rs):Mt}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):ju(oe,N,oe.descending||le,Qe,m.allowFullScan,b)}a(te,"executeCondition");let ne=m.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:A,operator:M,postOrdering:W,selectApplied:!!ne};let He=N.useReadTxn(),ie=Se(A,M);(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,Ve=Qe.transformEntryForSelect(ne,g,b,_e,!0),Me=Qe.transformToOrderedSelect(ie,ne,W,g,Ve);return Me.onDone=()=>{Me.results=null,N.doneReadTxn()},Me.selectApplied=!0,Me}static transformToOrderedSelect(m,g,N,A,O){let b=new hq;if(N){m=yA(m,g,A,null);let y;b.iterate=function(){let U,M=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,W=N.dbOrderedAttribute,Se,le,te=!0;function ne(ie){let _e=ie.next&&ne(ie.next),Ve=ie.descending;return(Me,oe)=>{let bt=sh(Me,ie.attribute,A),tt=sh(oe,ie.attribute,A),Mt=Ve?(0,Lo.compareKeys)(tt,bt):(0,Lo.compareKeys)(bt,tt);return Mt===0?_e?.(Me,oe)||0:Mt}}a(ne,"createComparator");let He=ne(N);return{async next(){let ie;if(U)if(ie=U.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 M.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 Ve=sh(_e,W,A);if(te)te=!1,le=Ve;else if(Ve!==le){le=Ve,Se=_e;break}}y.push(_e)}while(!0);return N.isGrouped,y.sort(He),U=y[Symbol.iterator](),ie=U.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await O(ie.value)}},return(){b.onDone&&b.onDone(),M.return()},throw(){b.onDone&&b.onDone(),M.throw()}}};let L=a(U=>{if(typeof g=="object"&&Array.isArray(U.attribute))for(let M=0;M<g.length;M++){let x=g[M],W;if(x.name===U.attribute[0]){for(W=x.sort||(x.sort={});W.next;)W=W.next;W.attribute=U.attribute.slice(1),W.descending=U.descending}else x===U.attribute[0]&&(g[M]=W={name:x,sort:{attribute:U.attribute.slice(1),descending:U.descending}})}U.next&&L(U.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,A,O){if(m&&(m===t||m?.length===1&&m[0]===t)){let U=a(M=>M?.key??M,"transform");return m===t?U:m.asArray?M=>[U(M)]:M=>({[t]:U(M)})}let b;A&&w&&!m?.every(U=>{let M;return typeof U=="object"?M=U.name:M=U,r[M]||M===t})&&(b=!0);let y,L=a(U=>{let M;if(U){if(eh=U,M=U.value||U.deref?.(),!M&&(U.key===void 0||U.deref)){if(U=th(U.key??U,g,{transaction:Nr(g).getReadTxn(),lazy:m?.length<4},!1,x=>x),U?.then)return U.then(L);M=U?.value}if(b&&(U.metadataFlags&(gl|Rl)||U.expiresAt&&U.expiresAt<Date.now())){let x=rh(U.key??U,U,g);if(x?.then)return x.then(L)}}if(M==null)return O?Ka.SKIP:M;if(m&&!(m[0]==="*"&&m.length===1)){let x,W=a((le,te)=>{let ne;typeof le=="object"?ne=le.name:ne=le;let He=Yn?.[ne],ie;if(He){let _e=N?.[ne];if(_e)if(_e.fromRecord)ie=_e.fromRecord(M);else{let Me=Oi(U.key);ie=_e.get(Me),ie||(ie=[])}else ie=He(M,g,U);let Ve=a(Me=>{if(Me&&typeof Me=="object"){let oe=He.definition?.tableClass||Qe;y||(y={});let bt=y[ne]||(y[ne]=oe.transformEntryForSelect(ne===le?null:le.select||(Array.isArray(le)?le:null),g,_e,A));if(Array.isArray(Me)){let tt=[],Mt=oe.transformToOrderedSelect(Me,le.select,typeof le.sort=="object"&&le.sort,g,bt)[Symbol.asyncIterator](),Rs=a(rt=>{for(;!rt.done;){if(rt?.then)return rt.then(Rs);tt.push(rt.value),rt=Mt.next()}te(tt,ne)},"nextValue"),Pe=Rs(Mt.next());Pe&&(x||(x=[]),x.push(Pe));return}else if(Me=bt(Me),Me?.then){x||(x=[]),x.push(Me.then(tt=>te(tt,ne)));return}}te(Me,ne)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(Ve))):Ve(ie);return}else ie=M[ne],ie&&typeof ie=="object"&&ne!==le&&(ie=this.transformEntryForSelect(le.select||le,g,null)({value:ie}));te(ie,ne)},"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]=M:W(le,ne=>Se[te]=ne)});else{Se={};let le=m.forceNulls;for(let te of m)if(te==="*")for(let ne in M)Se[ne]=M[ne];else W(te,(ne,He)=>{ne===void 0&&le&&(ne=null),Se[He]=ne})}else throw new Ss.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>Se):Se}return M},"transform");return L}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||dt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=!m.rawEvents,N=cx(Qe,this[De]??null,function(y,L,U,M){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,U)}this.send({id:y,timestamp:U,value:x,version:L.version,type:L.type,beginTxn:M})}catch(x){Ze.error(x)}},m.startTime||0,this[ps]);this[ps]&&(N.includeDescendants=!0,m.onlyChildren&&(N.onlyChildren=!0)),m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let A=this[De],O=m.previousCount;O>1e3&&(O=1e3);let b=m.startTime;if(this[ps]){if(b){if(O)throw new Ss.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 U=Pt(L);if(U.tableId!==s)continue;let M=U.recordId;(A==null||mx(A,M))&&N.send({id:M,timestamp:y,...U}),N.startTime=y}}else if(O){let y=[];for(let{key:L,value:U}of u.getRange({start:"z",end:!1,reverse:!0}))try{let M=Pt(U);if(M.tableId!==s)continue;let x=M.recordId;if(A==null||mx(A,x)){let W=M.getValue(i,g,L);if(y.push({id:x,timestamp:L,value:W,version:M.version,type:M.type}),--O<=0)break}}catch(M){Ze.error("Error getting history entry",L,M)}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:U,localTime:M}of i.getRange({start:A??!1,end:A==null?void 0:[A,Lo.MAXIMUM_KEY],versions:!0}))L&&N.send({id:y,version:U,timestamp:M,value:L})}else{O&&!b&&(b=0);let y=this[Qr]?.localTime;if(y===$h&&(i.cache?.delete(A),this[Qr]=i.getEntry(A),Ze.warn("re-retrieved record",y,this[Qr]?.localTime),y=this[Qr]?.localTime),Ze.trace("Subscription from",b,"from",A,y),b<y){let L=[],U=y;do{let M=u.get(U);if(M){m.omitCurrent=!0;let x=Pt(M),W=x.getValue(i,g,U);L.push({id:A,value:W,timestamp:U,...x}),U=x.previousLocalTime}else break;O&&O--}while(U>b&&O!==0);for(let M=L.length;M>0;)N.send(L[--M]);N.startTime=y}!m.omitCurrent&&this.doesExist()&&N.send({id:A,version:this[Ol],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[ye]||this[Tl])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),A=this[De]||null;Xa(A);let O=this[Re];N.addWrite({key:A,store:i,entry:this[Qr],nodeName:O?.nodeName,validate:()=>{this.validate(m)},before:de.publish?.bind(this,O,A,m),beforeIntermediate:lt.publish?.bind(this,O,A,m),commit:(b,y,L)=>{y===void 0&&h&&!E&&nh(),S(A,y?.value??null,y,y?.version||b,0,!0,O,y?.expiresAt,"message",!1,m)}})}validate(m,g){let N,A=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 U=0,M=L.length;U<M;U++){let x=L[U],W=A(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,U=O.length;L<U;L++){let M=O[L],x=A(M,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=A(m[y.name],y,y.name);L&&(m[y.name]=L)}}if(N)throw new Ss.ClientError(N.join(". "))}getUpdatedTime(){return this[Ol]}wasLoadedFromSource(){return w?!!this[nA]:void 0}static async addAttributes(m){let g=p.slice(0);for(let N of m){if(!N.name)throw new Ss.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");g.push(N)}return dt({table:n,database:c,schemaDefined:_,attributes:g}),Qe.indexingOperation}static async removeAttributes(m){let g=p.filter(N=>!m.includes(N.name));return dt({table:n,database:c,schemaDefined:_,attributes:g}),Qe.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,N=5e3,A=1e3,O;g>N&&!m?.exactCount&&(O=A);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:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))ne!=null&&b++;let L=O*2,U=(b+y)/L,M=Math.pow((b-y+1)/O/2,2)+U*(1-U)/L,x=Math.max(Math.sqrt(M)*g,1),W=Math.round(U*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(){Yn=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(NA=!0,g.to)m.elements?.definition?(Yn[m.name]=m.resolve=(N,A,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?ju({attribute:g.to,value:b},Nr(A).getReadTxn(),!1,y).asArray:y.search([{attribute:g.to,value:b}],A).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 "${n}" must have an array type referencing a table as the elements`);else if(g.from){let N=m.definition||m.elements?.definition;N?(Yn[m.name]=m.resolve=(A,O,b)=>{let y=A[g.from];if(y!==void 0){if(m.elements){let L,U=y.map(M=>{let x=b?N.tableClass.primaryStore.getEntry(M,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(M,O);return x?.then&&(L=!0),x});return g.filterMissing?L?Promise.all(U).then(M=>M.filter(px)):U.filter(px):L?Promise.all(U):U}return b?N.tableClass.primaryStore.getEntry(y,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(y,O)}},m.set=(A,O)=>{if(Array.isArray(O)){let b=O.map(y=>y[De]||y[N.tableClass.primaryKey]);A[g.from]=b}else{let b=O[De]||O[N.tableClass.primaryKey];A[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}DE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:A}of u.getRange({start:0,end:m}))await Al(),Pt(A).tableId===s&&(g=u.remove(N));await g}static async*getHistory(m=0,g=1/0){for(let{key:N,value:A}of u.getRange({start:m,end:g})){await Al();let O=Pt(A);O.tableId===s&&(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 A=N.localTime;if(!A)throw new Error("The entry does not have a local audit time");let O=0;do{await Al();let b=u.get(A);if(b){let y=Pt(b);g.push({id:y.recordId,localTime:A,version:y.version,type:y.type,value:y.getValue(i,!0,A),user:y.user}),A=y.previousLocalTime}else break}while(O<1e3&&A);return g.reverse()}static cleanup(){J?.remove()}}Qe.updatedAttributes();let Sq=Qe.prototype;return Sq[Mne]=!0,d&&Qe.setTTLExpiration(d/1e3),Y&&Tq(),Qe;function Bl(V,m,g){let N;for(let A in r){let O=r[A],b=O.isIndexing,y=g?.[A],L=m?.[A];if(y===L&&!b)continue;N=!0;let U=O.indexNulls,M=(0,bl.getIndexedValues)(L,U);if(M){dx&&O.prefetch(M.map(x=>({key:x,value:V})),hx);for(let x=0,W=M.length;x<W;x++)O.remove(M[x],V)}if(M=(0,bl.getIndexedValues)(y,U),M){dx&&O.prefetch(M.map(x=>({key:x,value:V})),hx);for(let x=0,W=M.length;x<W;x++)O.put(M[x],V)}}return N}a(Bl,"updateIndices");function Xa(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>Ex)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)return!0;break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,Lo.writeKey)(V,vne,0)>Ex)throw new Error("Primary key size is too large: "+V.length);return!0}a(Xa,"checkValidId");function th(V,m,g,N,A){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return A(null,V);let b=i.getEntry(V,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),A(b,V)},"whenPrefetched");return N?O():se>0?(se--,O()):new Promise((b,y)=>{se===0?(se--,i.prefetch([V],()=>{L(),U()})):(re.push(V),Ie.push(U),re.length>pq&&(se--,L()));function L(){if(re.length>0){let M=Ie;i.prefetch(re,()=>{se===-1?L():se++;for(let x of M)x()}),re=[],Ie=[],ut>2&&ut--}else se=ut,ut<mq&&ut++}a(L,"prefetch");function U(){try{b(O())}catch(M){y(M)}}a(U,"load")})}a(th,"loadLocalRecord");function Hl(V){if(!V?.role)return;let m=V.role.permission;if(m.super_user)return Bne;let g=m[c],N,A=g?.tables;if(A)return A[n];if(c==="data"&&(N=m[n])&&!N.tables)return N}a(Hl,"getTablePermissions");function rh(V,m,g,N){if(w){let A;if(g.noCache?A=!0:(m?(!m.value||m.metadataFlags&(gl|Rl)||m.expiresAt&&m.expiresAt<Date.now())&&(A=!0):A=!0,ss(!A,"cache-hit",n)),A){let O=IA(V,m,g).then(b=>(b?.value?.[ye]&&Ze.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,V)){if(O.catch(b=>Ze.warn(b)),g?.onlyIfCached&&!N.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return O}}}a(rh,"ensureLoadedFromSource");function Nr(V){let m=V?.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 Ji,m.lmdbDb=i,m;m=g}while(!0)}else return new z_}a(Nr,"txnForContext");function sh(V,m,g){if(!V)return;eh=V;let N=V.value||V.deref?.()||(eh=i.getEntry(V.key))?.value;if(typeof m=="object"){let O=Yn,b=N;for(let y=0,L=m.length;y<L;y++){let U=m[y],M=O?.[U];b=M&&b?M(b,g,!0)?.value:b?.[U],O=M?.definition?.tableClass?.propertyResolvers}return b}let A=Yn[m];return A?A(N,g):N[m]}a(sh,"getAttributeValue");function yA(V,m,g,N){let A=Nr(g).getReadTxn(),O=N?.length,b={transaction:A,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function y(L,U){let M=L?.value;if(!M)return Ka.SKIP;for(let x=0;x<O;x++)if(!N[x](M,L))return Ka.SKIP;return U!==void 0&&(L.key=U),L}if(a(y,"processEntry"),O>0||!V.hasEntries){let L=V.map(U=>typeof U=="object"&&U.key!==void 0?O>0?y(U):U:U==null?Ka.SKIP:th(U,g,b,!1,y));return Array.isArray(V)&&(L=L.filter(U=>U!==Ka.SKIP)),L.hasEntries=!0,L}return V}a(yA,"transformToEntries");async function IA(V,m,g){let N=m?.metadataFlags,A=m?.version,O,b;if(!i.attemptLock(V,A,()=>{clearTimeout(b);let M=i.getEntry(V);!M||!M.value||M.metadataFlags&(gl|Rl)?O(IA(V,i.getEntry(V),g)):O(M)}))return new Promise(M=>{O=M,b=setTimeout(()=>{i.unlock(V,A)},Une)});let y=m?.value,L={requestContext:g,replacingRecord:y,replacingVersion:A,source:null,resourceCache:g?.resourceCache},U=g?.responseHeaders;return new Promise((M,x)=>{let W;oA(Xe(L,async Se=>{let le=performance.now(),te,ne,He;try{for(let Me of Qe.sources)if(Me.get&&(!Me.get.reliesOnPrototype||Me.prototype.get)&&(L.source=Me,te=await Me.get(V,L),te))break;He=N≷let _e=L.lastModified||He&&A;ne=He||_e>A||!y,_e||(_e=(0,bl.getNextMonotonicTime)());let Ve=performance.now()-le;if(qr(Ve,"cache-resolution",n),U&&U.append("Server-Timing",`cache-resolve;dur=${Ve.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]!==V&&(te[t]=V)}W=!0,M({version:_e,value:te})}catch(_e){_e.message+=` while resolving record ${V} for ${n}`,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))?(M({version:A,value:y}),Ze.trace(_e.message,"(returned stale record)")):x(_e),L.transaction.abort();return}if(g?.noCacheStore){L.transaction.abort();return}Nr(L).addWrite({key:V,store:i,entry:m,nodeName:"source",commit:(_e,Ve)=>{if(Ve?.version!==A)return;let Me=Bl(V,y,te);te?(lt.put?.(L,V,te),S(V,te,Ve,_e,0,E&&ne||null,L,L.expiresAt,"put",!!He)):(lt.delete?.(L,V),E||h?S(V,null,Ve,_e,0,E&&ne||null,L,0,"delete",!!He):i.remove(V,A))}})}),()=>{i.unlock(V,A)},Se=>{i.unlock(V,A),W&&Ze.error("Error committing cache update",Se)})})}a(IA,"getFromSource");function nh(){if(gs!==bA&&(bA=gs,(0,Do.getWorkerIndex)()===(0,Do.getWorkerCount)()-1)){if(vl&&clearTimeout(vl),!gs)return;let V=new Date;V.setMonth(0),V.setDate(1),V.setHours(0),V.setMinutes(0),V.setSeconds(0);let m=Math.ceil((Date.now()-V.getTime())/gs)*gs+V.getTime(),g=a(N=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(N)}ms`),vl=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(N+gs,Date.now())),i.rootStore.status!=="open"){clearTimeout(vl);return}let A=50,O=new Array(A),b=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:L,value:U,version:M,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let W;U===null&&!E&&M+Lne<Date.now()?W=i.remove(L,M):x&&x+f<Date.now()&&(W=Qe.evict(L,U,M),y++),W&&(await O[b],O[b]=W.catch(Se=>{Ze.error("Cleanup error",Se)}),++b>=A&&(b=0)),await Al()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(nh,"scheduleCleanup");function wA(){J=u?.addDeleteRemovalCallback(s,V=>{let m=i.getEntry(V);m?.value===null&&i.remove(V,m.version)})}a(wA,"addDeleteRemoval");function Tq(){(0,Do.getWorkerIndex)()===0&&setInterval(async()=>{try{let V=Y.name,m=r[V];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?.[V]<Date.now()&&Qe.evict(g,N.value,N.version),await Al()}}catch(V){Ze.error("Error in evicting old records",V)}},Dne).unref()}a(Tq,"runRecordExpirationEviction")}function iA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function hx(){}function Hne(e){Tx=e}function PE(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,BE.autoCast)(e):e}function mx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function oA(e,t,r){return e?.then?e.then(t,r):t(e)}function vE(e,t){e[Qr]=t,e[ye]=t?.value??null,e[Ol]=t?.version}function px(e){return e!=null}var Gs,Ka,bl,Sx,Il,Ss,Nl,yl,Ze,Lo,Do,BE,Cne,Tx,Dne,Lne,dx,Une,Ol,Mne,Qr,Tl,fx,Pne,nA,Ya,gl,Rl,vne,Ex,Bne,Kpe,xne,Al,xf=Ae(()=>{Gs=v(D()),Ka=require("lmdb"),bl=v(wr()),Sx=require("lodash");Ns();qp();Il=v(j());_x();Ss=v(Z()),Nl=v(An()),yl=v(Ls());ge();bf();Ze=v(G());j_();Xi();Lo=require("ordered-binary"),Do=v(Ye());Pi();BE=v(z());Tc();yn();OE();Cne=new Uint8Array(9);Cne[8]=192;Dne=6e4,Lne=864e5;Il.initSync();dx=Il.get(Gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Une=1e4,Ol=Symbol.for("version"),Mne=Symbol.for("incremental-update"),Qr=Symbol("entry"),Tl=Symbol("is-saving"),fx=1,Pne=2,nA=Symbol("loaded-from-source"),Ya={isNotification:!0,ensureLoaded:!1},gl=1,Rl=8,vne=Buffer.allocUnsafeSlow(8192),Ex=1978,Bne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Kpe=(0,BE.convertToMS)(Il.get(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(HE,"makeTable");a(iA,"attributesAsObject");a(hx,"noop");a(Hne,"setServerUtilities");xne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(PE,"coerceType");a(mx,"isDescendantId");Al=a(()=>new Promise(setImmediate),"rest");a(oA,"when");a(vE,"updateResource");a(px,"exists")});var xe={};$e(xe,{database:()=>Qc,databases:()=>st,dropDatabase:()=>$p,dropTableMeta:()=>$ne,getDatabases:()=>Ms,getTables:()=>qne,onUpdatedTable:()=>SR,readMetaDb:()=>wl,resetDatabases:()=>Fne,table:()=>dt,tables:()=>Cr});function qne(){return kE||Ms(),Cr||{}}function Ms(){if(kE)return st;kE=!0,za=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,et.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),t=(0,Zt.get)(Jr.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)(Jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,zr.existsSync)(e)?e:(0,et.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,zr.existsSync)(e))for(let r of(0,zr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&wl((0,et.join)(e,r.name),null,s)}if((0,zr.existsSync)((0,Qa.getBaseSchemaPath)())){for(let r of(0,zr.readdirSync)((0,Qa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Qa.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Qa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,zr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);wl((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,zr.existsSync)(n))for(let o of(0,zr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&wl((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,zr.existsSync)(u)&&wl(u,o,r,null,!0)}}for(let r in st){let s=za.get(r);if(s){let n=st[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete st[r],r==="data"){for(let n in Cr)delete Cr[n];delete Cr[VE]}}return za=null,st}}function Fne(){kE=!1;for(let[,e]of Ii)e.needsDeletion=!0;Ms();for(let[e,t]of Ii)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ii.delete(e));return st}function wl(e,t,r=uA,s,n){let i=new aA.default(e,!1);try{let o=Ii.get(e);o?o.needsDeletion=!1:(o=(0,qE.open)(i),Ii.set(e,o));let c=new Uo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(xE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,zr.existsSync)(s)&&(i.path=s,_=(0,qE.open)(i),_.isLegacy=!0):_=AE(o));let l=Ox(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 R=f.get(p);R||f.set(p,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.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 J of p)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],I={},w=[],B,K,q=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,Q=S.expiration,Y=S.eviction;if(R)I=R.indices,w=R.attributes,R.schemaVersion++;else{B=S.tableId,B?B>=(u.get(Wa)||0)&&u.putSync(Wa,B+1):(S.tableId=B=u.get(Wa),B||(B=1),u.putSync(Wa,B+1),u.putSync(S.key,S));let J=new Uo.default(!S.is_hash_attribute,S.is_hash_attribute);K=s_(o.openDB(S.key,J)),K.rootStore=o,K.tableId=B}for(let J of p){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!I[J.name]){let Ie=new Uo.default(!J.is_hash_attribute,J.is_hash_attribute);I[J.name]=o.openDB(J.key,Ie),I[J.name].indexNulls=J.indexNulls}let re=w.find(Ie=>Ie.name===J.name);re?w.splice(w.indexOf(re),1,J):w.push(J)}}catch(re){Ts.error("Error trying to update attribute",J,w,I,re)}}if(!R){R=bx(l,E,HE({primaryStore:K,auditStore:_,audit:q,expirationMS:Q&&Q*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let J of lA)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Ox(e){let t=st[e];if(t||(e==="data"?t=st[e]=Cr:e==="system"?Object.defineProperty(st,"system",{value:t=Object.create(null),configurable:!0}):t=st[e]=Object.create(null)),za&&!za.has(e)){let r=new Set;t[VE]=r,za.set(e,r)}return t}function bx(e,t,r){return e[t]=r,r}function Qc({database:e,table:t}){e||(e=uA),Ms();let r=Ox(e),s=(0,et.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),n=(0,Zt.get)(Jr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(Jr.CONFIG_PARAMS.STORAGE_PATH)||((0,zr.existsSync)(s)?s:(0,et.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Ii.get(o);if(!c){let u=new aA.default(o,!1);c=(0,qE.open)(u),Ii.set(o,c)}return c}async function $p(e){if(!st[e])throw new Error("Schema does not exist");let t=st[e];for(let r in t){let n=t[r].primaryStore.rootStore;Ii.delete(n.path),n.status==="open"&&(await n.close(),await gx.remove(n.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[VE]}delete st[e]}function dt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=uA);let l=Qc({database:t,table:e}),d=st[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 R=new Uo.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=AE(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)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Ts.trace(`${e} table loading, opening primary store`);let Q=new Uo.default(!1,!0),Y=e+"/",J=s_(l.openDB(Y,Q));J.rootStore=l,S=l.dbisDb=l.openDB(xE.INTERNAL_DBIS_NAME,R),J.tableId=S.get(Wa),J.tableId||(J.tableId=1),S.putSync(Wa,J.tableId+1),h.tableId=J.tableId,f=bx(d,e,HE({primaryStore:J,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,q(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(xE.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let B=[];for(let{key:P,value:Q}of S.getRange({start:!0})){let[Y,J]=P.toString().split("/");if(J===""&&(J=Q.name),J){if(Y!==e)continue}else J=Y;if(!i.find(Ie=>Ie.name===J)?.indexed&&Q.indexed&&!Q.isPrimaryKey){q(),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)||(+s||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),s&&(re.eviction=+s),I=!0,q(),S.put(Q,re)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let J=!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 Uo.default(!0,!1),Ie=l.openDB(Q,re);(J||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,q(),Y=S.get(Q),(J||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.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 J&&(I=!0,q(),S.put(Q,P))}}finally{w&&w()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Ts.trace(`${e} table loading, running index`),K.length>0||B.length>0?f.indexingOperation=Vne(f,K,B):I&&FE.signalSchemaChange(new GE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of lA)P(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),f;function q(){w||l.transactionSync(()=>({then(P){w=P}}))}a(q,"startTxn")}async function Vne(e,t,r){try{let s=e.schemaVersion;await FE.signalSchemaChange(new GE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,Rx.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Cl.workerData&&Cl.workerData.restartNumber!==Ax.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Gne?await n:u>kne&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await FE.signalSchemaChange(new GE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function $ne({table:e,database:t}){let r=Qc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function SR(e){lA.push(e)}var Zt,xE,qE,et,zr,Qa,Uo,aA,Jr,gx,cA,Rx,FE,GE,Cl,Ts,Ax,uA,VE,Cr,st,Wa,lA,kE,Ii,za,Gne,kne,ge=Ae(()=>{Zt=v(j()),xE=v(mt()),qE=require("lmdb"),et=require("path"),zr=require("fs"),Qa=v(ze());xf();Uo=v(n_()),aA=v(o_()),Jr=v(D()),gx=v(require("fs-extra")),cA=require("../index"),Rx=v(wr()),FE=v(An()),GE=v(Ls()),Cl=require("worker_threads"),Ts=v(G()),Ax=v(Ye());Pi();Tc();uA="data",VE=Symbol("defined-tables");(0,Zt.initSync)();Cr=Object.create(null),st=Object.create(null);(0,cA._assignPackageExport)("databases",st);(0,cA._assignPackageExport)("tables",Cr);Wa=Symbol.for("next-table-id"),lA=[],Ii=new Map;a(qne,"getTables");a(Ms,"getDatabases");a(Fne,"resetDatabases");a(wl,"readMetaDb");a(Ox,"ensureDB");a(bx,"setTable");a(Qc,"database");a($p,"dropDatabase");a(dt,"table");Gne=1e3,kne=10;a(Vne,"runIndexing");a($ne,"dropTableMeta");a(SR,"onUpdatedTable")});var z=T((tSe,xx)=>{"use strict";var wi=require("path"),Cx=require("fs-extra"),br=G(),Nx=require("fs-extra"),$E=require("os"),Yne=require("net"),Kne=require("recursive-iterator"),ct=D(),Wne=aO(),yx=require("papaparse"),YE=require("moment"),{inspect:Qne}=require("util"),Ix=require("is-number"),eSe=require("lodash"),zne=require("minimist"),Jne=require("https"),Xne=require("http"),{hdb_errors:KE}=Z(),jne=/^((\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)))$/,Dx=require("util").promisify(setTimeout),Zne=100,eie=5,tie="",rie=4,wx={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};xx.exports={isEmpty:Xr,isEmptyOrZeroLength:En,arrayHasEmptyValues:iie,arrayHasEmptyOrZeroLengthValues:oie,buildFolderPath:aie,isBoolean:Lx,errorizeMessage:sie,stripFileExtension:uie,autoCast:lie,autoCastJSON:Ux,autoCastJSONDeep:dA,removeDir:_ie,compareVersions:die,isCompatibleDataVersion:fie,escapeRawValue:Eie,unescapeValue:hie,stringifyProps:mie,timeoutPromise:Sie,isClusterOperation:gie,getClusterUser:Aie,checkGlobalSchemaTable:Rie,getHomeDir:Px,getPropsFilePath:pie,promisifyPapaParse:Oie,removeBOM:vx,createEventPromise:bie,checkProcessRunning:Nie,checkSchemaTableExist:yie,checkSchemaExists:Bx,checkTableExists:Hx,getStartOfTomorrowInSeconds:Iie,getLimitKey:wie,isObject:cie,isNotEmptyAndHasValue:nie,autoCasterIsNumberCheck:Mx,backtickASTSchemaItems:Cie,isPortTaken:Tie,createForkArgs:Die,autoCastBoolean:Lie,async_set_timeout:Dx,getTableHashAttribute:Uie,doesSchemaExist:Mie,doesTableExist:Pie,stringifyObj:vie,ms_to_time:Bie,changeExtension:Hie,getEnvCliRootPath:fA,noBootFile:xie,httpRequest:qie,transformReq:Fie,convertToMS:Gie,PACKAGE_ROOT:ct.PACKAGE_ROOT};function sie(e){return e instanceof Error?e:new Error(e)}a(sie,"errorizeMessage");function Xr(e){return e==null}a(Xr,"isEmpty");function nie(e){return!Xr(e)&&(e||e===0||e===""||Lx(e))}a(nie,"isNotEmptyAndHasValue");function En(e){return Xr(e)||e.length===0||e.size===0}a(En,"isEmptyOrZeroLength");function iie(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(iie,"arrayHasEmptyValues");function oie(e){if(En(e))return!0;for(let t=0;t<e.length;t++)if(En(e[t]))return!0;return!1}a(oie,"arrayHasEmptyOrZeroLengthValues");function aie(...e){try{return e.join(wi.sep)}catch{console.error(e)}}a(aie,"buildFolderPath");function Lx(e){return Xr(e)?!1:e===!0||e===!1}a(Lx,"isBoolean");function cie(e){return Xr(e)?!1:typeof e=="object"}a(cie,"isObject");function uie(e){return En(e)?tie:e.slice(0,-rie)}a(uie,"stripFileExtension");function lie(e){return Xr(e)||e===""||typeof e!="string"?e:wx[e]!==void 0?wx[e]:Mx(e)===!0?Number(e):jne.test(e)?new Date(e):e}a(lie,"autoCast");function Ux(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ux,"autoCastJSON");function dA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=dA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=dA(r);s!==r&&(e[t]=s)}return e}else return Ux(e)}a(dA,"autoCastJSONDeep");function Mx(e){if(e.startsWith("0.")&&Ix(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ix(e))}a(Mx,"autoCasterIsNumberCheck");async function _ie(e){if(En(e))throw new Error(`Directory path: ${e} does not exist`);try{await Nx.emptyDir(e),await Nx.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(_ie,"removeDir");function die(e,t){if(En(e)){br.info("Invalid current version sent as parameter.");return}if(En(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(die,"compareVersions");function fie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(fie,"isCompatibleDataVersion");function Eie(e){if(Xr(e))return e;let t=String(e);return t==="."?ct.UNICODE_PERIOD:t===".."?ct.UNICODE_PERIOD+ct.UNICODE_PERIOD:t.replace(ct.FORWARD_SLASH_REGEX,ct.UNICODE_FORWARD_SLASH)}a(Eie,"escapeRawValue");function hie(e){if(Xr(e))return e;let t=String(e);return t===ct.UNICODE_PERIOD?".":t===ct.UNICODE_PERIOD+ct.UNICODE_PERIOD?"..":String(e).replace(ct.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(hie,"unescapeValue");function mie(e,t){if(Xr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$E.EOL}!En(s)&&s[0]===";"?r+=" "+s+n+$E.EOL:En(s)||(r+=s+"="+n+$E.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(mie,"stringifyProps");function Px(){let e;try{e=$E.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Px,"getHomeDir");function pie(){let e=wi.join(Px(),ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return Cx.existsSync(e)||(e=wi.join(__dirname,"../","hdb_boot_properties.file")),e}a(pie,"getPropsFilePath");function Sie(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Sie,"timeoutPromise");async function Tie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Yne.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Tie,"isPortTaken");function gie(e){try{return ct.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(gie,"isClusterOperation");function Rie(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return KE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return KE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Rie,"checkGlobalSchemaTable");function Aie(e,t){if(Xr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Xr(e)||En(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Aie,"getClusterUser");function Oie(){yx.parsePromise=function(e,t,r){return new Promise(function(s,n){yx.parse(e,{header:!0,transformHeader:vx,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Oie,"promisifyPapaParse");function vx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(vx,"removeBOM");function bie(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Qne(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(bie,"createEventPromise");async function Nie(e){let t=!0,r=0;do await Dx(Zne*r++),(await Wne.findPs(e)).length>0&&(t=!1);while(t&&r<eie);if(t)throw new Error(`process ${e} was not started`)}a(Nie,"checkProcessRunning");function yie(e,t){let r=Bx(e);if(r)return r;let s=Hx(e,t);if(s)return s}a(yie,"checkSchemaTableExist");function Bx(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return KE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Bx,"checkSchemaExists");function Hx(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return KE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hx,"checkTableExists");function Iie(){let e=YE().utc().add(1,ct.MOMENT_DAYS_TAG).startOf(ct.MOMENT_DAYS_TAG).unix(),t=YE().utc().unix();return e-t}a(Iie,"getStartOfTomorrowInSeconds");function wie(){return YE().utc().format("DD-MM-YYYY")}a(wie,"getLimitKey");function Cie(e){try{let t=new Kne(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){br.error("Got an error back ticking items."),br.error(t)}}a(Cie,"backtickASTSchemaItems");function Die(e){return[e]}a(Die,"createForkArgs");function Lie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Lie,"autoCastBoolean");function Uie(e,t){let{getDatabases:r}=(ge(),ee(xe)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Uie,"getTableHashAttribute");function Mie(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(Mie,"doesSchemaExist");function Pie(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(Pie,"doesTableExist");function vie(e){try{return JSON.stringify(e)}catch{return e}}a(vie,"stringifyObj");function Bie(e){let t=YE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Bie,"ms_to_time");function Hie(e,t){let r=wi.basename(e,wi.extname(e));return wi.join(wi.dirname(e),r+t)}a(Hie,"changeExtension");function fA(){if(process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=zne(process.argv);if(e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(fA,"getEnvCliRootPath");var _A;function xie(){if(_A)return _A;let e=fA();fA()&&Cx.pathExistsSync(wi.join(e,ct.HDB_CONFIG_FILE))&&(_A=!0)}a(xie,"noBootFile");function qie(e,t){let r;return e.protocol==="http:"?r=Xne:r=Jne,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(qie,"httpRequest");function Fie(e){if(!e.schema&&!e.database){e.schema=ct.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Fie,"transformReq");function Gie(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(Gie,"convertToMS")});var j=T((sSe,kx)=>{"use strict";var EA=require("fs-extra"),Mo=require("path"),qx=require("os"),kie=require("properties-reader"),Ll=G(),Dl=z(),ae=D(),WE=Pr(),Vie="Error initializing environment manager",QE="BOOT_PROPS_FILE_PATH",Fx=!1,$ie={[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},Vn={};kx.exports={BOOT_PROPS_FILE_PATH:QE,getHdbBasePath:Yie,setHdbBasePath:Kie,get:Gx,initSync:Qie,setProperty:Le,initTestEnvironment:zie};function Yie(){return Vn[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Yie,"getHdbBasePath");function Kie(e){Vn[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Kie,"setHdbBasePath");function Gx(e){let t=WE.getConfigValue(e);return t===void 0?Vn[e]:t}a(Gx,"get");function Le(e,t){$ie[e]&&(Vn[e]=t),WE.updateConfigObject(e,t)}a(Le,"setProperty");function Wie(){let e;try{e=Dl.getPropsFilePath(),EA.accessSync(e,EA.constants.F_OK|EA.constants.R_OK),Fx=!0;let t=kie(e);return Vn[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[QE]=e,!0}catch{return Ll.trace(`Environment manager found no properties file at ${e}`),!1}}a(Wie,"doesPropFileExist");function Qie(e=!1){try{(Fx||Wie()||Dl.noBootFile())&&(WE.initConfig(e),Vn[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=WE.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ll.error(Vie),Ll.error(t),console.error(t),process.exit(1)}}a(Qie,"initSync");function zie(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Mo.join(__dirname,"../../","unitTests");Vn[QE]=Mo.join(u,"hdb_boot_properties.file"),Le(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mo.join(u,"settings.test")),Le(ae.HDB_SETTINGS_NAMES.INSTALL_USER,qx.userInfo()?qx.userInfo().username:void 0),Le(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Le(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mo.join(u,"envDir","log")),Le(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Le(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Le(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Le(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mo.join(u,"envDir")),Le(ae.CONFIG_PARAMS.STORAGE_PATH,Mo.join(u,"envDir")),n&&(Le(ae.CONFIG_PARAMS.HTTP_SECUREPORT,Gx(ae.CONFIG_PARAMS.HTTP_PORT)),Le(ae.CONFIG_PARAMS.HTTP_PORT,null)),Le(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Le(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Le(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Dl.isEmpty(i)?!1:i),Le(ae.CONFIG_PARAMS.HTTP_CORS,Dl.isEmpty(i)?!1:i),Le(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Le(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Le(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Le(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Le(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Le(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Dl.isEmpty(c)?!1:c),o&&(Le("CORS_ACCESSLIST",o),Le(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Le(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Le(ae.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Le(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Le(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Le(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Le(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${QE}. Please check your boot props and settings files`;Ll.fatal(r),Ll.error(t)}}a(zie,"initTestEnvironment")});var Wx=T((iSe,Kx)=>{"use strict";var Yx=require("joi"),{string:Ul,boolean:Vx,array:Jie}=Yx.types(),$x=D(),Xie=Je();Kx.exports=jie;function jie(e){let t=Yx.object({operation:Ul.valid($x.OPERATIONS_ENUM.ADD_NODE,$x.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Ul.required(),subscriptions:Jie.items({schema:Ul.required(),table:Ul.optional(),hash_attribute:Ul.optional(),subscribe:Vx.required(),publish:Vx.required()}).min(1).required()});return Xie.validateBySchema(e,t)}a(jie,"updateRemoteSourceValidator")});var Ml=T((aSe,Qx)=>{"use strict";var hA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};Qx.exports=hA});var Zx=T((uSe,jx)=>{"use strict";var Zie=Wx(),$n=G(),mA=qe(),zx=D(),pA=os(),SA=nt(),Jx=uu(),eoe=K_(),{Node:toe,NodeSubscription:Xx}=di(),TA=Ml(),gA=z(),roe=j(),{cloneDeep:soe}=require("lodash"),{broadcast:noe}=Ye();jx.exports=ioe;async function ioe(e){try{let t=Zie(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new TA(mA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=soe(await pA.getNodeRecord(s)),c=!gA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!gA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Jx.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!gA.doesTableExist(f,E)){let h=new eoe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Jx.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await SA.createLocalTableStream(f,E)}if(f===zx.SYSTEM_SCHEMA_NAME&&await SA.createLocalTableStream(f,E),await SA.updateWorkStream(d,s),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let R=o.subscriptions[p];if(R.schema===f&&R.table===E){R.publish=d.publish,R.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Xx(f,E,d.publish,d.subscribe))}else i.push(new Xx(f,E,d.publish,d.subscribe))}c||(o=new toe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await pA.upsertNodeRecord(u),noe({type:"nats_update"}),new TA(mA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${roe.get(zx.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await pA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new TA(mA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(ioe,"updateRemoteSource")});var sq=T((_Se,rq)=>{"use strict";var tq=require("joi"),{string:eq}=tq.types(),ooe=D(),aoe=Je();rq.exports=coe;function coe(e){let t=tq.object({operation:eq.valid(ooe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:eq.required()});return aoe.validateBySchema(e,t)}a(coe,"removeRemoteSourceValidator")});var iq=T((fSe,nq)=>{"use strict";var uoe=sq(),zE=G(),JE=qe(),RA=D(),loe=os(),_oe=z(),doe=nt(),foe=j(),XE=Ml(),{NodeSubscription:Eoe}=di(),hoe=ta(),moe=ti(),{broadcast:poe}=Ye(),Soe=foe.get(RA.CONFIG_PARAMS.CLUSTERING_NODENAME);nq.exports=Toe;async function Toe(e){try{let t=uoe(e);if(t)return zE.error(`Validation error in removeRemoteSource: ${t.message}`),new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await loe.getNodeRecord(r);if(_oe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return zE.error(i),new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];zE.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Eoe(c.schema,c.table,!1,!1);await doe.updateWorkStream(u,r)}let n=new hoe(RA.SYSTEM_SCHEMA_NAME,RA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await moe.deleteRecord(n),poe({type:"nats_update"}),new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Soe} successfully removed node '${r}'.`)}catch(t){zE.error(t);let r=t.message?t.message:t;return new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Toe,"removeRemoteSource")});var lq=T((hSe,uq)=>{"use strict";var jE=G(),ZE=D(),oq=qe(),aq=j(),goe=z(),cq=Ml(),Roe=os(),Aoe=Sd(),Ooe=Lr();uq.exports=boe;async function boe(e){try{jE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=goe.ms_to_time(t),s=new Noe(aq.get(ZE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aq.get(ZE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await Roe.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new Aoe(ZE.SYSTEM_SCHEMA_NAME,ZE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Ooe.update(i)}catch(n){jE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return jE.trace("getRemoteSourceConfig response:",s),new cq(oq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){jE.error(t);let r=t.message?t.message:t;return new cq(oq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(boe,"getRemoteSourceConfig");function Noe(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(Noe,"ConfigResponseObject")});var Eq=T((pSe,fq)=>{"use strict";var _q=j();_q.initSync();var dq=nt(),Pl=G(),Ja=D(),AA=qe(),yoe=Zx(),Ioe=iq(),woe=lq(),Coe=Ml(),{encode:Doe,decode:Loe}=require("msgpackr"),Uoe=Rn(),Moe=jn(),Poe=require("util"),voe=D(),{isMainThread:Boe,parentPort:Hoe}=require("worker_threads");Ye();var xoe=Poe.promisify(Uoe.setSchemaDataToGlobal),OA=_q.get(Ja.CONFIG_PARAMS.CLUSTERING_NODENAME);fq.exports=qoe;async function qoe(){try{Pl.notify("Starting reply service."),await xoe();let e=await dq.getConnection(),t=`${OA}.__request__`,r=e.subscribe(t,{queue:OA});await Foe(r)}catch(e){Pl.error(e)}}a(qoe,"initialize");async function Foe(e){for await(let t of e){let r=Loe(t.data),s;switch(r.operation){case Ja.OPERATIONS_ENUM.ADD_NODE:case Ja.OPERATIONS_ENUM.UPDATE_NODE:s=await yoe(r);break;case Ja.OPERATIONS_ENUM.REMOVE_NODE:s=await Ioe(r);break;case Ja.OPERATIONS_ENUM.CLUSTER_STATUS:s=await woe(r);break;case Ja.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Goe();break;default:let n=`node '${OA}' reply service received unrecognized request operation`;Pl.error(n),s=new Coe(AA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}Pl.trace(s),t.respond(Doe(s))}}a(Foe,"handleRequest");async function Goe(){try{return{status:AA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Moe.describeAll()}}catch(e){return Pl.error(e),{status:AA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Goe,"getRemoteDescribeAll");Boe||Hoe.on("message",async e=>{let{type:t}=e;t===voe.ITC_EVENT_TYPES.SHUTDOWN&&dq.closeConnection()})});var koe=Eq();(async()=>{try{await koe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
26
|
+
`},compressible:!1,q:.8});Bt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Kv={type:"application/json",serializeStream:Sc,serialize:Zu,deserialize:wee,q:.8};Bt.set("*/*",Kv);Bt.set("",Kv);a(wee,"tryJSONParse");a(Ug,"registerContentHandlers");Iee=require("fastify-plugin"),Cee=Iee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=vf(s.raw);n.type(c),n.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{n.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(vf,"findBestSerializer");Fv=Cg.default.get(Dg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Bf,"serialize");a(gi,"serializeMessage");a(Dee,"streamToBuffer");a(To,"getDeserializer");a(kv,"deserializerUnknownType");a(Lee,"transformIterable")});function Bg(e,t,r,s,n,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?Bg(d.conditions,d.operator,r,s,n,i,o,c):La(d,s,d.descending||n.reverse===!0,r,n.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let b=h.operator==="or",R=l(h.conditions,!b,E);return b?(L,H)=>R.some(P=>P(L,H)):(L,H)=>R.every(P=>P(L,H))}let S=(h.attribute||h[0])===r.primaryKey,T=xg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=Gee(r.primaryStore,h.estimated_count,E)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function La(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let b=o[0],R=Bn(s.attributes,b);if(R.relationship){if(o.length<2)throw new $r.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=R.definition?.tableClass||R.elements?.definition?.tableClass,H=new Map,P=La({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,L,n,H);if(R.relationship.to){i[o[0]]=H;let k=!!Bn(L.attributes,R.relationship.to)?.elements;P=Bee(P,R,L.primaryStore,k,H)}if(R.relationship.from){let k=a(B=>La({attribute:R.relationship.from,value:B},t,r,s,n,H),"searchEntry");R.elements?(i[o[0]]=H,P=Hee(P,R,L.primaryStore,H,k)):P=P.flatMap(k)}return P}else if(o.length===1)o=o[0];else throw new $r.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(Hg[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]=un.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"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new $r.ClientError(`Unknown query comparator "${u}"`)}if(r){let b=_;_=l,l=b,b=!f,f=!d,d=b}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o],S;if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(n===!1&&!p)throw new $r.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(n===!1&&E)throw new $r.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(p?.isIndexing)throw new $r.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!p.indexNulls)throw new $r.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=xg(e),!S)throw new $r.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let b=p.getRange(T).map(S?function({key:R,value:L}){return this.isSync?L&&S(L)?R:Oi.SKIP:new Promise((H,P)=>setImmediate(()=>{try{H(L&&S(L)?R:Oi.SKIP)}catch(k){P(k)}}))}:R=>R.value==null?Oi.SKIP:R);return b.hasEntries=!0,b}else return p?p.getRange(T).map(S?function({key:b,value:R}){return this.isSync?S({[o]:b})?R:Oi.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(S({[o]:b})?R:Oi.SKIP)}catch(P){H(P)}}))}:({value:b})=>b):s.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:b,value:R}){return this.isSync?R&&S(R)?b:Oi.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(R&&S(R)?b:Oi.SKIP)}catch(P){H(P)}}))})}function Bn(e,t){if(Array.isArray(t))if(t.length>1){let r=Bn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?Bn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Bee(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i;n.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let f=l;Array.isArray(l)&&(f=Hs(l),o=!0);let E=n.get(f);E?E.push(d):n.set(f,E=[d]),l!==f&&(E.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),f=d?.[u];if(f!=null&&!n.filters?.some(E=>!E(d)))if(s)for(let E=0;E<f.length;E++)_(f[E],l);else _(f,l)}return i=(o?n:n.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 Hee(e,t,r,s,n){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 _=Hs(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Hs(d)));for(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}_.set(Hs(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=n(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function xg(e,t,r,s,n,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=Bn(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=s?.[l],h=xg({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((b,R)=>{let L,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:p.from,value:k};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let P=S(b);return S.idFilter&&(T.idFilter=S.idFilter),P}H=p(b,r,R),L=H?.value}else L=b[l];return L?Array.isArray(L)?L.some(h):h(L,H):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Hg[o]||o){case Pg.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,un.compareKeys)(l,u[0])>=0&&(0,un.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,un.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,un.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,un.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,un.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,un.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new $r.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f,E){let h;f=f&&!n&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&xf(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let p=0,S=3;function T(b){let R=b[l],L;if(typeof R!="object"||!R||E?L=d(R):Array.isArray(R)?L=R.some(d):R instanceof Date&&(L=d(R.getTime())),f&&(S++,!L&&!T.idFilter&&++p/S*(i-S)>h)){let H=La(e,r.transaction.getReadTxn(),!1,t).map(Hs),P=new Set(H);T.idFilter=k=>P.has(Hs(k)),T.idFilter.idSet=P}return L}return a(T,"recordFilter"),n&&(T.idFilter=d),T}a(_,"attributeComparator")}function xf(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let n;if(r.operator==="or"){n=0;for(let i of r.conditions)t(i),n+=i.estimated_count}else{n=1/0;for(let i of r.conditions)t(i),n=isFinite(n)?n*i.estimated_count/vn(e.primaryStore):i.estimated_count}return r.estimated_count=n,r.estimated_count}let s=r.comparator||r.search_type;if(s=Hg[s]||s,s===Pg.SEARCH_TYPES.EQUALS||!s){let n=r[0]??r.attribute;if(n==null||n===e.primaryKey)r.estimated_count=1;else if(Array.isArray(n)&&n.length>1){let i=Bn(e.attributes,n[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=xf(o)({value:r.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*vn(e.indices[i.relationship.from])/(vn(o.primaryStore)||1):c)}else{let i=e.indices[n];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(s==="contains"||s==="ends_with"||s==="ne"){let n=r[0]??r.attribute,i=e.indices[n];r.value===null&&s==="ne"?r.estimated_count=vn(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else s==="starts_with"||s==="prefix"?r.estimated_count=Pee*vn(e.primaryStore)+1:s==="between"?r.estimated_count=Uee*vn(e.primaryStore)+1:s==="sort"?r.estimated_count=vn(e.primaryStore)+1:r.estimated_count=Mee*vn(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function qf(e){if(e)if(bi=e,Ca.lastIndex=0,xee.test(e))try{let t=tl(new Da,"");if(Ar!==bi.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 ${Ar} in '${bi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function tl(e,t){let r=Ca,s,n,i,o,c,u=decodeURIComponent,_;for(;s=r.exec(bi);){Ar=r.lastIndex;let[,l,d]=s;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(n){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=Qv}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");n=rl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=vee[d],u=vg[i]?Qv:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);n=rl(l);break;case"|":case"&":case"":case void 0:if(n==null){if(n===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:n,value:u(l)};i==="eq"&&zv(h,l),Hf(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(rl(l)),n=void 0;break;case"(":Ca.lastIndex=Ar;let E=tl(l?[]:new Da,")");switch(l){case"":Hf(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=Jv(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}bi[Ar]===","?r.lastIndex=++Ar:o=!0,n=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");Ca.lastIndex=Ar,f=tl([],"}"),f.name=l,e.push(f),bi[Ar]===","?r.lastIndex=++Ar:o=!0;break;case"[":Ca.lastIndex=Ar,l?(f=tl(new Da,"]"),f.name=l):f=tl(e.conditions?new Da:[],"]"),e.conditions?(Hf(e,_),e.conditions.push(f),n=null):e.push(f),bi[Ar]===","?r.lastIndex=++Ar:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(n){let h={comparator:i||"equals",attribute:n,value:u(l)};i==="eq"&&zv(h,l),Hf(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(rl(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=n?qee:Ca,r.lastIndex=Ar),Ar===bi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Hf(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 rl(e){return e.indexOf(".")>-1?e.split(".").map(rl):decodeURIComponent(e)}function Qv(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 $r.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zv(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new $r.ClientError("wildcard can only be used at the end of a string")}function Jv(e){let t=jv(e[0]);return e.length>1&&(t.next=Jv(e.slice(1))),t}function jv(e){if(Array.isArray(e)){let t=jv(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 Hs(e){return Array.isArray(e)?e.join("\0"):e}function vn(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Gee(e,t,r){return t*r/vn(e)}var $r,Pg,un,Oi,Mee,Uee,Pee,vee,vg,Hg,xee,Ca,qee,Ar,bi,Da,Gf=Re(()=>{$r=x(se()),Pg=x(dt()),un=require("ordered-binary"),Oi=require("lmdb"),Mee=.3,Uee=.1,Pee=.05,vee={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},vg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(Bg,"executeConditions");a(La,"searchByIndex");a(Bn,"findAttribute");a(Bee,"joinTo");a(Hee,"joinFrom");Hg={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(xg,"filterByType");a(xf,"estimateCondition");xee=/[()[\]|!<>.]|(=\w*=)/,Ca=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,qee=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(qf,"parseQuery");a(tl,"parseBlock");a(Hf,"assignOperator");a(rl,"decodeProperty");a(Qv,"typedDecoding");a(zv,"wildcardDecoding");a(Jv,"toSortObject");a(jv,"toSortEntry");Da=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(Hs,"flattenKey");a(vn,"estimatedEntryCount");a(Gee,"intersectionEstimate")});function r0(e){let t={openapi:Fee,info:{title:"HarperDB HTTP REST interface",version:(0,t0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,s]of e){if(!s.path)continue;let{path:n}=s,i=n.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=s.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:R,name:L,elements:H,relationship:P,definition:k}of o){if(P)R==="array"?_[L]={type:"array",items:{$ref:Ni+H.type}}:_[L]={$ref:Ni+R};else{let B=k??H?.definition;if(B){if(!t.components.schemas[B.type]){let J={};B.properties.forEach(z=>{J[z.name]=new kg(qg[z.type],z.type)}),t.components.schemas[B.type]=new e0(J)}R==="array"?_[L]={type:"array",items:{$ref:Ni+B.type}}:_[L]={$ref:Ni+B.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[L]={type:"array",items:{format:H.type}}:_[L]={type:"array",items:new kg(qg[H.type],H.type)}:R==="Any"||R=="ID"?_[L]={format:R}:_[L]=new kg(qg[R],R)}l.push(new Vg(L,"query",_[L]))}let d=Object.keys(_),f=new Vg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new Vg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new e0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",b="/"+n+"/";h&&(t.paths[b]={},t.paths[b].post=new kee(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[b]||(t.paths[b]={}),t.paths[b].get=new Gg(l,r,{200:new Fg({$ref:Ni+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new Zv(l,r,"delete all the records that match the provided query",{204:new Xv})),b="/"+n+"/{"+c+"}",S&&(t.paths[b]={},t.paths[b].get=new Gg([f],r,{200:new Fg({$ref:Ni+i})},"retrieve a record by its primary key")),p&&(t.paths[b]||(t.paths[b]={}),t.paths[b].put=new Vee([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new Zv([f],r,"delete a record with the given primary key",{204:new Xv})),S&&E.schema.enum.length>0&&(b="/"+n+"/{"+c+"}.{property}",t.paths[b]={},t.paths[b].get=new Gg([f,E],r,{200:new Fg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function kee(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ni+e}}}},this.security=t,this.responses={200:{description:$g,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Gg(e,t,r,s){this.description=s,this.parameters=e,this.security=t,this.responses=r}function Fg(e){this.description=$g,this.content={"application/json":{schema:e}}}function Xv(){this.description="successfully processed request, no content returned to client"}function Vee(e,t,r,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ni+r}}}},this.responses={200:{description:$g}}}function Zv(e,t,r,s){this.description=r,this.parameters=e,this.security=t,this.responses=s}function e0(e){this.type="object",this.properties=e}function kg(e,t){this.type=e,this.format=t}function Vg(e,t,r){this.name=e,this.in=t,this.schema=r}var t0,Fee,qg,Ni,$g,s0=Re(()=>{t0=x(Hd()),Fee="3.0.3",qg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ni="#/components/schemas/",$g="successful operation";a(r0,"generateJsonApi");a(kee,"Post");a(Gg,"Get");a(Fg,"Response200");a(Xv,"Response204");a(Vee,"Put");a(Zv,"Delete");a(e0,"ResourceSchema");a(kg,"Type");a(Vg,"Parameter")});var kf={};Ye(kf,{start:()=>Kee});async function Yee(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&qf(e);let n=new Ti;try{e.responseHeaders=n;let i=e.url.slice(1),o,c;if(i!==n0){let h=Ff.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 Xe(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=To(r["content-type"],!0)(e.body)}catch(h){throw new Ma.ClientError(h,400)}if(e.authorize=!0,i===n0&&s==="GET"){if(e?.user?.role?.permission?.super_user)return r0(Ff);throw new Ma.ServerError("Forbidden",403)}switch(s){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":n.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 Ma.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ma.ServerError(`Method ${s} is not recognized`,501)}}),l=200,d;if(_==null)l=s==="GET"||s==="HEAD"?404:204,Yg.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){$ee[0]=d;let h=String.fromCharCode(34,(Vt[0]&63)+62,(Vt[0]>>6)+(Vt[1]<<2&63)+62,(Vt[1]>>4)+(Vt[2]<<4&63)+62,(Vt[2]>>2)+62,(Vt[3]&63)+62,(Vt[3]>>6)+(Vt[4]<<2&63)+62,(Vt[4]>>4)+(Vt[5]<<4&63)+62,(Vt[5]>>2)+62,(Vt[6]&63)+62,(Vt[6]>>6)+(Vt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):n.setIfNone("ETag",h),Yg.lastModified&&n.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let f={status:l,headers:n,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=Bf(_,e,f),s==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?go.warn(i):go.info(i):go.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Bf(i.contentType?i:i.toString(),e,o),o}}function Kee(e){Yg=e,!i0&&(i0=!0,Ff=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Yee(t,r)}),e.server.ws(async(t,r,s)=>{sl++;let n=new As;o0||(o0=!0,nu(l=>{sl>0&&l.push({metric:"ws-connections",connections:sl,byThread:!0})}));let i;t.on("error",l=>{i=!0,go.warn(l)});let o;t.on("message",a(function(d){o||(o=To(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{sl--,ns(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=Ff.getMatch(u);if(ns(!!_,"connection","ws","connect"),!_)t.send(gi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:sl}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=gi(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var go,Ma,Vt,$ee,Yg,n0,i0,Ff,o0,sl,a0=Re(()=>{Aa();Nn();go=x($()),Ma=x(se());Gf();mc();eo();qu();s0();Vt=new Uint8Array(8),$ee=new Float64Array(Vt.buffer,0,1),Yg={},n0="openapi";a(Yee,"http");sl=0;a(Kee,"start")});var Kg=g((mme,c0)=>{var{recordAction:Vf,recordActionBinary:Wee}=(Nn(),ne(iu)),Qee=require("fastify-plugin"),zee=200;c0.exports=Qee(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Vf(o,"duration",_,d,l),Wee(n.raw.statusCode<400,"success",_,d,l);let f=zee;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Vf(performance.now()-c,"transfer",_,d,l),Vf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Vf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Xg=g((Tme,d0)=>{var Wf=require("clone"),Qf=je(),Jee=Q(),Yf=M(),pme=$(),Wg=require("fs"),zg=require("joi"),{string:Kf}=zg.types(),{hdb_errors:jee,handleHDBError:$f}=se(),{HDB_ERROR_MSGS:Sme,HTTP_STATUS_CODES:Qg}=jee,{common_validators:Ua}=Qs(),u0=" is required",Xee=["insert","update","upsert"],Jg={database:{presence:!1,format:Ua.schema_format,length:Ua.schema_length},schema:{presence:!1,format:Ua.schema_format,length:Ua.schema_length},table:{presence:!0,format:Ua.schema_format,length:Ua.schema_length},action:{inclusion:{within:Xee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Zee={schema:Kf.required(),table:Kf.required(),action:Kf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:ete,AWS_SECRET:tte,AWS_BUCKET:rte,AWS_FILE_KEY:ste,REGION:nte}=Yf.S3_BUCKET_AUTH_KEYS,ite={s3:{presence:!0},[`s3.${ete}`]:{presence:!0,type:"String"},[`s3.${tte}`]:{presence:!0,type:"String"},[`s3.${rte}`]:{presence:!0,type:"String"},[`s3.${ste}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${nte}`]:{presence:!0,type:"String"}},l0=Wf(Jg);l0.data.presence={message:u0};var _0=Wf(Jg);_0.file_path.presence={message:u0};var ote=Object.assign(Wf(Jg),ite),jg=Wf(Zee);jg.csv_url=Kf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();jg.passthrough_headers=zg.object();function ate(e){let t=Qf.validateObject(e,l0);return zf(e,t)}a(ate,"dataObject");function cte(e){let t=Qf.validateBySchema(e,zg.object(jg));return zf(e,t)}a(cte,"urlObject");function ute(e){let t=Qf.validateObject(e,_0);return zf(e,t)}a(ute,"fileObject");function lte(e){let t=Qf.validateObject(e,ote);return zf(e,t)}a(lte,"s3FileObject");function zf(e,t){if(!t){let r=Jee.checkGlobalSchemaTable(e.schema,e.table);if(r)return $f(new Error,r,Qg.BAD_REQUEST);if(e.operation===Yf.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Wg.accessSync(e.file_path,Wg.constants.R_OK|Wg.constants.F_OK)}catch(s){return s.code===Yf.NODE_ERROR_CODES.ENOENT?$f(s,`No such file or directory ${s.path}`,Qg.BAD_REQUEST):s.code===Yf.NODE_ERROR_CODES.EACCES?$f(s,`Permission denied ${s.path}`,Qg.BAD_REQUEST):$f(s)}}return t}a(zf,"postValidateChecks");d0.exports={dataObject:ate,urlObject:cte,fileObject:ute,s3FileObject:lte}});var Zg=g((Rme,f0)=>{"use strict";var nl=$(),Jf=M();async function _te(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Jf.OPERATIONS_ENUM.INSERT||t.operation===Jf.OPERATIONS_ENUM.UPDATE||t.operation===Jf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Jf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(nl.info(i.message),i):i.http_resp_msg?(nl.error(`Error calling operation: ${e.name}`),nl.error(i.http_resp_msg),i):(nl.error(`Error calling operation: ${e.name}`),nl.error(i),i)}}a(_te,"callOperationFunctionAsAwait");f0.exports={callOperationFunctionAsAwait:_te}});var h0=g((Ome,E0)=>{"use strict";var eR=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},tR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};E0.exports={BulkLoadFileObject:eR,BulkLoadDataObject:tR}});var p0=g((Nme,m0)=>{"use strict";var rR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};m0.exports=rR});var cR=g((Lme,P0)=>{"use strict";var jf=Lr(),Zf=Xg(),dte=require("needle"),xs=M(),wme=Fe(),Pa=Q(),{handleHDBError:it,hdb_errors:y0}=se(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:wt,CHECK_LOGS_WRAPPER:Ao}=y0,va=$(),sR=require("papaparse");Pa.promisifyPapaParse();var qs=require("fs-extra"),fte=require("path"),{chain:S0}=require("stream-chain"),T0=require("stream-json/streamers/StreamArray"),g0=require("stream-json/utils/Batch"),R0=require("stream-chain/utils/comp"),{finished:A0}=require("stream"),Ete=ee(),w0=Zg(),hte=Ng(),{BulkLoadFileObject:iR,BulkLoadDataObject:mte}=h0(),oR=hg(),{verifyBulkLoadAttributePerms:I0}=Df(),Ime=p0(),Cme=st(),Dme=Tn(),{databases:pte}=(Ae(),ne(Ge)),{coerceType:Ste}=(eE(),ne(uR)),O0="No records parsed from csv file.",Ro=`${Ete.get("HDB_ROOT")}/tmp`,{schema_regex:Tte}=Qs(),b0=1024*1024*2,N0=5e3,gte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};P0.exports={csvDataLoad:Rte,csvURLLoad:Ate,csvFileLoad:Ote,importFromS3:bte};async function Rte(e,t){let r=Zf.dataObject(e);if(r)throw it(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=L0(e.schema,e.table),i=sR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:nR.bind(null,n),dynamicTyping:!1}),o=new oR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&I0(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,$t.BAD_REQUEST,void 0,void 0,!0);let u=new mte(e.action,e.schema,e.table,i.data);return s=await w0.callOperationFunctionAsAwait(M0,u,null),s.message===O0?O0:U0(s.records,s.number_written)}catch(n){throw Oo(n)}}a(Rte,"csvDataLoad");async function Ate(e){let t=Zf.urlObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ro}/${r}`;try{await Nte(e,r)}catch(n){throw va.error(wt.DOWNLOAD_FILE_ERR(r)+" - "+n),it(n,Ao(wt.DOWNLOAD_FILE_ERR(r)))}try{let n=new iR(this.job_operation_function.name,e.action,e.schema,e.table,s,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await aR(n);return await Xf(s),i}catch(n){throw await Xf(s),Oo(n)}}a(Ate,"csvURLLoad");async function Ote(e){let t=Zf.fileObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new iR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await aR(r)}catch(s){throw Oo(s)}}a(Ote,"csvFileLoad");async function bte(e){let t=Zf.s3FileObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=fte.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ro}/${n}`;let i=new iR(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await yte(n,e);let o=await aR(i);return await Xf(r),o}catch(s){throw await Xf(r),Oo(s)}}a(bte,"importFromS3");async function Nte(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await dte("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw it(s,n,s.statusCode,xs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Ite(r,e.csv_url),await wte(t,r.raw)}a(Nte,"downloadCSVFile");async function yte(e,t){try{let r=`${Ro}/${e}`;await qs.mkdirp(Ro),await qs.writeFile(`${Ro}/${e}`,"",{flag:"a+"});let s=await qs.createWriteStream(r),n=await hte.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){va.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw va.error(wt.S3_DOWNLOAD_ERR+" - "+r),it(r,Ao(wt.S3_DOWNLOAD_ERR))}}a(yte,"downloadFileFromS3");async function wte(e,t){try{await qs.mkdirp(Ro),await qs.writeFile(`${Ro}/${e}`,t)}catch(r){throw va.error(wt.WRITE_TEMP_FILE_ERR),it(r,Ao(wt.DEFAULT_BULK_LOAD_ERR))}}a(wte,"writeFileToTempFolder");async function Xf(e){if(e)try{await qs.access(e),await qs.unlink(e)}catch{va.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Xf,"deleteTempFile");function Ite(e,t){if(e.statusCode!==y0.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!gte[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Ite,"validateURLResponse");async function aR(e){try{let t;switch(e.file_type){case xs.VALID_S3_FILE_TYPES.CSV:t=await Cte(e);break;case xs.VALID_S3_FILE_TYPES.JSON:t=await Dte(e);break;default:throw it(new Error,wt.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_FILE_EXT_ERR(e))}return U0(t.records,t.number_written)}catch(t){throw Oo(t)}}a(aR,"fileLoad");async function C0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await jf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&I0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=it(c);r(u)}}a(C0,"validateChunk");async function D0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Pa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Pa.isEmpty(c)&&!Pa.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 w0.callOperationFunctionAsAwait(M0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=it(c,Ao(wt.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_CSV_ERR+" - "+c);r(u)}}a(D0,"insertChunk");async function Cte(e){let t={records:0,number_written:0},r=L0(e.schema,e.table);try{let s=new oR,n=qs.createReadStream(e.file_path,{highWaterMark:b0});n.setEncoding("utf8"),await sR.parsePromise(n,C0.bind(null,e,s),nR.bind(null,r));let i=s.getPermsResponse();if(i)throw it(new Error,i,$t.BAD_REQUEST);return n=qs.createReadStream(e.file_path,{highWaterMark:b0}),n.setEncoding("utf8"),await sR.parsePromise(n,D0.bind(null,e,t),nR.bind(null,r)),n.destroy(),t}catch(s){throw it(s,Ao(wt.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.PAPA_PARSE_ERR+s)}}a(Cte,"callPapaParse");function L0(e,t){let r=pte[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Ste(i,n));return s}a(L0,"createTransformMap");function nR(e,t,r){let s=e.get(r);return s?s(t):Pa.autoCast(t)}a(nR,"typeFunction");async function Dte(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new oR,n=S0([qs.createReadStream(e.file_path,{encoding:"utf-8"}),T0.withParser(),c=>c.value,new g0({batchSize:N0}),R0(async c=>{await C0(e,s,r,c)})]);await new Promise((c,u)=>{A0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw it(new Error,i,$t.BAD_REQUEST);let o=S0([qs.createReadStream(e.file_path,{encoding:"utf-8"}),T0.withParser(),c=>c.value,new g0({batchSize:N0}),R0(async c=>{await D0(e,t,r,c)})]);return await new Promise((c,u)=>{A0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw it(s,Ao(wt.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_JSON_ERR+s)}}a(Dte,"insertJson");async function M0(e){let t={};try{e.data&&e.data.length>0&&Lte(e.data[0])?t=await Mte(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",va.info(t.message))}catch(r){throw Oo(r)}return t}a(M0,"callBulkFileLoad");function Lte(e){let t=Object.keys(e);for(let r of t)if(!Tte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Lte,"validateColumnNames");async function Mte(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=jf.insert;break;case"update":i=jf.update;break;case"upsert":i=jf.upsert;break;default:throw it(new Error,wt.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=Pa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Oo(o)}}a(Mte,"bulkFileLoad");function U0(e,t){return`successfully loaded ${t} of ${e} records`}a(U0,"buildResponseMsg");function Oo(e){return it(e,Ao(wt.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Oo,"buildTopLevelErrMsg")});var B0=g((Ume,v0)=>{"use strict";var lR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};v0.exports=lR});var q0=g((vme,x0)=>{"use strict";var Ute=M(),H0=require("moment"),Pte=require("uuid").v4,_R=class{static{a(this,"JobObject")}constructor(){this.id=Pte(),this.type=void 0,this.start_datetime=H0().valueOf(),this.created_datetime=H0().valueOf(),this.end_datetime=void 0,this.status=Ute.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};x0.exports=_R});var dR=g((Hme,Y0)=>{"use strict";var vte=require("uuid").v4,k0=Lr(),V0=Dr(),Bte=Zs(),Hte=ta(),xte=B0(),ot=M(),qte=q0(),Gte=Dd(),ds=$(),Fte=Lc(),Ba=Q(),{promisify:kte}=require("util"),bo=require("moment"),Vte=Mf(),tE=Xg(),G0=Hm(),{deleteTransactionLogsBeforeValidator:$te}=lg(),{handleHDBError:Yte,hdb_errors:Kte}=se(),{HTTP_STATUS_CODES:Wte}=Kte,F0=V0.searchByValue,Qte=V0.searchByHash,zte=k0.insert,Jte=kte(Vte.evaluateSQL),jte=k0.update;Y0.exports={addJob:ere,updateJob:rre,handleGetJob:Xte,handleGetJobsByStartDate:Zte,getJobById:$0};async function Xte(e){try{let t=await $0(e.id);return Ba.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 ds.error("There was an error getting job",t),new Error(r)}}a(Xte,"handleGetJob");async function Zte(e){try{let t=await tre(e);if(ds.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=bo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bo(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 ds.error(r),new Error(r)}}a(Zte,"handleGetJobsByStartDate");async function ere(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ba.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ds.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return ds.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:s=tE.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:s=tE.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:s=tE.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:s=tE.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=G0(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=G0(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=$te(e);break;default:break}if(s)throw Yte(s,s.message,Wte.BAD_REQUEST,void 0,void 0,!0);let n=new qte;n.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Bte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await F0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=vte();try{o=await F0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ds.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Fte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await zte(u)}catch(l){return ds.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,ds.trace(l)}return t}a(ere,"addJob");async function tre(e){let t=bo(e.from_date,bo.ISO_8601),r=bo(e.to_date,bo.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new xte(s,e.hdb_user);try{return await Jte(n)}catch(i){throw ds.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(tre,"getJobsInDateRange");async function $0(e){if(Ba.isEmptyOrZeroLength(e))return Ba.errorizeMessage("Invalid job ID specified.");let t=new Hte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Qte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ds.error(s),Ba.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a($0,"getJobById");async function rre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ba.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=bo().valueOf());let t=new Gte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await jte(t),r}a(rre,"updateJob")});var j0=g((qme,J0)=>{"use strict";var K0=Q(),Or=M(),sre=require("moment"),rE=cR(),sE=$(),W0=dR(),Q0=Uf(),z0=ri(),nre=Ke(),ire=yf(),fR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function ore(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(K0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(K0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await Hn(e,rE.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await Hn(e,rE.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await Hn(e,rE.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await Hn(e,rE.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await Hn(e,Q0.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await Hn(e,Q0.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await Hn(e,z0.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await Hn(e,z0.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await Hn(e,ire.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(ore,"parseMessage");async function Hn(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=sre().valueOf(),await W0.updateJob(e.job),await are(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):sE.error(`There was an error running ${t.name} job with id ${e.job.id}`),sE.error(s),e.job.message=s,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await W0.updateJob(e.job)}catch(n){throw sE.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Hn,"runJob");async function are(e){sE.trace("launching job thread:",e),nre.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(are,"launchJobThread");J0.exports={parseMessage:ore,RunnerMessage:fR}});var Z0=g((Fme,X0)=>{"use strict";var ER=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};X0.exports=ER});var mB=g((Vme,gR)=>{"use strict";var cE=Dr(),pR=Mf(),nE=cR(),xn=fu(),iE=Zn(),ol=ri(),cre=MS(),il=ss(),oE=FS(),Yt=ug(),aE=$(),ure=$S(),lre=Vd(),eB=AT(),_re=Yd(),dre=bT(),fre=NT(),Ere=IT(),hre=DT(),hR=UT(),tB=Uf(),mre=Df(),SR=dR(),q=M(),{hdb_errors:cl,handleHDBError:al}=se(),{HTTP_STATUS_CODES:rB}=cl,mR=xT(),sB=_f(),dB=require("util"),Ha=Lr(),pre=gn(),Sre=Ea(),nB=j0(),iB=Tu(),oB=(hf(),ne(Gu)),aB=Pr(),cB=yf(),uB=gf(),{setServerUtilities:Tre}=(eE(),ne(uR)),{CONTEXT:gre}=(Os(),ne(Lp)),{_assignPackageExport:Rre}=require("../index"),{transformReq:Are}=Q(),{server:Ore}=(nr(),ne(Pi)),Xt=aE.loggerWithTag("operation"),bre=Zg(),lB=cE.searchByHash,Nre=cE.searchByValue,yre=dB.promisify(cE.search),wre=dB.promisify(pR.evaluateSQL),Ire={[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},Y=Z0();async function fB(e,t){try{if(e.body.operation!=="read_log"&&(aE.log_level===q.LOG_LEVELS.INFO||aE.log_level===q.LOG_LEVELS.DEBUG||aE.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Xt.info(o)}}catch(s){Xt.error(s)}let r=await bre.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Ire[e.body.operation]&&pre.setSchemaDataToGlobal(s=>{s&&Xt.error(s)}),r}a(fB,"processLocalTransaction");var _B=Dre();gR.exports={chooseOperation:EB,getOperationFunction:hB,operation:TR,processLocalTransaction:fB};Tre(gR.exports);Ore.operation=TR;function EB(e){let t;try{t=hB(e)}catch(n){throw Xt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=pR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=pR.checkASTPermissions(e,i);if(o)throw Xt.error(`${rB.FORBIDDEN} from operation ${e.operation}`),Xt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),al(new Error,o,cl.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 n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=mre.verifyPerms(i,n);if(o)throw Xt.error(`${rB.FORBIDDEN} from operation ${e.operation}`),Xt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),al(new Error,o,cl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw al(n,"There was an error when trying to choose an operation path")}return r}a(EB,"chooseOperation");function hB(e){if(Xt.trace(`getOperationFunction with operation: ${e.operation}`),_B.has(e.operation))return _B.get(e.operation);throw al(new Error,cl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),cl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hB,"getOperationFunction");Rre("operation",TR);function TR(e,t){e.hdb_user=this[gre]?.user,e.bypass_auth=!t;let r=EB(e);return fB({body:e},r)}a(TR,"operation");async function Cre(e){Xt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await Ha.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await Ha.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await Ha.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await ol.deleteRecord(i);break;default:Xt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Xt.info("Invalid operation in transaction"),Xt.error(o)}}a(Cre,"catchup");async function ln(e){Are(e);let t,r;try{r=await SR.addJob(e),t=r.createdJob,Xt.info("addJob result",r);let s=new nB.RunnerMessage(t,e);return await nB.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Xt.error(n),al(s,n)}}a(ln,"executeJob");function Dre(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new Y(Ha.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new Y(Ha.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new Y(Ha.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(cE.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(lB)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(lB)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(Nre)),e.set(q.OPERATIONS_ENUM.SEARCH,new Y(yre)),e.set(q.OPERATIONS_ENUM.SQL,new Y(wre)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(ln,nE.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(ln,nE.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(ln,nE.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(ln,nE.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(xn.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new Y(xn.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new Y(xn.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(xn.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new Y(xn.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new Y(xn.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new Y(xn.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(xn.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(iE.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(iE.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(iE.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(iE.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new Y(ol.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new Y(il.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new Y(il.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new Y(il.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new Y(il.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new Y(oE.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new Y(oE.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new Y(oE.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new Y(oE.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new Y(il.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new Y(ure)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new Y(lre)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new Y(eB)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(eB)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new Y(_re)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(dre)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new Y(fre)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(aB.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Ere.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(hre)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(hR.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(hR.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(hR.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(ln,tB.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(ln,ol.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(ln,ol.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(ln,tB.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(SR.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new Y(SR.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(mR.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new Y(mR.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(mR.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new Y(sB.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new Y(sB.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new Y(Cre)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Sre.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(ln,ol.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(cre)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(iB.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(iB.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new Y(oB.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new Y(oB.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(aB.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Yt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Yt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Yt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Yt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Yt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Yt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Yt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Yt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Yt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Yt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Yt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Yt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Yt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Yt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Yt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Yt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(cB.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(ln,cB.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(uB.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(uB.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new Y(xn.getBackup)),e}a(Dre,"initializeOperationFunctionMap")});var lE=g((Yme,TB)=>{"use strict";var RR=M(),Lre=Q(),ul=$(),{handleHDBError:AR,hdb_errors:uE}=se(),{isMainThread:Mre}=require("worker_threads"),{Readable:Ure}=require("stream"),pB=require("os"),Pre=require("util"),vre=eT(),Bre=Pre.promisify(vre.authorize),SB=mB(),{createGzip:Hre,constants:xre}=require("zlib");function qre(e){let t=`Found an uncaught exception with message: ${e.message}. ${pB.EOL}Stack: ${e.stack} ${pB.EOL}Terminating ${Mre?"HDB":"thread"}.`;console.error(t),ul.fatal(t),process.exit(1)}a(qre,"handleServerUncaughtException");function Gre(e,t,r){if(ul[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 s=e.statusCode?e.statusCode:uE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Gre,"serverErrorHandler");function Fre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=AR(new Error,"Invalid JSON.",uE.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Lre.isEmpty(e.body.operation)){let s=AR(new Error,"Request body must include an 'operation' property.",uE.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Fre,"reqBodyValidationHandler");function kre(e,t,r){let s;e.body.operation!==RR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==RR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==RR.OPERATIONS_ENUM.LOGOUT?Bre(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{ul.warn(n),ul.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(AR(n,i,uE.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(kre,"authHandler");async function Vre(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=SB.chooseOperation(e.body);let n=await SB.processLocalTransaction(e,s);if(n instanceof Ure&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Hre({level:xre.Z_BEST_SPEED})))}return n}catch(n){throw ul.error(n),n}}a(Vre,"handlePostRequest");TB.exports={authHandler:kre,handlePostRequest:Vre,handleServerUncaughtException:qre,serverErrorHandler:Gre,reqBodyValidationHandler:Fre}});var OB=g((Wme,AB)=>{"use strict";var $re=require("fastify-plugin"),{handlePostRequest:gB,authHandler:Yre,reqBodyValidationHandler:Kre}=lE();async function Wre(e){e.decorate("hdbCore",{preValidation:[Kre,Yre],request:t=>RB(gB(t,response)),requestWithoutAuthentication:(t,r)=>RB(gB(t,r,!0))})}a(Wre,"hdbCore");async function RB(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(RB,"convertAsyncIterators");AB.exports=$re(Wre)});var yB=g((Jme,NB)=>{"use strict";var zme=require("fs"),OR=ee();OR.initSync();var{CONFIG_PARAMS:bB}=M(),Qre=1024*1024*1024;function zre(e){let t=OR.get(bB.HTTP_TIMEOUT),r=OR.get(bB.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Qre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(zre,"getServerOptions");NB.exports=zre});var CB=g((Xme,IB)=>{"use strict";var bR=ee();bR.initSync();var{CONFIG_PARAMS:wB}=M();function Jre(){let e=bR.get(wB.HTTP_CORSACCESSLIST),t=bR.get(wB.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Jre,"getCORSOptions");IB.exports=Jre});var MB=g((epe,LB)=>{"use strict";var DB=ee();DB.initSync();var jre=M();function Xre(){return DB.get(jre.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Xre,"getHeaderTimeoutConfig");LB.exports=Xre});var yR={};Ye(yR,{customFunctionsServer:()=>tse,ready:()=>WB,start:()=>ese});function ese(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){qn||(qn=KB(t),tt.http((await qn).server));let o=await qn,c=(0,NR.dirname)(n),u=(0,NR.dirname)(s);if(u.startsWith("/")&&(u=u.slice(1)),!UB.has(c)){UB.add(c);try{o.register(sse(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ve.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}},ready:WB}}async function tse(){try{Ve.info("In Custom Functions Fastify server"+process.cwd()),Ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ve.debug(`Custom Functions server process ${process.pid} starting up.`),await rse();let e=qB.get(GB.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=qn=await KB(e)}catch(r){throw Ve.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ve.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ve.error(`Custom Functions ${process.pid} Error: ${e}`),Ve.error(e),process.exit(1)}}async function rse(){try{Ve.info("Custom Functions starting configuration."),await FB.setUsersToGlobal(),Ve.info("Custom Functions completed configuration.")}catch(e){Ve.error(e)}}function sse(e,t){return async function(r){try{Ve.info("Custom Functions starting buildRoutes"),Ve.trace("Loading fastify routes folder "+e),(0,PB.existsSync)(e)&&r.register(xB.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ve.error(n.message):n&&Ve.error(n),o()})}catch(s){Ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function KB(e){Ve.info("Custom Functions starting buildServer.");let t=(0,kB.default)(e),r=(0,vB.default)(t);r.server.headersTimeout=(0,$B.default)(),r.setErrorHandler(YB.serverErrorHandler);let s=(0,VB.default)();return s&&r.register(BB.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(HB.default),await r.register(Zre),await r.after(),Ug(r),Ve.info("Custom Functions completed buildServer."),r}function WB(){if(qn)return qn.then?qn.then(e=>e.ready()):qn.ready()}var NR,PB,vB,BB,HB,xB,qB,GB,Ve,Zre,FB,kB,VB,$B,YB,qn,UB,QB=Re(()=>{NR=require("path"),PB=require("fs"),vB=x(require("fastify")),BB=x(require("@fastify/cors")),HB=x(Kg()),xB=x(require("@fastify/autoload")),qB=x(ee()),GB=x(M()),Ve=x($()),Zre=x(OB()),FB=x(ss()),kB=x(yB()),VB=x(CB()),$B=x(MB()),YB=x(lE());Aa();nr();UB=new Set;a(ese,"start");a(tse,"customFunctionsServer");a(rse,"setUp");a(sse,"buildRouteFolder");a(KB,"buildServer");a(WB,"ready")});var wR={};Ye(wR,{start:()=>nse});function nse(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,ZB.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){JB||(JB=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=zB.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,jB.default)(n,(0,XB.realpathSync)(o))}}return i(n)},{runFirst:!0})),zB.set(r,s)}}}var jB,XB,ZB,zB,JB,eH=Re(()=>{jB=x(require("send")),XB=require("fs"),ZB=x(require("serve-static")),zB=new Map;a(nse,"start")});function ase(e,t=1,r){if(IR++,(0,No.startWorker)("server/threads/threadServer.js",{name:fE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===fE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});ose.push(n),await n,xa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=dE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=xa.indexOf(s);o>-1&&xa.splice(o,1)}if(a(i,"removeWorker"),qa){let o=qa;qa=[];for(let c of o)nH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{CR?CR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,No.shutdownWorkers)(),IR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function iH(e=0,t){if(typeof e=="string")try{(0,EE.existsSync)(e)&&(0,EE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=cse:r=use(t):r=LR;let s=(0,Ga.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=nH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),CR=!0,r(o,(c,u)=>{if(!c){if(tH){let l=o._socket||new Ga.Socket({handle:o,writable:!0,readable:!0});tH.deliverSocket(l,e,u),l.resume()}else IR>0?(qa.length===0&&setTimeout(()=>{qa.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,qa.push(o)):(console.log("start up a dynamic thread to handle request"),ase(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ga.Socket({handle:o,writable:!0,readable:!0});fse(l,c,e)}qr(!0,"socket-routed")})};let n=eu();DR.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function LR(e,t){let r,s=0;for(let n of xa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=_E)return _E=i,t(r);s=i}_E=0,t(r)}function cse(e,t){let r={};e.getpeername(r);let s=r.address,n=Fa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);LR(e,o=>{Fa.set(s,{worker:o,lastUsed:i}),t(o)})}function use(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Ga.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Fa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);LR(s,d=>{Fa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function _se(){_E=0;for(let e of xa)e.expectedIdle=e.recentELU.idle+lse,e.requests=1;xa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function fse(e,t,r){let s=dse++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),dE.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),dE.delete(s)),n.event=="destroy"&&(e.destroy(),dE.delete(s))})}var No,Ga,fE,DR,EE,sH,ise,xa,qa,nH,tH,IR,ose,CR,_E,rH,Fa,lse,dE,dse,oH=Re(()=>{No=x(Ke()),Ga=require("net"),fE=x(M()),DR=x($()),EE=require("fs");Nn();sH=require("worker_threads"),ise=x(Qi()),xa=[],qa=[],nH=[],IR=0,ose=[];sH.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(ase,"startHTTPWorker");a(iH,"startSocketServer");_E=0;a(LR,"findMostIdleWorker");rH=36e5,Fa=new Map;a(cse,"findByRemoteAddressAffinity");a(use,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Fa)r.lastUsed+rH<e&&Fa.delete(t)},rH).unref();lse=1e3;a(_se,"updateWorkerIdleness");(0,No.setMonitorListener)(_se);dE=new Map,dse=1;a(fse,"proxySocket")});var vR={};Ye(vR,{Request:()=>MR,createReuseportFd:()=>hE});var aH,MR,UR,PR,hE,mE=Re(()=>{aH=require("os"),MR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new PR(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 UR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},UR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},PR=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,s]of this)t(s,r,this)}};(0,aH.platform)()!="win32"&&(hE=require("node-unix-socket").createReuseportFd)});var _H=g((hpe,lH)=>{"use strict";var Ese=require("cluster"),yo=ee();yo.initSync();var uH=M(),lpe=require("util"),Gn=$(),_pe=require("fs"),hse=require("fastify"),dpe=eu(),mse=require("@fastify/cors"),pse=require("@fastify/compress"),Sse=require("@fastify/static"),Tse=Kg(),gse=require("path"),{PACKAGE_ROOT:Rse}=M(),Ase=gn(),Ose=Q(),bse=ss(),Nse=Qi(),{server:yse}=(nr(),ne(Pi)),{node_request_key:fpe}=(mE(),ne(vR)),{authHandler:wse,handlePostRequest:Ise,serverErrorHandler:Cse,reqBodyValidationHandler:Dse}=lE(),Epe=require("net"),{registerContentHandlers:Lse}=(Aa(),ne(Wv)),Mse=6e4,Use=1024*1024*1024,Pse="TRUE",{CONFIG_PARAMS:ll}=uH,ka;lH.exports={hdbServer:cH,start:cH};async function cH(e){try{Gn.info("In Fastify server"+process.cwd()),Gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Ese.isMaster,await vse();let t=e.securePort>0;ka=Bse(t),await ka.ready(),e||(e={}),e.isOperationsServer=!0;try{yse.http(ka.server,e),ka.server.closeIdleConnections||await ka.listen({port:0,host:"::"})}catch(r){throw ka.close(),Gn.error(r),Gn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Gn.fatal(t),process.exit(1)}}a(cH,"operationsServer");async function vse(){Gn.trace("Configuring HarperDB process."),Ase.setSchemaDataToGlobal(),await bse.setUsersToGlobal(),await Nse.getLicense()}a(vse,"setUp");function Bse(e){Gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Hse(e),r=hse(t);r.server.headersTimeout=qse(),r.setErrorHandler(Cse);let s=xse();s&&r.register(mse,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Tse),r.register(pse),r.register(Sse,{root:gse.join(Rse,"studio/build-local")}),Lse(r);let n=yo.get(uH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ose.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Dse,wse],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ise(i,o)}),r.get("/health",()=>"HarperDB is running."),Gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Bse,"buildServer");function Hse(e){let t=yo.get(ll.OPERATIONSAPI_NETWORK_TIMEOUT),r=yo.get(ll.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Use,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Hse,"getServerOptions");function xse(){let e=yo.get(ll.OPERATIONSAPI_NETWORK_CORS),t=yo.get(ll.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Pse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(xse,"getCORSOpts");function qse(){return yo.get(ll.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Mse}a(qse,"getHeaderTimeoutConfig")});var FR={};Ye(FR,{disableNATS:()=>Fse,publishToStream:()=>TE,setNATSReplicator:()=>BR,setPublishToStream:()=>kse,setSubscription:()=>GR,start:()=>Gse});function Gse(){_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$se()}function Fse(e=!0){mH=e}function kse(e,t){TE=e,GR=t}function $se(){if(mH||process.env._DISABLE_NATS)return;let e=Ls(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];BR(n,r,i)}}kR((r,s)=>{BR(r.tableName,r.databaseName,r),s&&SH(r)}),!dH&&(dH=!0)}function BR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends qt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return s(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){SH(i)}static subscribe(){let i=new As;return GR(t,e,i),i}static subscribeOnThisThread(i){return i<(_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Vse)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new pE(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=pH;return i}a(s,"getNATSTransaction")}function SH(e){let t=_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);TE(`${xR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,qR.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 fH,xR,qR,EH,hH,_l,dl,SE,mH,TE,GR,Vse,pH,dH,pE,HR,TH=Re(()=>{Ae();Os();fH=x(st()),xR=x(Fe()),qR=x(Tn());mc();EH=x(gS()),hH=x(wr()),_l=x(ee()),dl=x(M()),SE=x($());a(Gse,"start");a(Fse,"disableNATS");TE=fH.publishToStream,GR=EH.setSubscription;a(kse,"setPublishToStream");Vse=2;a($se,"assignReplicationSource");a(BR,"setNATSReplicator");a(SH,"publishSchema");pE=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,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||(SE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,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&&s.push(TE(`${xR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,qR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw SE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},HR=class extends pE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,hH.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};pH=new HR});var PH=g(wo=>{"use strict";var{isMainThread:NH,parentPort:El,threadId:gE}=require("worker_threads"),{Socket:Yse,createServer:Kse}=require("net"),{createServer:Wse,IncomingMessage:Qse}=require("http"),{createServer:zse}=require("https"),{readFileSync:Va,unlinkSync:gH,existsSync:Jse}=require("fs"),Zt=$(),De=ee(),Tt=M(),{server:bE}=(nr(),ne(Pi)),{WebSocketServer:jse}=require("ws"),{createServer:Xse}=require("tls"),{getTicketKeys:Zse,restartNumber:ene,getWorkerIndex:AE}=Ke(),{Headers:yH,appendHeader:tne}=(qu(),ne(pP)),{recordAction:fl,recordActionBinary:rne}=(Nn(),ne(iu)),{Request:wH,createReuseportFd:RH}=(mE(),ne(vR)),{checkMemoryLimit:sne}=Qi(),IH=require("tls"),AH=IH.createSecureContext;IH.createSecureContext=function(e){if(!e.cert||!e.key)return AH(e);let t={...e};delete t.key,delete t.cert;let r=AH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var CH=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(CH){let e;if(NH)e=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Zt.info("Could not close debugger",t)}});else{let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&AE()>=0&&(e=t+AE())}if(e){let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(s){Zt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,s.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){ene<=1&&Zt.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:Ape,CONFIG_PARAMS:nne}=Tt;De.initSync();var ine=De.get(nne.HTTP_SESSIONAFFINITY),_n={};wo.registerServer=WR;wo.httpServer=QR;wo.deliverSocket=KR;wo.startServers=DH;wo.when_components_loaded=null;bE.http=QR;bE.request=une;bE.socket=lne;bE.ws=_ne;var VR={},RE={},one,yi={},OE={},ane=[],$R=[];function DH(){return wo.when_components_loaded=zR().loadRootComponents(!0).then(()=>{El?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)KR(s,r,n);else if(t.requestId)cne(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){Zt.trace("received shutdown request",gE);for(let i in _n){let o=_n[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),l=0,d=setInterval(()=>{l++;let f=l>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}l===1?Zt.info(`Closing ${E.length} idle connections`):f&&Zt.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
27
|
+
Connection: close\r
|
|
28
|
+
\r
|
|
29
|
+
`))}},25).unref()}o.close?.(()=>{if(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&AE()==0)try{gH(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,gE),o.cantCleanupProperly||Zt.warn("Had to forcefully exit the thread",gE),process.exit(0)},5e3).unref()})}if(CH||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Zt.info("Could not close debugger",i)}}}).ref();let e=[];if(RH&&!ine)for(let t in _n){let r=_n[t];if(isNaN(t)&&AE()==0){Jse(t)&&gH(t),e.push(new Promise((n,i)=>{r.listen({path:t},()=>{n(),Zt.info("Domain socket listening on "+t)}).on("error",i)}));continue}let s;try{s=RH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Zt.trace("Listening on port "+t,gE)}).on("error",i)}))}Promise.all(e).then(()=>{El?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(DH,"startServers");NH||DH();function KR(e,t,r){let s=e?.read?e:new Yse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=_n[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=_n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Zt.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(KR,"deliverSocket");var OH=new Map;function cne(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=OH.get(n),r){case"connection":i=KR(void 0,t),OH.set(n,i),i.write=(c,u,_)=>(El.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(El.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),El.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(cne,"proxyRequest");function WR(e,t,r=!0){!+t&&t!==De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(De.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let s=_n[t];if(s){let n=s.lastServer||s;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",bH),n.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(s.cantCleanupProperly=!0),e.emit("request",i,o)}),s.lastServer=e}else _n[t]=e;e.on("unhandled",bH)}a(WR,"registerServer");function LH(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=[],De.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:De.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(LH,"getPorts");function QR(e,t){for(let{port:r,secure:s}of LH(t))MH(r,s,t?.isOperationsServer),typeof e=="function"?$R[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=s,WR(e,r,!1)),OE[r]=YR($R,r),one=YR(ane,r)}a(QR,"httpServer");function MH(e,t,r){if(!yi[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:De.get(s+"_keepAliveTimeout"),headersTimeout:De.get(s+"_headersTimeout"),requestTimeout:De.get(s+"_timeout")},i=De.get(s+"_mtls"),o=De.get(s+"_mtls_required");if(t){s=r?"operationsApi_":"";let u=De.get(s+"tls_privateKey"),_=De.get(s+"tls_certificate"),l=De.get(s+"tls_certificateAuthority");Object.assign(n,{allowHTTP1:!0,key:Va(u),ciphers:De.get("tls_ciphers"),cert:Va(_),ca:l&&Va(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Zse()})}let c=sne();yi[e]=(t?zse:Wse)(n,async(u,_)=>{try{let d=performance.now(),f=new wH(u,_);r&&(f.isOperationsServer=!0);let E=await OE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=UH(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 H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,yi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,b;if(!E.handlesHeaders){let H=E.headers||new yH;T?T.length>=0&&(typeof T=="string"?H.set("Content-Length",Buffer.byteLength(T)):H.set("Content-Length",T.length),b=!0):(H.set("Content-Length","0"),b=!0);let P=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(P+=", miss"),tne(H,"Server-Timing",P,!0),_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),b&&_.end(T)}let R=f.handlerPath,L=f.method;if(fl(S,"duration",R,L,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),rne(h<400,"success",R,L),!b)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let H=0;T.on("data",P=>{H+=P.length}),T.on("end",()=>{fl(performance.now()-p,"transfer",R,L),fl(H,"bytes-sent",R,L)})}else T?.then?T.then(H=>{_.end(H)},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?Zt.warn(d):Zt.info(d):Zt.error(d)}a(l,"onError")}),i&&(yi[e].mtlsConfig=i),t&&(yi[e].on("secureConnection",u=>{u._parent.startTime&&fl(performance.now()-u._parent.startTime,"tls-handshake",e),fl(u.isSessionReused(),"tls-reused",e)}),yi[e].isSecure=!0),WR(yi[e],e)}return yi[e]}a(MH,"getHTTPServer");function YR(e,t){let r=UH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(YR,"makeCallbackChain");function UH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new yH}}a(UH,"unhandled");function une(e,t){QR(e,{requestOnly:!0,...t})}a(une,"onRequest");function lne(e,t){let r;if(t.securePort){let s=De.get("tls_privateKey"),n=De.get("tls_certificate"),i=t.mtls?.certificateAuthority||De.get("tls_certificateAuthority");r=Xse({ciphers:De.get("tls_ciphers"),key:Va(s),cert:Va(n),ca:i&&Va(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),_n[t.securePort]=r}return t.port&&(r=Kse(e),_n[t.port]=r),r}a(lne,"onSocket");Object.defineProperty(Qse.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 _ne(e,t){let r;for(let{port:s,secure:n}of LH(t)){RE[s]||(RE[s]=new jse({server:r=MH(s,n)}),RE[s].on("connection",async(c,u)=>{try{let _=new wH(u);_.isWebSocket=!0;let l=OE[s](_),d=u.headers["sec-websocket-protocol"]||"",f=VR[s];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(_){Zt.warn("Error handling WebSocket connection",_)}}),RE[s].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=VR[s];o||(o=VR[s]=[]),o.push({listener:e,protocol:i}),OE[s]=YR($R,s)}return r}a(_ne,"onWebSocket");function bH(e,t){t.writeHead(404),t.end(`Not found
|
|
30
|
+
`)}a(bH,"defaultNotFound")});async function xH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await JR.get(e,{returnNonexistent:!0});n=new ZR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await JR.get(e);i&&i.delete()}n=new yE(e,t)}return s&&(s.id=e,s.user={username:t?.username},hl.put(s)),n}function jR(){return NE++,NE>65500&&(NE=1),NE}function XR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Si.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Xe(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var vH,wi,BH,HH,JR,hl,NE,yE,ZR,qH=Re(()=>{Ae();xu();vH=x(wr()),wi=x($());eo();BH=x(Ke()),HH=x(PH());nr();JR=ct({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"}]}}]}),hl=ct({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,BH.getWorkerIndex)()===0&&(async()=>{await HH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of hl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await tt.getUser(r.user.username)),Xe(r,()=>{try{XR(r,t)}catch{(0,wi.warn)("Failed to publish will",t)}hl.delete(e.id,r)})}})();a(xH,"getSession");NE=1;a(jR,"getNextMessageId");yE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)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===n),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,wi.trace)("Resuming subscription from",n,"from",o);let E=Si.getMatch(_);if(!E){let T=new Error(`The topic ${n} 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 b=T.split("/"),R;for(let P=0;P<b.length;P++)if(b[P].indexOf("+")>-1)if(b[P]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&R)throw new Error("Filters can not be combined");let L=!0;b[b.length-1]==="#"&&(b.length--,L=!1),R&&(s=a(P=>{let k=P.id;if(!Array.isArray(k)||L&&k.length!==b.length)return!1;for(let B=0;B<b.length;B++)if(b[B]!=="+"&&b[B]!==k[B])return!1;return!0},"filter"));let H=b.indexOf("+");f.url="/"+(H>-1?b.slice(0,H):b).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Xe(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of T)try{let R;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||s&&!s(b))continue;r?(b.topic=n,R=this.needsAcknowledge(b)):(b.acknowledge?.(),R=jR());let L=b.id;Array.isArray(L)&&(L=ga(L)),L==null&&(L=""),this.listener(h+"/"+L,b.value,R,t)}catch(R){(0,wi.warn)(R)}})(),T});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=jR();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(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,XR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let s=await hl.get(this.sessionId,r);s?.doesExist()&&await XR(s,s.data,r)}await hl.delete(this.sessionId,r)}).catch(s=>{(0,wi.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(XR,"publish");ZR=class extends yE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=jR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,wi.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,vH.getNextMonotonicTime)()),(0,wi.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),JR.put(this.sessionRecord)),t.qos}}});var rA={};Ye(rA,{bypassAuth:()=>dne,start:()=>fne});function dne(){VH=!0}function fne({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){Yr.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=FH(_,(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=>{Yr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},s))),(t||n)&&(c=e.socket(async _=>{let l;if(Yr.debug("Received connection for MQTT from",_.remoteAddress),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),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:l.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Yr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Yr.error(E)}else if(u.required)return Yr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&VH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,kH.getSuperUser)(),Yr.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:f}=FH(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Yr.info("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function FH(e,t,r,s,n){GH||(GH=!0,nu(d=>{wE>0&&d.push({metric:"mqtt-connections",connections:wE,byThread:!0})}));let i;wE++;let o,c={protocolVersion:4},u=(0,IE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wE--,i||(i=!0,o?.disconnect(),n.sessions.delete(o),ns(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await tt.getUser(d.username,d.password.toString(),r),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:s.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eA.error({username:s.username,status:Kr.AUTH_AUDIT_STATUS.FAILURE,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let R=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=xH({user:s,...d}),o=await o,n.sessions.add(o)}catch(R){return Yr.error(R),ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}ns(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,L,H,P)=>{try{let k=R.indexOf("/",1),B=k>0?R.slice(0,k):R;f({cmd:"publish",topic:R,payload:E(L),messageId:H||Math.floor(Math.random()*1e8),qos:P.qos},B)}catch(k){Yr.error(k),o?.disconnect(),n.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let L;try{L=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){Yr.error(H),L=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let L of d.unsubscriptions)R.push(o.removeSubscription(L)?0:17);f({cmd:"unsuback",granted:R,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=To(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,T)}catch(R){Yr.warn(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!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),n.sessions.delete(o),ns(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Yr.error(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,IE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return gi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var IE,kH,ml,Kr,tA,eA,Yr,VH,GH,wE,$H=Re(()=>{IE=require("mqtt-packet");qH();kH=x(ss());Aa();Nn();nr();ml=x(ee()),Kr=x(M()),tA=x($()),eA=(0,tA.loggerWithTag)("auth-event"),Yr=(0,tA.loggerWithTag)("mqtt"),VH=(0,ml.get)(Kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(dne,"bypassAuth");a(fne,"start");wE=0;a(FH,"onSocket")});var Of={};Ye(Of,{component_errors:()=>Ya,loadComponent:()=>CE,loadComponentDirectories:()=>ZH,setErrorReporter:()=>pne});function ZH(e,t){t&&(nA=t),e&&(iA=e);let r=[];if((0,Gs.existsSync)(sA)){let n=(0,Gs.readdirSync)(sA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(sA,o);r.push(CE(c,nA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(CE(s,nA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{XH=!0})}function pne(e){Sl=e}async function CE(e,t,r,s,n,i){if(!KH.has(e)){KH.set(e,!0),n&&(iA=n);try{let o;s&&(Ya=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Gs.existsSync)(c)?o=s?(0,jH.getConfigObj)():(0,WH.parseDocument)((0,Gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=oA;let u=[],_=s;for(let l in o){let d=o[l];if(Ya.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,R;for(;!(0,Gs.existsSync)(R=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,JH.getHdbBasePath)().length){R=null;break}if(R)f=await CE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=mne[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,ct(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if($a.isMainThread&&(f=await f.startOnMainThread?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,s&&p))for(let b of[T,S])try{if(+b&&!YH.includes(b)){let R=aA.get(cA.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&pl.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!hE)&&(YH.push(b),iH(b,R))}}catch(R){console.error("Error listening on socket",b,R,l)}if(t.isWorker&&(f=await f.start?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),iA.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,zH.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),R=b.indexOf("/*");if(R>-1&&d.files!==oA[l]?.files&&!(0,Gs.existsSync)(b.slice(0,R)))throw new Error(`The path '${b.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,gt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+L+H.slice(2):H==="."?"/"+L:"/"+L+"/"+H;let P,k,B;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,gt.join)(e,z)}else(B=b.indexOf("/*"))>-1&&(k=b.slice(0,B+1),P=(0,gt.relative)(e,k));let J=!1;if($a.isMainThread&&f.setupDirectory&&(J=await f.setupDirectory?.(H,k,t)),t.isWorker&&f.handleDirectory&&(J=await f.handleDirectory?.(H,k,t)),J)continue;for(let z of await(0,QH.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:j,dirent:Te}=z;_=!0;let ce=(0,gt.relative)(e,j).replace(/\\/g,"/");if(P)if(ce.startsWith(P))ce=ce.slice(P.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let de=H+(H.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let Le=await hne(j);$a.isMainThread&&await f.setupFile?.(Le,de,j,t),t.isWorker&&await f.handleFile?.(Le,de,j,t)}else $a.isMainThread&&await f.setupDirectory?.(de,j,t),t.isWorker&&await f.handleDirectory?.(de,j,t)}catch(Le){Le.message=`Could not load ${Te.isFile()?"file":"directory"} '${j}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Le.message}`,Sl?.(Le),((0,Ka.getWorkerIndex)()===0?console:pl.default).error(Le),t.set(d.path||"/",new Tl(Le)),Ya.set(s?l:(0,gt.basename)(e),Le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Sl?.(h),((0,Ka.getWorkerIndex)()===0?console:pl.default).error(h),t.set(d.path||"/",new Tl(h),null,!0),Ya.set(s?l:(0,gt.basename)(e),h.message)}}if($a.isMainThread&&!XH&&i&&(0,Ka.watchDir)(e,async()=>ZH()),o.extensionModule)return await t_((0,gt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Sl?.(new Error(l)),((0,Ka.getWorkerIndex)()===0?console:pl.default).error(l),Ya.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Sl?.(o),t.set("",new Tl(o))}}}var Gs,gt,$a,WH,aA,cA,QH,Ka,pl,zH,JH,Ene,jH,hne,sA,iA,XH,nA,Ya,mne,oA,YH,KH,Sl,Tl,bf=Re(()=>{Gs=require("fs"),gt=require("path"),$a=require("worker_threads"),WH=require("yaml"),aA=x(ee()),cA=x(M());cb();db();fb();a0();QB();eH();QH=x(require("fast-glob")),Ka=x(Ke()),pl=x($());Hh();nr();zH=x(se());Os();Ae();oH();JH=x(ee()),Ene=x(_H());hf();TH();$H();jH=x(Pr());mE();({readFile:hne}=Gs.promises),sA=aA.get(cA.CONFIG_PARAMS.COMPONENTSROOT),iA=new Map,Ya=new Map;a(ZH,"loadComponentDirectories");mne={REST:kf,rest:kf,graphqlSchema:Bh,jsResource:qh,fastifyRoutes:yR,login:Fh,static:wR,operationsApi:Ene,customFunctions:{},http:{},clustering:FR,authentication:Gu,mqtt:rA},oA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(oA,"static",{value:{files:"web/**"}});YH=[],KH=new Map;a(pne,"setErrorReporter");a(CE,"loadComponent");Tl=class extends qt{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 zR=g((Qpe,tx)=>{var{isMainThread:ex}=require("worker_threads"),{getTables:Sne}=(Ae(),ne(Ge)),{loadComponentDirectories:Tne,loadComponent:gne}=(bf(),ne(Of)),{resetResources:Rne}=(xu(),ne(mP)),Ane=og(),One=Pr(),{dirname:bne}=require("path"),{getConnection:Nne}=st(),yne=ee(),wne=M(),uA=new Map;async function Ine(e=!1){!ex&&yne.get(wne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nne();try{ex&&await Ane()}catch(s){console.error(s)}let t=Rne();Sne(),t.isWorker=e,await gne(bne(One.getConfigFilePath()),t,"hdb",!0,uA),await Tne(uA,t);let r=[];for(let[s]of uA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Ine,"loadRootComponents");tx.exports.loadRootComponents=Ine});var Ke=g((Jpe,Ci)=>{"use strict";var{Worker:Cne,MessageChannel:Dne,parentPort:dn,isMainThread:EA,threadId:Lne,workerData:Fn}=require("worker_threads"),{PACKAGE_ROOT:Mne}=M(),{join:ix,isAbsolute:Une,extname:Pne}=require("path"),{server:ox}=(nr(),ne(Pi)),{watch:vne,readdir:Bne}=require("fs/promises"),{totalmem:rx}=require("os"),gl=M(),ax=ee(),kn=$(),{randomBytes:Hne}=require("crypto"),{_assignPackageExport:xne}=require("../index"),qne=M(),sx=1024*1024,Ii=[],Es=[],Gne=50,hA=1e4,Fne="restart",cx="request_thread_info",ux="resource_report",lx="thread_info",_x="added-port",kne="ack",lA;xne("threads",Es);Ci.exports={startWorker:_A,restartWorkers:pA,shutdownWorkers:Wne,workers:Ii,setMonitorListener:tie,onMessageFromWorkers:Qne,onMessageByType:Sx,broadcast:Jne,broadcastWithAcknowledgement:Xne,setChildListenerByType:Kne,getWorkerIndex:dx,getWorkerCount:fx,getTicketKeys:hx,setMainIsWorker:$ne,setTerminateTimeout:Vne,restartNumber:Fn?.restartNumber||1};Es.onMessageByType=Sx;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var mA;function Vne(e){hA=e}a(Vne,"setTerminateTimeout");function dx(){return Fn?Fn.workerIndex:mA?0:void 0}a(dx,"getWorkerIndex");function fx(){return Fn?Fn.workerCount:mA?1:void 0}a(fx,"getWorkerCount");function $ne(e){mA=e}a($ne,"setMainIsWorker");var Ex=1,DE;function hx(){return DE||(DE=EA?Hne(48):Fn.ticketKeys,DE)}a(hx,"getTicketKeys");Object.defineProperty(ox,"workerIndex",{get(){return dx()}});Object.defineProperty(ox,"workerCount",{get(){return fx()}});var mx={[cx](e,t){Zne(t)},[ux](e,t){eie(t,e)}};function _A(e,t={}){let r=process.constrainedMemory?.()||rx();r=Math.min(r,rx(),2e4*sx);let s=ax.get(gl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/sx/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new Dne;_.existingPort=u,i.push(_),o.push(_.port2)}Pne(e)||(e+=".js");let c=new Cne(Une(e)?e:ix(Mne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:Ex=t.threadCount,name:t.name,restartNumber:Ci.exports.restartNumber,ticketKeys:hx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:_x,port:u,threadId:c.threadId},[u]);return ME(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_A(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ii.splice(Ii.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Gne?(t.unexpectedRestarts=c.unexpectedRestarts+1,_A(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{mx[u.type]?.(u,c)}),Ii.push(c),sie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(_A,"startWorker");var Yne=[gl.THREAD_TYPES.HTTP];async function pA(e=null,t=Math.max(Ex>3,1),r=!0){if(EA){if(r){let{loadRootComponents:o}=zR();await o()}Ci.exports.restartNumber++,t<1&&(t=t*Ii.length);let s=[],n=[];for(let o of Ii.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ci.exports.restartNumber,type:gl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Yne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),hA*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===qne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=_f();r&&(e==="http"||!e)&&ax.get(gl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else dn.postMessage({type:Fne,workerType:e})}a(pA,"restartWorkers");function Kne(e,t){mx[e]=t}a(Kne,"setChildListenerByType");function Wne(e){return pA(e,1/0,!1)}a(Wne,"shutdownWorkers");var px=[];function Qne(e){px.push(e)}a(Qne,"onMessageFromWorkers");var dA=new Map;function Sx(e,t){let r=dA.get(e);r||dA.set(e,r=[]),r.push(t)}a(Sx,"onMessageByType");var zne=10;async function Jne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>zne&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(Jne,"broadcast");var LE=new Map,jne=1;function Xne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=jne++,i=a(()=>{LE.delete(n),--r===0&&t(),s!==dn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,LE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of LE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(Xne,"broadcastWithAcknowledgement");function Zne(e){e.postMessage({type:lx,workers:Tx()})}a(Zne,"sendThreadInfo");function Tx(){let e=Date.now();return Ii.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(Tx,"getChildWorkerInfo");function eie(e,t){e.resources=t,e.resources.updated=Date.now()}a(eie,"recordResourceReport");var fA;function tie(e){fA=e}a(tie,"setMonitorListener");var rie=1e3,nx=!1;function sie(){nx||(nx=!0,setInterval(()=>{for(let e of Ii){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}fA&&fA()},rie).unref())}a(sie,"startMonitoring");var nie=1e3;if(dn){ME(dn);for(let e=0,t=Fn.addPorts.length;e<t;e++){let r=Fn.addPorts[e];r.threadId=Fn.addThreadIds[e],ME(r)}setInterval(()=>{let e=process.memoryUsage();dn.postMessage({type:ux,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},nie).unref(),lA=a(()=>new Promise((e,t)=>{dn.on("message",r),dn.postMessage({type:cx});function r(s){s.type===lx&&(dn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else lA=Tx;Ci.exports.getThreadInfo=lA;function ME(e,t){Es.push(e),e.on("message",r=>{if(r.type===_x)r.port.threadId=r.threadId,ME(r.port);else if(r.type===kne){let s=LE.get(r.id);s&&s()}else{for(let n of px)n(r,e);let s=dA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(ME,"addPort");if(EA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Bne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(ix(s,i.name));try{for await(let{filename:i}of vne(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await pA(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Ci.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else dn.on("message",async e=>{let{type:t}=e;t===gl.ITC_EVENT_TYPES.SHUTDOWN&&(Ci.exports.restartNumber=e.restartNumber,dn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Lne),process.exit(0)},hA).unref())})});var TC={};Ye(TC,{AUDIT_STORE_OPTIONS:()=>Cx,createAuditEntry:()=>o_,openAuditStore:()=>BE,readAuditEntry:()=>Dt,setAuditRetention:()=>oie,transactionKeyEncoder:()=>Ix});function BE(e){let t=e.auditStore=e.openDB(Nx.AUDIT_STORE_NAME,Cx);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=UE){clearTimeout(s),s=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()-SA})){if((_[0]&15)===RA){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=iie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,SA/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,vE.getWorkerIndex)()===(0,vE.getWorkerCount)()-1&&n(UE),t}function oie(e,t=UE){SA=e,UE=t}function o_(e,t,r,s,n,i,o){let c=Dx[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?Wa.setFloat64(0,s):hs.set(sm),u=9),f(0),f(t),d(r),Wa.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.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,hs,u);let p=u-h-1;p>127?p>16383?(OA.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),Wa.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(Wa.setUint16(u,E|32768),u+=2):E<1056964608?(Wa.setUint32(u,E|3221225472),u+=4):(hs[u]=255,Wa.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new AA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:Dx[s&7],tableId:i,get recordId(){return bx(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?bx(e,l,d):void 0},getValue(f,E,h){if(s&TA||s&gA&&!E)return f.decoder.decode(e.subarray(t.position));if(s&gA&&h)return bA(f.getEntry(this.recordId),h,f)}}}catch(t){return OA.error("Reading audit entry error",t,e),{}}}function bx(e,t,r){let s=e.subarray(t,r);return(0,Qa.readKey)(s,0,r-t)}var Qa,PE,Nx,yx,vE,wx,OA,hs,Wa,Ix,Cx,SA,iie,UE,TA,gA,gx,RA,Rx,Ax,Ox,Dx,AA,Hi=Re(()=>{Qa=require("ordered-binary"),PE=x(ee()),Nx=x(dt()),yx=x(M()),vE=x(Ke()),wx=x(Q());Oc();OA=x($());HE();(0,PE.initSync)();hs=Buffer.alloc(1024),Wa=new DataView(hs.buffer,hs.byteOffset,1024),Ix={writeKey(e,t,r){return e===Ac?(t.set(Ac,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)}},Cx={encoding:"binary",keyEncoder:Ix},SA=(0,wx.convertToMS)((0,PE.get)(yx.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,iie=1e3,UE=1e4;a(BE,"openAuditStore");a(oie,"setAuditRetention");TA=16,gA=32,gx=1,RA=2,Rx=3,Ax=4,Ox=5,Dx={put:gx|TA,[gx]:"put",delete:RA,[RA]:"delete",message:Rx|TA,[Rx]:"message",invalidate:Ax,[Ax]:"invalidate",patch:Ox|gA,[Ox]:"patch"};a(o_,"createAuditEntry");a(Dt,"readAuditEntry");AA=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(bx,"readKeySafely")});var NA={};Ye(NA,{add:()=>xE,applyReverse:()=>Lx,getRecordAtTime:()=>bA,rebuildUpdateBefore:()=>qE});function xE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function qE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,xE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function Lx(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=aie[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=Mx}}function bA(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Dt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":Lx(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===Mx&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.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]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var aie,Mx,HE=Re(()=>{Hi();a(xE,"add");xE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};aie={add:xE};a(qE,"rebuildUpdateBefore");a(Lx,"applyReverse");Mx={};a(bA,"getRecordAtTime")});function Wr(e){return e[It]||(e[It]=Object.create(null))}function $E(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},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 ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(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 ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(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 ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Wr(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 ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Wr(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 ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Wr(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 ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Wr(this)[c]=l},"set")}_={get(){let l=this[It];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[_e]?.[c];return f.update(E)}return f}let d=this[_e]?.[c];if(d&&typeof d=="object"){let f=Px(d,o);if(f)return l||(l=this[It]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[It];return u?.[o]!==void 0?u[o]:this[_e]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[It],c;for(let _ in o){c||(c=Object.assign({},this[_e]));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[_e])),Object.assign(c,this)),c||this[_e]}),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 Px(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){if(n?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=n}},$E(r,t)),new r(e)):new GE(e);case Array:let s=new kE(e.length);s[_e]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Px(o,t?.elements)),s[n]=o}return s;default:return e}}function nd(e){let t=e[It],r;for(let n in t){r||(r=Object.assign({},e[_e]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=nd(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Co(e,t=e[It]){let r;if(Ux.call(e,_e)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Co(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[_e]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=NA[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Co(n);r[s]=n}return r?Object.freeze(r):Ux.call(e,_e)?e[_e]:e}function FE(e){let t=e[_e];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Io]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[_e]===n){if(FE(i))return!0}else return!0}}else{let r=e[It];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[_e]===i){if(FE(n))return!0}else return!0}else return!0}}return!1}var ms,It,GE,Ux,Io,kE,VE,id=Re(()=>{Os();ms=x(se());HE();It=Symbol("own-data");a(Wr,"getChanges");a($E,"assignTrackedAccessors");a(Px,"trackObject");GE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=t}};$E(GE,{});a(nd,"collapseData");Ux=Object.prototype.hasOwnProperty;a(Co,"deepFreeze");a(FE,"hasChanges");Io=Symbol.for("has-array-changes"),kE=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()}};kE.prototype.constructor=Array;VE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lp={};Ye(Lp,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>_e,Resource:()=>qt,snake_case:()=>uie,transformForSelect:()=>KE});function uie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vx(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Rl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new wA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Rl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Qr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.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=n.id??null,c==null&&(_=!0))}else c=n??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 Xe(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 YE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new YE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new xx.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function yA(e,t,r){let s=e[_e];if(s){let n=e[It];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function KE(e,t){let r=t?.propertyResolvers,s=t[Oe],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):yA(c,r,s)(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(yA(u,r,s));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(yA(u,r,s)),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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=KE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var Bx,Hx,xx,Oe,Me,ps,_e,cie,qt,YE,Rl,wA,Os=Re(()=>{Bx=require("crypto");mc();Hx=require("../index"),xx=x(se());id();eo();Gf();Oe=Symbol.for("context"),Me=Symbol.for("primary-key"),ps=Symbol("is-collection"),_e=Symbol("stored-record"),cie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}static get=Qr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=KE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Qr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):zr(t,"put")},{hasContent:!0,type:"update"});static patch=Qr(function(t,r,s,n){return t.patch?t.patch(n,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=Qr(function(t,r,s,n){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Bx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Xe(s,()=>{let i=new this(n,s),o=i.update?i.update(r):zr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Qr(function(t,r,s,n){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Qr(function(t,r,s,n){return t.connect?t.connect(n,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Qr(function(t,r,s,n){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.publish?t.publish(n,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=Qr(function(t,r,s,n){let i=t.search?t.search(r):zr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=KE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Qr(function(t,r,s,n){return t.search?t.search(n,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=Qr(function(t,r,s,n){return t.copy?t.copy(n,r):zr(t,"copy")},{type:"create"});static move=Qr(function(t,r,s,n){return t.move?t.move(n,r):zr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[Me],t,this[Oe]);zr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return qf(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&cie[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:vx(t,this),isCollection:Rl}}let i=vx(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Me]===t&&_.constructor===c),n)return n;if(u.push(n=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 n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new As}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new As}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[Oe]}};qt.prototype[Oe]=null;(0,Hx._assignPackageExport)("Resource",qt);a(uie,"snake_case");YE=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(vx,"pathToId");wA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Qr,"transactional");a(zr,"missingMethod");a(yA,"selectFromObject");a(KE,"transformForSelect")});function Gx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;za||((0,WE.onMessageByType)(qx,l=>{Fx(l.path)}),za=Object.create(null));let o=za[n]||(za[n]=[]);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=ga(t);let u=new CA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function Fx(e,t){if(!za)return;let r=za[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ga(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>=n){(0,IA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,IA.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(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function kx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,WE.broadcast)({type:qx,path:n}),Fx(n,!0)})}}var IA,WE,qx,za,SSe,CA,Vx=Re(()=>{IA=x($()),WE=x(Ke());mc();xu();Hi();qx="transaction",SSe=Buffer.alloc(4096);a(Gx,"addSubscription");CA=class extends As{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Fx,"notifyFromTransactionData");a(kx,"listenToCommits")});var uR={};Ye(uR,{coerceType:()=>QE,makeTable:()=>jE,setServerUtilities:()=>Sie,updateResource:()=>zE});function jE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),kx(i,u);let T=om(i,s,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(B=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(H=K);let z,j=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,ql,Gl,Yn,JA=!1,fh,Wq=i.getRange({start:!1,end:!1}).constructor,Qq=10,zq=6;h&&ZA();class ze extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),y.length>0)if(y.length===1){let U=y[0];return(G,C,v)=>{if(G?.source!==U)return U[D](C,v,G)}}else return(U,G,C)=>{let v=[];for(let F of y){if(U?.source===F)break;v.push(F[D](G,C,U))}return Promise.all(v)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],A=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,U,G)=>{if(!y?.source)return N[D](U,G,y)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let D=!1,y=a(async(U,G)=>{let C=U.value,v=U.table?rt[c][U.table]:ze;if(c===ks.SYSTEM_SCHEMA_NAME&&(U.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),U.id===void 0&&(U.id=C[v.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let F=await v.getResource(U.id,G,Ja);switch(U.type){case"put":return F._writeUpdate(C,!0,Ja);case"patch":return F._writeUpdate(C,!1,Ja);case"delete":return F._writeDelete(Ja);case"publish":return F._writePublish(C,Ja);case"invalidate":return F.invalidate(Ja);default:Ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&p==null&&(p=!0);let G=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Lo.getWorkerIndex)()):(0,Lo.getWorkerIndex)()===0,C=U&&G&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let F of C)try{if(!(F.type==="transaction"?F.writes[0]:F)){Ze.error("Bad subscription event",F);continue}if(F.source=m,v)if(F.beginTxn)v.resolve();else{y(F,v);continue}if(F.type==="end_txn")continue;let be=Xe(F,()=>{if(F.type==="transaction"){let te=[];for(let Pe of F.writes)try{te.push(y(Pe,F))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(F),ae}return Promise.all(te)}else if(F.type==="define_schema"){let te=this.attributes.slice(0),Pe;for(let ae of F.attributes)te.find(qe=>qe.name===ae.name)||(te.push(ae),Pe=!0);Pe&&(ct({table:n,database:c,attributes:te,origin:"cluster"}),Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return F.beginTxn?(v=F,y(F,F),new Promise(te=>{v.resolve=te})):y(F,F)});D&&(await be,Il.signalUserChange(new Cl.UserEventMsg(process.pid))),F.onCommit&&(be?.then?be.then(F.onCommit):F.onCommit())}catch(oe){Ze.error("error in subscription handler",oe)}}}catch(U){Ze.error(U)}})(),this}static getResource(m,O,w){let N=super.getResource(m,O,w);if(m!=null){tc(m);try{if(N.hasOwnProperty(_e))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!w?.async||i.cache?.get(m),D=gs(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,O,{transaction:y},A,U=>{if(U?zE(N,U):N[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let G=hh(m,U,O,N);if(G)return D?.disregardReadTxn(),N[DA]=!0,MA(G,C=>(zE(N,C),N))}return N})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return N}ensureLoaded(){let m=hh(this[Me],this[Jr],this[Oe]);if(m)return this[DA]=!0,MA(m,O=>{this[Jr]=O,this[_e]=O.value,this[yl]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&ZA(),ze.audit=m}static coerceId(m){return m===""?null:QE(m,H)}static async dropTable(){if(delete rt[c][n],c===o){for(let m of S)l.remove(ze.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ze.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));Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=ze.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:n,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,O){let w=kl(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,A=O?.select;if(N?.length>0||JA&&A){if(O||(O={}),A){let D=N?.length>0&&LA(N,"read");O.select=A.map(y=>{let U=y.name||y;if(!D||D[U]){let G=Yn[U]?.definition?.tableClass;if(G){if(y.name||(y={name:y}),!G.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(D=>D.read&&!Yn[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let w=kl(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"update");for(let D in O)if(!A[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(m,O){if(this[ps]){let w=kl(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return kl(m)?.delete}update(m,O){if(!gs(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[It]=m):(N=this[It],N&&(m=Object.assign(N,m)),this[It]=N=m)),this._writeUpdate(this[It],O),this}addTo(m,O){if(typeof O=="number")this[Al]===Yx?this.set(m,(+this.getProperty(m)||0)+O):(this[Al]||this.update(),this.set(m,new VE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Oe],w=this[Me];tc(w),gs(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Jr],nodeName:this[Oe]?.nodeName,before:Le.invalidate?.bind(this,O,w),beforeIntermediate:Be.invalidate?.bind(this,O,w),commit:(A,D)=>{if(D?.version>A)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);T(w,y,this[Jr],A,Ol,h,this[Oe],0,"invalidate")}})}static evict(m,O,w){let N=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==w))){if(L){if(i.hasLock(m,A.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return T(m,D,A,w,bl,null,null,0,null,!0)}return i.ifVersion(m,w,()=>{Fl(m,O,null)}),h?T(m,null,A,w,bl,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=n,m.schema||=c,jx.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,w){let N=this[Oe],A=gs(N),D=this[Me];tc(D);let y=this[Jr];this[Al]=O?Yx:hie;let U={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:G=>{m||(m=this[It]),O||m&&FE(m)?N?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(G):B.type==="String"?new Date(G).toISOString():G),O&&(t&&m[t]!==D&&(m[t]=D),k&&(y?.value?m[k.name]=y?.value[k.name]:m[k.name]=k.type==="Date"?new Date(G):k.type==="String"?new Date(G).toISOString():G),m=Co(m))):A.removeWrite(U)},before:O?Le.put?()=>Le.put(N,D,m):null:Le.patch?()=>Le.patch(N,D,m):Le.put?()=>Le.put(N,D,Co(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(N,D,m):null:Be.patch?()=>Be.patch(N,D,m):Be.put?()=>Be.put(N,D,Co(this)):null,commit:(G,C,v)=>{if(v){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Jr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[It]=m,this[yl]=G;let F=C?.value,oe=m;if(this[Al]=0,C?.version>=G)if(h){let ae=C.localTime,qe=C.version;for(;oe&&(ae>G||qe>=G&&ae>0);){let re=u.get(ae),X=Dt(re);if(qe=X.version,qe>G){if(X.type==="patch"){let ge=X.getValue(i);oe=qE(oe,ge)}else if(X.type==="put"||X.type==="delete")return}else if(qe===G)return;ae=X.previousLocalTime}}else{if(O)return;oe=qE(oe,F)}let be;if(O?be=oe:(this[_e]=F,be=O?oe:Co(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=m),Fl(D,F,be);let Pe=O?"put":"patch";T(D,be,C,G,0,h,N,N.expiresAt||(f?f+Date.now():0),Pe,!1,te)}};A.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let O of this.search(m))(await ze.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=gs(this[Oe]),w=this[Me];tc(w);let N=this[Oe];return O.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:Le.delete?.bind(this,N,w),beforeIntermediate:Be.delete?.bind(this,N,w),commit:(A,D,y)=>{let U=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),zE(this,D)),!(D?.version>A)&&(Fl(this[Me],U),Ze.trace("Write delete entry",w,A),h||p?(T(w,null,this[Jr],A,0,h,this[Oe],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let O=this[Oe],w=gs(O);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(N=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(N));let A,D={};function y(X,ge){let He;switch(ge){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');He=!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 "+ge)}let Vs=He&&{},Kn;for(let $e of X){if($e.conditions){$e.conditions=y($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,es=Ht==null?H:Bn(S,Ht);if(es){if(He){let $s=Hs(Ht),xt=Vs[$s];xt?(xt.push($e),Kn=!0):Vs[$s]=[$e]}(es.type||vg[$e.comparator])&&($e[1]===void 0?$e.value=G($e.value,es):$e[1]=G($e[1],es))}else if(Ht!=null)throw(0,Ss.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Kn)for(let $e in Vs){let Ht=Vs[$e],es=Ht.length;if(es>1)for(let $s=0;$s<es;$s++){let xt=Ht[$s];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Wn=0;Wn<es;Wn++){let vo=Ht[Wn];(vo.comparator==="le"||vo.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,vo.value],X.splice(X.indexOf(vo),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Wn=0;Wn<es;Wn++)if(Wn!==$s){let vo=Ht[Wn];X.splice(X.indexOf(vo),1)}break}}}return X}a(y,"prepareConditions");function U(X,ge){if(m.enforceExecutionOrder)return X;for(let He of X)He.conditions&&(He.conditions=U(He.conditions,He.operator));return X.length>1&&ge!=="or"?(0,Jx.sortBy)(X,xf(ze)):X}a(U,"orderConditions");function G(X,ge){return Array.isArray(X)?X.map(He=>QE(He,ge)):QE(X,ge)}a(G,"coerceTypedValues");let C=m.operator;(N.length>0||C)&&(N=y(N,C));let v=typeof m.sort=="object"&&m.sort,F;if(v&&C!=="or"){let X=v.attribute;if(A=N.find(ge=>Hs(ge.attribute)===Hs(X)),!A){if(!Bn(S,X))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);A={attribute:X,comparator:"sort"},N.push(A)}A.descending=!!v.descending}N=U(N,C),v&&(N[0]===A?v.next&&(F={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&N.splice(N.indexOf(A),1),F=v));let oe=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:C,postOrdering:F,selectApplied:!!oe};let be=w.useReadTxn(),te=Bg(N,C,ze,be,m,O,(X,ge)=>jA(X,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;F||(te=re(te));let ae=ze.transformEntryForSelect(oe,O,be,D,Pe,!0),qe=ze.transformToOrderedSelect(te,oe,F,be,O,ae);function re(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(re,"applyOffset"),F&&(qe=re(qe)),qe.onDone=()=>{qe.onDone=null,w.doneReadTxn()},qe.selectApplied=!0,qe.getColumns=()=>{if(oe){let X=[];for(let ge of oe)ge==="*"?X.push(...S.map(He=>He.name)):X.push(ge.name||ge);return X}return S.map(X=>X.name)},qe}static transformToOrderedSelect(m,O,w,N,A,D){let y=new Wq;if(w){m=jA(m,O,N,A,null);let U;y.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,oe=w.dbOrderedAttribute,be,te,Pe=!0;function ae(re){let X=re.next&&ae(re.next),ge=re.descending;return(He,Vs)=>{let Kn=mh(He,re.attribute,N),$e=mh(Vs,re.attribute,N),Ht=ge?(0,Mo.compareKeys)($e,Kn):(0,Mo.compareKeys)(Kn,$e);return Ht===0?X?.(He,Vs)||0:Ht}}a(ae,"createComparator");let qe=ae(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};U=[],be&&U.push(be);do if(re=await v.next(),re.done){if(F=!0,U.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),oe){let ge=mh(X,oe,N);if(Pe)Pe=!1,te=ge;else if(ge!==te){te=ge,be=X;break}}U.push(X)}while(!0);return w.isGrouped,U.sort(qe),C=U[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),v.return()},throw(){y.onDone&&y.onDone(),v.throw()}}};let G=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let F=O[v],oe;if(F.name===C.attribute[0]){for(oe=F.sort||(F.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else F===C.attribute[0]&&(O[v]=oe={name:F,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(D);return y}static transformEntryForSelect(m,O,w,N,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let y;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(y=!0);let U,G=a(function(C){let v;if(C!=null){if(fh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,O,{transaction:w,lazy:m?.length<4},this.isSync,F=>F),C?.then)return C.then(G.bind(this));v=C?.value}if(y&&(C.metadataFlags&(Ol|bl)||C.expiresAt&&C.expiresAt<Date.now())){let F=hh(C.key??C,C,O);if(F?.then)return F.then(G)}}if(v==null)return D?Do.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let F,oe=a((te,Pe)=>{let ae;typeof te=="object"?ae=te.name:ae=te;let qe=Yn?.[ae],re;if(qe){let X=N?.[ae];if(X)if(X.hasMappings){let He=qe.from?v[qe.from]:Hs(C.key);re=X.get(He),re||(re=[])}else re=X.fromRecord?.(v);else re=qe(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let Vs=qe.definition?.tableClass||ze;U||(U={});let Kn=U[ae]||(U[ae]=Vs.transformEntryForSelect(ae===te?null:te.select||(Array.isArray(te)?te:null),O,w,X,A));if(Array.isArray(He)){let $e=[],Ht=Vs.transformToOrderedSelect(He,te.select,typeof te.sort=="object"&&te.sort,O,w,Kn)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),es=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(es);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),$s=es(Ht.next());$s&&(F||(F=[]),F.push($s));return}else if(He=Kn.call(this,He),He?.then){F||(F=[]),F.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(ge))):ge(re);return}else re=v[ae],re&&typeof re=="object"&&ae!==te&&(re=ze.transformEntryForSelect(te.select||te,O,w,null)({value:re}));Pe(re,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,te=>{be=te});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((te,Pe)=>{te==="*"?m[Pe]=v:oe(te,ae=>be[Pe]=ae)});else{be={};let te=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,qe)=>{ae===void 0&&te&&(ae=null),be[qe]=ae})}else throw new Ss.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>be):be}return v},"transform");return G}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:n,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,w=Gx(ze,this[Me]??null,function(y,U,G,C){try{let v=U.getValue?.(i,O);if(!v&&U.type==="patch"&&O){let F=i.getEntry(y);F?.version===U.version?v=F.value:v=U.getValue?.(i,!0,G),U.type="put"}this.send({id:y,timestamp:G,value:v,version:U.version,type:U.type,beginTxn:C})}catch(v){Ze.error(v)}},m.startTime||0,this[ps]);this[ps]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[ps]){if(D){if(A)throw new Ss.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let G=Dt(U);if(G.tableId!==s)continue;let C=G.recordId;if(N==null||Qx(N,C)){let v=G.getValue(i,O,y);w.send({id:C,timestamp:y,value:v,version:G.version,type:G.type})}w.startTime=y}}else if(A){let y=[];for(let{key:U,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(G);if(C.tableId!==s)continue;let v=C.recordId;if(N==null||Qx(N,v)){let F=C.getValue(i,O,U);if(y.push({id:v,timestamp:U,value:F,version:C.version,type:C.type}),--A<=0)break}}catch(C){Ze.error("Error getting history entry",U,C)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:G,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Mo.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,timestamp:C,value:U,version:G,type:"put"})}else{A&&!D&&(D=0);let y=this[Jr]?.localTime;if(y===im&&(i.cache?.delete(N),this[Jr]=i.getEntry(N),Ze.trace("re-retrieved record",y,this[Jr]?.localTime),y=this[Jr]?.localTime),Ze.trace("Subscription from",D,"from",N,y),D<y){let U=[],G=y;do{let C=u.get(G);if(C){m.omitCurrent=!0;let v=Dt(C),F=v.getValue(i,O,G);O&&(v.type="put"),U.push({id:N,value:F,timestamp:G,...v}),G=v.previousLocalTime}else break;A&&A--}while(G>D&&A!==0);for(let C=U.length;C>0;)w.send(U[--C]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,timestamp:y,value:this,version:this[yl],type:"put"})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[_e]||this[Al])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let w=gs(this[Oe]),N=this[Me]||null;tc(N);let A=this[Oe];w.addWrite({key:N,store:i,entry:this[Jr],nodeName:A?.nodeName,validate:()=>{A?.source||(w.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,N,m),beforeIntermediate:Be.publish?.bind(this,A,N,m),commit:(D,y,U)=>{y===void 0&&p&&!h&&ph(),T(N,y?.value??null,y,y?.version||D,0,!0,A,y?.expiresAt,"message",!1,m)}})}validate(m,O){let w,N=a((A,D,y)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let G=0,C=U.length;G<C;G++){let v=U[G],F=N(A[v.name],v,y+"."+v.name);F&&(A[v.name]=F)}if(D.sealed&&A!=null&&typeof A=="object")for(let G in A)U.find(C=>C.name===G)||(w||(w=[])).push(`Property ${G} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string`);break;case"Boolean":typeof A!="boolean"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let U=0,G=A.length;U<G;U++){let C=A[U],v=N(C,D.elements,y+"[*]");v&&(A[U]=v)}}else(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let y=S[A];if(!y.relationship&&(!O||y.name in m)){let U=N(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(d)for(let A in m)S.find(D=>D.name===A)||(w||(w=[])).push(`Property ${A} is not allowed`);if(w)throw new Ss.ClientError(w.join(". "))}getUpdatedTime(){return this[yl]}wasLoadedFromSource(){return L?!!this[DA]:void 0}static async addAttributes(m){let O=S.slice(0);for(let w of m){if(!w.name)throw new Ss.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");O.push(w)}return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static async removeAttributes(m){let O=S.filter(w=>!m.includes(w.name));return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,w=5e3,N=1e3,A;O>w&&!m?.exactCount&&(A=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:A}))y!=null&&D++;if(A){let y=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let U=A*2,G=(D+y)/U,C=Math.pow((D-y+1)/A/2,2)+G*(1-G)/U,v=Math.max(Math.sqrt(C)*O,1),F=Math.round(G*O),oe=Math.max(F-1.96*v,0),be=Math.min(F+1.96*v,O),te=Math.pow(10,Math.round(Math.log10(v)));return te>F&&(te=te/10),D=Math.round(F/te)*te,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Yn=this.propertyResolvers={$id:(m,O,w)=>({value:w.key}),$updatedtime:(m,O,w)=>w.version,$record:(m,O,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,O.to)m.elements?.definition?(Yn[m.name]=m.resolve=(w,N,A)=>{let D=w[O.from?O.from:t],y=m.elements.definition.tableClass;return A?La({attribute:O.to,value:D},gs(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${n}" must have an array type referencing a table as the elements`);else if(O.from){let w=m.definition||m.elements?.definition;w?(Yn[m.name]=m.resolve=(N,A,D)=>{let y=N[O.from];if(y!==void 0){if(m.elements){let U,G=y.map(C=>{let v=D?w.tableClass.primaryStore.getEntry(C,{transaction:gs(A).getReadTxn()}):w.tableClass.get(C,A);return v?.then&&(U=!0),v});return O.filterMissing?U?Promise.all(G).then(C=>C.filter(zx)):G.filter(zx):U?Promise.all(G):G}return D?w.tableClass.primaryStore.getEntry(y,{transaction:gs(A).getReadTxn()}):w.tableClass.get(y,A)}},m.set=(N,A)=>{if(Array.isArray(A)){let D=A.map(y=>y[Me]||y[w.tableClass.primaryKey]);N[O.from]=D}else{let D=A[Me]||A[w.tableClass.primaryKey];N[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}$E(this,this)}static async deleteHistory(m=0){let O;for(let{key:w,value:N}of u.getRange({start:0,end:m}))await Nl(),Dt(N).tableId===s&&(O=u.remove(w));await O}static async*getHistory(m=0,O=1/0){for(let{key:w,value:N}of u.getRange({start:m,end:O})){await Nl();let A=Dt(N);A.tableId===s&&(yield{id:A.recordId,localTime:w,version:A.version,type:A.type,value:A.getValue(i,!0,w),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return O;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let A=0;do{await Nl();let D=u.get(N);if(D){let y=Dt(D);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(A<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}ze.updatedAttributes();let Jq=ze.prototype;return Jq[Eie]=!0,f&&ze.setTTLExpiration(f/1e3),J&&jq(),ze;function Fl(K,m,O){let w;for(let N in r){let A=r[N],D=A.isIndexing,y=O?.[N],U=m?.[N];if(y===U&&!D)continue;w=!0;let G=A.indexNulls,C=(0,wl.getIndexedValues)(U,G);if(C){$x&&A.prefetch(C.map(v=>({key:v,value:K})),Wx);for(let v=0,F=C.length;v<F;v++)A.remove(C[v],K)}if(C=(0,wl.getIndexedValues)(y,G),C){$x&&A.prefetch(C.map(v=>({key:v,value:K})),Wx);for(let v=0,F=C.length;v<F;v++)A.put(C[v],K)}}return w}a(Fl,"updateIndices");function tc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Kx)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,Mo.writeKey)(K,mie,0)>Kx)throw new Error("Primary key size is too large: "+K.length);return!0}a(tc,"checkValidId");function Eh(K,m,O,w,N){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return N(null,K);let D=i.getEntry(K,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),N(D,K)},"whenPrefetched");return w?A():ce>0?(ce--,A()):new Promise((D,y)=>{ce===0?(ce--,i.prefetch([K],()=>{U(),G()})):(j.push(K),Te.push(G),j.length>zq&&(ce--,U()));function U(){if(j.length>0){let C=Te;i.prefetch(j,()=>{ce===-1?U():ce++;for(let v of C)v()}),j=[],Te=[],de>2&&de--}else ce=de,de<Qq&&de++}a(U,"prefetch");function G(){try{D(A())}catch(C){y(C)}}a(G,"load")})}a(Eh,"loadLocalRecord");function kl(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return pie;let O=m[c],w,N=O?.tables;if(N)return N[n];if(c==="data"&&(w=m[n])&&!w.tables)return w}a(kl,"getTablePermissions");function hh(K,m,O,w){if(L){let N;if(O.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Ol|bl)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,ns(!N,"cache-hit",n)),N){let A=XA(K,m,O).then(D=>(D?.value?.[_e]&&Ze.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(D=>Ze.warn(D)),O?.onlyIfCached&&!w.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return A}}}a(hh,"ensureLoadedFromSource");function gs(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 O=m.next;if(!O)return m=m.next=new Zi,m.lmdbDb=i,m;m=O}while(!0)}else return new rd}a(gs,"txnForContext");function mh(K,m,O){if(!K)return;fh=K;let w=K.value||K.deref?.()||(fh=i.getEntry(K.key))?.value;if(typeof m=="object"){let A=Yn,D=w;for(let y=0,U=m.length;y<U;y++){let G=m[y],C=A?.[G];D=C&&D?C(D,O,!0)?.value:D?.[G],A=C?.definition?.tableClass?.propertyResolvers}return D}let N=Yn[m];return N?N(w,O):w[m]}a(mh,"getAttributeValue");function jA(K,m,O,w,N){let A=N?.length,D={transaction:w,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(G,C){let v=G?.value;if(!v)return Do.SKIP;for(let F=0;F<A;F++)if(!y?.includes(F)&&!N[F](v,G))return Do.SKIP;return C!==void 0&&(G.key=C),G}if(a(U,"processEntry"),A>0||!K.hasEntries){let G=K.map(C=>{if(y=null,typeof C=="object"&&C.key!==void 0)return A>0?U(C):C;if(C==null)return Do.SKIP;for(let v=0;v<A;v++){let oe=N[v].idFilter;if(oe){if(!oe(C))return Do.SKIP;y||(y=[]),y.push(v)}}return Eh(C,O,D,!1,U)});return Array.isArray(K)&&(G=G.filter(C=>C!==Do.SKIP)),G.hasEntries=!0,G}return K}a(jA,"transformToEntries");async function XA(K,m,O){let w=m?.metadataFlags,N=m?.version,A,D;if(!i.attemptLock(K,N,()=>{clearTimeout(D);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ol|bl)?A(XA(K,i.getEntry(K),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(K,N)},fie)});let y=m?.value,U={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},G=O?.responseHeaders;return new Promise((C,v)=>{let F;MA(Xe(U,async oe=>{let be=performance.now(),te,Pe,ae;try{for(let ge of ze.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(U.source=ge,te=await ge.get(K,U),te))break;ae=w&Ol;let re=U.lastModified||ae&&N;Pe=ae||re>N||!y,re||(re=(0,wl.getNextMonotonicTime)());let X=performance.now()-be;if(qr(X,"cache-resolution",n),G&&sg(G,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),oe.timestamp=re,f&&!U.expiresAt&&(U.expiresAt=Date.now()+f),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)}F=!0,C({version:re,value:te})}catch(re){re.message+=` while resolving record ${K} for ${n}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:N,value:y}),Ze.trace(re.message,"(returned stale record)")):v(re),U.transaction.abort();return}if(O?.noCacheStore){U.transaction.abort();return}gs(U).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,X)=>{if(X?.version!==N)return;let ge=Fl(K,y,te);te?(Be.put?.(U,K,te),T(K,te,X,re,0,h&&Pe||null,U,U.expiresAt,"put",!!ae)):(Be.delete?.(U,K),h||p?T(K,null,X,re,0,h&&Pe||null,U,0,"delete",!!ae):i.remove(K,N))}})}),()=>{i.unlock(K,N)},oe=>{i.unlock(K,N),F&&Ze.error("Error committing cache update",oe)})})}a(XA,"getFromSource");function ph(){if(Ct!==ql&&(ql=Ct,(0,Lo.getWorkerIndex)()===(0,Lo.getWorkerCount)()-1)){if(Gl&&clearTimeout(Gl),!Ct)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())/Ct)*Ct+K.getTime(),O=a(w=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),Gl=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(w+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gl);return}let N=50,A=new Array(N),D=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:U,value:G,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;G===null&&!h&&C+die<Date.now()?F=i.remove(U,C):v&&v+E<Date.now()&&(F=ze.evict(U,G,C),y++),F&&(await A[D],A[D]=F.catch(oe=>{Ze.error("Cleanup error",oe)}),++D>=N&&(D=0)),await Nl()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ph,"scheduleCleanup");function ZA(){z=u?.addDeleteRemovalCallback(s,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(ZA,"addDeleteRemoval");function jq(){(0,Lo.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=J.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:w}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(w);N?.value?N.value[K]<Date.now()&&ze.evict(w,N.value,N.version):i.ifVersion(w,N?.version,()=>m.remove(O,w)),await Nl()}}catch(K){Ze.error("Error in evicting old records",K)}},_ie).unref()}a(jq,"runRecordExpirationEviction")}function LA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Wx(){}function Sie(e){jx=e}function QE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!Tie.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,JE.autoCast)(e):e}function Qx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function MA(e,t,r){return e?.then?e.then(t,r):t(e)}function zE(e,t){e[Jr]=t,e[_e]=t?.value??null,e[yl]=t?.version}function zx(e){return e!=null}function Fs(e){try{return JSON.stringify(e)}catch{return e}}var ks,Do,wl,Jx,Dl,Ss,Il,Cl,Ze,Mo,Lo,JE,lie,jx,_ie,die,$x,fie,yl,Eie,Jr,Al,Yx,hie,DA,Ja,Ol,bl,mie,Kx,pie,BSe,Tie,Nl,eE=Re(()=>{ks=x(M()),Do=require("lmdb"),wl=x(wr()),Jx=require("lodash");Os();Xp();Dl=x(ee());Vx();Ss=x(se()),Il=x(Rn()),Cl=x(Cs());Ae();Gf();Ze=x($());id();eo();Mo=require("ordered-binary"),Lo=x(Ke());Hi();JE=x(Q());Oc();Nn();HE();qu();lie=new Uint8Array(9);lie[8]=192;_ie=6e4,die=864e5;Dl.initSync();$x=Dl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),fie=1e4,yl=Symbol.for("version"),Eie=Symbol.for("incremental-update"),Jr=Symbol("entry"),Al=Symbol("is-saving"),Yx=1,hie=2,DA=Symbol("loaded-from-source"),Ja={isNotification:!0,ensureLoaded:!1},Ol=1,bl=8,mie=Buffer.allocUnsafeSlow(8192),Kx=1978,pie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},BSe=(0,JE.convertToMS)(Dl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(jE,"makeTable");a(LA,"attributesAsObject");a(Wx,"noop");a(Sie,"setServerUtilities");Tie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(QE,"coerceType");a(Qx,"isDescendantId");Nl=a(()=>new Promise(setImmediate),"rest");a(MA,"when");a(zE,"updateResource");a(zx,"exists");a(Fs,"stringify")});var Ge={};Ye(Ge,{database:()=>Jc,databases:()=>rt,dropDatabase:()=>sS,dropTableMeta:()=>Nie,getDatabases:()=>Ls,getTables:()=>gie,onUpdatedTable:()=>kR,readMetaDb:()=>Ll,resetDatabases:()=>Rie,table:()=>ct,tables:()=>Ir});function gie(){return rh||Ls(),Ir||{}}function Ls(){if(rh)return rt;rh=!0,Za=new Map;let e=(0,er.getHdbBasePath)()&&(0,et.join)((0,er.getHdbBasePath)(),Xr.DATABASES_DIR_NAME),t=(0,er.get)(Xr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(Xr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,jr.existsSync)(e)?e:(0,et.join)((0,er.getHdbBasePath)(),Xr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,jr.existsSync)(e))for(let r of(0,jr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ll((0,et.join)(e,r.name),null,s)}if((0,jr.existsSync)((0,Xa.getBaseSchemaPath)())){for(let r of(0,jr.readdirSync)((0,Xa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Xa.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Xa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,jr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);Ll((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,jr.existsSync)(n))for(let o of(0,jr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&Ll((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,jr.existsSync)(u)&&Ll(u,o,r,null,!0)}}for(let r in rt){let s=Za.get(r);if(s){let n=rt[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete rt[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[sh]}}return Za=null,rt}}function Rie(){rh=!1;for(let[,e]of Di)e.needsDeletion=!0;Ls();for(let[e,t]of Di)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Di.delete(e));return rt}function Ll(e,t,r=vA,s,n){let i=new UA.default(e,!1);try{let o=Di.get(e);o?o.needsDeletion=!1:(o=(0,ZE.open)(i),Di.set(e,o));let c=new Uo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(XE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,jr.existsSync)(s)&&(i.path=s,_=(0,ZE.open)(i),_.isLegacy=!0):_=BE(o));let l=tq(r),d=l[sh],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 j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,er.get)(Xr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,z=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(ja)||0)&&u.putSync(ja,L+1):(S.tableId=L=u.get(ja),L||(L=1),u.putSync(ja,L+1),u.putSync(S.key,S));let j=new Uo.default(!S.is_hash_attribute,S.is_hash_attribute);H=a_(o.openDB(S.key,j)),H.rootStore=o,H.tableId=L}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!b[j.name]){let ce=new Uo.default(!j.is_hash_attribute,j.is_hash_attribute);b[j.name]=o.openDB(j.key,ce),b[j.name].indexNulls=j.indexNulls}let Te=R.find(ce=>ce.name===j.name);Te?R.splice(R.indexOf(Te),1,j):R.push(j)}}catch(Te){Ts.error("Error trying to update attribute",j,R,b,Te)}}if(!T){T=rq(l,E,jE({primaryStore:H,auditStore:_,audit:P,sealed:z,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of BA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function tq(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Ir:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),Za&&!Za.has(e)){let r=new Set;t[sh]=r,Za.set(e,r)}return t}function rq(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=vA),Ls();let r=tq(e),s=(0,et.join)((0,er.getHdbBasePath)(),Xr.DATABASES_DIR_NAME),n=(0,er.get)(Xr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,er.get)(Xr.CONFIG_PARAMS.STORAGE_PATH)||((0,jr.existsSync)(s)?s:(0,et.join)((0,er.getHdbBasePath)(),Xr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Di.get(o);if(!c){let u=new UA.default(o,!1);c=(0,ZE.open)(u),Di.set(o,c)}return c}async function sS(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let n=t[r].primaryStore.rootStore;Di.delete(n.path),n.status==="open"&&(await n.close(),await Xx.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[sh]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=vA);let d=Jc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new Uo.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=BE(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,er.get)(Xr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),s&&(p.eviction=s),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),Ts.trace(`${e} table loading, opening primary store`);let J=new Uo.default(!1,!0),z=e+"/",j=a_(d.openDB(z,J));j.rootStore=d,T=d.dbisDb=d.openDB(XE.INTERNAL_DBIS_NAME,b),j.tableId=T.get(ja),j.tableId||(j.tableId=1),T.putSync(ja,j.tableId+1),p.tableId=j.tableId,E=rq(f,e,jE({primaryStore:j,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(z,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(XE.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[z,j]=B.toString().split("/");if(j===""&&(j=J.name),j){if(z!==e)continue}else j=z;if(!i.find(ce=>ce.name===j)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[z];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let z=T.get(J);if(B.isPrimaryKey){if(z=z||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),s&&(Te.eviction=+s),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==B.type||z.indexed!==B.indexed||z.nullable!==B.nullable||JSON.stringify(z.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(z.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new Uo.default(!0,!1),ce=d.openDB(J,Te);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,k(),z=T.get(J),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,B.lastIndexedKey=z?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),B.indexNulls===void 0&&(B.indexNulls=!0),P.push(B)),T.put(J,B)),z?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else j&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),Ts.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=bie(E,P,H):R&&eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of BA)B(E,l!=="cluster");return(r||s||n)&&E.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function bie(e,t,r){try{let s=e.schemaVersion;await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,Zx.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Ml.workerData&&Ml.workerData.restartNumber!==eq.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Aie?await n:u>Oie&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function Nie({table:e,database:t}){let r=Jc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kR(e){BA.push(e)}var er,XE,ZE,et,jr,Xa,Uo,UA,Xr,Xx,PA,Zx,eh,th,Ml,Ts,eq,vA,sh,Ir,rt,ja,BA,rh,Di,Za,Aie,Oie,Ae=Re(()=>{er=x(ee()),XE=x(dt()),ZE=require("lmdb"),et=require("path"),jr=require("fs"),Xa=x(Je());eE();Uo=x(c_()),UA=x(l_()),Xr=x(M()),Xx=x(require("fs-extra")),PA=require("../index"),Zx=x(wr()),eh=x(Rn()),th=x(Cs()),Ml=require("worker_threads"),Ts=x($()),eq=x(Ke());Hi();Oc();vA="data",sh=Symbol("defined-tables");(0,er.initSync)();Ir=Object.create(null),rt=Object.create(null);(0,PA._assignPackageExport)("databases",rt);(0,PA._assignPackageExport)("tables",Ir);ja=Symbol.for("next-table-id"),BA=[],Di=new Map;a(gie,"getTables");a(Ls,"getDatabases");a(Rie,"resetDatabases");a(Ll,"readMetaDb");a(tq,"ensureDB");a(rq,"setTable");a(Jc,"database");a(sS,"dropDatabase");a(ct,"table");Aie=1e3,Oie=10;a(bie,"runIndexing");a(Nie,"dropTableMeta");a(kR,"onUpdatedTable")});var Q=g((YSe,mq)=>{"use strict";var Li=require("path"),aq=require("fs-extra"),br=$(),sq=require("fs-extra"),nh=require("os"),yie=require("net"),wie=require("recursive-iterator"),at=M(),Iie=MO(),nq=require("papaparse"),ih=require("moment"),{inspect:Cie}=require("util"),iq=require("is-number"),$Se=require("lodash"),Die=require("minimist"),Lie=require("https"),Mie=require("http"),{hdb_errors:oh}=se(),Uie=/^((\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)))$/,cq=require("util").promisify(setTimeout),Pie=100,vie=5,Bie="",Hie=4,oq={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};mq.exports={isEmpty:Zr,isEmptyOrZeroLength:fn,arrayHasEmptyValues:Gie,arrayHasEmptyOrZeroLengthValues:Fie,buildFolderPath:kie,isBoolean:uq,errorizeMessage:xie,stripFileExtension:$ie,autoCast:Yie,autoCastJSON:lq,autoCastJSONDeep:xA,removeDir:Kie,compareVersions:Wie,isCompatibleDataVersion:Qie,escapeRawValue:zie,unescapeValue:Jie,stringifyProps:jie,timeoutPromise:Zie,isClusterOperation:toe,getClusterUser:soe,checkGlobalSchemaTable:roe,getHomeDir:dq,getPropsFilePath:Xie,promisifyPapaParse:noe,removeBOM:fq,createEventPromise:ioe,checkProcessRunning:ooe,checkSchemaTableExist:aoe,checkSchemaExists:Eq,checkTableExists:hq,getStartOfTomorrowInSeconds:coe,getLimitKey:uoe,isObject:Vie,isNotEmptyAndHasValue:qie,autoCasterIsNumberCheck:_q,backtickASTSchemaItems:loe,isPortTaken:eoe,createForkArgs:_oe,autoCastBoolean:doe,async_set_timeout:cq,getTableHashAttribute:foe,doesSchemaExist:Eoe,doesTableExist:hoe,stringifyObj:moe,ms_to_time:poe,changeExtension:Soe,getEnvCliRootPath:qA,noBootFile:Toe,httpRequest:goe,transformReq:Roe,convertToMS:Aoe,PACKAGE_ROOT:at.PACKAGE_ROOT};function xie(e){return e instanceof Error?e:new Error(e)}a(xie,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function qie(e){return!Zr(e)&&(e||e===0||e===""||uq(e))}a(qie,"isNotEmptyAndHasValue");function fn(e){return Zr(e)||e.length===0||e.size===0}a(fn,"isEmptyOrZeroLength");function Gie(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(Gie,"arrayHasEmptyValues");function Fie(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(Fie,"arrayHasEmptyOrZeroLengthValues");function kie(...e){try{return e.join(Li.sep)}catch{console.error(e)}}a(kie,"buildFolderPath");function uq(e){return Zr(e)?!1:e===!0||e===!1}a(uq,"isBoolean");function Vie(e){return Zr(e)?!1:typeof e=="object"}a(Vie,"isObject");function $ie(e){return fn(e)?Bie:e.slice(0,-Hie)}a($ie,"stripFileExtension");function Yie(e){return Zr(e)||e===""||typeof e!="string"?e:oq[e]!==void 0?oq[e]:_q(e)===!0?Number(e):Uie.test(e)?new Date(e):e}a(Yie,"autoCast");function lq(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(lq,"autoCastJSON");function xA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=xA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=xA(r);s!==r&&(e[t]=s)}return e}else return lq(e)}a(xA,"autoCastJSONDeep");function _q(e){if(e.startsWith("0.")&&iq(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&iq(e))}a(_q,"autoCasterIsNumberCheck");async function Kie(e){if(fn(e))throw new Error(`Directory path: ${e} does not exist`);try{await sq.emptyDir(e),await sq.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Kie,"removeDir");function Wie(e,t){if(fn(e)){br.info("Invalid current version sent as parameter.");return}if(fn(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Wie,"compareVersions");function Qie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Qie,"isCompatibleDataVersion");function zie(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(zie,"escapeRawValue");function Jie(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(Jie,"unescapeValue");function jie(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+nh.EOL}!fn(s)&&s[0]===";"?r+=" "+s+n+nh.EOL:fn(s)||(r+=s+"="+n+nh.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(jie,"stringifyProps");function dq(){let e;try{e=nh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(dq,"getHomeDir");function Xie(){let e=Li.join(dq(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return aq.existsSync(e)||(e=Li.join(__dirname,"../","hdb_boot_properties.file")),e}a(Xie,"getPropsFilePath");function Zie(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Zie,"timeoutPromise");async function eoe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=yie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(eoe,"isPortTaken");function toe(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(toe,"isClusterOperation");function roe(e,t){let r=(Ae(),ne(Ge)).getDatabases();if(!r[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(roe,"checkGlobalSchemaTable");function soe(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||fn(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(soe,"getClusterUser");function noe(){nq.parsePromise=function(e,t,r){return new Promise(function(s,n){nq.parse(e,{header:!0,transformHeader:fq,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(noe,"promisifyPapaParse");function fq(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(fq,"removeBOM");function ioe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Cie(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(ioe,"createEventPromise");async function ooe(e){let t=!0,r=0;do await cq(Pie*r++),(await Iie.findPs(e)).length>0&&(t=!1);while(t&&r<vie);if(t)throw new Error(`process ${e} was not started`)}a(ooe,"checkProcessRunning");function aoe(e,t){let r=Eq(e);if(r)return r;let s=hq(e,t);if(s)return s}a(aoe,"checkSchemaTableExist");function Eq(e){let{getDatabases:t}=(Ae(),ne(Ge));if(!t()[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Eq,"checkSchemaExists");function hq(e,t){let{getDatabases:r}=(Ae(),ne(Ge));if(!r()[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(hq,"checkTableExists");function coe(){let e=ih().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=ih().utc().unix();return e-t}a(coe,"getStartOfTomorrowInSeconds");function uoe(){return ih().utc().format("DD-MM-YYYY")}a(uoe,"getLimitKey");function loe(e){try{let t=new wie(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){br.error("Got an error back ticking items."),br.error(t)}}a(loe,"backtickASTSchemaItems");function _oe(e){return[e]}a(_oe,"createForkArgs");function doe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(doe,"autoCastBoolean");function foe(e,t){let{getDatabases:r}=(Ae(),ne(Ge)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(foe,"getTableHashAttribute");function Eoe(e){let{getDatabases:t}=(Ae(),ne(Ge));return t()[e]!==void 0}a(Eoe,"doesSchemaExist");function hoe(e,t){let{getDatabases:r}=(Ae(),ne(Ge));return r()[e]?.[t]!==void 0}a(hoe,"doesTableExist");function moe(e){try{return JSON.stringify(e)}catch{return e}}a(moe,"stringifyObj");function poe(e){let t=ih.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(poe,"ms_to_time");function Soe(e,t){let r=Li.basename(e,Li.extname(e));return Li.join(Li.dirname(e),r+t)}a(Soe,"changeExtension");function qA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Die(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(qA,"getEnvCliRootPath");var HA;function Toe(){if(HA)return HA;let e=qA();qA()&&aq.pathExistsSync(Li.join(e,at.HDB_CONFIG_FILE))&&(HA=!0)}a(Toe,"noBootFile");function goe(e,t){let r;return e.protocol==="http:"?r=Mie:r=Lie,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(goe,"httpRequest");function Roe(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Roe,"transformReq");function Aoe(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(Aoe,"convertToMS")});var ee=g((WSe,gq)=>{"use strict";var GA=require("fs-extra"),Po=require("path"),pq=require("os"),Ooe=require("properties-reader"),Pl=$(),Ul=Q(),ue=M(),ah=Pr(),boe="Error initializing environment manager",ch="BOOT_PROPS_FILE_PATH",Sq=!1,Noe={[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},Vn={};gq.exports={BOOT_PROPS_FILE_PATH:ch,getHdbBasePath:yoe,setHdbBasePath:woe,get:Tq,initSync:Coe,setProperty:Ue,initTestEnvironment:Doe};function yoe(){return Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(yoe,"getHdbBasePath");function woe(e){Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(woe,"setHdbBasePath");function Tq(e){let t=ah.getConfigValue(e);return t===void 0?Vn[e]:t}a(Tq,"get");function Ue(e,t){Noe[e]&&(Vn[e]=t),ah.updateConfigObject(e,t)}a(Ue,"setProperty");function Ioe(){let e;try{e=Ul.getPropsFilePath(),GA.accessSync(e,GA.constants.F_OK|GA.constants.R_OK),Sq=!0;let t=Ooe(e);return Vn[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[ch]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Ioe,"doesPropFileExist");function Coe(e=!1){try{(Sq||Ioe()||Ul.noBootFile())&&(ah.initConfig(e),Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ah.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(boe),Pl.error(t),console.error(t),process.exit(1)}}a(Coe,"initSync");function Doe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Po.join(__dirname,"../../","unitTests");Vn[ch]=Po.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Po.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,pq.userInfo()?pq.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Po.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Po.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,Po.join(u,"envDir")),n&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,Tq(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ul.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,Ul.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Po.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ul.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ch}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(Doe,"initTestEnvironment")});var Nq=g((zSe,bq)=>{"use strict";var Oq=require("joi"),{string:vl,boolean:Rq,array:Loe}=Oq.types(),Aq=M(),Moe=je();bq.exports=Uoe;function Uoe(e){let t=Oq.object({operation:vl.valid(Aq.OPERATIONS_ENUM.ADD_NODE,Aq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:vl.required(),subscriptions:Loe.items({schema:vl.required(),table:vl.optional(),hash_attribute:vl.optional(),subscribe:Rq.required(),publish:Rq.required()}).min(1).required()});return Moe.validateBySchema(e,t)}a(Uoe,"updateRemoteSourceValidator")});var Bl=g((jSe,yq)=>{"use strict";var FA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};yq.exports=FA});var Lq=g((ZSe,Dq)=>{"use strict";var Poe=Nq(),$n=$(),kA=Fe(),wq=M(),VA=os(),Mi=st(),Iq=fu(),voe=Z_(),{Node:Boe,NodeSubscription:Cq}=fi(),$A=Bl(),YA=Q(),Hoe=ee(),{cloneDeep:xoe}=require("lodash"),{broadcast:qoe}=Ke();Dq.exports=Goe;async function Goe(e){try{let t=Poe(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=xoe(await VA.getNodeRecord(s)),c=!YA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!YA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Iq.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!YA.doesTableExist(f,E)){let h=new voe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Iq.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await Mi.createLocalTableStream(f,E)}if(f===wq.SYSTEM_SCHEMA_NAME&&await Mi.createLocalTableStream(f,E),c?(await Mi.updateConsumerIterator(f,E,s,"stop"),await Mi.updateRemoteConsumer(d,s),d.subscribe===!0&&await Mi.updateConsumerIterator(f,E,s,"start")):(await Mi.updateRemoteConsumer(d,s),d.subscribe===!0?await Mi.updateConsumerIterator(f,E,s,"start"):await Mi.updateConsumerIterator(f,E,s,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===f&&T.table===E){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Cq(f,E,d.publish,d.subscribe))}else i.push(new Cq(f,E,d.publish,d.subscribe))}c||(o=new Boe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await VA.upsertNodeRecord(u),qoe({type:"nats_update"}),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Hoe.get(wq.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await VA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Goe,"updateRemoteSource")});var vq=g((tTe,Pq)=>{"use strict";var Uq=require("joi"),{string:Mq}=Uq.types(),Foe=M(),koe=je();Pq.exports=Voe;function Voe(e){let t=Uq.object({operation:Mq.valid(Foe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Mq.required()});return koe.validateBySchema(e,t)}a(Voe,"removeRemoteSourceValidator")});var xq=g((sTe,Hq)=>{"use strict";var $oe=vq(),uh=$(),lh=Fe(),KA=M(),Yoe=os(),Koe=Q(),Bq=st(),Woe=ee(),_h=Bl(),{NodeSubscription:Qoe}=fi(),zoe=ra(),Joe=ri(),{broadcast:joe}=Ke(),Xoe=Woe.get(KA.CONFIG_PARAMS.CLUSTERING_NODENAME);Hq.exports=Zoe;async function Zoe(e){try{let t=$oe(e);if(t)return uh.error(`Validation error in removeRemoteSource: ${t.message}`),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await Yoe.getNodeRecord(r);if(Koe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return uh.error(i),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];uh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Qoe(c.schema,c.table,!1,!1);await Bq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Bq.updateRemoteConsumer(u,r)}let n=new zoe(KA.SYSTEM_SCHEMA_NAME,KA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Joe.deleteRecord(n),joe({type:"nats_update"}),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Xoe} successfully removed node '${r}'.`)}catch(t){uh.error(t);let r=t.message?t.message:t;return new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Zoe,"removeRemoteSource")});var kq=g((iTe,Fq)=>{"use strict";var dh=$(),Hl=M(),qq=Fe(),WA=ee(),eae=Q(),Gq=Bl(),tae=os(),rae=Dd(),sae=Lr();Fq.exports=nae;async function nae(e){try{dh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=eae.ms_to_time(t),s=new iae(WA.get(Hl.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await tae.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new rae(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await sae.update(i)}catch(n){dh.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return dh.trace("getRemoteSourceConfig response:",s),new Gq(qq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){dh.error(t);let r=t.message?t.message:t;return new Gq(qq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(nae,"getRemoteSourceConfig");function iae(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(iae,"ConfigResponseObject")});var Kq=g((aTe,Yq)=>{"use strict";var Vq=ee();Vq.initSync();var $q=st(),xl=$(),ec=M(),QA=Fe(),oae=Lq(),aae=xq(),cae=kq(),uae=Bl(),{encode:lae,decode:_ae}=require("msgpackr"),dae=gn(),fae=Zn(),Eae=require("util"),hae=M(),{isMainThread:mae,parentPort:pae}=require("worker_threads");Ke();var Sae=Eae.promisify(dae.setSchemaDataToGlobal),zA=Vq.get(ec.CONFIG_PARAMS.CLUSTERING_NODENAME);Yq.exports=Tae;async function Tae(){try{xl.notify("Starting reply service."),await Sae();let e=await $q.getConnection(),t=`${zA}.__request__`,r=e.subscribe(t,{queue:zA});await gae(r)}catch(e){xl.error(e)}}a(Tae,"initialize");async function gae(e){for await(let t of e){let r=_ae(t.data),s;switch(r.operation){case ec.OPERATIONS_ENUM.ADD_NODE:case ec.OPERATIONS_ENUM.UPDATE_NODE:s=await oae(r);break;case ec.OPERATIONS_ENUM.REMOVE_NODE:s=await aae(r);break;case ec.OPERATIONS_ENUM.CLUSTER_STATUS:s=await cae(r);break;case ec.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Rae();break;default:let n=`node '${zA}' reply service received unrecognized request operation`;xl.error(n),s=new uae(QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}xl.trace(s),t.respond(lae(s))}}a(gae,"handleRequest");async function Rae(){try{return{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await fae.describeAll()}}catch(e){return xl.error(e),{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Rae,"getRemoteDescribeAll");mae||pae.on("message",async e=>{let{type:t}=e;t===hae.ITC_EVENT_TYPES.SHUTDOWN&&$q.closeConnection()})});var Aae=Kq();(async()=>{try{await Aae()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|