harperdb 4.2.5 → 4.2.6

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/bin/lite.js CHANGED
@@ -1,20 +1,20 @@
1
- var LH=Object.create;var Na=Object.defineProperty;var DH=Object.getOwnPropertyDescriptor;var UH=Object.getOwnPropertyNames;var MH=Object.getPrototypeOf,PH=Object.prototype.hasOwnProperty;var a=(e,t)=>Na(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ve=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},bg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UH(t))!PH.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(s=DH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?LH(MH(e)):{},bg(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>bg(Na({},"__esModule",{value:!0}),e);var y=T((ene,Fg)=>{"use strict";var Pr=require("path"),vH=require("fs"),{relative:jse,join:Zse}=Pr,{existsSync:BH}=vH;function HH(){let e=__dirname;for(;!BH(Pr.join(e,"package.json"));){let t=Pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(HH,"getHDBPackageRoot");var Mn=HH(),yg="js",el=yg,qH="harperdb-config.yaml",FH="defaultConfig.yaml",GH="hdb",Ig=`harperdb.${el}`,wg=`customFunctionsServer.${el}`,xH=`restartHdb.${el}`,EE="HarperDB",Zu="Custom Functions",tl="Clustering Hub",rl="Clustering Leaf",kH="Clustering Ingest Service",VH="Clustering Reply Service",$H="foreground.pid",YH="hdb.pid",KH="data",WH={HDB:EE,CLUSTERING_HUB:tl,CLUSTERING_LEAF:rl,CLUSTERING_INGEST_SERVICE:kH,CLUSTERING_REPLY_SERVICE:VH,CUSTOM_FUNCTIONS:Zu,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"},QH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},zH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},JH={harperdb:EE,"clustering hub":tl,"clustering leaf":rl,"custom functions":Zu,custom_functions:Zu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},XH={CLUSTERING_HUB_PROC_DESCRIPTOR:tl,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl},fE={HDB:Pr.join(Mn,"server/harperdb"),CUSTOM_FUNCTIONS:Pr.join(Mn,"server/customFunctions"),CLUSTERING_HUB:Pr.join(Mn,"server/nats"),CLUSTERING_LEAF:Pr.join(Mn,"server/nats")},jH={HDB:Pr.join(fE.HDB,Ig),CUSTOM_FUNCTIONS:Pr.join(fE.CUSTOM_FUNCTIONS,wg)},ZH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pr.join(Mn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pr.join(Mn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pr.join(Mn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},eq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Cg="support@harperdb.io",tq="customer-success@harperdb.io",Lg=1,rq=4141,Dg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",sq="https://www.harperdb.io/product",nq=`For support, please submit a request at ${Dg} or contact ${Cg}`,Ug=`For license support, please contact ${tq}`,iq="None of the specified records were found.",oq="hash attribute not found",aq=`Your current license only supports ${Lg} role. ${Ug}`,cq="Your current license only supports 3 connections to a node.",uq="127.0.0.1",lq=1,_q=/^\.$/,dq=/^\.\.$/,fq="U+002E",Eq=/\//g,hq="U+002F",mq=/U\+002F/g,pq=/^U\+002E$/,Sq=/^U\+002EU\+002E$/,Tq="d",Rq=999999,gq="*",Aq="--max-old-space-size=",Oq="system",Nq="__hdb_hash",bq=".harperdb",yq=".hdb",Iq="keys",wq="hdb_boot_properties.file",Cq=".updateConfig.json",Lq="SIGTSTP",Dq=24,Uq=6e4,Mq=448,Pq="blob",vq="trash",Bq="database",Hq="schema",qq="transactions",Fq=".count",Gq="id",xq="PROCESS_NAME",Mg={SETTINGS_PATH_KEY:"settings_path"},Pg=require("lodash"),kq={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Vq={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},$q={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Yq={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"},Kq={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"},dr="hdb_internal:",Wq={CREATE_SCHEMA:dr+"create_schema",CREATE_TABLE:dr+"create_table",CREATE_ATTRIBUTE:dr+"create_attribute",ADD_USER:dr+"add_user",ALTER_USER:dr+"alter_user",DROP_USER:dr+"drop_user",HDB_NODES:dr+"hdb_nodes",HDB_USERS:dr+"hdb_users",HDB_WORKERS:dr+"hdb_workers",CATCHUP:dr+"catchup",SCHEMA_CATCHUP:dr+"schema_catchup",WORKER_ROOM:dr+"cluster_workers"},Qq={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"},zq="060493.ks",Jq=".license",Xq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},jq={CSV:".csv",JSON:".json"},Zq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},eF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ba={};ba[J.INSERT]=J.INSERT;ba[J.UPDATE]=J.UPDATE;ba[J.UPSERT]=J.UPSERT;ba[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var tF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},rF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},vg={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"},sF=Pg.invert(vg),nF={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"},N={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",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_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",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_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},Bg={settings_path:Mg.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY};for(let e in N){let t=N[e];Bg[t.toLowerCase()]=t}var iF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},oF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},aF={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"},cF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},uF={VERSION_DEFAULT:"2.2.0"},lF={DEVELOPMENT:8192,DEFAULT:512},_F={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"},dF={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"},fF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Hg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},EF=Symbol("metadata"),hF="__clustering__",mF=Object.values(Hg),pF=15984864e5,qg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},SF=Pg.invert(qg),TF={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"},RF=111,gF=`\r
2
- `,AF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},OF=["*","%"],NF="unauthorized_access",bF="func_val",yF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},IF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},wF={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"},CF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},LF={HTTP:"http"},DF={STOPPED:"stopped",ONLINE:"online"},UF="3.x.x",MF={SUCCESS:"success",FAILURE:"failure"},PF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Fg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:Cg,HDB_SUPPORT_URL:Dg,HDB_PRICING_URL:sq,SUPPORT_HELP_MSG:nq,LICENSE_HELP_MSG:Ug,HDB_PROC_NAME:Ig,HDB_PROC_DESCRIPTOR:EE,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl,CLUSTERING_HUB_PROC_DESCRIPTOR:tl,SYSTEM_SCHEMA_NAME:Oq,HASH_FOLDER_NAME:Nq,HDB_HOME_DIR_NAME:bq,UPDATE_FILE_NAME:Cq,LICENSE_KEY_DIR_NAME:Iq,BOOT_PROPS_FILE_NAME:wq,JOB_TYPE_ENUM:oF,JOB_STATUS_ENUM:Xq,SYSTEM_TABLE_NAMES:Yq,SYSTEM_TABLE_HASH_ATTRIBUTES:Kq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:jq,S3_BUCKET_AUTH_KEYS:Zq,VALID_SQL_OPS_ENUM:eF,GEO_CONVERSION_ENUM:rF,HDB_SETTINGS_NAMES:vg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:sF,SERVICE_ACTIONS_ENUM:tF,CLUSTER_MESSAGE_TYPE_ENUM:aF,CLUSTER_CONNECTION_DIRECTION_ENUM:cF,CLUSTER_EVENTS_DEFS_ENUM:_F,PERIOD_REGEX:_q,DOUBLE_PERIOD_REGEX:dq,UNICODE_PERIOD:fq,FORWARD_SLASH_REGEX:Eq,UNICODE_FORWARD_SLASH:hq,ESCAPED_FORWARD_SLASH_REGEX:mq,ESCAPED_PERIOD_REGEX:pq,ESCAPED_DOUBLE_PERIOD_REGEX:Sq,REG_KEY_FILE_NAME:zq,RESTART_TIMEOUT_MS:Uq,HDB_FILE_PERMISSIONS:Mq,DATABASES_DIR_NAME:Bq,LEGACY_DATABASES_DIR_NAME:Hq,TRANSACTIONS_DIR_NAME:qq,LIMIT_COUNT_NAME:Fq,ID_ATTRIBUTE_STRING:Gq,INSERT_MODULE_ENUM:Vq,UPGRADE_JSON_FIELD_NAMES_ENUM:$q,RESTART_CODE:Lq,RESTART_CODE_NUM:Dq,CLUSTER_OPERATIONS:ba,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Qq,HDB_INTERNAL_SC_CHANNEL_PREFIX:dr,INTERNAL_SC_CHANNELS:Wq,CLUSTERING_MESSAGE_TYPES:TF,HDB_FILE_SUFFIX:yq,BLOB_FOLDER_NAME:Pq,HDB_TRASH_DIR:vq,ORIGINATOR_SET_VALUE:RF,LICENSE_VALUES:uF,RAM_ALLOCATION_ENUM:lF,TIME_STAMP_NAMES_ENUM:Hg,TIME_STAMP_NAMES:mF,PERMS_UPDATE_RELEASE_TIMESTAMP:pF,SEARCH_NOT_FOUND_MESSAGE:iq,SEARCH_ATTRIBUTE_NOT_FOUND:oq,LICENSE_ROLE_DENIED_RESPONSE:aq,LICENSE_MAX_CONNS_REACHED:cq,BASIC_LICENSE_MAX_NON_CU_ROLES:Lg,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:rq,VALUE_SEARCH_COMPARATORS:qg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:SF,LICENSE_FILE_NAME:Jq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:dF,NEW_LINE:gF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:lq,MOMENT_DAYS_TAG:Tq,API_TURNOVER_SEC:Rq,LOOPBACK:uq,CODE_EXTENSION:el,WILDCARD_SEARCH_VALUE:gq,NODE_ERROR_CODES:fF,JAVASCRIPT_EXTENSION:yg,PERMS_CRUD_ENUM:AF,UNAUTHORIZED_PERMISSION_NAME:NF,SEARCH_WILDCARDS:OF,FUNC_VAL:bF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:yF,JWT_ENUM:IF,CLUSTERING_FLAG:hF,ITC_EVENT_TYPES:wF,CUSTOM_FUNCTION_PROC_NAME:wg,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Zu,SERVICES:CF,THREAD_TYPES:LF,MEM_SETTING_KEY:Aq,HDB_RESTART_SCRIPT:xH,PROCESS_DESCRIPTORS:WH,SERVICE_SERVERS:jH,SERVICE_SERVERS_CWD:fE,PROCESS_DESCRIPTORS_VALIDATE:JH,LAUNCH_SERVICE_SCRIPTS:ZH,LOG_LEVELS:zH,PROCESS_NAME_ENV_PROP:xq,LOG_NAMES:QH,PM2_PROCESS_STATUSES:DF,CONFIG_PARAM_MAP:Bg,CONFIG_PARAMS:N,HDB_CONFIG_FILE:qH,HDB_DEFAULT_CONFIG_FILE:FH,ROLE_TYPES_ENUM:eq,BOOT_PROP_PARAMS:Mg,INSTALL_PROMPTS:kq,HDB_ROOT_DIR_NAME:GH,CLUSTERING_PROCESSES:XH,FOREGROUND_PID_FILE:$H,PACKAGE_ROOT:Mn,PRE_4_0_0_VERSION:UF,DATABASES_PARAM_CONFIG:iF,METADATA_PROPERTY:EF,AUTH_AUDIT_STATUS:MF,AUTH_AUDIT_TYPES:PF,HDB_PID_FILE:YH,DEFAULT_DATABASE_NAME:KH,LEGACY_CONFIG_PARAMS:nF};hE()});var hE=T((sne,xg)=>{var vF=require("fast-glob"),{statSync:mE,existsSync:pE,readFileSync:BF,writeFileSync:HF}=require("fs"),{spawnSync:qF,spawn:FF,execFileSync:rne}=require("child_process"),{isMainThread:GF}=require("worker_threads"),{join:Pn,relative:Gg}=require("path"),{PACKAGE_ROOT:rs}=y(),{tmpdir:xF,platform:kF}=require("os");require("source-map-support").install();var VF=["resources","server","dataLayer","components"],ya="ts-build",SE,$F=__filename.endsWith("tsBuild.js");if($F){if(GF){let r;try{mE(Pn(rs,ya)),r=!0}catch{}if(r)for(let s of vF.sync(VF.map(n=>n+"/**/*.ts"),{cwd:rs})){let n=0,i=0;try{n=mE(Pn(rs,s)).mtimeMs-5e3,i=mE(Pn(rs,ya,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."),SE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),SE=!0;if(SE){let s=Pn(rs,"node_modules/.bin/tsc");kF()==="win32"&&(s+=".cmd");let n=qF(s,{cwd:rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Pn(xF(),"harperdb-tsc.pid"),o;if(pE(i))try{process.kill(+BF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=FF(s,["--watch"],{cwd:rs,detached:!0,stdio:"ignore"});HF(i,c.pid.toString()),c.unref()}}}}let e=xg.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=Gg(rs,s[0]),o;i.startsWith(ya)?o=Pn(rs,Gg(ya,i)):o=Pn(rs,ya,i);let c=Pn(o,r),u=c+".js";if(pE(u))return u;if(c.includes(".")&&pE(c))return c}return t(r,s,n)}}});var di={};ve(di,{server:()=>ct});var kg,ct,fr=Te(()=>{kg=require("../index"),ct={};(0,kg._assignPackageExport)("server",ct)});var TE=T((nne,Yg)=>{"use strict";var Vg=require("minimist");Yg.exports=YF;function YF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=$g(process.env),s=$g(Vg(process.argv))):(r=process.env,s=Vg(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(YF,"assignCMDENVVariables");function $g(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a($g,"objKeysToLowerCase")});var G=T((one,yE)=>{"use strict";var fi=require("fs-extra"),{workerData:KF,threadId:WF}=require("worker_threads"),en=require("path"),Qg=require("yaml"),zg=require("properties-reader"),ut=y(),Kg=TE(),QF=require("os"),{PACKAGE_ROOT:gE}=y(),{_assignPackageExport:zF}=require("../index"),wa={};for(let e in console)wa[e]||(wa[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Jg={STDOUT:"stdOut",STDERR:"stdErr"},JF=en.join(gE,"logs"),XF=en.join(gE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),jF=1e4,Zs,Is,$t,sl,nl,Ca,so,Ia;Ia===void 0&&Xg();yE.exports={notify:eA,fatal:tA,error:La,warn:bE,info:il,debug:NE,trace:OE,setLogLevel:iG,log_level:$t,loggerWithTag:ZF,suppressLogging:eG,initLogSettings:Xg,setupConsoleLogging:jg,logCustomLevel:sG,closeLogFile:AE,getLogFilePath:()=>Ca,OUTPUTS:Jg,AuthAuditLog:cG};zF("logger",yE.exports);function Xg(e=!1){try{if(Ia===void 0||e){AE();let t=nG(),r=Kg(["ROOTPATH"]);try{Ia=zg(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!fi.pathExistsSync(en.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:nl,to_file:Zs,to_stream:Is}=oG(r.ROOTPATH?en.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):Ia.get("settings_path"))),sl=ut.LOG_NAMES.HDB,Ca=en.join(nl,sl)}}catch(t){if(Ia=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=Kg(Object.keys(ut.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ut.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ut.CONFIG_PARAMS.LOGGING_LEVEL){$t=u;continue}if(c===ut.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===ut.CONFIG_PARAMS.LOGGING_FILE&&(Zs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=aG();Zs=Zs===void 0?n:Zs,Zs=Wg(Zs),Is=Is===void 0?i:Is,Is=Wg(Is),$t=$t===void 0?s:$t,nl=JF,sl=ut.LOG_NAMES.INSTALL,Ca=en.join(nl,sl);return}throw La("Error initializing log settings"),La(t),t}process.env.DEV_MODE&&(Is=!0),jg()}a(Xg,"initLogSettings");var RE=!0;function jg(){ro("error",La),ro("warn",bE),ro("log",il),ro("info",il),ro("debug",NE),ro("trace",OE)}a(jg,"setupConsoleLogging");function ro(e,t){console[e]=function(...r){if(RE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wa[e](...r)}}a(ro,"logConsole");function ZF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(eA),fatal:r(tA),error:r(La),warn:r(bE),info:r(il),debug:r(NE),trace:r(OE)};function r(s){return function(...n){return s(t,...n)}}}a(ZF,"loggerWithTag");function eG(e){try{RE=!1,e()}finally{RE=!0}}a(eG,"suppressLogging");var tG=KF?.name?.replace(/ /g,"-")||"main";function tn(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||tG+"/"+WF);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(tn,"createLogRecord");function Da(e){Zs&&Zg(e),Is&&process.stdout.write(e)}a(Da,"logStdOut");function ol(e){Zs&&Zg(e),Is&&process.stderr.write(e)}a(ol,"logStdErr");function Zg(e){rG(),so?fi.appendFileSync(so,e):wa.log(e)}a(Zg,"logToFile");function AE(){try{fi.closeSync(so)}catch{}so=null}a(AE,"closeLogFile");function rG(){if(!so){try{if(!Ca)debugger;so=fi.openSync(Ca,"a")}catch(e){wa.error(e)}setTimeout(()=>{AE()},jF).unref()}}a(rG,"openLogFile");function il(...e){Yt[$t]<=Yt.info&&Da(tn("info",e))}a(il,"info");function OE(...e){Yt[$t]<=Yt.trace&&Da(tn("trace",e))}a(OE,"trace");function La(...e){Yt[$t]<=Yt.error&&ol(tn("error",e))}a(La,"error");function NE(...e){Yt[$t]<=Yt.debug&&Da(tn("debug",e))}a(NE,"debug");function eA(...e){Yt[$t]<=Yt.notify&&Da(tn("notify",e))}a(eA,"notify");function tA(...e){Yt[$t]<=Yt.fatal&&ol(tn("fatal",e))}a(tA,"fatal");function bE(...e){Yt[$t]<=Yt.warn&&ol(tn("warn",e))}a(bE,"warn");function sG(e,t,...r){t===Jg.STDERR?ol(tn(e,r)):Da(tn(e,r))}a(sG,"logCustomLevel");function nG(){let e;try{e=QF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=en.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return fi.existsSync(t)||(t=en.join(gE,"utility/hdb_boot_properties.file")),t}a(nG,"getPropsFilePath");function iG(e){$t=e}a(iG,"setLogLevel");function Wg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Wg,"autoCastBoolean");function oG(e){try{if(e.includes("config/settings.js")){let o=zg(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:en.dirname(o.get(ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Qg.parseDocument(fi.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===ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(oG,"getLogConfig");function aG(){try{let e=Qg.parseDocument(fi.readFileSync(XF,"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(aG,"getDefaultConfig");function cG(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(cG,"AuthAuditLog")});var sA=T((cne,rA)=>{"use strict";var uG=require("util"),lG=require("path"),_G=require("child_process"),dG=uG.promisify(_G.execFile),fG=1e3*1e3*10;rA.exports={findPs:EG};async function EG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await dG("ps",["wwxo",`pid,${r}`],{maxBuffer:fG});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:lG.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(EG,"findPs")});var ze=T((lne,iA)=>{"use strict";var hG="__dbis__",mG="__txns__",pG="__environment_name__",SG="__dbi_defintion__",TG={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},RG=["__createdtime__","__updatedtime__"],gG="\uFFFF",nA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},AG=Object.values(nA);iA.exports={AUDIT_STORE_NAME:mG,INTERNAL_DBIS_NAME:hG,DBI_DEFINITION_NAME:SG,SEARCH_TYPES:TG,TIMESTAMP_NAMES:RG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:pG,TRANSACTIONS_DBI_NAMES_ENUM:nA,TRANSACTIONS_DBIS:AG,OVERFLOW_MARKER:gG}});var Er=T((_ne,EA)=>{"use strict";var oA=y(),aA=ze(),cA={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},uA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),lA={500:uA("There was an error processing your request."),400:"Invalid request"},OG=lA[cA.INTERNAL_SERVER_ERROR],NG={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},bG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},yG={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"},IG={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 ${aA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${aA.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"},wG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${oA.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 ${oA.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"},_A={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"},CG={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."},LG={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`},DG={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},UG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},MG={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`},dA={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.`},fA={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}`},PG={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."},vG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},BG={..._A,...yG,...NG,...CG,...LG,...DG,...UG,...MG,...wG,...dA,...fA,...PG,...vG,...bG};EA.exports={CHECK_LOGS_WRAPPER:uA,HDB_ERROR_MSGS:BG,DEFAULT_ERROR_MSGS:lA,DEFAULT_ERROR_RESP:OG,HTTP_STATUS_CODES:cA,LMDB_ERRORS_ENUM:IG,AUTHENTICATION_ERROR_MSGS:_A,VALIDATION_ERROR_MSGS:dA,ITC_ERRORS:fA}});var j=T((fne,pA)=>{"use strict";var no=Er(),HG=G(),qG=y(),al=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,hA),this.statusCode=s||no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(no.DEFAULT_ERROR_MSGS[s]?no.DEFAULT_ERROR_MSGS[s]:no.DEFAULT_ERROR_MSGS[no.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&&HG[n](i)}},IE=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}},wE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function hA(e,t,r,s=qG.LOG_LEVELS.ERROR,n=null,i=!1){if(mA(e))return e;let o=new al(e,t,r,s,n);return i&&delete o.stack,o}a(hA,"handleHDBError");function mA(e){return e.__proto__.constructor.name===al.name}a(mA,"isHDBError");pA.exports={isHDBError:mA,handleHDBError:hA,ClientError:IE,ServerError:wE,hdb_errors:no}});var Be=T((hne,NA)=>{"use strict";var Ba=y(),FG=$(),Kt=X(),Ha=require("path"),GG=require("minimist"),SA=require("fs-extra"),TA=require("lodash");Kt.initSync();var{CONFIG_PARAMS:vn,DATABASES_PARAM_CONFIG:Ua,SYSTEM_SCHEMA_NAME:cl}=Ba,Ma,Pa,va;function RA(){if(Ma!==void 0)return Ma;if(Kt.getHdbBasePath()!==void 0)return Ma=Kt.get(vn.STORAGE_PATH)||Ha.join(Kt.getHdbBasePath(),Ba.DATABASES_DIR_NAME),Ma}a(RA,"getBaseSchemaPath");function gA(){if(Pa!==void 0)return Pa;if(Kt.getHdbBasePath()!==void 0)return Pa=OA(cl),Pa}a(gA,"getSystemSchemaPath");function AA(){if(va!==void 0)return va;if(Kt.getHdbBasePath()!==void 0)return va=Kt.get(Ba.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ha.join(Kt.getHdbBasePath(),Ba.TRANSACTIONS_DIR_NAME),va}a(AA,"getTransactionAuditStoreBasePath");function xG(e,t){let r=Kt.get(vn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ha.join(AA(),e.toString())}a(xG,"getTransactionAuditStorePath");function OA(e,t){e=e.toString(),t=t&&t.toString();let r=Kt.get(Ba.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ha.join(RA(),e)}a(OA,"getSchemaPath");function kG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,GG(process.argv));let s=r[vn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!FG.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Kt.get(vn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ua.PATH];if(_)return TA.set(u,[cl,Ua.TABLES,t,Ua.PATH],_),Kt.setProperty(vn.DATABASES,u),_;let l=c?.[Ua.PATH];if(l)return TA.set(u,[cl,Ua.PATH],l),Kt.setProperty(vn.DATABASES,u),l}}let n=r[vn.STORAGE_PATH.toUpperCase()];if(n){if(!SA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ha.join(n,e);return SA.mkdirsSync(i),Kt.setProperty(vn.STORAGE_PATH,n),i}return gA()}a(kG,"initSystemSchemaPaths");function VG(){Ma=void 0,Pa=void 0,va=void 0}a(VG,"resetPaths");NA.exports={getBaseSchemaPath:RA,getSystemSchemaPath:gA,getTransactionAuditStorePath:xG,getTransactionAuditStoreBasePath:AA,getSchemaPath:OA,initSystemSchemaPaths:kG,resetPaths:VG}});var hr=T((Tne,CA)=>{"use strict";var $G=Er().LMDB_ERRORS_ENUM,pne=require("lmdb"),YG=ze(),Sne=require("buffer").Buffer,{OVERFLOW_MARKER:bA,MAX_SEARCH_KEY_LENGTH:ul}=YG,yA=["number","string","symbol","boolean","bigint"];function KG(e){if(e=e?.primaryStore||e,!e)throw new Error($G.ENV_REQUIRED)}a(KG,"validateEnv");function WG(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(WG,"stringifyData");function QG(e){return e instanceof Date?e.valueOf():e}a(QG,"convertKeyValueToWrite");function zG(e){if(e==null)return;if(yA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+bA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(yA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+bA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(zG,"getIndexedValues");var ll=0,IA=0;function wA(){IA=Date.now()-performance.now()}a(wA,"adjustStartTime");wA();var JG=6e4;setInterval(wA,JG).unref();function XG(){let e=performance.now()+IA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(XG,"getNextMonotonicTime");CA.exports={validateEnv:KG,stringifyData:WG,convertKeyValueToWrite:QG,getNextMonotonicTime:XG,getIndexedValues:zG}});var LA,ss,CE,qa=Te(()=>{LA=require("events"),ss=class extends LA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new CE;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)}},CE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function vr(e){return e[Bt]||(e[Bt]=Object.create(null))}function El(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a number, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a boolean, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ns.ClientError(`${c} must be a Date, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be an object, attempt to assign ${l}`);vr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=DA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(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[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");vr(this)[o]=c}),i("deleteProperty",function(o){vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function DA(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[Re]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=DA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=hl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Fa(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Fa(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ei]||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?.[Re]===n){if(dl(i))return!0}else return!0}}else{let r=e[Bt];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[Re]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var ns,Bt,_l,Ei,fl,ml=Te(()=>{is();ns=D(j()),Bt=Symbol("own-data");a(vr,"getChanges");a(El,"assignTrackedAccessors");a(DA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};El(_l,{});a(hl,"collapseData");a(Fa,"deepFreeze");a(dl,"hasChanges");Ei=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[Ei];constructor(t){super(t)}splice(...t){return this[Ei]=!0,super.splice(...t)}push(...t){return this[Ei]=!0,super.push(...t)}pop(){return this[Ei]=!0,super.pop()}unshift(...t){return this[Ei]=!0,super.unshift(...t)}shift(){return this[Ei]=!0,super.shift()}};fl.prototype.constructor=Array});function tx(){ex=setInterval(function(){for(let e of LE)if(e.stale){let t=e[me]?.url;UA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},ZG).unref()}var DE,UA,jG,LE,hi,pl,ZG,ex,UE=Te(()=>{DE=D(hr()),UA=D(G());is();jG=100,LE=new Set,hi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),LE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(LE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,DE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){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()=>{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 g=S();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(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<jG>>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(){this.resetReadSnapshot(),this.writes=[]}},pl=class extends hi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DE.getNextMonotonicTime)())}getReadTxn(){}},ZG=3e4;a(tx,"startMonitoringTxns");tx()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new hi;e.timestamp&&(s.timestamp=e.timestamp),s[me]=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({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var MA,mi=Te(()=>{MA=require("../index");is();UE();a(Ge,"transaction");(0,MA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function PE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new io.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(BA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case mt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new io.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new io.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=vE(e);if(!S)throw new io.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:b})=>new Promise((O,Y)=>setImmediate(()=>{try{O(b&&S(b)?g:vA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function vE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),BA[t]||t){case mt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case mt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new io.ClientError(`Unknown query comparator "${t}"`)}}function ws(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 Sl(e){if(!e)return;let t=new ME,r,s,n,i,o,c=PA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=rx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?sx:PA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var io,mt,Cs,vA,rx,BA,PA,sx,ME,Tl=Te(()=>{io=D(j()),mt=D(ze()),Cs=require("ordered-binary"),vA=require("lmdb"),rx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(PE,"idsForCondition");BA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(vE,"filterByType");a(ws,"attributeComparator");PA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,sx=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");ME=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var qE={};ve(qE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>os,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>kA,snake_case:()=>ix});function ix(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function HA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new HE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Br(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[kA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new Rl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Rl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Hr(e,t){let r=new xA.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 BE(e){let t=e[Re];if(t){let r=e[Bt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function qA(e){if(typeof e=="string")return t=>BE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=BE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=BE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var FA,GA,xA,me,Ie,os,kA,Re,nx,Nt,Rl,HE,is=Te(()=>{FA=require("crypto");qa();GA=require("../index"),xA=D(j());ml();mi();Tl();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),os=Symbol("is-collection"),kA=Symbol("save-updates"),Re=Symbol("stored-record"),nx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Br(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=qA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Br(function(t,r,s,n){if(Array.isArray(n)&&t[os]){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):Hr(t,"put")},{hasContent:!0,type:"update"});static delete=Br(function(t,r,s,n){return t.delete?t.delete(r):Hr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,FA.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),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Hr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Br(function(t,r,s,n){return t.invalidate?t.invalidate(r):Hr(t,"delete")},{hasContent:!1,type:"update"});static post=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Br(function(t,r,s,n){return t.connect?t.connect(n,r):Hr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Br(function(t,r,s,n){return t.subscribe?t.subscribe(r):Hr(t,"subscribe")},{type:"read"});static publish=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Hr(t,"publish")},{hasContent:!0,type:"create"});static search=Br(function(t,r,s,n){let i=t.search?t.search(r):Hr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=qA(o);return i.map(c)}return i},{type:"read"});static query=Br(function(t,r,s,n){return t.search?t.search(n,r):Hr(t,"search")},{hasContent:!0,type:"read"});static copy=Br(function(t,r,s,n){return t.copy?t.copy(n,r):Hr(t,"copy")},{type:"create"});static move=Br(function(t,r,s,n){return t.move?t.move(n,r):Hr(t,"move")},{type:"delete"});post(t){if(this[os])return this.constructor.create(this[Ie],t,this[me]);Hr(this,"post")}static isCollection(t){return t?.[os]}static coerceId(t){return t}static parseQuery(t){return Sl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&nx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:HA(t,this)}}return HA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=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(_=>_[Ie]===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[Ie],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[os]=!0),n}subscribe(t){return new ss}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ss}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[Ie]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,GA._assignPackageExport)("Resource",Nt);a(ix,"snake_case");Rl=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(HA,"pathToId");HE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Br,"transactional");a(Hr,"missingMethod");a(BE,"selectFromObject");a(qA,"transformForSelect")});var VA={};ve(VA,{Resources:()=>gl,keyArrayToString:()=>oo,resetResources:()=>ox,resources:()=>Bn});function ox(){return Bn=new gl}function oo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var gl,Bn,Ga=Te(()=>{mi();gl=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 Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(ox,"resetResources");a(oo,"keyArrayToString")});var zA={};ve(zA,{HAS_EXPIRATION:()=>YE,LAST_TIMESTAMP_PLACEHOLDER:()=>ka,LOCAL_TIMESTAMP:()=>ax,METADATA:()=>xa,NO_TIMESTAMP:()=>FE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>$E,RecordEncoder:()=>VE,TIMESTAMP_ASSIGN_LAST:()=>ux,TIMESTAMP_ASSIGN_NEW:()=>KA,TIMESTAMP_ASSIGN_PREVIOUS:()=>WA,TIMESTAMP_PLACEHOLDER:()=>Al,TIMESTAMP_RECORD_PREVIOUS:()=>GE,getUpdateRecord:()=>KE,handleLocalTimeForGets:()=>yl});function QA(){return co[0]=co[0]^64,cx.getFloat64(0)}function yl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=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[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=lx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(co,0,d),l.timestampBytes=null,l.localTime=QA())}}}}while(i!=o&&(i=i.next))}));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,pi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<pi.length;u++){let _=pi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&pi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function KE(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?GE|WA:FE:ao=u?i?.localTime?GE|16384:KA|16384:FE,l>0&&(c|=YE),Nl=c,kE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ao>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=xE,g.timestampOffset=xE.start||0))}if(u){let g=_?.user?.username;if(E&&(Ol=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,O=r.get(b);if(O){let Y=mr(O).previousLocalTime;return r.put(b,bl(o,t,s,Y,g,d,Ol),{ifVersion:p}),S}}r.put(ka,bl(o,t,s,i?.localTime?1:0,g,d,Ol),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var $A,YA,Al,ka,$E,ax,xa,co,cx,FE,KA,ux,WA,GE,YE,xE,Ol,ao,Nl,kE,VE,lx,pi,Va=Te(()=>{$A=require("msgpackr");uo();YA=D(G()),Al=new Uint8Array([1,1,1,1,4,64,0,0]),ka=new Uint8Array([1,1,1,1,1,0,0,0]),$E=new Uint8Array([1,1,1,1,3,64,0,0]),ax=Symbol("local-timestamp"),xa=Symbol("metadata"),co=new Uint8Array(8),cx=new DataView(co.buffer,0,8),FE=0,KA=0,ux=1,WA=3,GE=4,YE=16,ao=0,Nl=-1,kE=0,VE=class extends $A.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Nl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Nl,u=kE;c>=0&&(i+=2,Nl=-1,u&&(i+=8,kE=0));let _=xE=r.call(this,s,n|2048|i);Ol=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Al[4]=o,Al[5]=o>>8,_.set(Al,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(co,0,c),c+=8;else for(let d=0;d<8;d++)co[d]=t[c++];u=QA(),i=t[c]}let _;i<32&&(o=i,c+=2,o&YE&&(_=(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,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(QA,"getTimestamp");lx=Map.prototype.get;a(yl,"handleLocalTimeForGets");pi=[];setInterval(()=>{for(let e=0;e<pi.length;e++){let t=pi[e].deref();!t||t.isDone||t.isCommitted?pi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&YA.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(KE,"getUpdateRecord")});var aO={};ve(aO,{AUDIT_STORE_OPTIONS:()=>iO,createAuditEntry:()=>bl,openAuditStore:()=>wl,readAuditEntry:()=>mr,setAuditRetention:()=>_x,transactionKeyEncoder:()=>nO});function wl(e){let t=e.auditStore=e.openDB(eO.AUDIT_STORE_NAME,iO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,rO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{$a||($a=setTimeout(()=>{if($a=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-WE})){if((n[0]&15)===zE){let i=mr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},WE/10).unref())}),t}function _x(e){clearTimeout($a),$a=null,WE=e}function bl(e,t,r,s,n,i,o){let c=oO[i],u=1;s&&(s>1?lo.setFloat64(0,s):qr.set($E),u=9),f(0),f(t),d(r),lo.setFloat64(u,e),u+=8,n?d(n):qr[u++]=0,qr[s?8:0]=c;let l=qr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,_o.writeKey)(E,qr,u);let p=u-h-1;p>127?p>16383?(XE.error("Key or username was too large for audit entry",E),u=h+1,qr[h]=0):(qr.copyWithin(h+2,h+1,u),lo.setUint16(h,p|32768),u++):qr[h]=p}function f(E){E<128?qr[u++]=E:E<16384?(lo.setUint16(u,E|32768),u+=2):E<1056964608?(lo.setUint32(u,E|3221225472),u+=4):(qr[u]=255,lo.setUint32(u+1,E),u+=5)}}function mr(e){try{let t=e.dataView||(e.dataView=new JE(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:oO[s&7],tableId:i,get recordId(){return ZA(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ZA(e,l,d):void 0},getValue(f){return s&QE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return XE.error("Reading audit entry error",e),{}}}function ZA(e,t,r){let s=e.subarray(t,r);return(0,_o.readKey)(s,0,r-t)}var _o,Il,eO,tO,rO,sO,XE,qr,lo,nO,iO,WE,$a,QE,JA,zE,XA,jA,oO,JE,uo=Te(()=>{_o=require("ordered-binary"),Il=D(X()),eO=D(ze()),tO=D(y()),rO=D(Je()),sO=D($());Va();XE=D(G());(0,Il.initSync)();qr=Buffer.alloc(1024),lo=new DataView(qr.buffer,qr.byteOffset,1024),nO={writeKey(e,t,r){return e===ka?(t.set(ka,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,_o.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,_o.readKey)(e,t,r)}},iO={encoding:"binary",keyEncoder:nO},WE=(0,sO.convertToMS)((0,Il.get)(tO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,$a=null;a(wl,"openAuditStore");a(_x,"setAuditRetention");QE=16,JA=1,zE=2,XA=3,jA=4,oO={put:JA|QE,[JA]:"put",delete:zE,[zE]:"delete",message:XA|QE,[XA]:"message",invalidate:jA,[jA]:"invalidate"};a(bl,"createAuditEntry");a(mr,"readAuditEntry");JE=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(ZA,"readKeySafely")});function uO(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;fo||((0,Ka.onMessageByType)(cO,d=>{lO(d.path)}),(0,Ka.onMessageByType)(dx,d=>{(0,Ya.trace)("confirming to proceed with txn",d.txnId)}),fo=Object.create(null));let c=fo[i]||(fo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=oo(t);let _=new ZE(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function lO(e,t){if(!fo)return;let r=fo[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:jE,exclusiveStart:!0})){jE=n;let o=mr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=oo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Ya.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,Ya.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},jE,!0)}function _O(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,Ka.broadcast)({type:cO,path:n}),lO(n,!0)})}}var Ya,Ka,cO,dx,fo,Xne,ZE,jE,dO=Te(()=>{Ya=D(G()),Ka=D(Je());qa();Ga();uo();cO="transaction",dx="transaction-await",Xne=Buffer.alloc(4096);a(uO,"addSubscription");ZE=class extends ss{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"}}},jE=Date.now();a(lO,"notifyFromTransactionData");a(_O,"listenToCommits")});var EO=T((eie,fO)=>{"use strict";var eh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fO.exports=eh});var mO=T((rie,hO)=>{"use strict";var th=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};hO.exports=th});var Cl=T((nie,pO)=>{"use strict";var sh=X(),nh=y(),{RecordEncoder:fx}=(Va(),Z(zA));sh.initSync();var Ex=sh.get(nh.CONFIG_PARAMS.STORAGE_COMPRESSION),hx=sh.get(nh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mx=nh.UPDATES_PROPERTY,rh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Ex&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=hx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:fx},this.alwaysLazyProperty=s=>s===mx)}};pO.exports=rh});var Dl=T((oie,TO)=>{"use strict";var Eo=X(),Wa=y();Eo.initSync();var px=Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",SO=Eo.get(Wa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Sx=Eo.get(Wa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ll=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=px,this.noFSAccess=!0,SO!==void 0&&(this.overlappingSync=SO),this.noReadAhead=Sx}};TO.exports=Ll;Ll.MAX_DBS=1e4});var Ue=T((cie,CO)=>{"use strict";var oh=require("lmdb"),as=require("fs-extra"),pr=require("path"),Ul=hr(),AO=G(),Wt=Er().LMDB_ERRORS_ENUM,Ml=mO(),ah=Cl(),OO=Dl(),Hn=ze(),RO=y(),{table:Tx,resetDatabases:Rx}=(fe(),Z(Ce)),gO=X(),cs=Hn.INTERNAL_DBIS_NAME,NO=Hn.DBI_DEFINITION_NAME,gx="data.mdb",Ax="lock.mdb",Qa=".mdb",Ox="-lock",ih=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Hn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new oh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Pl(e,t){if(e===void 0)throw new Error(Wt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Wt.ENV_NAME_REQUIRED)}a(Pl,"pathEnvNameValidation");async function ch(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Wt.INVALID_BASE_PATH):s}try{let s=pr.join(e,t+Qa);return await as.access(s,as.constants.R_OK|as.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await as.access(pr.join(e,t,gx),as.constants.R_OK|as.constants.F_OK),pr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Wt.INVALID_ENVIRONMENT)}else throw new Error(Wt.INVALID_ENVIRONMENT);throw s}}a(ch,"validateEnvironmentPath");function vl(e,t){if(Ul.validateEnv(e),t===void 0)throw new Error(Wt.DBI_NAME_REQUIRED)}a(vl,"validateEnvDBIName");async function Nx(e,t,r=!1,s=!1){Pl(e,t);let n=pr.basename(e);t=t.toString();let i=gO.get(RO.CONFIG_PARAMS.DATABASES);i||gO.setProperty(RO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ch(e,t,s),bO(e,t,r)}catch(o){if(o.message===Wt.INVALID_ENVIRONMENT){let c=pr.join(e,t);await as.mkdirp(s?c:e);let u=new OO(s?c:c+Qa,!1),_=oh.open(u);_.dbis=Object.create(null);let l=new ah(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=uh(e,t,r);return _[Hn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Nx,"createEnvironment");async function bx(e,t,r,s=!0){Pl(e,t),t=t.toString();let n=pr.join(e,t);return Tx({table:t,database:pr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(bx,"copyEnvironment");async function bO(e,t,r=!1){Pl(e,t),t=t.toString();let s=uh(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 ch(e,t),i=pr.join(e,t+Qa),o=n!=i,c=new OO(n,o),u=oh.open(c);u.dbis=Object.create(null);let _=IO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Hn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(bO,"openEnvironment");async function yx(e,t,r=!1){Pl(e,t),t=t.toString();let s=pr.join(e,t+Qa),n=await ch(e,t);if(global.lmdb_map!==void 0){let i=uh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await yO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+Ox:pr.join(pr.dirname(n),Ax))}a(yx,"deleteEnvironment");async function yO(e){Ul.validateEnv(e);let t=e[Hn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(yO,"closeEnvironment");function uh(e,t,r=!1){let n=`${pr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(uh,"getCachedEnvironmentName");function Ix(e){Ul.validateEnv(e);let t=Object.create(null),r=Fr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new Ml,n)}catch{AO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Ix,"listDBIDefinitions");function IO(e){Ul.validateEnv(e);let t=[],r=Fr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(IO,"listDBIs");function wx(e,t){let s=Fr(e,cs).getEntry(t),n=new Ml;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{AO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(wx,"getDBIDefinition");function wO(e,t,r,s=!r){if(vl(e,t),t=t.toString(),t===cs)throw new Error(Wt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===Wt.DBI_DOES_NOT_EXIST){let i=new ah(r,s===!0),o=e.openDB(t,i),c=new Ml(r===!0,s);return o[NO]=c,Fr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(wO,"createDBI");function Fr(e,t){if(vl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=wx(e,t):r=new Ml,r===void 0)throw new Error(Wt.DBI_DOES_NOT_EXIST);let s;try{let n=new ah(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(Wt.DBI_DOES_NOT_EXIST):n}return s[NO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function Cx(e,t){vl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Hn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Cx,"statDBI");async function Lx(e,t){try{let r=pr.join(e,t+Qa);return(await as.stat(r)).size}catch{throw new Error(Wt.INVALID_ENVIRONMENT)}}a(Lx,"environmentDataSize");function Dx(e,t){if(vl(e,t),t=t.toString(),t===cs)throw new Error(Wt.CANNOT_DROP_INTERNAL_DBIS_NAME);Fr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fr(e,cs).removeSync(t)}a(Dx,"dropDBI");function Ux(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===Wt.DBI_DOES_NOT_EXIST)wO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Rx()}a(Ux,"initializeDBIs");CO.exports={openDBI:Fr,openEnvironment:bO,createEnvironment:Nx,listDBIs:IO,listDBIDefinitions:Ix,createDBI:wO,dropDBI:Dx,statDBI:Cx,deleteEnvironment:yx,initializeDBIs:Ux,TransactionCursor:ih,environmentDataSize:Lx,copyEnvironment:bx,closeEnvironment:yO}});var UO=T((lie,DO)=>{"use strict";var lh=Ue(),Mx=G(),LO=Er().LMDB_ERRORS_ENUM;DO.exports=Px;async function Px(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 lh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await lh.closeEnvironment(global.lmdb_map[s]),await lh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LO.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){Mx.error(t)}}a(Px,"cleanLMDBMap")});var Si=T((die,vx)=>{vx.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 YO=T((Eie,$O)=>{"use strict";var _h=require("recursive-iterator"),Bx=require("alasql"),dh=require("clone"),MO=$(),{handleHDBError:PO,hdb_errors:Hx}=j(),{HDB_ERROR_MSGS:vO,HTTP_STATUS_CODES:BO}=Hx,{getDatabases:qx}=(fe(),Z(Ce)),Fx=["DISTINCT_ARRAY"],HO=Symbol("validateTables"),fh=Symbol("validateTable"),fie=Symbol("getAllColumns"),qO=Symbol("validateAllColumns"),Bl=Symbol("findColumn"),FO=Symbol("validateOrderBy"),za=Symbol("validateSegment"),Eh=Symbol("validateColumn"),GO=Symbol("setColumnsForTable"),xO=Symbol("checkColumnsForAsterisk"),kO=Symbol("validateGroupBy"),VO=Symbol("hasColumns"),hh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[HO](),this[xO](),this[qO]()}[HO](){if(this[VO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fh](t.table)})}}[VO](){let t=!1,r=new _h(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=qx();if(!r[t.databaseid])throw PO(new Error,vO.SCHEMA_NOT_FOUND(t.databaseid),BO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw PO(new Error,vO.TABLE_NOT_FOUND(t.databaseid,t.tableid),BO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=dh(n);i.table=dh(t),this.attributes.push(i)})}[Bl](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)}[xO](){let t=new _h(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[GO](r.tableid)}[GO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Bx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qO](){this[za](this.statement.columns,!1),this[za](this.statement.joins,!1),this[za](this.statement.where,!1),this[kO](this.statement.group,!1),this[za](this.statement.order,!0)}[za](t,r){if(!t)return;let s=new _h(t),n=[];for(let{node:i,path:o}of s)!MO.isEmpty(i)&&!MO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[FO](i):n.push(this[Eh](i)));return n}[kO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Fx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=dh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Bl](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[Bl](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`}[FO](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[Eh](t)}[Eh](t){let r=this[Bl](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]}};$O.exports=hh});var WO=T((mie,KO)=>{"use strict";var mh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};KO.exports=mh});var zO=T((Sie,QO)=>{"use strict";var ph=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};QO.exports=ph});var XO=T((Rie,JO)=>{"use strict";var Sh=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}};JO.exports=Sh});var ZO=T((Aie,jO)=>{"use strict";var Th=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};jO.exports=Th});var ho=T((Iie,rN)=>{"use strict";var Gx=Ue(),xx=zO(),kx=XO(),Vx=ZO(),Ls=hr(),Ja=Er().LMDB_ERRORS_ENUM,$x=ze(),rn=y(),Yx=$(),Kx=require("uuid"),Nie=require("lmdb"),{handleHDBError:Wx,hdb_errors:Qx}=j(),{OVERFLOW_MARKER:bie,MAX_SEARCH_KEY_LENGTH:yie}=$x,eN=X();eN.initSync();var Hl=eN.get(rn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rh=rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ti=rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zx(e,t,r,s,n=Ls.getNextMonotonicTime()){Nh(e,t,r,s),gh(e,t,r);let i=new xx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];tN(_,!0,n);let l=Jx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Ah(o,c,s,i,n)}a(zx,"insertRecords");function Jx(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][rn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){Hl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Hl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[Ti])})}a(Jx,"insertRecord");function Xx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Xx,"removeSkippedRecords");function tN(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ti]))&&(e[Ti]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Rh]))&&(e[Rh]=r||Ls.getNextMonotonicTime()):delete e[Rh]}a(tN,"setTimestamps");function gh(e,t,r){r.indexOf(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Gx.initializeDBIs(e,t,r)}a(gh,"initializeTransaction");async function jx(e,t,r,s,n=Ls.getNextMonotonicTime()){Nh(e,t,r,s),gh(e,t,r);let i=new kx,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Oh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Ah(c,u,s,i,n,o)}a(jx,"updateRecords");async function Zx(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Nh(e,t,r,s)}catch(u){throw Wx(u,u.message,Qx.HTTP_STATUS_CODES.BAD_REQUEST)}gh(e,t,r);let i=new Vx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Yx.isEmpty(_[t])?(l=Kx.v4(),_[t]=l):l=_[t];let d=Oh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Ah(o,c,s,i,n)}a(Zx,"upsertRecords");async function Ah(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||Ls.getNextMonotonicTime(),Xx(r,i),s}a(Ah,"finalizeWrite");function Oh(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(tN(r,!l,o),Number.isInteger(r[Ti])&&_[Ti]>r[Ti])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 g=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][rn.FUNC_VAL],r[h]=p)}if(p===g)continue;let b=Ls.getIndexedValues(g);if(b){Hl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.remove(b[O],s)}if(b=Ls.getIndexedValues(p),b){Hl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.put(b[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ti])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Oh(e,t,r,s,n,i,o))}a(Oh,"updateUpsertRecord");function ek(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Ja.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ja.WRITE_ATTRIBUTES_REQUIRED):new Error(Ja.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ek,"validateBasic");function Nh(e,t,r,s){if(ek(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ja.RECORDS_REQUIRED):new Error(Ja.RECORDS_MUST_BE_ARRAY)}a(Nh,"validateWrite");function ql(){}a(ql,"noop");rN.exports={insertRecords:zx,updateRecords:jx,upsertRecords:Zx}});var Ds=T((Cie,iN)=>{"use strict";var nN=$(),sN=y(),mo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,sn=require("joi"),qn={schema_format:{pattern:mo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()).required(),rk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()),sk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()).required();function nk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qn.schema_length.maximum?`'${e}' maximum of 250 characters`:mo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(nk,"checkValidTable");function ik(e,t){return nN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ik,"validateSchemaExists");function ok(e,t){let r=t.state.ancestors[0].schema;return nN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ok,"validateTableExists");function ak(e,t){return e.toLowerCase()===sN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${sN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ak,"validateSchemaName");iN.exports={common_validators:qn,schema_regex:mo,hdb_schema_table:tk,validateSchemaExists:ik,validateTableExists:ok,validateSchemaName:ak,checkValidTable:nk,hdb_database:rk,hdb_table:sk}});var xe=T((Die,oN)=>{"use strict";var Qt=require("validate.js");Qt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Qt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Qt.validators.type.checks={Object:function(e){return Qt.isObject(e)&&!Qt.isArray(e)},Array:Qt.isArray,Integer:Qt.isInteger,Number:Qt.isNumber,String:Qt.isString,Date:Qt.isDate,Boolean:function(e){return typeof e=="boolean"}};Qt.validators.hasValidFileExt=function(e,t){return Qt.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};oN.exports={validateObject:ck,validateObjectAsync:uk,validateBySchema:lk};function ck(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Qt(e,t,{format:"flat"});return r?new Error(r):null}a(ck,"validateObject");async function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Qt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(uk,"validateObjectAsync");function lk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lk,"validateBySchema")});var Fl=T((Mie,aN)=>{var{common_validators:Us}=Ds(),ja=xe(),Xa="is required",et={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function Za(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(Za,"makeAttributesStrings");function _k(e){return e=Za(e),et.table.presence=!1,et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(_k,"schema_object");function dk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(dk,"table_object");function fk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,ja.validateObject(e,et)}a(fk,"create_table_object");function Ek(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence={message:Xa},et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(Ek,"attribute_object");function hk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(hk,"describe_table");function mk(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(mk,"validateTableResidence");aN.exports={schema_object:_k,create_table_object:fk,table_object:dk,attribute_object:Ek,describe_table:hk,validateTableResidence:mk}});var uN=T((vie,cN)=>{"use strict";var pk=require("uuid"),bh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||pk.v4(),this.schema_table=`${this.schema}.${this.table}`}};cN.exports=bh});var Gl=T((Hie,lN)=>{"use strict";var Sk=uN(),yh=class extends Sk{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}};lN.exports=yh});var dN=T((Fie,_N)=>{"use strict";_N.exports=Rk;var Tk="inserted";function Rk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Tk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Rk,"returnObject")});var xl=T((xie,pN)=>{"use strict";var gk=y(),Ih=Ue(),Ak=ho(),{getSystemSchemaPath:Ok,getSchemaPath:Nk}=Be(),bk=Si(),yk=Fl(),Ik=Gl(),wk=dN(),{handleHDBError:fN,hdb_errors:hN}=j(),EN=$(),{HTTP_STATUS_CODES:Ck}=hN,wh=bk.hdb_attribute,mN=[];for(let e=0;e<wh.attributes.length;e++)mN.push(wh.attributes[e].attribute);var Lk="inserted";pN.exports=Dk;async function Dk(e){let t=yk.attribute_object(e);if(t)throw fN(new Error,t.message,hN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&EN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw fN(new Error,r,Ck.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=EN.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 Ik(e.schema,e.table,e.attribute,e.id);try{let i=await Ih.openEnvironment(Nk(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}`);Ih.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ih.openEnvironment(Ok(),gk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Ak.insertRecords(o,wh.hash_attribute,mN,[n]);return wk(Lk,c,{records:[n]},u)}catch(i){throw i}}a(Dk,"lmdbCreateAttribute")});var Lh=T((Vie,TN)=>{var{hdb_table:Uk,hdb_database:SN}=Ds(),Mk=xe(),Ch=require("joi"),Pk={undefined:"undefined",null:"null"},vk=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||Pk[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"),Bk=Ch.object({database:SN,schema:SN,table:Uk,records:Ch.array().items(Ch.object().custom(vk)).required()});TN.exports=function(e){return Mk.validateBySchema(e,Bk)}});var ec=T((Kie,gN)=>{"use strict";var nn=$(),RN=G(),Yie=Lh(),{getDatabases:Hk}=(fe(),Z(Ce)),{ClientError:Ri}=j();gN.exports=qk;function qk(e){if(nn.isEmpty(e))throw new Ri("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Ri("invalid schema specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Ri("invalid table specified.");if(!Array.isArray(e.records))throw new Ri("records must be an array");let t=Hk()[e.schema]?.[e.table];if(nn.isEmpty(t))throw new Ri(`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&&nn.isEmptyOrZeroLength(o[r]))throw RN.error("a valid hash attribute must be provided with update record:",o),new Ri("a valid hash attribute must be provided with update record, check log for more info");if(!nn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw RN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ri(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!nn.isEmpty(o[r])&&o[r]!==""&&s.has(nn.autoCast(o[r]))&&(o.skip=!0),s.add(nn.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(qk,"insertUpdateValidate")});var tc=T((Qie,AN)=>{"use strict";var Fk=y().OPERATIONS_ENUM,Dh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Fk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};AN.exports=Dh});var ic=T((Xie,ON)=>{"use strict";var Jie=tc(),kl=y(),Mh=$(),Uh=G(),Gk=require("uuid"),{handleHDBError:rc,hdb_errors:xk}=j(),{HDB_ERROR_MSGS:sc,HTTP_STATUS_CODES:nc}=xk;ON.exports=kk;function kk(e,t,r){for(let n=0;n<t.length;n++)Vk(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];$k(i,r,e.operation)}}a(kk,"processRows");function Vk(e){if(Buffer.byteLength(String(e))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw rc(new Error,sc.ATTR_NAME_LENGTH_ERR(e),nc.BAD_REQUEST,void 0,void 0,!0);if(Mh.isEmptyOrZeroLength(e)||Mh.isEmpty(e.trim()))throw rc(new Error,sc.ATTR_NAME_NULLISH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}a(Vk,"validateAttribute");function $k(e,t,r){if(!e.hasOwnProperty(t)||Mh.isEmptyOrZeroLength(e[t])){if(r===kl.OPERATIONS_ENUM.INSERT||r===kl.OPERATIONS_ENUM.UPSERT){e[t]=Gk.v4();return}throw Uh.error("Update transaction aborted due to record with no hash value:",e),rc(new Error,sc.RECORD_MISSING_HASH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Uh.error(e),rc(new Error,sc.HASH_VAL_LENGTH_ERR,nc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Uh.error(e),rc(new Error,sc.INVALID_FORWARD_SLASH_IN_HASH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}a($k,"validateHash")});var Vl=T((Zie,bN)=>{"use strict";var NN=$(),Yk=y(),Kk=G(),Wk=xl(),Qk=Gl(),zk=on(),{SchemaEventMsg:Jk}=us(),Xk="already exists in";bN.exports=jk;async function jk(e,t,r){if(NN.isEmptyOrZeroLength(r))return r;let s=[];NN.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 Zk(e,t.schema,t.name,i)})),n}a(jk,"lmdbCheckForNewAttributes");async function Zk(e,t,r,s){let n=new Qk(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await eV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Xk))Kk.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(Zk,"createNewAttribute");async function eV(e){let t;return t=await Wk(e),zk.signalSchemaChange(new Jk(process.pid,Yk.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(eV,"createAttribute")});var po=T((toe,yN)=>{"use strict";var Ph=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}};yN.exports=Ph});var wN=T((soe,IN)=>{"use strict";var tV=po(),rV=y().OPERATIONS_ENUM,vh=class extends tV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(rV.INSERT,r,s,n,i),this.records=t}};IN.exports=vh});var LN=T((ioe,CN)=>{"use strict";var sV=po(),nV=y().OPERATIONS_ENUM,Bh=class extends sV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(nV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};CN.exports=Bh});var UN=T((aoe,DN)=>{"use strict";var iV=po(),oV=y().OPERATIONS_ENUM,Hh=class extends iV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(oV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};DN.exports=Hh});var PN=T((uoe,MN)=>{"use strict";var aV=po(),cV=y().OPERATIONS_ENUM,qh=class extends aV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(cV.DELETE,s,n,t,i),this.original_records=r}};MN.exports=qh});var oc=T((doe,qN)=>{"use strict";var _oe=require("path"),vN=Ue(),uV=wN(),lV=LN(),_V=UN(),dV=PN(),So=ze(),BN=$(),{CONFIG_PARAMS:fV}=y(),HN=X();HN.initSync();var $l=y().OPERATIONS_ENUM,{getTransactionAuditStorePath:EV}=Be();qN.exports=hV;async function hV(e,t){if(HN.get(fV.LOGGING_AUDITLOG)===!1)return;let r=EV(e.schema,e.table),s=await vN.openEnvironment(r,e.table,!0),n=mV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){vN.initializeDBIs(s,So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,So.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),BN.isEmpty(n.user_name)||s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(hV,"writeTransaction");function mV(e,t){let r=BN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$l.INSERT)return new uV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.UPDATE)return new lV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.UPSERT)return new _V(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.DELETE)return new dV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(mV,"createTransactionObject")});var Fh=T((hoe,FN)=>{"use strict";var pV=ec(),Eoe=tc(),ac=y(),SV=ic(),TV=ho().insertRecords,RV=Ue(),gV=G(),AV=Vl(),{getSchemaPath:OV}=Be(),NV=oc();FN.exports=bV;async function bV(e){try{let{schema_table:t,attributes:r}=pV(e);SV(e,r,t.hash_attribute),e.schema!==ac.SYSTEM_SCHEMA_NAME&&(r.includes(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await AV(e.hdb_auth_header,t,r),n=OV(e.schema,e.table),i=await RV.openEnvironment(n,e.table),o=await TV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NV(e,o)}catch(c){gV.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(bV,"lmdbCreateRecords")});var kN=T((poe,xN)=>{"use strict";var GN=y(),yV=Fh(),IV=tc(),wV=require("fs-extra"),{getSchemaPath:CV}=Be();xN.exports=LV;async function LV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new IV(GN.SYSTEM_SCHEMA_NAME,GN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await yV(r),await wV.mkdirp(CV(e.schema))}a(LV,"lmdbCreateSchema")});var $N=T((Toe,VN)=>{"use strict";var Gh=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}};VN.exports=Gh});var QN=T((Noe,WN)=>{"use strict";var YN=Ue(),xh=hr(),kh=Er().LMDB_ERRORS_ENUM,DV=ze(),KN=G(),goe=$(),UV=require("lmdb"),MV=$N(),PV=y(),{OVERFLOW_MARKER:Aoe,MAX_SEARCH_KEY_LENGTH:Ooe}=DV,vV=PV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function BV(e,t,r,s){if(xh.validateEnv(e),t===void 0)throw new Error(kh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(kh.IDS_REQUIRED):new Error(kh.IDS_MUST_BE_ITERABLE);try{let n=YN.listDBIs(e);YN.initializeDBIs(e,t,n);let i=new MV,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[vV]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let g=n[S];if(!h.hasOwnProperty(g)||g===t)continue;let b=e.dbis[g],O=h[g];if(O!=null)try{let Y=xh.getIndexedValues(O);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)b.remove(Y[Q],o)}catch{KN.warn(`cannot delete from attribute: ${g}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){KN.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=xh.getNextMonotonicTime(),i}catch(n){throw n}}a(BV,"deleteRecords");WN.exports={deleteRecords:BV}});var cc=T((yoe,JN)=>{"use strict";var To=$(),HV=QN(),qV=Ue(),{getSchemaPath:FV}=Be(),GV=oc(),xV=G();JN.exports=kV;async function kV(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(To.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(To.isEmptyOrZeroLength(e.hash_values)&&!To.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];To.isEmpty(u)||e.hash_values.push(u)}}if(To.isEmptyOrZeroLength(e.hash_values))return zN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(To.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=FV(e.schema,e.table),i=await qV.openEnvironment(n,e.table),o=await HV.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await GV(e,o)}catch(c){xV.error(`unable to write transaction due to ${c.message}`)}return zN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(kV,"lmdbDeleteRecords");function zN(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(zN,"createDeleteResponse")});var $h=T((Coe,XN)=>{"use strict";var VV=y(),woe=hr();function Vh(e,t){let r=Object.create(null);if(t.length===1&&VV.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(Vh,"parseRow");function $V(e,t,r,s){let n=Vh(r,e);s.push(n)}a($V,"searchAll");function YV(e,t,r,s){let n=Vh(r,e);s[t]=n}a(YV,"searchAllToMap");function KV(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(KV,"iterateDBI");function gi(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(gi,"pushResults");function WV(e,t,r,s,n,i){t.toString().endsWith(e)&&gi(t,r,s,n,i)}a(WV,"endsWith");function QV(e,t,r,s,n,i){t.toString().includes(e)&&gi(t,r,s,n,i)}a(QV,"contains");function zV(e,t,r,s,n,i){t>e&&gi(t,r,s,n,i)}a(zV,"greaterThanCompare");function JV(e,t,r,s,n,i){t>=e&&gi(t,r,s,n,i)}a(JV,"greaterThanEqualCompare");function XV(e,t,r,s,n,i){t<e&&gi(t,r,s,n,i)}a(XV,"lessThanCompare");function jV(e,t,r,s,n,i){t<=e&&gi(t,r,s,n,i)}a(jV,"lessThanEqualCompare");XN.exports={parseRow:Vh,searchAll:$V,searchAllToMap:YV,iterateDBI:KV,endsWith:WV,contains:QV,greaterThanCompare:zV,greaterThanEqualCompare:JV,lessThanCompare:XV,lessThanEqualCompare:jV,pushResults:gi}});var Ro=T((Poe,nb)=>{"use strict";var Fn=Ue(),Doe=G(),Sr=hr(),Yl=ze(),Xe=Er().LMDB_ERRORS_ENUM,Uoe=$(),ZV=y(),Kl=$h(),{parseRow:e$}=Kl,Moe=require("lmdb"),{OVERFLOW_MARKER:jN,MAX_SEARCH_KEY_LENGTH:t$}=Yl;function ZN(e,t,r,s=!1,n=void 0,i=void 0){return Ai(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(ZN,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ai(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(O=>({value:O}))):d.getRange(b)})}a(uc,"iterateRangeBetween");function Ai(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[Yl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.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(Ai,"setupTransaction");function eb(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(jN)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[Yl.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(eb,"getOverflowCheck");function r$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Ai(e,t,t,(o,c,u)=>(Wl(r),r=lc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>e$(_.value,r))))}a(r$,"searchAll");function s$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);Wl(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ZN(e,t,t,s,n,i))o.set(c,Kl.parseRow(u,r));return o}a(s$,"searchAllToMap");function n$(e,t,r=!1,s=void 0,n=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ZN(e,void 0,t,r,s,n),c=o.transaction,u=eb(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(n$,"iterateDBI");function i$(e,t){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(i$,"countAll");function o$(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),Ai(e,t,r,(c,u,_,l)=>(s=Sr.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(o$,"equals");function a$(e,t,r){return Gn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(a$,"count");function c$(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),Ai(e,null,r,(c,u)=>{s=Sr.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(c$,"startsWith");function u$(e,t,r,s,n=!1,i=void 0,o=void 0){return tb(e,t,r,s,n,i,o,!0)}a(u$,"endsWith");function tb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Gn(e,r,s),Ai(e,null,r,(u,_,l,d)=>{let f=eb(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(jN)?_.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))?_[Yl.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(tb,"contains");function l$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!0,!1)}a(l$,"greaterThan");function _$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!1,!1)}a(_$,"greaterThanEqual");function d$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!0)}a(d$,"lessThan");function f$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!1)}a(f$,"lessThanEqual");function E$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Sr.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Sr.convertKeyValueToWrite(s),n=Sr.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(E$,"between");function h$(e,t,r,s){Sr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Wl(r),r=lc(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Kl.parseRow(c,r)),o}a(h$,"searchByHash");function m$(e,t,r){Sr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(m$,"checkHashExists");function p$(e,t,r,s,n=[]){return sb(e,t,r,s,n),rb(e,t,r,s,n).map(i=>i[1])}a(p$,"batchSearchByHash");function S$(e,t,r,s,n=[]){sb(e,t,r,s,n);let i=new Map;for(let[o,c]of rb(e,t,r,s,n))i.set(o,c);return i}a(S$,"batchSearchByHashToMap");function rb(e,t,r,s,n=[]){return Ai(e,t,t,(i,o,c)=>{r=lc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Kl.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(rb,"batchHashSearch");function sb(e,t,r,s,n){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Wl(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(sb,"initializeBatchSearchByHash");function Wl(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wl,"validateFetchAttributes");function Gn(e,t,r){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>t$)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a(Gn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&ZV.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");nb.exports={searchAll:r$,searchAllToMap:s$,count:a$,countAll:i$,equals:o$,startsWith:c$,endsWith:u$,contains:tb,searchByHash:h$,setGetWholeRowAttributes:lc,batchSearchByHash:p$,batchSearchByHashToMap:S$,checkHashExists:m$,iterateDBI:n$,greaterThan:l$,greaterThanEqual:_$,lessThan:d$,lessThanEqual:f$,between:E$}});var go=T((Boe,ub)=>{var ib=require("lodash"),ob=xe(),He=require("joi"),T$=$(),{hdb_schema_table:Ql,checkValidTable:ab,hdb_table:cb,hdb_database:zl}=Ds(),{handleHDBError:R$,hdb_errors:g$}=j(),{getDatabases:A$}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:O$}=g$,N$=He.object({database:zl,schema:zl,table:cb,search_attribute:Ql,search_value:He.any().required(),get_attributes:He.array().min(1).items(Ql).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),b$=He.object({database:zl,schema:zl,table:cb,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(Ql).optional(),conditions:He.array().min(1).items(He.object({search_attribute:Ql,search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()})).required()});ub.exports=function(e,t){let r=null;switch(t){case"value":r=ob.validateBySchema(e,N$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ab("database",e.schema)),i(ab("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=ob.validateBySchema(e,b$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=T$.checkGlobalSchemaTable(e.schema,e.table);if(n)return R$(new Error,n,O$.NOT_FOUND);let o=A$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=ib.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!ib.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Yh=T((qoe,lb)=>{"use strict";var y$=Ue(),I$=go(),{getSchemaPath:w$}=Be();lb.exports=C$;function C$(e){let t=I$(e,"hashes");if(t)throw t;let r=w$(e.schema,e.table);return y$.openEnvironment(r,e.table)}a(C$,"initialize")});var Kh=T((Goe,_b)=>{"use strict";var L$=Ro(),D$=Yh();_b.exports=U$;async function U$(e){let t=await D$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return L$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(U$,"lmdbGetDataByHash")});var Ao=T((koe,db)=>{"use strict";var Wh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};db.exports=Wh});var Eb=T((Yoe,fb)=>{"use strict";var $oe=Ao(),M$=Ro(),P$=Yh();fb.exports=v$;async function v$(e){let t=await P$(e),r=global.hdb_schema[e.schema][e.table];return M$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(v$,"lmdbSearchByHash")});var Ms=T((Woe,hb)=>{"use strict";var Qh=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}};hb.exports=Qh});var Jl=T((zoe,gb)=>{"use strict";var Ht=Ro(),B$=Ue(),H$=$(),oe=ze(),Oi=y(),q$=Si(),mb=Er().LMDB_ERRORS_ENUM,{getSchemaPath:F$}=Be(),an=Oi.SEARCH_WILDCARDS;async function G$(e,t,r){let s;e.schema===Oi.SYSTEM_SCHEMA_NAME?s=q$[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Rb(e,s.hash_attribute,r,t);return Sb(e,n,s.hash_attribute,r)}a(G$,"prepSearch");async function Sb(e,t,r,s){let n=F$(e.schema,e.table),i=await B$.openEnvironment(n,e.table),o=Tb(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(x$(e,r)===!1){let l=e.search_attribute;if(l===r)return s?pb(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?pb(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ht.batchSearchByHashToMap(c,r,e.get_attributes,_):Ht.batchSearchByHash(c,r,e.get_attributes,_)}a(Sb,"executeSearch");function Tb(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 oe.SEARCH_TYPES.EQUALS:n=Ht.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ht.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ht.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ht.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ht.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ht.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ht.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ht.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ht.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ht.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ht.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ht.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ht.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Tb,"searchByType");function pb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(pb,"createMapFromIterable");function x$(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(x$,"checkToFetchMore");function Rb(e,t,r,s){if(H$.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?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(mb.UNKNOWN_SEARCH_TYPE)}else switch(s){case Oi.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case Oi.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case Oi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Oi.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case Oi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(mb.UNKNOWN_SEARCH_TYPE)}}a(Rb,"createSearchTypeFromSearchObject");gb.exports={executeSearch:Sb,createSearchTypeFromSearchObject:Rb,prepSearch:G$,searchByType:Tb}});var Ob=T((joe,Ab)=>{"use strict";var Xoe=Ms(),k$=go(),V$=$(),$$=y(),Y$=Jl();Ab.exports=K$;function K$(e,t){if(!V$.isEmpty(t)&&$$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=k$(e,"value");if(s)throw s;let n=!0;return Y$.prepSearch(e,t,n)}a(K$,"lmdbGetDataByValue")});var _c=T((tae,Nb)=>{"use strict";var eae=Ms(),W$=go(),Q$=$(),z$=y(),J$=Jl();Nb.exports=X$;async function X$(e,t){if(!Q$.isEmpty(t)&&z$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=W$(e,"value");if(s)throw s;return J$.prepSearch(e,t,!1)}a(X$,"lmdbSearchByValue")});var yb=T((nae,bb)=>{"use strict";var sae=ze(),zh=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}},Jh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Xh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};bb.exports={SearchByConditionsObject:zh,SearchCondition:Jh,SortAttribute:Xh}});var Db=T((cae,Lb)=>{"use strict";var oae=yb().SearchByConditionsObject,j$=Ms(),Z$=go(),jh=Ro(),Xl=ze(),{Resource:aae}=(is(),Z(qE)),Cb=Jl(),eY=$h(),tY=require("lodash"),{getSchemaPath:rY}=Be(),Ib=Ue(),{handleHDBError:sY,hdb_errors:nY}=j(),{HTTP_STATUS_CODES:iY}=nY,oY=1e8;Lb.exports=aY;async function aY(e){let t=Z$(e,"conditions");if(t)throw sY(t,t.message,iY.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=rY(e.schema,e.table),s=await Ib.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Ib.openDBI(s,_.search_attribute);let i=tY.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Xl.SEARCH_TYPES.EQUALS?_.estimated_count=jh.count(s,_.search_attribute,_.search_value):l===Xl.SEARCH_TYPES.CONTAINS||l===Xl.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=oY}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await wb(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(Cb.filterByType),d=l.length,f=jh.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=>eY.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await wb(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=jh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(aY,"lmdbSearchByConditions");async function wb(e,t,r,s){let n=new j$(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Xl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Cb.searchByType(e,n,i,s).map(o=>o.value)}a(wb,"executeConditionSearch")});var dc=T((lae,Ub)=>{"use strict";var cY=y().OPERATIONS_ENUM,Zh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=cY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ub.exports=Zh});var em=T((dae,Gb)=>{"use strict";var Bb=Ms(),Hb=dc(),qb=_c(),Fb=cc(),zt=y(),Mb=$(),Pb=Ue(),{getTransactionAuditStorePath:uY,getSchemaPath:lY}=Be(),vb=G();Gb.exports=_Y;async function _Y(e){try{if(Mb.isEmpty(global.hdb_schema[e.schema])||Mb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await dY(e),await fY(e);let t=lY(e.schema,e.table);try{await Pb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")vb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=uY(e.schema,e.table);await Pb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")vb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(_Y,"lmdbDropTable");async function dY(e){let t=new Bb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await qb(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 Hb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fb(n)}a(dY,"deleteAttributesFromSystem");async function fY(e){let t=new Bb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await qb(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 Hb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fb(n)}catch(i){throw i}}a(fY,"dropTableFromSystem")});var kb=T((Eae,xb)=>{"use strict";var EY=require("fs-extra"),hY=Ms(),mY=Ao(),pY=dc(),SY=em(),TY=cc(),RY=Kh(),gY=_c(),cn=y(),{getSchemaPath:AY}=Be(),{handleHDBError:OY,hdb_errors:NY}=j(),{HDB_ERROR_MSGS:bY,HTTP_STATUS_CODES:yY}=NY;xb.exports=IY;async function IY(e){let t;try{t=await wY(e.schema);let r=new hY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await gY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await SY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new pY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await TY(n);let i=AY(t);await EY.remove(i)}catch(r){throw r}}a(IY,"lmdbDropSchema");async function wY(e){let t=new mY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await RY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw OY(new Error,bY.SCHEMA_NOT_FOUND(e),yY.NOT_FOUND,void 0,void 0,!0);return s}a(wY,"validateDropSchema")});var rm=T((mae,Vb)=>{"use strict";var tm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Vb.exports=tm});var Yb=T((Tae,$b)=>{"use strict";var CY=require("fs-extra"),jl=Ue(),{getTransactionAuditStorePath:LY}=Be(),sm=ze(),Sae=rm();$b.exports=DY;async function DY(e){let t;try{let r=LY(e.schema,e.table);await CY.mkdirp(r),t=await jl.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{jl.createDBI(t,sm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),jl.createDBI(t,sm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),jl.createDBI(t,sm.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(DY,"createTransactionsAuditEnvironment")});var zb=T((gae,Qb)=>{"use strict";var nm=y(),Kb=Ue(),UY=ho(),{getSystemSchemaPath:MY,getSchemaPath:PY}=Be(),vY=Si(),BY=xl(),im=Gl(),HY=G(),qY=Yb(),am=vY.hdb_table,Wb=[];for(let e=0;e<am.attributes.length;e++)Wb.push(am.attributes[e].attribute);Qb.exports=FY;async function FY(e,t){let r=PY(t.schema,t.table),s=new im(t.schema,t.table,nm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new im(t.schema,t.table,nm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new im(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Kb.createEnvironment(r,t.table),e!==void 0){let o=await Kb.openEnvironment(MY(),nm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UY.insertRecords(o,am.hash_attribute,Wb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await om(s),await om(n),await om(i)}await qY(t)}catch(o){throw o}}a(FY,"lmdbCreateTable");async function om(e){try{await BY(e)}catch(t){HY.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(om,"createAttribute")});var Xb=T((Oae,Jb)=>{"use strict";var GY=ec(),xY=ic(),kY=Vl(),fc=y(),VY=ho().updateRecords,$Y=Ue(),{getSchemaPath:YY}=Be(),KY=oc(),WY=G();Jb.exports=QY;async function QY(e){try{let{schema_table:t,attributes:r}=GY(e);xY(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await kY(e.hdb_auth_header,t,r),n=YY(e.schema,e.table),i=await $Y.openEnvironment(n,e.table),o=await VY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KY(e,o)}catch(c){WY.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(QY,"lmdbUpdateRecords")});var Zb=T((bae,jb)=>{"use strict";var zY=y().OPERATIONS_ENUM,cm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=zY.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jb.exports=cm});var ty=T((wae,ey)=>{"use strict";var Iae=Zb(),JY=ec(),XY=ic(),jY=Vl(),Ec=y(),ZY=ho().upsertRecords,e1=Ue(),{getSchemaPath:t1}=Be(),r1=oc(),s1=G(),{handleHDBError:n1,hdb_errors:i1}=j();ey.exports=o1;async function o1(e){let t;try{t=JY(e)}catch(u){throw n1(u,u.message,i1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XY(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await jY(e.hdb_auth_header,r,s),i=t1(e.schema,e.table),o=await e1.openEnvironment(i,e.table),c=await ZY(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await r1(e,c)}catch(u){s1.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(o1,"lmdbUpsertRecords")});var sy=T((Lae,ry)=>{"use strict";var um=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};ry.exports=um});var iy=T((Uae,ny)=>{"use strict";var lm=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}};ny.exports=lm});var cy=T((vae,ay)=>{"use strict";var _m=Ue(),{getTransactionAuditStorePath:a1}=Be(),Pae=sy(),hc=ze(),c1=$(),oy=iy(),u1=require("util").promisify,l1=u1(setTimeout),_1=1e4,d1=100;ay.exports=f1;async function f1(e){let t=a1(e.schema,e.table),r=await _m.openEnvironment(t,e.table,!0),s=_m.listDBIs(r);_m.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new oy;do n=await E1(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 l1(d1);while(n.transactions_deleted>0);return i}a(f1,"deleteAuditLogsBefore");async function E1(e,t){let r=new oy;try{let s=e.dbis[hc.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[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];c1.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>_1)break}return await n,r}catch(s){throw s}}a(E1,"deleteTransactions")});var ly=T((Hae,uy)=>{"use strict";var dm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};uy.exports=dm});var dy=T((Gae,_y)=>{"use strict";var h1=Ms(),m1=dc(),Fae=ly(),Ps=y(),p1=$(),fm=Ue(),S1=Si(),T1=_c(),R1=cc(),{getSchemaPath:g1}=Be();_y.exports=A1;async function A1(e,t=!0){let r;e.schema===Ps.SYSTEM_SCHEMA_NAME?r=S1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await N1(e),n=g1(e.schema,e.table),i=await fm.openEnvironment(n,e.table);return t===!0&&await O1(e,i,r.hash_attribute),fm.dropDBI(i,e.attribute),s}a(A1,"lmdbDropAttribute");async function O1(e,t,r){let s=fm.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(O1,"removeAttributeFromAllObjects");async function N1(e){let t=new h1(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await T1(t)).filter(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(p1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new m1(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return R1(i)}a(N1,"dropAttributeFromSystem")});var Sy=T((Vae,py)=>{"use strict";var Em=Ue(),Oo=ze(),kae=hr(),hm=y(),fy=$(),{getTransactionAuditStorePath:b1}=Be(),y1=Ro(),Zl=po(),I1=G();py.exports=w1;async function w1(e){let t=b1(e.schema,e.table),r=await Em.openEnvironment(t,e.table,!0),s=Em.listDBIs(r);Em.initializeDBIs(r,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ey(r,e.search_values);case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,L1(r,e.search_values,n);case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return C1(r,e.search_values);default:return Ey(r)}}a(w1,"readAuditLog");function Ey(e,t=[0,Date.now()]){fy.isEmpty(t[0])&&(t[0]=0),fy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Oo.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 Zl,n))}a(Ey,"searchTransactionsByTimestamp");function C1(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[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,my(e,i))}return Object.fromEntries(r)}a(C1,"searchTransactionsByUsername");function L1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=y1.equals(e,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Oo.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=my(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);hy(u,"records",r,l,o),hy(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(L1,"searchTransactionsByHashValues");function hy(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 Zl(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Zl(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(hy,"loopRecords");function my(e,t){let r=[];try{let s=e.dbis[Oo.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 Zl,i);r.push(o)}}catch(i){I1.warn(i)}return r}catch(s){throw s}}a(my,"batchSearchTransactions")});var Ry=T((Wae,Ty)=>{"use strict";var{getSchemaPath:Yae}=Be(),Kae=Ue(),{database:D1}=(fe(),Z(Ce));Ty.exports={writeTransaction:U1};async function U1(e,t,r){return D1({database:e,table:t}).transaction(r)}a(U1,"writeTransaction")});var Ny=T((zae,Oy)=>{"use strict";var{getSchemaPath:gy}=Be(),Ay=Ue();Oy.exports={flush:M1,resetReadTxn:P1};async function M1(e,t){return(await Ay.openEnvironment(gy(e,t),t.toString())).flushed}a(M1,"flush");async function P1(e,t){try{(await Ay.openEnvironment(gy(e,t),t.toString())).resetReadTxn()}catch{}}a(P1,"resetReadTxn")});var wy=T((Xae,Iy)=>{"use strict";var{Readable:v1}=require("stream"),{getDatabases:B1}=(fe(),Z(Ce)),{readSync:H1,openSync:q1,createReadStream:by}=require("fs"),{open:F1}=require("lmdb"),yy=Cl(),G1=Dl(),{AUDIT_STORE_OPTIONS:x1}=(uo(),Z(aO)),{INTERNAL_DBIS_NAME:k1,AUDIT_STORE_NAME:V1}=ze();Iy.exports=Y1;var mm=32768,$1=100;async function Y1(e){let t=e.database||e.schema||"data",r=B1()[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=F1({noSync:!0,maxDbs:G1.MAX_DBS}),f,E=d.openDB(k1,new yy(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,O){O.encoding="binary",O.encoder=void 0;let Y=d.openDB(b,O),Q=l.openDB(b,O);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%$1===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>b.startsWith?.(Y+"/"))){E.put(b,O);let[,Y]=b.split("/"),Q=!Y,F=new yy(!Q,Q);await S(b,F)}e.include_audit&&await S(V1,Object.assign({},x1)),await f;let g=by(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=q1(o.path);return o.transaction(()=>{let _=Buffer.alloc(mm);H1(c,_,0,mm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=by(null,{fd:c,start:mm}),f=new v1.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(Y1,"getBackup")});var Dy=T((Zae,Ly)=>{"use strict";var K1=G(),{handleHDBError:W1}=j(),Q1=WO(),z1=xl(),J1=Fh(),X1=kN(),j1=cc(),Z1=Kh(),eK=Eb(),tK=Ob(),rK=_c(),sK=Db(),nK=kb(),iK=zb(),oK=Xb(),aK=ty(),cK=cy(),uK=em(),lK=dy(),_K=Sy(),dK=Ry(),Cy=Ny(),fK=wy(),pm=class extends Q1{static{a(this,"LMDBBridge")}async searchByConditions(t){return sK(t)}async getDataByHash(t){return await Z1(t)}async searchByHash(t){return await eK(t)}async getDataByValue(t,r){return await tK(t,r)}async searchByValue(t){return await rK(t)}async createSchema(t){return await X1(t)}async dropSchema(t){return await nK(t)}async createTable(t,r){return await iK(t,r)}async dropTable(t){return await uK(t)}async createAttribute(t){return await z1(t)}async createRecords(t){return await J1(t)}async updateRecords(t){return await oK(t)}async upsertRecords(t){try{return await aK(t)}catch(r){throw W1(r,null,null,K1.ERR,r)}}async deleteRecords(t){return await j1(t)}async dropAttribute(t){return await lK(t)}async deleteAuditLogsBefore(t){return await cK(t)}async readAuditLog(t){return await _K(t)}writeTransaction(t,r,s){return dK.writeTransaction(t,r,s)}flush(t,r){return Cy.flush(t,r)}resetReadTxn(t,r){return Cy.resetReadTxn(t,r)}getBackup(t){return fK(t)}};Ly.exports=pm});var Gy={};ve(Gy,{ResourceBridge:()=>Rm});function gm({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 My(e,t){let r=vs(e),s=gm(e,r);if(!r)throw new ls.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;Ge(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&&hl(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 vs(e){let t=e.database||e.schema||hK,r=_s()[t];if(!r)throw(0,ls.handleHDBError)(new Error,EK.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Py(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*vy(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 By,e_,ls,Hy,qy,ds,Sm,Tm,Fy,EK,hK,mK,pK,Uy,Rm,xy=Te(()=>{"use strict";By=D(Dy()),e_=D(go()),ls=D(j());fe();Hy=D(ec()),qy=D(ic()),ds=D(y()),Sm=D(on()),Tm=D(us()),Fy=D($());mi();ml();({HDB_ERROR_MSGS:EK}=ls.hdb_errors),hK="data",mK=1e4,pK=10,Rm=class extends By.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Uy=this}async searchByConditions(t){let r=(0,e_.default)(t,"conditions");if(r)throw(0,ls.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=vs(t);if(!s)throw new ls.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:gm(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new ls.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}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await vs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vs(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){vs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Sm.signalSchemaChange(new Tm.SchemaEventMsg(process.pid,ds.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Am(t.schema),Sm.signalSchemaChange(new Tm.SchemaEventMsg(process.pid,ds.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,Uy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Hy.default)(t);(0,qy.default)(t,s,r.primaryKey);let n,i=_s()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(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=hl(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=_s()[t.schema][t.table],s={user:t.hdb_user};return Ge(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 Py(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=_s()[t.schema][t.table];if(!r.createdTimeProperty)throw new ls.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:ds.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,Fy.async_set_timeout)(pK),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%mK===0&&await _();return u.length>0&&await _(),n?Py(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,e_.default)(t,"hashes");if(r)throw r;return My(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of My(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ds.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,e_.default)(t,"value");if(s)throw s;let n=vs(t);if(!n)throw new ls.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===ds.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:gm(t,n)})}async getDataByValue(t,r){let s=new Map,n=vs(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){vs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=vs(t),s={};switch(t.search_type){case ds.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 ds.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of vy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return vy(r,t.search_values?.[0],t.search_values?.[1])}}};a(gm,"getSelect");a(My,"getRecords");a(vs,"getTable");a(Py,"createDeleteResponse");a(vy,"groupRecordsInHistory")});var Es=T((ice,ky)=>{"use strict";var{ResourceBridge:SK}=(xy(),Z(Gy)),TK=X();TK.initSync();var t_;function RK(){return t_||(t_=new SK,t_)}a(RK,"getBridge");ky.exports=RK()});var Ky=T((ace,Yy)=>{"use strict";var Vy=require("lodash"),pc=require("mathjs"),gK=require("jsonata"),$y=$();Yy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Vy.uniqWith(e,Vy.isEqual):e,searchJSON:AK,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(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(Sc,"aggregateFunction");function AK(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($y.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),$y.isEmpty(this.__ala__.res[r])){let s=gK(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(AK,"searchJSON")});var Qy=T((uce,Wy)=>{"use strict";var rt=require("moment"),Om="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;Wy.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Om),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Om),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Om)}});var jy=T((lce,Xy)=>{"use strict";var OK=require("@turf/area"),NK=require("@turf/length"),bK=require("@turf/circle"),yK=require("@turf/difference"),IK=require("@turf/distance"),wK=require("@turf/boolean-contains"),CK=require("@turf/boolean-equal"),LK=require("@turf/boolean-disjoint"),DK=require("@turf/helpers"),zy=y(),_e=$();Xy.exports={geoArea:UK,geoLength:MK,geoCircle:PK,geoDifference:vK,geoDistance:Jy,geoNear:BK,geoContains:HK,geoEqual:qK,geoCrosses:FK,geoConvert:GK};var Nm="geo1 is required",bm="geo2 is required";function UK(e){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),OK.default(e)}a(UK,"geoArea");function MK(e,t){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),NK.default(e,{units:t||"kilometers"})}a(MK,"geoLength");function PK(e,t,r){if(_e.isEmpty(e))throw new Error("point is required");if(_e.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),bK.default(e,t,{units:r||"kilometers"})}a(PK,"geoCircle");function vK(e,t){if(_e.isEmpty(e))throw new Error("poly1 is required");if(_e.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),yK(e,t)}a(vK,"geoDifference");function Jy(e,t,r){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),IK.default(e,t,{units:r||"kilometers"})}a(Jy,"geoDistance");function BK(e,t,r,s){if(_e.isEmpty(e)||_e.isEmpty(t))return!1;if(_e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Jy(e,t,s)<=r}a(BK,"geoNear");function HK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),wK.default(e,t)}a(HK,"geoContains");function qK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),CK.default(e,t)}a(qK,"geoEqual");function FK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),!LK.default(e,t)}a(FK,"geoCrosses");function GK(e,t,r){if(_e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(_e.isEmpty(t))throw new Error("geo_type is required");if(_e.isEmpty(zy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zy.GEO_CONVERSION_ENUM).join(",")}`);return DK[t](e,r)}a(GK,"geoConvert")});var r_=T((dce,Zy)=>{var Ni=Ky(),Tr=Qy(),Bs=jy();Zy.exports=e=>{e.aggr.mad=e.aggr.MAD=Ni.mad,e.aggr.mean=e.aggr.MEAN=Ni.mean,e.aggr.mode=e.aggr.MODE=Ni.mode,e.aggr.prod=e.aggr.PROD=Ni.prod,e.aggr.median=e.aggr.MEDIAN=Ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tr.current_time,e.fn.extract=e.fn.EXTRACT=Tr.extract,e.fn.date=e.fn.DATE=Tr.date,e.fn.date_format=e.fn.DATE_FORMAT=Tr.date_format,e.fn.date_add=e.fn.DATE_ADD=Tr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tr.date_diff,e.fn.now=e.fn.NOW=Tr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tr.get_server_time,e.fn.getdate=e.fn.GETDATE=Tr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Bs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Bs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Bs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Bs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Bs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Bs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Bs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Bs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Bs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Bs.geoNear}});var sI=T((fce,rI)=>{"use strict";var Tc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var xK=r_(),eI=require("clone"),s_=require("recursive-iterator"),re=G(),ce=$(),No=Es(),kK=y(),{hdb_errors:VK}=j(),{getDatabases:tI}=(fe(),Z(Ce)),$K="IS NULL",hs="There was a problem performing this search. Please check the logs and try again.";xK(Jt);var ym=class{static{a(this,"SQLSearch")}constructor(t,r){if(ce.isEmpty(t))throw re.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ce.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(hs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(hs)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(hs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(hs)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(hs)}}_getColumns(){let t=new s_(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(eI(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.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=tI()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ce.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new s_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ce.isEmpty(r)&&r.right)if(ce.isNotEmptyAndHasValue(r.right.value)){let s=ce.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new Jt.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ce.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Jt.yy.LogicValue({value:i}):s instanceof Jt.yy.StringValue&&ce.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Jt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new s_(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(!ce.isEmpty(kK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ce.isEmptyOrZeroLength(r.left.columnid)||ce.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ce.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ce.isEmpty(r.right.value)||!ce.isEmpty(r.left.value)?s.add(ce.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)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(ce.isEmptyOrZeroLength(this.all_table_attributes)&&ce.isEmptyOrZeroLength(this.statement.from)&&ce.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&&Tc.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(ce.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ce.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(ce.isEmptyOrZeroLength(this.all_table_attributes)&&!ce.isEmptyOrZeroLength(this.columns.columns))return t;if(ce.isEmptyOrZeroLength(this.all_table_attributes)&&ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Jt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.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(eI(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(ce.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf($K)>-1&&this.tables.forEach(n=>{let i={columnid:tI()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.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),!ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await No.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 re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(hs)}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 No.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,ce.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(hs)}else if(!ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await No.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,ce.autoCast(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,ce.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(hs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await No.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,ce.autoCast(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,ce.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(hs)}}}_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 Jt.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 Jt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Jt.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 Jt.yy.FuncValue:new Jt.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:"",_="";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&&(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 Jt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.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=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=p.length;S<g;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 s_(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=Tc.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 re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(hs)}}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 No.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 re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await Jt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.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 re.error(VK.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=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 No.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 re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(hs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};rI.exports=ym});var Gr=T((hce,nI)=>{"use strict";var YK=YO();nI.exports={searchByConditions:WK,searchByHash:QK,searchByValue:zK,search:JK};var Im=Es(),{transformReq:wm}=$(),KK=sI();async function WK(e){return wm(e),Im.searchByConditions(e)}a(WK,"searchByConditions");async function QK(e){wm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Im.searchByHash(e))r&&t.push(r);return t}a(QK,"searchByHash");async function zK(e){wm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Im.searchByValue(e))t.push(r);return t}a(zK,"searchByValue");function JK(e,t){try{let r=new YK(e);r.validate(),new KK(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(JK,"search")});var un=T((pce,cI)=>{"use strict";var Rc=require("crypto"),XK=X(),{CONFIG_PARAMS:jK}=y(),oI="aes-256-cbc",ZK=32,eW=16,Cm=64,aI=32,tW=Cm+aI,iI=new Map;cI.exports={encrypt:rW,decrypt:sW,createNatsTableStreamName:nW};function rW(e){let t=Rc.randomBytes(ZK),r=Rc.randomBytes(eW),s=Rc.createCipheriv(oI,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(rW,"encrypt");function sW(e){let t=e.substr(0,Cm),r=e.substr(Cm,aI),s=e.substr(tW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Rc.createDecipheriv(oI,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(sW,"decrypt");function nW(e,t){let r=XK.get(jK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=iI.get(r);return s||(s=Rc.createHash("md5").update(r).digest("hex"),iI.set(r,s)),s}a(nW,"createNatsTableStreamName")});var bi=T((Rce,lI)=>{"use strict";var Tce=Gr(),n_=G(),uI=Fl(),iW=un(),i_=$(),{handleHDBError:o_,hdb_errors:oW}=j(),{HDB_ERROR_MSGS:a_,HTTP_STATUS_CODES:Lm}=oW,aW=X();aW.initSync();var{getDatabases:Dm}=(fe(),Z(Ce));lI.exports={describeAll:cW,describeTable:c_,describeSchema:uW};async function cW(e){try{let t=i_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Dm(),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 c_({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 c_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){n_.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 n_.error("Got an error in describeAll"),n_.error(t),o_(new Error,a_.DESCRIBE_ALL_ERR)}}a(cW,"describeAll");async function c_(e,t){i_.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=uI.describe_table(e);if(i)throw i;let c=Dm()[r];if(!c)throw o_(new Error,a_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let u=c[s];if(!u)throw o_(new Error,a_.TABLE_NOT_FOUND(e.schema,e.table),Lm.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=iW.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){n_.warn(`unable to stat table dbi due to ${f}`)}return d}a(c_,"descTable");async function uW(e){i_.transformReq(e);let t=uI.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=Dm()[s];if(!i)throw o_(new Error,a_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),i_.isEmpty(u)||u.describe){let _=await c_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(uW,"describeSchema")});var xn=T((Nce,hI)=>{var lW=Si(),{callbackify:dI,promisify:_W}=require("util"),{getDatabases:fI}=(fe(),Z(Ce));hI.exports={setSchemaDataToGlobal:_I,getTableSchema:dW,getSystemSchema:fW,setSchemaDataToGlobalAsync:_W(_I)};var EI=bi(),Ace=dI(EI.describeAll),Oce=dI(EI.describeTable);function _I(e){global.hdb_schema=fI(),e&&e()}a(_I,"setSchemaDataToGlobal");function dW(e,t,r){let s=fI()[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(dW,"getTableSchema");function fW(){return lW}a(fW,"getSystemSchema")});var xr=T((yce,TI)=>{"use strict";var l_=Lh(),bt=$(),EW=require("util"),__=Es(),hW=xn(),mI=G(),{handleHDBError:yi,hdb_errors:mW}=j(),{HTTP_STATUS_CODES:Ii}=mW,pW=EW.promisify(hW.getTableSchema),SW="updated",pI="inserted",SI="upserted";TI.exports={insert:RW,update:gW,upsert:AW,validation:TW,flush:OW};async function TW(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await pW(e.schema,e.table),r=l_(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&&bt.isEmptyOrZeroLength(c[s]))throw mI.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(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw mI.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.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(TW,"validation");async function RW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.createRecords(e);return u_(pI,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(RW,"insertData");async function gW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.updateRecords(e);return bt.isEmpty(s.existing_rows)?u_(SW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):u_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(gW,"updateData");async function AW(e){if(e.operation!=="upsert")throw yi(new Error,"invalid operation, must be upsert",Ii.INTERNAL_SERVER_ERROR);let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.upsertRecords(e);return u_(SI,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(AW,"upsertData");function u_(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===pI?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SI?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(u_,"returnObject");function OW(e){return bt.transformReq(e),__.flush(e.schema,e.table)}a(OW,"flush")});var Mm=T((wce,AI)=>{var NW=xe(),Um=require("joi"),{hdb_table:bW,hdb_database:RI}=Ds(),gI={schema:RI,database:RI,table:bW},yW={date:Um.date().iso().required()},IW={timestamp:Um.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AI.exports=function(e,t){let r=t==="timestamp"?{...gI,...IW}:{...gI,...yW},s=Um.object(r);return NW.validateBySchema(e,s)}});var bI=T((Cce,NI)=>{var wW=xe(),Pm=require("joi"),{hdb_table:CW,hdb_database:OI}=Ds(),LW=Pm.object({schema:OI,database:OI,table:CW,hash_values:Pm.array().required(),ids:Pm.array()});NI.exports=function(e){return wW.validateBySchema(e,LW)}});var II=T((Lce,yI)=>{"use strict";var vm=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}},Bm=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}},Hm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};yI.exports={InsertObject:vm,NoSQLSeachObject:Bm,DeleteResponseObject:Hm}});var Li=T((Uce,UI)=>{"use strict";var CI=Mm(),DW=bI(),wi=$(),wI=require("moment"),LI=G(),{promisify:UW,callbackify:MW}=require("util"),Ci=y(),PW=xn(),qm=UW(PW.getTableSchema),Fm=Es(),{DeleteResponseObject:vW}=II(),{handleHDBError:kn,hdb_errors:BW}=j(),{HDB_ERROR_MSGS:d_,HTTP_STATUS_CODES:Vn}=BW,HW="records successfully deleted",qW=MW(DI);UI.exports={delete:qW,deleteRecord:DI,deleteFilesBefore:FW,deleteAuditLogsBefore:GW};async function FW(e){let t=CI(e,"date");if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);if(wi.transformReq(e),!wI(e.date,wI.ISO_8601).isValid())throw kn(new Error,d_.INVALID_DATE,Vn.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,d_.INVALID_DATE,!0);let s=wi.checkSchemaTableExist(e.schema,e.table);if(s)throw kn(new Error,s,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,s,!0);let n=await Fm.deleteRecordsBefore(e);if(await qm(e.schema,e.table),LI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(FW,"deleteFilesBefore");async function GW(e){let t=CI(e,"timestamp");if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);if(wi.transformReq(e),isNaN(e.timestamp))throw kn(new Error,d_.INVALID_VALUE("Timestamp"),Vn.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,d_.INVALID_VALUE("Timestamp"),!0);let r=wi.checkSchemaTableExist(e.schema,e.table);if(r)throw kn(new Error,r,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,r,!0);let s=await Fm.deleteAuditLogsBefore(e);return await qm(e.schema,e.table),LI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(GW,"deleteAuditLogsBefore");async function DI(e){e.ids&&(e.hash_values=e.ids);let t=DW(e);if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);wi.transformReq(e);let r=wi.checkSchemaTableExist(e.schema,e.table);if(r)throw kn(new Error,r,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,r,!0);try{await qm(e.schema,e.table);let s=await Fm.deleteRecords(e);return wi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${HW}`),s}catch(s){if(s.message===Ci.SEARCH_NOT_FOUND_MESSAGE){let n=new vW;return n.message=Ci.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(DI,"deleteRecord")});var f_=T((Pce,vI)=>{var xW=require("crypto"),MI=9;function kW(e){let t=$W(MI),r=PI(e+t);return t+r}a(kW,"createHash");function VW(e,t){let r=e.substr(0,MI),s=r+PI(t+r);return e===s}a(VW,"validateHash");function $W(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($W,"generateSalt");function PI(e){return xW.createHash("md5").update(e).digest("hex")}a(PI,"md5");vI.exports={hash:kW,validate:VW}});var HI=T((Bce,BI)=>{var Gm=xe(),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 YW(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,Gm.validateObject(e,qt)}a(YW,"addUserValidation");function KW(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,Gm.validateObject(e,qt)}a(KW,"alterUserValidation");function WW(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,Gm.validateObject(e,qt)}a(WW,"dropUserValidation");BI.exports={addUserValidation:YW,alterUserValidation:KW,dropUserValidation:WW}});var ke=T((Fce,FI)=>{"use strict";var{platform:qce}=require("os"),QW="nats-server.zip",xm="nats-server",zW=process.platform==="win32"?`${xm}.exe`:xm,km="HDB",JW=/^[^\s.,*>]+$/,qI="__request__",XW=a(e=>`${e}.${qI}`,"REQUEST_SUBJECT"),jW={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},ZW={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eQ={HUB:"hub.pid",LEAF:"leaf.pid"},tQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:km,deliver_subject:"__HDB__.WORKQUEUE"},sQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:km,deliver_subject:"HDB.SCHEMAQUEUE"},nQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:km,deliver_subject:"HDB.USERQUEUE"},iQ={SUCCESS:"success",ERROR:"error"},oQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},aQ={TXN:"txn",MSGID:"msgid"},bo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},cQ={[bo.ERR]:1,[bo.WRN]:2,[bo.INF]:3,[bo.DBG]:4,[bo.TRC]:5},uQ={debug:"-D",trace:"-DVV"};FI.exports={NATS_SERVER_ZIP:QW,NATS_SERVER_NAME:xm,NATS_BINARY_NAME:zW,PID_FILES:eQ,NATS_CONFIG_FILES:ZW,SERVER_SUFFIX:tQ,WORK_QUEUE_CONSUMER_NAMES:rQ,SCHEMA_QUEUE_CONSUMER_NAMES:sQ,USER_QUEUE_CONSUMER_NAMES:nQ,NATS_TERM_CONSTRAINTS_RX:JW,REQUEST_SUFFIX:qI,UPDATE_REMOTE_RESPONSE_STATUSES:iQ,CLUSTER_STATUS_STATUSES:oQ,REQUEST_SUBJECT:XW,SUBJECT_PREFIXES:aQ,MSG_HEADERS:jW,LOG_LEVELS:bo,LOG_LEVEL_FLAGS:uQ,LOG_LEVEL_HIERARCHY:cQ}});var xI=T((xce,GI)=>{"use strict";var lQ={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
+ var CH=Object.create;var ba=Object.defineProperty;var LH=Object.getOwnPropertyDescriptor;var DH=Object.getOwnPropertyNames;var UH=Object.getPrototypeOf,MH=Object.prototype.hasOwnProperty;var a=(e,t)=>ba(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ve=(e,t)=>{for(var r in t)ba(e,r,{get:t[r],enumerable:!0})},Ng=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of DH(t))!MH.call(e,n)&&n!==r&&ba(e,n,{get:()=>t[n],enumerable:!(s=LH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?CH(UH(e)):{},Ng(t||!e||!e.__esModule?ba(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>Ng(ba({},"__esModule",{value:!0}),e);var y=T((Zse,Fg)=>{"use strict";var Pr=require("path"),PH=require("fs"),{relative:Xse,join:jse}=Pr,{existsSync:vH}=PH;function BH(){let e=__dirname;for(;!vH(Pr.join(e,"package.json"));){let t=Pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(BH,"getHDBPackageRoot");var Pn=BH(),bg="js",tl=bg,HH="harperdb-config.yaml",FH="defaultConfig.yaml",qH="hdb",yg=`harperdb.${tl}`,Ig=`customFunctionsServer.${tl}`,GH=`restartHdb.${tl}`,hE="HarperDB",el="Custom Functions",rl="Clustering Hub",sl="Clustering Leaf",xH="Clustering Ingest Service",kH="Clustering Reply Service",VH="foreground.pid",$H="hdb.pid",YH="data",KH={HDB:hE,CLUSTERING_HUB:rl,CLUSTERING_LEAF:sl,CLUSTERING_INGEST_SERVICE:xH,CLUSTERING_REPLY_SERVICE:kH,CUSTOM_FUNCTIONS:el,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"},WH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},QH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},zH={harperdb:hE,"clustering hub":rl,"clustering leaf":sl,"custom functions":el,custom_functions:el,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},JH={CLUSTERING_HUB_PROC_DESCRIPTOR:rl,CLUSTERING_LEAF_PROC_DESCRIPTOR:sl},EE={HDB:Pr.join(Pn,"server/harperdb"),CUSTOM_FUNCTIONS:Pr.join(Pn,"server/customFunctions"),CLUSTERING_HUB:Pr.join(Pn,"server/nats"),CLUSTERING_LEAF:Pr.join(Pn,"server/nats")},XH={HDB:Pr.join(EE.HDB,yg),CUSTOM_FUNCTIONS:Pr.join(EE.CUSTOM_FUNCTIONS,Ig)},jH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pr.join(Pn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pr.join(Pn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pr.join(Pn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},ZH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},wg="support@harperdb.io",eF="customer-success@harperdb.io",Cg=1,tF=4141,Lg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",rF="https://www.harperdb.io/product",sF=`For support, please submit a request at ${Lg} or contact ${wg}`,Dg=`For license support, please contact ${eF}`,nF="None of the specified records were found.",iF="hash attribute not found",oF=`Your current license only supports ${Cg} role. ${Dg}`,aF="Your current license only supports 3 connections to a node.",cF="127.0.0.1",uF=1,lF=/^\.$/,_F=/^\.\.$/,dF="U+002E",fF=/\//g,EF="U+002F",hF=/U\+002F/g,mF=/^U\+002E$/,pF=/^U\+002EU\+002E$/,SF="d",TF=999999,RF="*",gF="--max-old-space-size=",AF="system",OF="__hdb_hash",NF=".harperdb",bF=".hdb",yF="keys",IF="hdb_boot_properties.file",wF=".updateConfig.json",CF="SIGTSTP",LF=24,DF=6e4,UF=448,MF="blob",PF="trash",vF="database",BF="schema",HF="transactions",FF=".count",qF="id",GF="PROCESS_NAME",Ug={SETTINGS_PATH_KEY:"settings_path"},Mg=require("lodash"),xF={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},kF={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},VF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},$F={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"},YF={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"},dr="hdb_internal:",KF={CREATE_SCHEMA:dr+"create_schema",CREATE_TABLE:dr+"create_table",CREATE_ATTRIBUTE:dr+"create_attribute",ADD_USER:dr+"add_user",ALTER_USER:dr+"alter_user",DROP_USER:dr+"drop_user",HDB_NODES:dr+"hdb_nodes",HDB_USERS:dr+"hdb_users",HDB_WORKERS:dr+"hdb_workers",CATCHUP:dr+"catchup",SCHEMA_CATCHUP:dr+"schema_catchup",WORKER_ROOM:dr+"cluster_workers"},WF={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"},QF="060493.ks",zF=".license",JF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},XF={CSV:".csv",JSON:".json"},jF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},ZF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ya={};ya[J.INSERT]=J.INSERT;ya[J.UPDATE]=J.UPDATE;ya[J.UPSERT]=J.UPSERT;ya[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var eq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},tq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Pg={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"},rq=Mg.invert(Pg),sq={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"},N={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",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_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",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_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},vg={settings_path:Ug.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY};for(let e in N){let t=N[e];vg[t.toLowerCase()]=t}var nq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},iq={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},oq={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"},aq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},cq={VERSION_DEFAULT:"2.2.0"},uq={DEVELOPMENT:8192,DEFAULT:512},lq={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"},_q={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"},dq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Bg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},fq=Symbol("metadata"),Eq="__clustering__",hq=Object.values(Bg),mq=15984864e5,Hg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},pq=Mg.invert(Hg),Sq={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"},Tq=111,Rq=`\r
2
+ `,gq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Aq=["*","%"],Oq="unauthorized_access",Nq="func_val",bq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},yq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Iq={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"},wq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Cq={HTTP:"http"},Lq={STOPPED:"stopped",ONLINE:"online"},Dq="3.x.x",Uq={SUCCESS:"success",FAILURE:"failure"},Mq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Fg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:wg,HDB_SUPPORT_URL:Lg,HDB_PRICING_URL:rF,SUPPORT_HELP_MSG:sF,LICENSE_HELP_MSG:Dg,HDB_PROC_NAME:yg,HDB_PROC_DESCRIPTOR:hE,CLUSTERING_LEAF_PROC_DESCRIPTOR:sl,CLUSTERING_HUB_PROC_DESCRIPTOR:rl,SYSTEM_SCHEMA_NAME:AF,HASH_FOLDER_NAME:OF,HDB_HOME_DIR_NAME:NF,UPDATE_FILE_NAME:wF,LICENSE_KEY_DIR_NAME:yF,BOOT_PROPS_FILE_NAME:IF,JOB_TYPE_ENUM:iq,JOB_STATUS_ENUM:JF,SYSTEM_TABLE_NAMES:$F,SYSTEM_TABLE_HASH_ATTRIBUTES:YF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:XF,S3_BUCKET_AUTH_KEYS:jF,VALID_SQL_OPS_ENUM:ZF,GEO_CONVERSION_ENUM:tq,HDB_SETTINGS_NAMES:Pg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:rq,SERVICE_ACTIONS_ENUM:eq,CLUSTER_MESSAGE_TYPE_ENUM:oq,CLUSTER_CONNECTION_DIRECTION_ENUM:aq,CLUSTER_EVENTS_DEFS_ENUM:lq,PERIOD_REGEX:lF,DOUBLE_PERIOD_REGEX:_F,UNICODE_PERIOD:dF,FORWARD_SLASH_REGEX:fF,UNICODE_FORWARD_SLASH:EF,ESCAPED_FORWARD_SLASH_REGEX:hF,ESCAPED_PERIOD_REGEX:mF,ESCAPED_DOUBLE_PERIOD_REGEX:pF,REG_KEY_FILE_NAME:QF,RESTART_TIMEOUT_MS:DF,HDB_FILE_PERMISSIONS:UF,DATABASES_DIR_NAME:vF,LEGACY_DATABASES_DIR_NAME:BF,TRANSACTIONS_DIR_NAME:HF,LIMIT_COUNT_NAME:FF,ID_ATTRIBUTE_STRING:qF,INSERT_MODULE_ENUM:kF,UPGRADE_JSON_FIELD_NAMES_ENUM:VF,RESTART_CODE:CF,RESTART_CODE_NUM:LF,CLUSTER_OPERATIONS:ya,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:WF,HDB_INTERNAL_SC_CHANNEL_PREFIX:dr,INTERNAL_SC_CHANNELS:KF,CLUSTERING_MESSAGE_TYPES:Sq,HDB_FILE_SUFFIX:bF,BLOB_FOLDER_NAME:MF,HDB_TRASH_DIR:PF,ORIGINATOR_SET_VALUE:Tq,LICENSE_VALUES:cq,RAM_ALLOCATION_ENUM:uq,TIME_STAMP_NAMES_ENUM:Bg,TIME_STAMP_NAMES:hq,PERMS_UPDATE_RELEASE_TIMESTAMP:mq,SEARCH_NOT_FOUND_MESSAGE:nF,SEARCH_ATTRIBUTE_NOT_FOUND:iF,LICENSE_ROLE_DENIED_RESPONSE:oF,LICENSE_MAX_CONNS_REACHED:aF,BASIC_LICENSE_MAX_NON_CU_ROLES:Cg,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:tF,VALUE_SEARCH_COMPARATORS:Hg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:pq,LICENSE_FILE_NAME:zF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:_q,NEW_LINE:Rq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:uF,MOMENT_DAYS_TAG:SF,API_TURNOVER_SEC:TF,LOOPBACK:cF,CODE_EXTENSION:tl,WILDCARD_SEARCH_VALUE:RF,NODE_ERROR_CODES:dq,JAVASCRIPT_EXTENSION:bg,PERMS_CRUD_ENUM:gq,UNAUTHORIZED_PERMISSION_NAME:Oq,SEARCH_WILDCARDS:Aq,FUNC_VAL:Nq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:bq,JWT_ENUM:yq,CLUSTERING_FLAG:Eq,ITC_EVENT_TYPES:Iq,CUSTOM_FUNCTION_PROC_NAME:Ig,CUSTOM_FUNCTION_PROC_DESCRIPTOR:el,SERVICES:wq,THREAD_TYPES:Cq,MEM_SETTING_KEY:gF,HDB_RESTART_SCRIPT:GH,PROCESS_DESCRIPTORS:KH,SERVICE_SERVERS:XH,SERVICE_SERVERS_CWD:EE,PROCESS_DESCRIPTORS_VALIDATE:zH,LAUNCH_SERVICE_SCRIPTS:jH,LOG_LEVELS:QH,PROCESS_NAME_ENV_PROP:GF,LOG_NAMES:WH,PM2_PROCESS_STATUSES:Lq,CONFIG_PARAM_MAP:vg,CONFIG_PARAMS:N,HDB_CONFIG_FILE:HH,HDB_DEFAULT_CONFIG_FILE:FH,ROLE_TYPES_ENUM:ZH,BOOT_PROP_PARAMS:Ug,INSTALL_PROMPTS:xF,HDB_ROOT_DIR_NAME:qH,CLUSTERING_PROCESSES:JH,FOREGROUND_PID_FILE:VH,PACKAGE_ROOT:Pn,PRE_4_0_0_VERSION:Dq,DATABASES_PARAM_CONFIG:nq,METADATA_PROPERTY:fq,AUTH_AUDIT_STATUS:Uq,AUTH_AUDIT_TYPES:Mq,HDB_PID_FILE:$H,DEFAULT_DATABASE_NAME:YH,LEGACY_CONFIG_PARAMS:sq};mE()});var mE=T((rne,Gg)=>{var Pq=require("fast-glob"),{statSync:pE,existsSync:SE,readFileSync:vq,writeFileSync:Bq}=require("fs"),{spawnSync:Hq,spawn:Fq,execFileSync:tne}=require("child_process"),{isMainThread:qq}=require("worker_threads"),{join:vn,relative:qg}=require("path"),{PACKAGE_ROOT:rs}=y(),{tmpdir:Gq,platform:xq}=require("os");require("source-map-support").install();var kq=["resources","server","dataLayer","components"],Ia="ts-build",TE,Vq=__filename.endsWith("tsBuild.js");if(Vq){if(qq){let r;try{pE(vn(rs,Ia)),r=!0}catch{}if(r)for(let s of Pq.sync(kq.map(n=>n+"/**/*.ts"),{cwd:rs})){let n=0,i=0;try{n=pE(vn(rs,s)).mtimeMs-5e3,i=pE(vn(rs,Ia,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."),TE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),TE=!0;if(TE){let s=vn(rs,"node_modules/.bin/tsc");xq()==="win32"&&(s+=".cmd");let n=Hq(s,{cwd:rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=vn(Gq(),"harperdb-tsc.pid"),o;if(SE(i))try{process.kill(+vq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Fq(s,["--watch"],{cwd:rs,detached:!0,stdio:"ignore"});Bq(i,c.pid.toString()),c.unref()}}}}let e=Gg.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=qg(rs,s[0]),o;i.startsWith(Ia)?o=vn(rs,qg(Ia,i)):o=vn(rs,Ia,i);let c=vn(o,r),u=c+".js";if(SE(u))return u;if(c.includes(".")&&SE(c))return c}return t(r,s,n)}}});var fi={};ve(fi,{server:()=>ct});var xg,ct,fr=Te(()=>{xg=require("../index"),ct={};(0,xg._assignPackageExport)("server",ct)});var RE=T((sne,$g)=>{"use strict";var kg=require("minimist");$g.exports=$q;function $q(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Vg(process.env),s=Vg(kg(process.argv))):(r=process.env,s=kg(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($q,"assignCMDENVVariables");function Vg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Vg,"objKeysToLowerCase")});var F=T((ine,IE)=>{"use strict";var Ei=require("fs-extra"),{workerData:Yq,threadId:Kq}=require("worker_threads"),en=require("path"),Wg=require("yaml"),Qg=require("properties-reader"),ut=y(),Yg=RE(),Wq=require("os"),{PACKAGE_ROOT:AE}=y(),{_assignPackageExport:Qq}=require("../index"),Ca={};for(let e in console)Ca[e]||(Ca[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},zg={STDOUT:"stdOut",STDERR:"stdErr"},zq=en.join(AE,"logs"),Jq=en.join(AE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),Xq=1e4,Zs,Is,$t,nl,il,La,no,wa;wa===void 0&&Jg();IE.exports={notify:Zg,fatal:eA,error:Da,warn:yE,info:ol,debug:bE,trace:NE,setLogLevel:nG,log_level:$t,loggerWithTag:jq,suppressLogging:Zq,initLogSettings:Jg,setupConsoleLogging:Xg,logCustomLevel:rG,closeLogFile:OE,getLogFilePath:()=>La,OUTPUTS:zg,AuthAuditLog:aG};Qq("logger",IE.exports);function Jg(e=!1){try{if(wa===void 0||e){OE();let t=sG(),r=Yg(["ROOTPATH"]);try{wa=Qg(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ei.pathExistsSync(en.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:il,to_file:Zs,to_stream:Is}=iG(r.ROOTPATH?en.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):wa.get("settings_path"))),nl=ut.LOG_NAMES.HDB,La=en.join(il,nl)}}catch(t){if(wa=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=Yg(Object.keys(ut.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ut.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ut.CONFIG_PARAMS.LOGGING_LEVEL){$t=u;continue}if(c===ut.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===ut.CONFIG_PARAMS.LOGGING_FILE&&(Zs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=oG();Zs=Zs===void 0?n:Zs,Zs=Kg(Zs),Is=Is===void 0?i:Is,Is=Kg(Is),$t=$t===void 0?s:$t,il=zq,nl=ut.LOG_NAMES.INSTALL,La=en.join(il,nl);return}throw Da("Error initializing log settings"),Da(t),t}process.env.DEV_MODE&&(Is=!0),Xg()}a(Jg,"initLogSettings");var gE=!0;function Xg(){so("error",Da),so("warn",yE),so("log",ol),so("info",ol),so("debug",bE),so("trace",NE)}a(Xg,"setupConsoleLogging");function so(e,t){console[e]=function(...r){if(gE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ca[e](...r)}}a(so,"logConsole");function jq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Zg),fatal:r(eA),error:r(Da),warn:r(yE),info:r(ol),debug:r(bE),trace:r(NE)};function r(s){return function(...n){return s(t,...n)}}}a(jq,"loggerWithTag");function Zq(e){try{gE=!1,e()}finally{gE=!0}}a(Zq,"suppressLogging");var eG=Yq?.name?.replace(/ /g,"-")||"main";function tn(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||eG+"/"+Kq);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(tn,"createLogRecord");function Ua(e){Zs&&jg(e),Is&&process.stdout.write(e)}a(Ua,"logStdOut");function al(e){Zs&&jg(e),Is&&process.stderr.write(e)}a(al,"logStdErr");function jg(e){tG(),no?Ei.appendFileSync(no,e):Ca.log(e)}a(jg,"logToFile");function OE(){try{Ei.closeSync(no)}catch{}no=null}a(OE,"closeLogFile");function tG(){if(!no){try{if(!La)debugger;no=Ei.openSync(La,"a")}catch(e){Ca.error(e)}setTimeout(()=>{OE()},Xq).unref()}}a(tG,"openLogFile");function ol(...e){Yt[$t]<=Yt.info&&Ua(tn("info",e))}a(ol,"info");function NE(...e){Yt[$t]<=Yt.trace&&Ua(tn("trace",e))}a(NE,"trace");function Da(...e){Yt[$t]<=Yt.error&&al(tn("error",e))}a(Da,"error");function bE(...e){Yt[$t]<=Yt.debug&&Ua(tn("debug",e))}a(bE,"debug");function Zg(...e){Yt[$t]<=Yt.notify&&Ua(tn("notify",e))}a(Zg,"notify");function eA(...e){Yt[$t]<=Yt.fatal&&al(tn("fatal",e))}a(eA,"fatal");function yE(...e){Yt[$t]<=Yt.warn&&al(tn("warn",e))}a(yE,"warn");function rG(e,t,...r){t===zg.STDERR?al(tn(e,r)):Ua(tn(e,r))}a(rG,"logCustomLevel");function sG(){let e;try{e=Wq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=en.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return Ei.existsSync(t)||(t=en.join(AE,"utility/hdb_boot_properties.file")),t}a(sG,"getPropsFilePath");function nG(e){$t=e}a(nG,"setLogLevel");function Kg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Kg,"autoCastBoolean");function iG(e){try{if(e.includes("config/settings.js")){let o=Qg(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:en.dirname(o.get(ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Wg.parseDocument(Ei.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===ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(iG,"getLogConfig");function oG(){try{let e=Wg.parseDocument(Ei.readFileSync(Jq,"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(oG,"getDefaultConfig");function aG(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(aG,"AuthAuditLog")});var rA=T((ane,tA)=>{"use strict";var cG=require("util"),uG=require("path"),lG=require("child_process"),_G=cG.promisify(lG.execFile),dG=1e3*1e3*10;tA.exports={findPs:fG};async function fG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await _G("ps",["wwxo",`pid,${r}`],{maxBuffer:dG});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:uG.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(fG,"findPs")});var ze=T((une,nA)=>{"use strict";var EG="__dbis__",hG="__txns__",mG="__environment_name__",pG="__dbi_defintion__",SG={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"},TG=["__createdtime__","__updatedtime__"],RG="\uFFFF",sA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},gG=Object.values(sA);nA.exports={AUDIT_STORE_NAME:hG,INTERNAL_DBIS_NAME:EG,DBI_DEFINITION_NAME:pG,SEARCH_TYPES:SG,TIMESTAMP_NAMES:TG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:mG,TRANSACTIONS_DBI_NAMES_ENUM:sA,TRANSACTIONS_DBIS:gG,OVERFLOW_MARKER:RG}});var Er=T((lne,fA)=>{"use strict";var iA=y(),oA=ze(),aA={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},cA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),uA={500:cA("There was an error processing your request."),400:"Invalid request"},AG=uA[aA.INTERNAL_SERVER_ERROR],OG={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.`},NG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},bG={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"},yG={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 ${oA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${oA.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"},IG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${iA.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 ${iA.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"},lA={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"},wG={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."},CG={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`},LG={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"},DG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},UG={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`},_A={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.`},dA={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}`},MG={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."},PG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},vG={...lA,...bG,...OG,...wG,...CG,...LG,...DG,...UG,...IG,..._A,...dA,...MG,...PG,...NG};fA.exports={CHECK_LOGS_WRAPPER:cA,HDB_ERROR_MSGS:vG,DEFAULT_ERROR_MSGS:uA,DEFAULT_ERROR_RESP:AG,HTTP_STATUS_CODES:aA,LMDB_ERRORS_ENUM:yG,AUTHENTICATION_ERROR_MSGS:lA,VALIDATION_ERROR_MSGS:_A,ITC_ERRORS:dA}});var j=T((dne,mA)=>{"use strict";var io=Er(),BG=F(),HG=y(),cl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,EA),this.statusCode=s||io.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(io.DEFAULT_ERROR_MSGS[s]?io.DEFAULT_ERROR_MSGS[s]:io.DEFAULT_ERROR_MSGS[io.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&&BG[n](i)}},wE=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}},CE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function EA(e,t,r,s=HG.LOG_LEVELS.ERROR,n=null,i=!1){if(hA(e))return e;let o=new cl(e,t,r,s,n);return i&&delete o.stack,o}a(EA,"handleHDBError");function hA(e){return e.__proto__.constructor.name===cl.name}a(hA,"isHDBError");mA.exports={isHDBError:hA,handleHDBError:EA,ClientError:wE,ServerError:CE,hdb_errors:io}});var Be=T((Ene,OA)=>{"use strict";var Ha=y(),FG=$(),Kt=X(),Fa=require("path"),qG=require("minimist"),pA=require("fs-extra"),SA=require("lodash");Kt.initSync();var{CONFIG_PARAMS:Bn,DATABASES_PARAM_CONFIG:Ma,SYSTEM_SCHEMA_NAME:ul}=Ha,Pa,va,Ba;function TA(){if(Pa!==void 0)return Pa;if(Kt.getHdbBasePath()!==void 0)return Pa=Kt.get(Bn.STORAGE_PATH)||Fa.join(Kt.getHdbBasePath(),Ha.DATABASES_DIR_NAME),Pa}a(TA,"getBaseSchemaPath");function RA(){if(va!==void 0)return va;if(Kt.getHdbBasePath()!==void 0)return va=AA(ul),va}a(RA,"getSystemSchemaPath");function gA(){if(Ba!==void 0)return Ba;if(Kt.getHdbBasePath()!==void 0)return Ba=Kt.get(Ha.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Fa.join(Kt.getHdbBasePath(),Ha.TRANSACTIONS_DIR_NAME),Ba}a(gA,"getTransactionAuditStoreBasePath");function GG(e,t){let r=Kt.get(Bn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Fa.join(gA(),e.toString())}a(GG,"getTransactionAuditStorePath");function AA(e,t){e=e.toString(),t=t&&t.toString();let r=Kt.get(Ha.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Fa.join(TA(),e)}a(AA,"getSchemaPath");function xG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,qG(process.argv));let s=r[Bn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!FG.isObject(s))throw o;i=s}for(let o of i){let c=o[ul];if(!c)continue;let u=Kt.get(Bn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ma.PATH];if(_)return SA.set(u,[ul,Ma.TABLES,t,Ma.PATH],_),Kt.setProperty(Bn.DATABASES,u),_;let l=c?.[Ma.PATH];if(l)return SA.set(u,[ul,Ma.PATH],l),Kt.setProperty(Bn.DATABASES,u),l}}let n=r[Bn.STORAGE_PATH.toUpperCase()];if(n){if(!pA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Fa.join(n,e);return pA.mkdirsSync(i),Kt.setProperty(Bn.STORAGE_PATH,n),i}return RA()}a(xG,"initSystemSchemaPaths");function kG(){Pa=void 0,va=void 0,Ba=void 0}a(kG,"resetPaths");OA.exports={getBaseSchemaPath:TA,getSystemSchemaPath:RA,getTransactionAuditStorePath:GG,getTransactionAuditStoreBasePath:gA,getSchemaPath:AA,initSystemSchemaPaths:xG,resetPaths:kG}});var hr=T((Sne,wA)=>{"use strict";var VG=Er().LMDB_ERRORS_ENUM,mne=require("lmdb"),$G=ze(),pne=require("buffer").Buffer,{OVERFLOW_MARKER:NA,MAX_SEARCH_KEY_LENGTH:ll}=$G,bA=["number","string","symbol","boolean","bigint"];function YG(e){if(e=e?.primaryStore||e,!e)throw new Error(VG.ENV_REQUIRED)}a(YG,"validateEnv");function KG(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(KG,"stringifyData");function WG(e){return e instanceof Date?e.valueOf():e}a(WG,"convertKeyValueToWrite");function QG(e){if(e==null)return;if(bA.includes(typeof e))return e.length>ll?[e.slice(0,ll)+NA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(bA.includes(typeof n))n.length>ll?t.push(n.slice(0,ll)+NA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(QG,"getIndexedValues");var _l=0,yA=0;function IA(){yA=Date.now()-performance.now()}a(IA,"adjustStartTime");IA();var zG=6e4;setInterval(IA,zG).unref();function JG(){let e=performance.now()+yA;return e>_l?(_l=e,e):(_l+=488e-6,_l)}a(JG,"getNextMonotonicTime");wA.exports={validateEnv:YG,stringifyData:KG,convertKeyValueToWrite:WG,getNextMonotonicTime:JG,getIndexedValues:QG}});var CA,ss,LE,qa=Te(()=>{CA=require("events"),ss=class extends CA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new LE;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)}},LE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function vr(e){return e[Bt]||(e[Bt]=Object.create(null))}function hl(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a number, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a boolean, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ns.ClientError(`${c} must be a Date, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be an object, attempt to assign ${l}`);vr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=LA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(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[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");vr(this)[o]=c}),i("deleteProperty",function(o){vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function LA(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[Re]=n}},hl(r,t)),new r(e)):new dl(e);case Array:let s=new El(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=LA(o,t?.elements)),s[n]=o}return s}}function ml(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=ml(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Ga(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Ga(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ga(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function fl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[hi]||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?.[Re]===n){if(fl(i))return!0}else return!0}}else{let r=e[Bt];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[Re]===i){if(fl(n))return!0}else return!0}else return!0}}return!1}var ns,Bt,dl,hi,El,pl=Te(()=>{is();ns=D(j()),Bt=Symbol("own-data");a(vr,"getChanges");a(hl,"assignTrackedAccessors");a(LA,"trackObject");dl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};hl(dl,{});a(ml,"collapseData");a(Ga,"deepFreeze");a(fl,"hasChanges");hi=Symbol.for("has-array-changes"),El=class extends Array{static{a(this,"TrackedArray")}[hi];constructor(t){super(t)}splice(...t){return this[hi]=!0,super.splice(...t)}push(...t){return this[hi]=!0,super.push(...t)}pop(){return this[hi]=!0,super.pop()}unshift(...t){return this[hi]=!0,super.unshift(...t)}shift(){return this[hi]=!0,super.shift()}};El.prototype.constructor=Array});function ex(){ZG=setInterval(function(){for(let e of DE)if(e.stale){let t=e[me]?.url;DA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},jG).unref()}var UE,DA,XG,DE,mi,Sl,jG,ZG,ME=Te(()=>{UE=D(hr()),DA=D(F());is();XG=100,DE=new Set,mi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),DE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(DE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,UE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){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()=>{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 g=S();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(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<XG>>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(){this.resetReadSnapshot(),this.writes=[]}},Sl=class extends mi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,UE.getNextMonotonicTime)())}getReadTxn(){}},jG=3e4;a(ex,"startMonitoringTxns");ex()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new mi;e.timestamp&&(s.timestamp=e.timestamp),s[me]=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({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var UA,pi=Te(()=>{UA=require("../index");is();ME();a(Ge,"transaction");(0,UA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function vE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new oo.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(vA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case pt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new oo.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new oo.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=BE(e);if(!S)throw new oo.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:b})=>new Promise((O,Y)=>setImmediate(()=>{try{O(b&&S(b)?g:PA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function BE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),vA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case pt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new oo.ClientError(`Unknown query comparator "${t}"`)}}function ws(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 Tl(e){if(!e)return;let t=new PE,r,s,n,i,o,c=MA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=tx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?rx:MA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var oo,pt,Cs,PA,tx,vA,MA,rx,PE,Rl=Te(()=>{oo=D(j()),pt=D(ze()),Cs=require("ordered-binary"),PA=require("lmdb"),tx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(vE,"idsForCondition");vA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(BE,"filterByType");a(ws,"attributeComparator");MA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,rx=/([^&|*=]+)([&|*=]*)/g;a(Tl,"parseQuery");PE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var qE={};ve(qE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>os,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>xA,snake_case:()=>nx});function nx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function BA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new FE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Br(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[xA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new gl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new gl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Hr(e,t){let r=new GA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function HE(e){let t=e[Re];if(t){let r=e[Bt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function HA(e){if(typeof e=="string")return t=>HE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=HE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=HE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var FA,qA,GA,me,Ie,os,xA,Re,sx,Nt,gl,FE,is=Te(()=>{FA=require("crypto");qa();qA=require("../index"),GA=D(j());pl();pi();Rl();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),os=Symbol("is-collection"),xA=Symbol("save-updates"),Re=Symbol("stored-record"),sx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Br(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=HA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Br(function(t,r,s,n){if(Array.isArray(n)&&t[os]){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):Hr(t,"put")},{hasContent:!0,type:"update"});static delete=Br(function(t,r,s,n){return t.delete?t.delete(r):Hr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,FA.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),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Hr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Br(function(t,r,s,n){return t.invalidate?t.invalidate(r):Hr(t,"delete")},{hasContent:!1,type:"update"});static post=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Br(function(t,r,s,n){return t.connect?t.connect(n,r):Hr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Br(function(t,r,s,n){return t.subscribe?t.subscribe(r):Hr(t,"subscribe")},{type:"read"});static publish=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Hr(t,"publish")},{hasContent:!0,type:"create"});static search=Br(function(t,r,s,n){let i=t.search?t.search(r):Hr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=HA(o);return i.map(c)}return i},{type:"read"});static query=Br(function(t,r,s,n){return t.search?t.search(n,r):Hr(t,"search")},{hasContent:!0,type:"read"});static copy=Br(function(t,r,s,n){return t.copy?t.copy(n,r):Hr(t,"copy")},{type:"create"});static move=Br(function(t,r,s,n){return t.move?t.move(n,r):Hr(t,"move")},{type:"delete"});post(t){if(this[os])return this.constructor.create(this[Ie],t,this[me]);Hr(this,"post")}static isCollection(t){return t?.[os]}static coerceId(t){return t}static parseQuery(t){return Tl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&sx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:BA(t,this)}}return BA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=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(_=>_[Ie]===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[Ie],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[os]=!0),n}subscribe(t){return new ss}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ss}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[Ie]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,qA._assignPackageExport)("Resource",Nt);a(nx,"snake_case");gl=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(BA,"pathToId");FE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Br,"transactional");a(Hr,"missingMethod");a(HE,"selectFromObject");a(HA,"transformForSelect")});var kA={};ve(kA,{Resources:()=>Al,keyArrayToString:()=>ao,resetResources:()=>ix,resources:()=>Hn});function ix(){return Hn=new Al}function ao(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Al,Hn,xa=Te(()=>{pi();Al=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 Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(ix,"resetResources");a(ao,"keyArrayToString")});var QA={};ve(QA,{HAS_EXPIRATION:()=>KE,LAST_TIMESTAMP_PLACEHOLDER:()=>Va,LOCAL_TIMESTAMP:()=>ox,METADATA:()=>ka,NO_TIMESTAMP:()=>GE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>YE,RecordEncoder:()=>$E,TIMESTAMP_ASSIGN_LAST:()=>cx,TIMESTAMP_ASSIGN_NEW:()=>YA,TIMESTAMP_ASSIGN_PREVIOUS:()=>KA,TIMESTAMP_PLACEHOLDER:()=>Ol,TIMESTAMP_RECORD_PREVIOUS:()=>xE,getUpdateRecord:()=>WE,handleLocalTimeForGets:()=>Il});function WA(){return uo[0]=uo[0]^64,ax.getFloat64(0)}function Il(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[ka]>=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[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=ux.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(uo,0,d),l.timestampBytes=null,l.localTime=WA())}}}}while(i!=o&&(i=i.next))}));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,Si.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Si.length;u++){let _=Si[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Si.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function WE(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?co=i?.localTime?xE|KA:GE:co=u?i?.localTime?xE|16384:YA|16384:GE,l>0&&(c|=KE),bl=c,VE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:co>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=kE,g.timestampOffset=kE.start||0))}if(u){let g=_?.user?.username;if(E&&(Nl=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,O=r.get(b);if(O){let Y=mr(O).previousLocalTime;return r.put(b,yl(o,t,s,Y,g,d,Nl),{ifVersion:p}),S}}r.put(Va,yl(o,t,s,i?.localTime?1:0,g,d,Nl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var VA,$A,Ol,Va,YE,ox,ka,uo,ax,GE,YA,cx,KA,xE,KE,kE,Nl,co,bl,VE,$E,ux,Si,$a=Te(()=>{VA=require("msgpackr");lo();$A=D(F()),Ol=new Uint8Array([1,1,1,1,4,64,0,0]),Va=new Uint8Array([1,1,1,1,1,0,0,0]),YE=new Uint8Array([1,1,1,1,3,64,0,0]),ox=Symbol("local-timestamp"),ka=Symbol("metadata"),uo=new Uint8Array(8),ax=new DataView(uo.buffer,0,8),GE=0,YA=0,cx=1,KA=3,xE=4,KE=16,co=0,bl=-1,VE=0,$E=class extends VA.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(co||bl>=0){let i=0,o=co;o&&(i+=8,co=0);let c=bl,u=VE;c>=0&&(i+=2,bl=-1,u&&(i+=8,VE=0));let _=kE=r.call(this,s,n|2048|i);Nl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Ol[4]=o,Ol[5]=o>>8,_.set(Ol,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(uo,0,c),c+=8;else for(let d=0;d<8;d++)uo[d]=t[c++];u=WA(),i=t[c]}let _;i<32&&(o=i,c+=2,o&KE&&(_=(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,[ka]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(WA,"getTimestamp");ux=Map.prototype.get;a(Il,"handleLocalTimeForGets");Si=[];setInterval(()=>{for(let e=0;e<Si.length;e++){let t=Si[e].deref();!t||t.isDone||t.isCommitted?Si.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&$A.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(WE,"getUpdateRecord")});var oO={};ve(oO,{AUDIT_STORE_OPTIONS:()=>nO,createAuditEntry:()=>yl,openAuditStore:()=>Cl,readAuditEntry:()=>mr,setAuditRetention:()=>lx,transactionKeyEncoder:()=>sO});function Cl(e){let t=e.auditStore=e.openDB(ZA.AUDIT_STORE_NAME,nO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,tO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Ya||(Ya=setTimeout(()=>{if(Ya=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-QE})){if((n[0]&15)===JE){let i=mr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},QE/10).unref())}),t}function lx(e){clearTimeout(Ya),Ya=null,QE=e}function yl(e,t,r,s,n,i,o){let c=iO[i],u=1;s&&(s>1?_o.setFloat64(0,s):Fr.set(YE),u=9),f(0),f(t),d(r),_o.setFloat64(u,e),u+=8,n?d(n):Fr[u++]=0,Fr[s?8:0]=c;let l=Fr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,fo.writeKey)(E,Fr,u);let p=u-h-1;p>127?p>16383?(jE.error("Key or username was too large for audit entry",E),u=h+1,Fr[h]=0):(Fr.copyWithin(h+2,h+1,u),_o.setUint16(h,p|32768),u++):Fr[h]=p}function f(E){E<128?Fr[u++]=E:E<16384?(_o.setUint16(u,E|32768),u+=2):E<1056964608?(_o.setUint32(u,E|3221225472),u+=4):(Fr[u]=255,_o.setUint32(u+1,E),u+=5)}}function mr(e){try{let t=e.dataView||(e.dataView=new XE(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:iO[s&7],tableId:i,get recordId(){return jA(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?jA(e,l,d):void 0},getValue(f){return s&zE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return jE.error("Reading audit entry error",e),{}}}function jA(e,t,r){let s=e.subarray(t,r);return(0,fo.readKey)(s,0,r-t)}var fo,wl,ZA,eO,tO,rO,jE,Fr,_o,sO,nO,QE,Ya,zE,zA,JE,JA,XA,iO,XE,lo=Te(()=>{fo=require("ordered-binary"),wl=D(X()),ZA=D(ze()),eO=D(y()),tO=D(Je()),rO=D($());$a();jE=D(F());(0,wl.initSync)();Fr=Buffer.alloc(1024),_o=new DataView(Fr.buffer,Fr.byteOffset,1024),sO={writeKey(e,t,r){return e===Va?(t.set(Va,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,fo.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,fo.readKey)(e,t,r)}},nO={encoding:"binary",keyEncoder:sO},QE=(0,rO.convertToMS)((0,wl.get)(eO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ya=null;a(Cl,"openAuditStore");a(lx,"setAuditRetention");zE=16,zA=1,JE=2,JA=3,XA=4,iO={put:zA|zE,[zA]:"put",delete:JE,[JE]:"delete",message:JA|zE,[JA]:"message",invalidate:XA,[XA]:"invalidate"};a(yl,"createAuditEntry");a(mr,"readAuditEntry");XE=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(jA,"readKeySafely")});function cO(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Eo||((0,Wa.onMessageByType)(aO,d=>{uO(d.path)}),(0,Wa.onMessageByType)(_x,d=>{(0,Ka.trace)("confirming to proceed with txn",d.txnId)}),Eo=Object.create(null));let c=Eo[i]||(Eo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=ao(t);let _=new eh(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function uO(e,t){if(!Eo)return;let r=Eo[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:ZE,exclusiveStart:!0})){ZE=n;let o=mr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ao(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Ka.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,Ka.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},ZE,!0)}function lO(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,Wa.broadcast)({type:aO,path:n}),uO(n,!0)})}}var Ka,Wa,aO,_x,Eo,Jne,eh,ZE,_O=Te(()=>{Ka=D(F()),Wa=D(Je());qa();xa();lo();aO="transaction",_x="transaction-await",Jne=Buffer.alloc(4096);a(cO,"addSubscription");eh=class extends ss{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"}}},ZE=Date.now();a(uO,"notifyFromTransactionData");a(lO,"listenToCommits")});var fO=T((Zne,dO)=>{"use strict";var th=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};dO.exports=th});var hO=T((tie,EO)=>{"use strict";var rh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};EO.exports=rh});var Ll=T((sie,mO)=>{"use strict";var nh=X(),ih=y(),{RecordEncoder:dx}=($a(),Z(QA));nh.initSync();var fx=nh.get(ih.CONFIG_PARAMS.STORAGE_COMPRESSION),Ex=nh.get(ih.CONFIG_PARAMS.STORAGE_CACHING)!==!1,hx=ih.UPDATES_PROPERTY,sh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=fx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Ex&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:dx},this.alwaysLazyProperty=s=>s===hx)}};mO.exports=sh});var Ul=T((iie,SO)=>{"use strict";var ho=X(),Qa=y();ho.initSync();var mx=ho.get(Qa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ho.get(Qa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ho.get(Qa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",pO=ho.get(Qa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),px=ho.get(Qa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Dl=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=mx,this.noFSAccess=!0,pO!==void 0&&(this.overlappingSync=pO),this.noReadAhead=px}};SO.exports=Dl;Dl.MAX_DBS=1e4});var Ue=T((aie,wO)=>{"use strict";var ah=require("lmdb"),as=require("fs-extra"),pr=require("path"),Ml=hr(),gO=F(),Wt=Er().LMDB_ERRORS_ENUM,Pl=hO(),ch=Ll(),AO=Ul(),Fn=ze(),TO=y(),{table:Sx,resetDatabases:Tx}=(fe(),Z(Ce)),RO=X(),cs=Fn.INTERNAL_DBIS_NAME,OO=Fn.DBI_DEFINITION_NAME,Rx="data.mdb",gx="lock.mdb",za=".mdb",Ax="-lock",oh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(t,r),this.key_type=this.dbi[Fn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Fn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new ah.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function vl(e,t){if(e===void 0)throw new Error(Wt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Wt.ENV_NAME_REQUIRED)}a(vl,"pathEnvNameValidation");async function uh(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Wt.INVALID_BASE_PATH):s}try{let s=pr.join(e,t+za);return await as.access(s,as.constants.R_OK|as.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await as.access(pr.join(e,t,Rx),as.constants.R_OK|as.constants.F_OK),pr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Wt.INVALID_ENVIRONMENT)}else throw new Error(Wt.INVALID_ENVIRONMENT);throw s}}a(uh,"validateEnvironmentPath");function Bl(e,t){if(Ml.validateEnv(e),t===void 0)throw new Error(Wt.DBI_NAME_REQUIRED)}a(Bl,"validateEnvDBIName");async function Ox(e,t,r=!1,s=!1){vl(e,t);let n=pr.basename(e);t=t.toString();let i=RO.get(TO.CONFIG_PARAMS.DATABASES);i||RO.setProperty(TO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await uh(e,t,s),NO(e,t,r)}catch(o){if(o.message===Wt.INVALID_ENVIRONMENT){let c=pr.join(e,t);await as.mkdirp(s?c:e);let u=new AO(s?c:c+za,!1),_=ah.open(u);_.dbis=Object.create(null);let l=new ch(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lh(e,t,r);return _[Fn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Ox,"createEnvironment");async function Nx(e,t,r,s=!0){vl(e,t),t=t.toString();let n=pr.join(e,t);return Sx({table:t,database:pr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Nx,"copyEnvironment");async function NO(e,t,r=!1){vl(e,t),t=t.toString();let s=lh(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 uh(e,t),i=pr.join(e,t+za),o=n!=i,c=new AO(n,o),u=ah.open(c);u.dbis=Object.create(null);let _=yO(u);for(let l=0;l<_.length;l++)qr(u,_[l]);return u[Fn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(NO,"openEnvironment");async function bx(e,t,r=!1){vl(e,t),t=t.toString();let s=pr.join(e,t+za),n=await uh(e,t);if(global.lmdb_map!==void 0){let i=lh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await bO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+Ax:pr.join(pr.dirname(n),gx))}a(bx,"deleteEnvironment");async function bO(e){Ml.validateEnv(e);let t=e[Fn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(bO,"closeEnvironment");function lh(e,t,r=!1){let n=`${pr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(lh,"getCachedEnvironmentName");function yx(e){Ml.validateEnv(e);let t=Object.create(null),r=qr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new Pl,n)}catch{gO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(yx,"listDBIDefinitions");function yO(e){Ml.validateEnv(e);let t=[],r=qr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(yO,"listDBIs");function Ix(e,t){let s=qr(e,cs).getEntry(t),n=new Pl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{gO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Ix,"getDBIDefinition");function IO(e,t,r,s=!r){if(Bl(e,t),t=t.toString(),t===cs)throw new Error(Wt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===Wt.DBI_DOES_NOT_EXIST){let i=new ch(r,s===!0),o=e.openDB(t,i),c=new Pl(r===!0,s);return o[OO]=c,qr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(IO,"createDBI");function qr(e,t){if(Bl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=Ix(e,t):r=new Pl,r===void 0)throw new Error(Wt.DBI_DOES_NOT_EXIST);let s;try{let n=new ch(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(Wt.DBI_DOES_NOT_EXIST):n}return s[OO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function wx(e,t){Bl(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Fn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wx,"statDBI");async function Cx(e,t){try{let r=pr.join(e,t+za);return(await as.stat(r)).size}catch{throw new Error(Wt.INVALID_ENVIRONMENT)}}a(Cx,"environmentDataSize");function Lx(e,t){if(Bl(e,t),t=t.toString(),t===cs)throw new Error(Wt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,cs).removeSync(t)}a(Lx,"dropDBI");function Dx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{qr(e,i)}catch(o){if(o.message===Wt.DBI_DOES_NOT_EXIST)IO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Tx()}a(Dx,"initializeDBIs");wO.exports={openDBI:qr,openEnvironment:NO,createEnvironment:Ox,listDBIs:yO,listDBIDefinitions:yx,createDBI:IO,dropDBI:Lx,statDBI:wx,deleteEnvironment:bx,initializeDBIs:Dx,TransactionCursor:oh,environmentDataSize:Cx,copyEnvironment:Nx,closeEnvironment:bO}});var DO=T((uie,LO)=>{"use strict";var _h=Ue(),Ux=F(),CO=Er().LMDB_ERRORS_ENUM;LO.exports=Mx;async function Mx(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 _h.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==CO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await _h.closeEnvironment(global.lmdb_map[s]),await _h.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==CO.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){Ux.error(t)}}a(Mx,"cleanLMDBMap")});var Ti=T((_ie,Px)=>{Px.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 $O=T((fie,VO)=>{"use strict";var dh=require("recursive-iterator"),vx=require("alasql"),fh=require("clone"),UO=$(),{handleHDBError:MO,hdb_errors:Bx}=j(),{HDB_ERROR_MSGS:PO,HTTP_STATUS_CODES:vO}=Bx,{getDatabases:Hx}=(fe(),Z(Ce)),Fx=["DISTINCT_ARRAY"],BO=Symbol("validateTables"),Eh=Symbol("validateTable"),die=Symbol("getAllColumns"),HO=Symbol("validateAllColumns"),Hl=Symbol("findColumn"),FO=Symbol("validateOrderBy"),Ja=Symbol("validateSegment"),hh=Symbol("validateColumn"),qO=Symbol("setColumnsForTable"),GO=Symbol("checkColumnsForAsterisk"),xO=Symbol("validateGroupBy"),kO=Symbol("hasColumns"),mh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[BO](),this[GO](),this[HO]()}[BO](){if(this[kO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Eh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Eh](t.table)})}}[kO](){let t=!1,r=new dh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Eh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Hx();if(!r[t.databaseid])throw MO(new Error,PO.SCHEMA_NOT_FOUND(t.databaseid),vO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw MO(new Error,PO.TABLE_NOT_FOUND(t.databaseid,t.tableid),vO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=fh(n);i.table=fh(t),this.attributes.push(i)})}[Hl](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)}[GO](){let t=new dh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[qO](r.tableid)}[qO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new vx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[HO](){this[Ja](this.statement.columns,!1),this[Ja](this.statement.joins,!1),this[Ja](this.statement.where,!1),this[xO](this.statement.group,!1),this[Ja](this.statement.order,!0)}[Ja](t,r){if(!t)return;let s=new dh(t),n=[];for(let{node:i,path:o}of s)!UO.isEmpty(i)&&!UO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[FO](i):n.push(this[hh](i)));return n}[xO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Fx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=fh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Hl](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[Hl](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`}[FO](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[hh](t)}[hh](t){let r=this[Hl](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]}};VO.exports=mh});var KO=T((hie,YO)=>{"use strict";var ph=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")}};YO.exports=ph});var QO=T((pie,WO)=>{"use strict";var Sh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};WO.exports=Sh});var JO=T((Tie,zO)=>{"use strict";var Th=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}};zO.exports=Th});var jO=T((gie,XO)=>{"use strict";var Rh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};XO.exports=Rh});var mo=T((yie,tN)=>{"use strict";var qx=Ue(),Gx=QO(),xx=JO(),kx=jO(),Ls=hr(),Xa=Er().LMDB_ERRORS_ENUM,Vx=ze(),rn=y(),$x=$(),Yx=require("uuid"),Oie=require("lmdb"),{handleHDBError:Kx,hdb_errors:Wx}=j(),{OVERFLOW_MARKER:Nie,MAX_SEARCH_KEY_LENGTH:bie}=Vx,ZO=X();ZO.initSync();var Fl=ZO.get(rn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gh=rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ri=rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Qx(e,t,r,s,n=Ls.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new Gx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];eN(_,!0,n);let l=zx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Oh(o,c,s,i,n)}a(Qx,"insertRecords");function zx(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][rn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){Fl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Fl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[Ri])})}a(zx,"insertRecord");function Jx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Jx,"removeSkippedRecords");function eN(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ri]))&&(e[Ri]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gh]))&&(e[gh]=r||Ls.getNextMonotonicTime()):delete e[gh]}a(eN,"setTimestamps");function Ah(e,t,r){r.indexOf(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),qx.initializeDBIs(e,t,r)}a(Ah,"initializeTransaction");async function Xx(e,t,r,s,n=Ls.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new xx,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Nh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Oh(c,u,s,i,n,o)}a(Xx,"updateRecords");async function jx(e,t,r,s,n=Ls.getNextMonotonicTime()){try{bh(e,t,r,s)}catch(u){throw Kx(u,u.message,Wx.HTTP_STATUS_CODES.BAD_REQUEST)}Ah(e,t,r);let i=new kx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;$x.isEmpty(_[t])?(l=Yx.v4(),_[t]=l):l=_[t];let d=Nh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Oh(o,c,s,i,n)}a(jx,"upsertRecords");async function Oh(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||Ls.getNextMonotonicTime(),Jx(r,i),s}a(Oh,"finalizeWrite");function Nh(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(eN(r,!l,o),Number.isInteger(r[Ri])&&_[Ri]>r[Ri])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 g=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][rn.FUNC_VAL],r[h]=p)}if(p===g)continue;let b=Ls.getIndexedValues(g);if(b){Fl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.remove(b[O],s)}if(b=Ls.getIndexedValues(p),b){Fl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.put(b[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ri])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Nh(e,t,r,s,n,i,o))}a(Nh,"updateUpsertRecord");function Zx(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Xa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Xa.WRITE_ATTRIBUTES_REQUIRED):new Error(Xa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Zx,"validateBasic");function bh(e,t,r,s){if(Zx(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Xa.RECORDS_REQUIRED):new Error(Xa.RECORDS_MUST_BE_ARRAY)}a(bh,"validateWrite");function ql(){}a(ql,"noop");tN.exports={insertRecords:Qx,updateRecords:Xx,upsertRecords:jx}});var Ds=T((wie,nN)=>{"use strict";var sN=$(),rN=y(),po=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,sn=require("joi"),qn={schema_format:{pattern:po,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ek=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(po).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()).required(),tk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(po).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()),rk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(po).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()).required();function sk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qn.schema_length.maximum?`'${e}' maximum of 250 characters`:po.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sk,"checkValidTable");function nk(e,t){return sN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(nk,"validateSchemaExists");function ik(e,t){let r=t.state.ancestors[0].schema;return sN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ik,"validateTableExists");function ok(e,t){return e.toLowerCase()===rN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${rN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ok,"validateSchemaName");nN.exports={common_validators:qn,schema_regex:po,hdb_schema_table:ek,validateSchemaExists:nk,validateTableExists:ik,validateSchemaName:ok,checkValidTable:sk,hdb_database:tk,hdb_table:rk}});var xe=T((Lie,iN)=>{"use strict";var Qt=require("validate.js");Qt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Qt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Qt.validators.type.checks={Object:function(e){return Qt.isObject(e)&&!Qt.isArray(e)},Array:Qt.isArray,Integer:Qt.isInteger,Number:Qt.isNumber,String:Qt.isString,Date:Qt.isDate,Boolean:function(e){return typeof e=="boolean"}};Qt.validators.hasValidFileExt=function(e,t){return Qt.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};iN.exports={validateObject:ak,validateObjectAsync:ck,validateBySchema:uk};function ak(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Qt(e,t,{format:"flat"});return r?new Error(r):null}a(ak,"validateObject");async function ck(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Qt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(ck,"validateObjectAsync");function uk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(uk,"validateBySchema")});var Gl=T((Uie,oN)=>{var{common_validators:Us}=Ds(),Za=xe(),ja="is required",et={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function ec(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(ec,"makeAttributesStrings");function lk(e){return e=ec(e),et.table.presence=!1,et.attribute.presence=!1,et.hash_attribute.presence=!1,Za.validateObject(e,et)}a(lk,"schema_object");function _k(e){return e=ec(e),et.table.presence={message:ja},et.attribute.presence=!1,et.hash_attribute.presence=!1,Za.validateObject(e,et)}a(_k,"table_object");function dk(e){return e=ec(e),et.table.presence={message:ja},et.attribute.presence=!1,Za.validateObject(e,et)}a(dk,"create_table_object");function fk(e){return e=ec(e),et.table.presence={message:ja},et.attribute.presence={message:ja},et.hash_attribute.presence=!1,Za.validateObject(e,et)}a(fk,"attribute_object");function Ek(e){return e=ec(e),et.table.presence={message:ja},et.attribute.presence=!1,et.hash_attribute.presence=!1,Za.validateObject(e,et)}a(Ek,"describe_table");function hk(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(hk,"validateTableResidence");oN.exports={schema_object:lk,create_table_object:dk,table_object:_k,attribute_object:fk,describe_table:Ek,validateTableResidence:hk}});var cN=T((Pie,aN)=>{"use strict";var mk=require("uuid"),yh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||mk.v4(),this.schema_table=`${this.schema}.${this.table}`}};aN.exports=yh});var xl=T((Bie,uN)=>{"use strict";var pk=cN(),Ih=class extends pk{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}};uN.exports=Ih});var _N=T((Fie,lN)=>{"use strict";lN.exports=Tk;var Sk="inserted";function Tk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Sk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Tk,"returnObject")});var kl=T((Gie,mN)=>{"use strict";var Rk=y(),wh=Ue(),gk=mo(),{getSystemSchemaPath:Ak,getSchemaPath:Ok}=Be(),Nk=Ti(),bk=Gl(),yk=xl(),Ik=_N(),{handleHDBError:dN,hdb_errors:EN}=j(),fN=$(),{HTTP_STATUS_CODES:wk}=EN,Ch=Nk.hdb_attribute,hN=[];for(let e=0;e<Ch.attributes.length;e++)hN.push(Ch.attributes[e].attribute);var Ck="inserted";mN.exports=Lk;async function Lk(e){let t=bk.attribute_object(e);if(t)throw dN(new Error,t.message,EN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&fN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw dN(new Error,r,wk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=fN.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 yk(e.schema,e.table,e.attribute,e.id);try{let i=await wh.openEnvironment(Ok(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}`);wh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await wh.openEnvironment(Ak(),Rk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await gk.insertRecords(o,Ch.hash_attribute,hN,[n]);return Ik(Ck,c,{records:[n]},u)}catch(i){throw i}}a(Lk,"lmdbCreateAttribute")});var Dh=T((kie,SN)=>{var{hdb_table:Dk,hdb_database:pN}=Ds(),Uk=xe(),Lh=require("joi"),Mk={undefined:"undefined",null:"null"},Pk=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||Mk[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"),vk=Lh.object({database:pN,schema:pN,table:Dk,records:Lh.array().items(Lh.object().custom(Pk)).required()});SN.exports=function(e){return Uk.validateBySchema(e,vk)}});var tc=T((Yie,RN)=>{"use strict";var nn=$(),TN=F(),$ie=Dh(),{getDatabases:Bk}=(fe(),Z(Ce)),{ClientError:gi}=j();RN.exports=Hk;function Hk(e){if(nn.isEmpty(e))throw new gi("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new gi("invalid schema specified.");if(nn.isEmptyOrZeroLength(e.table))throw new gi("invalid table specified.");if(!Array.isArray(e.records))throw new gi("records must be an array");let t=Bk()[e.schema]?.[e.table];if(nn.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&&nn.isEmptyOrZeroLength(o[r]))throw TN.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(!nn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw TN.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`);!nn.isEmpty(o[r])&&o[r]!==""&&s.has(nn.autoCast(o[r]))&&(o.skip=!0),s.add(nn.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(Hk,"insertUpdateValidate")});var rc=T((Wie,gN)=>{"use strict";var Fk=y().OPERATIONS_ENUM,Uh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Fk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};gN.exports=Uh});var oc=T((Jie,AN)=>{"use strict";var zie=rc(),Vl=y(),Ph=$(),Mh=F(),qk=require("uuid"),{handleHDBError:sc,hdb_errors:Gk}=j(),{HDB_ERROR_MSGS:nc,HTTP_STATUS_CODES:ic}=Gk;AN.exports=xk;function xk(e,t,r){for(let n=0;n<t.length;n++)kk(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vk(i,r,e.operation)}}a(xk,"processRows");function kk(e){if(Buffer.byteLength(String(e))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw sc(new Error,nc.ATTR_NAME_LENGTH_ERR(e),ic.BAD_REQUEST,void 0,void 0,!0);if(Ph.isEmptyOrZeroLength(e)||Ph.isEmpty(e.trim()))throw sc(new Error,nc.ATTR_NAME_NULLISH_ERR,ic.BAD_REQUEST,void 0,void 0,!0)}a(kk,"validateAttribute");function Vk(e,t,r){if(!e.hasOwnProperty(t)||Ph.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=qk.v4();return}throw Mh.error("Update transaction aborted due to record with no hash value:",e),sc(new Error,nc.RECORD_MISSING_HASH_ERR,ic.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Mh.error(e),sc(new Error,nc.HASH_VAL_LENGTH_ERR,ic.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Mh.error(e),sc(new Error,nc.INVALID_FORWARD_SLASH_IN_HASH_ERR,ic.BAD_REQUEST,void 0,void 0,!0)}a(Vk,"validateHash")});var $l=T((jie,NN)=>{"use strict";var ON=$(),$k=y(),Yk=F(),Kk=kl(),Wk=xl(),Qk=on(),{SchemaEventMsg:zk}=us(),Jk="already exists in";NN.exports=Xk;async function Xk(e,t,r){if(ON.isEmptyOrZeroLength(r))return r;let s=[];ON.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 jk(e,t.schema,t.name,i)})),n}a(Xk,"lmdbCheckForNewAttributes");async function jk(e,t,r,s){let n=new Wk(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await Zk(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Jk))Yk.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(jk,"createNewAttribute");async function Zk(e){let t;return t=await Kk(e),Qk.signalSchemaChange(new zk(process.pid,$k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Zk,"createAttribute")});var So=T((eoe,bN)=>{"use strict";var vh=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}};bN.exports=vh});var IN=T((roe,yN)=>{"use strict";var eV=So(),tV=y().OPERATIONS_ENUM,Bh=class extends eV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(tV.INSERT,r,s,n,i),this.records=t}};yN.exports=Bh});var CN=T((noe,wN)=>{"use strict";var rV=So(),sV=y().OPERATIONS_ENUM,Hh=class extends rV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(sV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};wN.exports=Hh});var DN=T((ooe,LN)=>{"use strict";var nV=So(),iV=y().OPERATIONS_ENUM,Fh=class extends nV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(iV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};LN.exports=Fh});var MN=T((coe,UN)=>{"use strict";var oV=So(),aV=y().OPERATIONS_ENUM,qh=class extends oV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(aV.DELETE,s,n,t,i),this.original_records=r}};UN.exports=qh});var ac=T((_oe,HN)=>{"use strict";var loe=require("path"),PN=Ue(),cV=IN(),uV=CN(),lV=DN(),_V=MN(),To=ze(),vN=$(),{CONFIG_PARAMS:dV}=y(),BN=X();BN.initSync();var Yl=y().OPERATIONS_ENUM,{getTransactionAuditStorePath:fV}=Be();HN.exports=EV;async function EV(e,t){if(BN.get(dV.LOGGING_AUDITLOG)===!1)return;let r=fV(e.schema,e.table),s=await PN.openEnvironment(r,e.table,!0),n=hV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){PN.initializeDBIs(s,To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,To.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),vN.isEmpty(n.user_name)||s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(EV,"writeTransaction");function hV(e,t){let r=vN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Yl.INSERT)return new cV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yl.UPDATE)return new uV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yl.UPSERT)return new lV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yl.DELETE)return new _V(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(hV,"createTransactionObject")});var Gh=T((Eoe,FN)=>{"use strict";var mV=tc(),foe=rc(),cc=y(),pV=oc(),SV=mo().insertRecords,TV=Ue(),RV=F(),gV=$l(),{getSchemaPath:AV}=Be(),OV=ac();FN.exports=NV;async function NV(e){try{let{schema_table:t,attributes:r}=mV(e);pV(e,r,t.hash_attribute),e.schema!==cc.SYSTEM_SCHEMA_NAME&&(r.includes(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await gV(e.hdb_auth_header,t,r),n=AV(e.schema,e.table),i=await TV.openEnvironment(n,e.table),o=await SV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await OV(e,o)}catch(c){RV.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(NV,"lmdbCreateRecords")});var xN=T((moe,GN)=>{"use strict";var qN=y(),bV=Gh(),yV=rc(),IV=require("fs-extra"),{getSchemaPath:wV}=Be();GN.exports=CV;async function CV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new yV(qN.SYSTEM_SCHEMA_NAME,qN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await bV(r),await IV.mkdirp(wV(e.schema))}a(CV,"lmdbCreateSchema")});var VN=T((Soe,kN)=>{"use strict";var xh=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}};kN.exports=xh});var WN=T((Ooe,KN)=>{"use strict";var $N=Ue(),kh=hr(),Vh=Er().LMDB_ERRORS_ENUM,LV=ze(),YN=F(),Roe=$(),DV=require("lmdb"),UV=VN(),MV=y(),{OVERFLOW_MARKER:goe,MAX_SEARCH_KEY_LENGTH:Aoe}=LV,PV=MV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function vV(e,t,r,s){if(kh.validateEnv(e),t===void 0)throw new Error(Vh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Vh.IDS_REQUIRED):new Error(Vh.IDS_MUST_BE_ITERABLE);try{let n=$N.listDBIs(e);$N.initializeDBIs(e,t,n);let i=new UV,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[PV]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,DV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let g=n[S];if(!h.hasOwnProperty(g)||g===t)continue;let b=e.dbis[g],O=h[g];if(O!=null)try{let Y=kh.getIndexedValues(O);if(Y)for(let Q=0,G=Y.length;Q<G;Q++)b.remove(Y[Q],o)}catch{YN.warn(`cannot delete from attribute: ${g}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){YN.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=kh.getNextMonotonicTime(),i}catch(n){throw n}}a(vV,"deleteRecords");KN.exports={deleteRecords:vV}});var uc=T((boe,zN)=>{"use strict";var Ro=$(),BV=WN(),HV=Ue(),{getSchemaPath:FV}=Be(),qV=ac(),GV=F();zN.exports=xV;async function xV(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ro.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ro.isEmptyOrZeroLength(e.hash_values)&&!Ro.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ro.isEmpty(u)||e.hash_values.push(u)}}if(Ro.isEmptyOrZeroLength(e.hash_values))return QN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ro.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=FV(e.schema,e.table),i=await HV.openEnvironment(n,e.table),o=await BV.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qV(e,o)}catch(c){GV.error(`unable to write transaction due to ${c.message}`)}return QN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(xV,"lmdbDeleteRecords");function QN(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(QN,"createDeleteResponse")});var Yh=T((woe,JN)=>{"use strict";var kV=y(),Ioe=hr();function $h(e,t){let r=Object.create(null);if(t.length===1&&kV.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a($h,"parseRow");function VV(e,t,r,s){let n=$h(r,e);s.push(n)}a(VV,"searchAll");function $V(e,t,r,s){let n=$h(r,e);s[t]=n}a($V,"searchAllToMap");function YV(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(YV,"iterateDBI");function Ai(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(Ai,"pushResults");function KV(e,t,r,s,n,i){t.toString().endsWith(e)&&Ai(t,r,s,n,i)}a(KV,"endsWith");function WV(e,t,r,s,n,i){t.toString().includes(e)&&Ai(t,r,s,n,i)}a(WV,"contains");function QV(e,t,r,s,n,i){t>e&&Ai(t,r,s,n,i)}a(QV,"greaterThanCompare");function zV(e,t,r,s,n,i){t>=e&&Ai(t,r,s,n,i)}a(zV,"greaterThanEqualCompare");function JV(e,t,r,s,n,i){t<e&&Ai(t,r,s,n,i)}a(JV,"lessThanCompare");function XV(e,t,r,s,n,i){t<=e&&Ai(t,r,s,n,i)}a(XV,"lessThanEqualCompare");JN.exports={parseRow:$h,searchAll:VV,searchAllToMap:$V,iterateDBI:YV,endsWith:KV,contains:WV,greaterThanCompare:QV,greaterThanEqualCompare:zV,lessThanCompare:JV,lessThanEqualCompare:XV,pushResults:Ai}});var go=T((Moe,sb)=>{"use strict";var Gn=Ue(),Loe=F(),Sr=hr(),Kl=ze(),Xe=Er().LMDB_ERRORS_ENUM,Doe=$(),jV=y(),Wl=Yh(),{parseRow:ZV}=Wl,Uoe=require("lmdb"),{OVERFLOW_MARKER:XN,MAX_SEARCH_KEY_LENGTH:e$}=Kl;function jN(e,t,r,s=!1,n=void 0,i=void 0){return Oi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(jN,"iterateFullIndex");function lc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Oi(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(O=>({value:O}))):d.getRange(b)})}a(lc,"iterateRangeBetween");function Oi(e,t,r,s){let n=e.database||e,i=Gn.openDBI(n,r);i[Kl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Gn.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(Oi,"setupTransaction");function ZN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(XN)){if(!n)if(r)n=Gn.openDBI(e,r);else{let u=Gn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Gn.openDBI(e,u[_]),!n[Kl.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(ZN,"getOverflowCheck");function t$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Oi(e,t,t,(o,c,u)=>(Ql(r),r=_c(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>ZV(_.value,r))))}a(t$,"searchAll");function r$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);Ql(r),r=_c(e.database||e,r);let o=new Map;for(let{key:c,value:u}of jN(e,t,t,s,n,i))o.set(c,Wl.parseRow(u,r));return o}a(r$,"searchAllToMap");function s$(e,t,r=!1,s=void 0,n=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=jN(e,void 0,t,r,s,n),c=o.transaction,u=ZN(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(s$,"iterateDBI");function n$(e,t){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Gn.statDBI(e,t).entryCount}a(n$,"countAll");function i$(e,t,r,s,n=!1,i=void 0,o=void 0){return xn(e,r,s),Oi(e,t,r,(c,u,_,l)=>(s=Sr.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(i$,"equals");function o$(e,t,r){return xn(e,t,r),Gn.openDBI(e,t).getValuesCount(r)}a(o$,"count");function a$(e,t,r,s,n=!1,i=void 0,o=void 0){return xn(e,r,s),Oi(e,null,r,(c,u)=>{s=Sr.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(a$,"startsWith");function c$(e,t,r,s,n=!1,i=void 0,o=void 0){return eb(e,t,r,s,n,i,o,!0)}a(c$,"endsWith");function eb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return xn(e,r,s),Oi(e,null,r,(u,_,l,d)=>{let f=ZN(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(XN)?_.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))?_[Kl.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(eb,"contains");function u$(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!0,!1)}a(u$,"greaterThan");function l$(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!1,!1)}a(l$,"greaterThanEqual");function _$(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!0)}a(_$,"lessThan");function d$(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!1)}a(d$,"lessThanEqual");function f$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Sr.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Sr.convertKeyValueToWrite(s),n=Sr.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return lc(e,t,r,s,n,i,o,c)}a(f$,"between");function E$(e,t,r,s){Sr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Ql(r),r=_c(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Wl.parseRow(c,r)),o}a(E$,"searchByHash");function h$(e,t,r){Sr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(h$,"checkHashExists");function m$(e,t,r,s,n=[]){return rb(e,t,r,s,n),tb(e,t,r,s,n).map(i=>i[1])}a(m$,"batchSearchByHash");function p$(e,t,r,s,n=[]){rb(e,t,r,s,n);let i=new Map;for(let[o,c]of tb(e,t,r,s,n))i.set(o,c);return i}a(p$,"batchSearchByHashToMap");function tb(e,t,r,s,n=[]){return Oi(e,t,t,(i,o,c)=>{r=_c(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Wl.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(tb,"batchHashSearch");function rb(e,t,r,s,n){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Ql(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(rb,"initializeBatchSearchByHash");function Ql(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Ql,"validateFetchAttributes");function xn(e,t,r){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>e$)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a(xn,"validateComparisonFunctions");function _c(e,t){return t.length===1&&jV.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Gn.listDBIs(e)),t}a(_c,"setGetWholeRowAttributes");sb.exports={searchAll:t$,searchAllToMap:r$,count:o$,countAll:n$,equals:i$,startsWith:a$,endsWith:c$,contains:eb,searchByHash:E$,setGetWholeRowAttributes:_c,batchSearchByHash:m$,batchSearchByHashToMap:p$,checkHashExists:h$,iterateDBI:s$,greaterThan:u$,greaterThanEqual:l$,lessThan:_$,lessThanEqual:d$,between:f$}});var Ao=T((voe,cb)=>{var nb=require("lodash"),ib=xe(),He=require("joi"),S$=$(),{hdb_schema_table:zl,checkValidTable:ob,hdb_table:ab,hdb_database:Jl}=Ds(),{handleHDBError:T$,hdb_errors:R$}=j(),{getDatabases:g$}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:A$}=R$,O$=He.object({database:Jl,schema:Jl,table:ab,search_attribute:zl,search_value:He.any().required(),get_attributes:He.array().min(1).items(zl).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),N$=He.object({database:Jl,schema:Jl,table:ab,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(zl).optional(),conditions:He.array().min(1).items(He.object({search_attribute:zl,search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()})).required()});cb.exports=function(e,t){let r=null;switch(t){case"value":r=ib.validateBySchema(e,O$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ob("database",e.schema)),i(ob("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=ib.validateBySchema(e,N$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=S$.checkGlobalSchemaTable(e.schema,e.table);if(n)return T$(new Error,n,A$.NOT_FOUND);let o=g$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=nb.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!nb.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Kh=T((Hoe,ub)=>{"use strict";var b$=Ue(),y$=Ao(),{getSchemaPath:I$}=Be();ub.exports=w$;function w$(e){let t=y$(e,"hashes");if(t)throw t;let r=I$(e.schema,e.table);return b$.openEnvironment(r,e.table)}a(w$,"initialize")});var Wh=T((qoe,lb)=>{"use strict";var C$=go(),L$=Kh();lb.exports=D$;async function D$(e){let t=await L$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return C$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(D$,"lmdbGetDataByHash")});var Oo=T((xoe,_b)=>{"use strict";var Qh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};_b.exports=Qh});var fb=T(($oe,db)=>{"use strict";var Voe=Oo(),U$=go(),M$=Kh();db.exports=P$;async function P$(e){let t=await M$(e),r=global.hdb_schema[e.schema][e.table];return U$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(P$,"lmdbSearchByHash")});var Ms=T((Koe,Eb)=>{"use strict";var zh=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}};Eb.exports=zh});var Xl=T((Qoe,Rb)=>{"use strict";var Ht=go(),v$=Ue(),B$=$(),oe=ze(),Ni=y(),H$=Ti(),hb=Er().LMDB_ERRORS_ENUM,{getSchemaPath:F$}=Be(),an=Ni.SEARCH_WILDCARDS;async function q$(e,t,r){let s;e.schema===Ni.SYSTEM_SCHEMA_NAME?s=H$[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Tb(e,s.hash_attribute,r,t);return pb(e,n,s.hash_attribute,r)}a(q$,"prepSearch");async function pb(e,t,r,s){let n=F$(e.schema,e.table),i=await v$.openEnvironment(n,e.table),o=Sb(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(G$(e,r)===!1){let l=e.search_attribute;if(l===r)return s?mb(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?mb(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ht.batchSearchByHashToMap(c,r,e.get_attributes,_):Ht.batchSearchByHash(c,r,e.get_attributes,_)}a(pb,"executeSearch");function Sb(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 oe.SEARCH_TYPES.EQUALS:n=Ht.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ht.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ht.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ht.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ht.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ht.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ht.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ht.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ht.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ht.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ht.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ht.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ht.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Sb,"searchByType");function mb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(mb,"createMapFromIterable");function G$(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(G$,"checkToFetchMore");function Tb(e,t,r,s){if(B$.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?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(hb.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case Ni.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case Ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ni.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case Ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(hb.UNKNOWN_SEARCH_TYPE)}}a(Tb,"createSearchTypeFromSearchObject");Rb.exports={executeSearch:pb,createSearchTypeFromSearchObject:Tb,prepSearch:q$,searchByType:Sb}});var Ab=T((Xoe,gb)=>{"use strict";var Joe=Ms(),x$=Ao(),k$=$(),V$=y(),$$=Xl();gb.exports=Y$;function Y$(e,t){if(!k$.isEmpty(t)&&V$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=x$(e,"value");if(s)throw s;let n=!0;return $$.prepSearch(e,t,n)}a(Y$,"lmdbGetDataByValue")});var dc=T((eae,Ob)=>{"use strict";var Zoe=Ms(),K$=Ao(),W$=$(),Q$=y(),z$=Xl();Ob.exports=J$;async function J$(e,t){if(!W$.isEmpty(t)&&Q$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=K$(e,"value");if(s)throw s;return z$.prepSearch(e,t,!1)}a(J$,"lmdbSearchByValue")});var bb=T((sae,Nb)=>{"use strict";var rae=ze(),Jh=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}},Xh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},jh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Nb.exports={SearchByConditionsObject:Jh,SearchCondition:Xh,SortAttribute:jh}});var Lb=T((aae,Cb)=>{"use strict";var iae=bb().SearchByConditionsObject,X$=Ms(),j$=Ao(),Zh=go(),jl=ze(),{Resource:oae}=(is(),Z(qE)),wb=Xl(),Z$=Yh(),eY=require("lodash"),{getSchemaPath:tY}=Be(),yb=Ue(),{handleHDBError:rY,hdb_errors:sY}=j(),{HTTP_STATUS_CODES:nY}=sY,iY=1e8;Cb.exports=oY;async function oY(e){let t=j$(e,"conditions");if(t)throw rY(t,t.message,nY.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=tY(e.schema,e.table),s=await yb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)yb.openDBI(s,_.search_attribute);let i=eY.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===jl.SEARCH_TYPES.EQUALS?_.estimated_count=Zh.count(s,_.search_attribute,_.search_value):l===jl.SEARCH_TYPES.CONTAINS||l===jl.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=iY}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ib(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(wb.filterByType),d=l.length,f=Zh.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=>Z$.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Ib(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=Zh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(oY,"lmdbSearchByConditions");async function Ib(e,t,r,s){let n=new X$(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===jl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,wb.searchByType(e,n,i,s).map(o=>o.value)}a(Ib,"executeConditionSearch")});var fc=T((uae,Db)=>{"use strict";var aY=y().OPERATIONS_ENUM,em=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=aY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Db.exports=em});var tm=T((_ae,qb)=>{"use strict";var vb=Ms(),Bb=fc(),Hb=dc(),Fb=uc(),zt=y(),Ub=$(),Mb=Ue(),{getTransactionAuditStorePath:cY,getSchemaPath:uY}=Be(),Pb=F();qb.exports=lY;async function lY(e){try{if(Ub.isEmpty(global.hdb_schema[e.schema])||Ub.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _Y(e),await dY(e);let t=uY(e.schema,e.table);try{await Mb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Pb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=cY(e.schema,e.table);await Mb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Pb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(lY,"lmdbDropTable");async function _Y(e){let t=new vb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Hb(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 Bb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fb(n)}a(_Y,"deleteAttributesFromSystem");async function dY(e){let t=new vb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Hb(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 Bb(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fb(n)}catch(i){throw i}}a(dY,"dropTableFromSystem")});var xb=T((fae,Gb)=>{"use strict";var fY=require("fs-extra"),EY=Ms(),hY=Oo(),mY=fc(),pY=tm(),SY=uc(),TY=Wh(),RY=dc(),cn=y(),{getSchemaPath:gY}=Be(),{handleHDBError:AY,hdb_errors:OY}=j(),{HDB_ERROR_MSGS:NY,HTTP_STATUS_CODES:bY}=OY;Gb.exports=yY;async function yY(e){let t;try{t=await IY(e.schema);let r=new EY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await RY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await pY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new mY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await SY(n);let i=gY(t);await fY.remove(i)}catch(r){throw r}}a(yY,"lmdbDropSchema");async function IY(e){let t=new hY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await TY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw AY(new Error,NY.SCHEMA_NOT_FOUND(e),bY.NOT_FOUND,void 0,void 0,!0);return s}a(IY,"validateDropSchema")});var sm=T((hae,kb)=>{"use strict";var rm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};kb.exports=rm});var $b=T((Sae,Vb)=>{"use strict";var wY=require("fs-extra"),Zl=Ue(),{getTransactionAuditStorePath:CY}=Be(),nm=ze(),pae=sm();Vb.exports=LY;async function LY(e){let t;try{let r=CY(e.schema,e.table);await wY.mkdirp(r),t=await Zl.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{Zl.createDBI(t,nm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Zl.createDBI(t,nm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Zl.createDBI(t,nm.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(LY,"createTransactionsAuditEnvironment")});var Qb=T((Rae,Wb)=>{"use strict";var im=y(),Yb=Ue(),DY=mo(),{getSystemSchemaPath:UY,getSchemaPath:MY}=Be(),PY=Ti(),vY=kl(),om=xl(),BY=F(),HY=$b(),cm=PY.hdb_table,Kb=[];for(let e=0;e<cm.attributes.length;e++)Kb.push(cm.attributes[e].attribute);Wb.exports=FY;async function FY(e,t){let r=MY(t.schema,t.table),s=new om(t.schema,t.table,im.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new om(t.schema,t.table,im.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new om(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Yb.createEnvironment(r,t.table),e!==void 0){let o=await Yb.openEnvironment(UY(),im.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await DY.insertRecords(o,cm.hash_attribute,Kb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await am(s),await am(n),await am(i)}await HY(t)}catch(o){throw o}}a(FY,"lmdbCreateTable");async function am(e){try{await vY(e)}catch(t){BY.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(am,"createAttribute")});var Jb=T((Aae,zb)=>{"use strict";var qY=tc(),GY=oc(),xY=$l(),Ec=y(),kY=mo().updateRecords,VY=Ue(),{getSchemaPath:$Y}=Be(),YY=ac(),KY=F();zb.exports=WY;async function WY(e){try{let{schema_table:t,attributes:r}=qY(e);GY(e,r,t.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(r.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xY(e.hdb_auth_header,t,r),n=$Y(e.schema,e.table),i=await VY.openEnvironment(n,e.table),o=await kY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YY(e,o)}catch(c){KY.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(WY,"lmdbUpdateRecords")});var jb=T((Nae,Xb)=>{"use strict";var QY=y().OPERATIONS_ENUM,um=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=QY.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Xb.exports=um});var ey=T((Iae,Zb)=>{"use strict";var yae=jb(),zY=tc(),JY=oc(),XY=$l(),hc=y(),jY=mo().upsertRecords,ZY=Ue(),{getSchemaPath:e1}=Be(),t1=ac(),r1=F(),{handleHDBError:s1,hdb_errors:n1}=j();Zb.exports=i1;async function i1(e){let t;try{t=zY(e)}catch(u){throw s1(u,u.message,n1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;JY(e,s,r.hash_attribute),e.schema!==hc.SYSTEM_SCHEMA_NAME&&(s.includes(hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await XY(e.hdb_auth_header,r,s),i=e1(e.schema,e.table),o=await ZY.openEnvironment(i,e.table),c=await jY(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await t1(e,c)}catch(u){r1.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(i1,"lmdbUpsertRecords")});var ry=T((Cae,ty)=>{"use strict";var lm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};ty.exports=lm});var ny=T((Dae,sy)=>{"use strict";var _m=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}};sy.exports=_m});var ay=T((Pae,oy)=>{"use strict";var dm=Ue(),{getTransactionAuditStorePath:o1}=Be(),Mae=ry(),mc=ze(),a1=$(),iy=ny(),c1=require("util").promisify,u1=c1(setTimeout),l1=1e4,_1=100;oy.exports=d1;async function d1(e){let t=o1(e.schema,e.table),r=await dm.openEnvironment(t,e.table,!0),s=dm.listDBIs(r);dm.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new iy;do n=await f1(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 u1(_1);while(n.transactions_deleted>0);return i}a(d1,"deleteAuditLogsBefore");async function f1(e,t){let r=new iy;try{let s=e.dbis[mc.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[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];a1.isEmpty(c)||(n=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>l1)break}return await n,r}catch(s){throw s}}a(f1,"deleteTransactions")});var uy=T((Bae,cy)=>{"use strict";var fm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};cy.exports=fm});var _y=T((qae,ly)=>{"use strict";var E1=Ms(),h1=fc(),Fae=uy(),Ps=y(),m1=$(),Em=Ue(),p1=Ti(),S1=dc(),T1=uc(),{getSchemaPath:R1}=Be();ly.exports=g1;async function g1(e,t=!0){let r;e.schema===Ps.SYSTEM_SCHEMA_NAME?r=p1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await O1(e),n=R1(e.schema,e.table),i=await Em.openEnvironment(n,e.table);return t===!0&&await A1(e,i,r.hash_attribute),Em.dropDBI(i,e.attribute),s}a(g1,"lmdbDropAttribute");async function A1(e,t,r){let s=Em.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(A1,"removeAttributeFromAllObjects");async function O1(e){let t=new E1(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await S1(t)).filter(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(m1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new h1(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return T1(i)}a(O1,"dropAttributeFromSystem")});var py=T((kae,my)=>{"use strict";var hm=Ue(),No=ze(),xae=hr(),mm=y(),dy=$(),{getTransactionAuditStorePath:N1}=Be(),b1=go(),e_=So(),y1=F();my.exports=I1;async function I1(e){let t=N1(e.schema,e.table),r=await hm.openEnvironment(t,e.table,!0),s=hm.listDBIs(r);hm.initializeDBIs(r,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case mm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return fy(r,e.search_values);case mm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,C1(r,e.search_values,n);case mm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return w1(r,e.search_values);default:return fy(r)}}a(I1,"readAuditLog");function fy(e,t=[0,Date.now()]){dy.isEmpty(t[0])&&(t[0]=0),dy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[No.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 e_,n))}a(fy,"searchTransactionsByTimestamp");function w1(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[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,hy(e,i))}return Object.fromEntries(r)}a(w1,"searchTransactionsByUsername");function C1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=b1.equals(e,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.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=hy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);Ey(u,"records",r,l,o),Ey(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(C1,"searchTransactionsByHashValues");function Ey(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 e_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new e_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(Ey,"loopRecords");function hy(e,t){let r=[];try{let s=e.dbis[No.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 e_,i);r.push(o)}}catch(i){y1.warn(i)}return r}catch(s){throw s}}a(hy,"batchSearchTransactions")});var Ty=T((Kae,Sy)=>{"use strict";var{getSchemaPath:$ae}=Be(),Yae=Ue(),{database:L1}=(fe(),Z(Ce));Sy.exports={writeTransaction:D1};async function D1(e,t,r){return L1({database:e,table:t}).transaction(r)}a(D1,"writeTransaction")});var Oy=T((Qae,Ay)=>{"use strict";var{getSchemaPath:Ry}=Be(),gy=Ue();Ay.exports={flush:U1,resetReadTxn:M1};async function U1(e,t){return(await gy.openEnvironment(Ry(e,t),t.toString())).flushed}a(U1,"flush");async function M1(e,t){try{(await gy.openEnvironment(Ry(e,t),t.toString())).resetReadTxn()}catch{}}a(M1,"resetReadTxn")});var Iy=T((Jae,yy)=>{"use strict";var{Readable:P1}=require("stream"),{getDatabases:v1}=(fe(),Z(Ce)),{readSync:B1,openSync:H1,createReadStream:Ny}=require("fs"),{open:F1}=require("lmdb"),by=Ll(),q1=Ul(),{AUDIT_STORE_OPTIONS:G1}=(lo(),Z(oO)),{INTERNAL_DBIS_NAME:x1,AUDIT_STORE_NAME:k1}=ze();yy.exports=$1;var pm=32768,V1=100;async function $1(e){let t=e.database||e.schema||"data",r=v1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=F1({noSync:!0,maxDbs:q1.MAX_DBS}),f,E=d.openDB(x1,new by(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,O){O.encoding="binary",O.encoder=void 0;let Y=d.openDB(b,O),Q=l.openDB(b,O);for(let{key:G,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(G,K,w),p++%V1===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>b.startsWith?.(Y+"/"))){E.put(b,O);let[,Y]=b.split("/"),Q=!Y,G=new by(!Q,Q);await S(b,G)}e.include_audit&&await S(k1,Object.assign({},G1)),await f;let g=Ny(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=H1(o.path);return o.transaction(()=>{let _=Buffer.alloc(pm);B1(c,_,0,pm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Ny(null,{fd:c,start:pm}),f=new P1.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($1,"getBackup")});var Ly=T((jae,Cy)=>{"use strict";var Y1=F(),{handleHDBError:K1}=j(),W1=KO(),Q1=kl(),z1=Gh(),J1=xN(),X1=uc(),j1=Wh(),Z1=fb(),eK=Ab(),tK=dc(),rK=Lb(),sK=xb(),nK=Qb(),iK=Jb(),oK=ey(),aK=ay(),cK=tm(),uK=_y(),lK=py(),_K=Ty(),wy=Oy(),dK=Iy(),Sm=class extends W1{static{a(this,"LMDBBridge")}async searchByConditions(t){return rK(t)}async getDataByHash(t){return await j1(t)}async searchByHash(t){return await Z1(t)}async getDataByValue(t,r){return await eK(t,r)}async searchByValue(t){return await tK(t)}async createSchema(t){return await J1(t)}async dropSchema(t){return await sK(t)}async createTable(t,r){return await nK(t,r)}async dropTable(t){return await cK(t)}async createAttribute(t){return await Q1(t)}async createRecords(t){return await z1(t)}async updateRecords(t){return await iK(t)}async upsertRecords(t){try{return await oK(t)}catch(r){throw K1(r,null,null,Y1.ERR,r)}}async deleteRecords(t){return await X1(t)}async dropAttribute(t){return await uK(t)}async deleteAuditLogsBefore(t){return await aK(t)}async readAuditLog(t){return await lK(t)}writeTransaction(t,r,s){return _K.writeTransaction(t,r,s)}flush(t,r){return wy.flush(t,r)}resetReadTxn(t,r){return wy.resetReadTxn(t,r)}getBackup(t){return dK(t)}};Cy.exports=Sm});var qy={};ve(qy,{ResourceBridge:()=>gm});function Am({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Uy(e,t){let r=vs(e),s=Am(e,r);if(!r)throw new ls.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;Ge(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&&ml(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 vs(e){let t=e.database||e.schema||EK,r=_s()[t];if(!r)throw(0,ls.handleHDBError)(new Error,fK.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function My(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*Py(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 vy,t_,ls,By,Hy,ds,Tm,Rm,Fy,fK,EK,hK,mK,Dy,gm,Gy=Te(()=>{"use strict";vy=D(Ly()),t_=D(Ao()),ls=D(j());fe();By=D(tc()),Hy=D(oc()),ds=D(y()),Tm=D(on()),Rm=D(us()),Fy=D($());pi();pl();({HDB_ERROR_MSGS:fK}=ls.hdb_errors),EK="data",hK=1e4,mK=10,gm=class extends vy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Dy=this}async searchByConditions(t){let r=(0,t_.default)(t,"conditions");if(r)throw(0,ls.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=vs(t);if(!s)throw new ls.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Am(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new ls.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}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await vs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vs(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){vs(t).dropTable()}createSchema(t){return pc({database:t.schema,table:null}),Tm.signalSchemaChange(new Rm.SchemaEventMsg(process.pid,ds.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Om(t.schema),Tm.signalSchemaChange(new Rm.SchemaEventMsg(process.pid,ds.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,Dy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,By.default)(t);(0,Hy.default)(t,s,r.primaryKey);let n,i=_s()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(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=ml(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=_s()[t.schema][t.table],s={user:t.hdb_user};return Ge(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 My(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=_s()[t.schema][t.table];if(!r.createdTimeProperty)throw new ls.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:ds.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,Fy.async_set_timeout)(mK),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%hK===0&&await _();return u.length>0&&await _(),n?My(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,t_.default)(t,"hashes");if(r)throw r;return Uy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Uy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ds.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,t_.default)(t,"value");if(s)throw s;let n=vs(t);if(!n)throw new ls.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===ds.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:Am(t,n)})}async getDataByValue(t,r){let s=new Map,n=vs(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){vs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=vs(t),s={};switch(t.search_type){case ds.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 ds.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Py(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Py(r,t.search_values?.[0],t.search_values?.[1])}}};a(Am,"getSelect");a(Uy,"getRecords");a(vs,"getTable");a(My,"createDeleteResponse");a(Py,"groupRecordsInHistory")});var Es=T((nce,xy)=>{"use strict";var{ResourceBridge:pK}=(Gy(),Z(qy)),SK=X();SK.initSync();var r_;function TK(){return r_||(r_=new pK,r_)}a(TK,"getBridge");xy.exports=TK()});var Yy=T((oce,$y)=>{"use strict";var ky=require("lodash"),Sc=require("mathjs"),RK=require("jsonata"),Vy=$();$y.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?ky.uniqWith(e,ky.isEqual):e,searchJSON:gK,mad:Tc.bind(null,Sc.mad),mean:Tc.bind(null,Sc.mean),mode:Tc.bind(null,Sc.mode),prod:Tc.bind(null,Sc.prod),median:Tc.bind(null,Sc.median)};function Tc(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(Tc,"aggregateFunction");function gK(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(Vy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Vy.isEmpty(this.__ala__.res[r])){let s=RK(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(gK,"searchJSON")});var Wy=T((cce,Ky)=>{"use strict";var rt=require("moment"),Nm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;Ky.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Nm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Nm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Nm)}});var Xy=T((uce,Jy)=>{"use strict";var AK=require("@turf/area"),OK=require("@turf/length"),NK=require("@turf/circle"),bK=require("@turf/difference"),yK=require("@turf/distance"),IK=require("@turf/boolean-contains"),wK=require("@turf/boolean-equal"),CK=require("@turf/boolean-disjoint"),LK=require("@turf/helpers"),Qy=y(),ce=$(),un=F();Jy.exports={geoArea:DK,geoLength:UK,geoCircle:MK,geoDifference:PK,geoDistance:zy,geoNear:vK,geoContains:BK,geoEqual:HK,geoCrosses:FK,geoConvert:qK};function DK(e){if(ce.isEmpty(e))return NaN;typeof e=="string"&&(e=ce.autoCastJSON(e));try{return AK.default(e)}catch(t){return un.trace(t,e),NaN}}a(DK,"geoArea");function UK(e,t){if(ce.isEmpty(e))return NaN;typeof e=="string"&&(e=ce.autoCastJSON(e));try{return OK.default(e,{units:t||"kilometers"})}catch(r){return un.trace(r,e),NaN}}a(UK,"geoLength");function MK(e,t,r){if(ce.isEmpty(e))return NaN;if(ce.isEmpty(t))return NaN;typeof e=="string"&&(e=ce.autoCastJSON(e));try{return NK.default(e,t,{units:r||"kilometers"})}catch(s){return un.trace(s,e,t),NaN}}a(MK,"geoCircle");function PK(e,t){if(ce.isEmpty(e))return NaN;if(ce.isEmpty(t))return NaN;typeof e=="string"&&(e=ce.autoCastJSON(e)),typeof t=="string"&&(t=ce.autoCastJSON(t));try{return bK(e,t)}catch(r){return un.trace(r,e,t),NaN}}a(PK,"geoDifference");function zy(e,t,r){if(ce.isEmpty(e))return NaN;if(ce.isEmpty(t))return NaN;typeof e=="string"&&(e=ce.autoCastJSON(e)),typeof t=="string"&&(t=ce.autoCastJSON(t));try{return yK.default(e,t,{units:r||"kilometers"})}catch(s){return un.trace(s,e,t),NaN}}a(zy,"geoDistance");function vK(e,t,r,s){if(ce.isEmpty(e)||ce.isEmpty(t))return!1;if(ce.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ce.autoCastJSON(e)),typeof t=="string"&&(t=ce.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return zy(e,t,s)<=r}catch(n){return un.trace(n,e,t),!1}}a(vK,"geoNear");function BK(e,t){if(ce.isEmpty(e)||ce.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ce.autoCastJSON(e)),typeof t=="string"&&(t=ce.autoCastJSON(t));try{return IK.default(e,t)}catch(r){return un.trace(r,e,t),!1}}a(BK,"geoContains");function HK(e,t){if(ce.isEmpty(e)||ce.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ce.autoCastJSON(e)),typeof t=="string"&&(t=ce.autoCastJSON(t));try{return wK.default(e,t)}catch(r){return un.trace(r,e,t),!1}}a(HK,"geoEqual");function FK(e,t){if(ce.isEmpty(e)||ce.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ce.autoCastJSON(e)),typeof t=="string"&&(t=ce.autoCastJSON(t));try{return!CK.default(e,t)}catch(r){return un.trace(r,e,t),!1}}a(FK,"geoCrosses");function qK(e,t,r){if(ce.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ce.isEmpty(t))throw new Error("geo_type is required");if(ce.isEmpty(Qy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Qy.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ce.autoCastJSON(e)),LK[t](e,r)}a(qK,"geoConvert")});var s_=T((_ce,jy)=>{var bi=Yy(),Tr=Wy(),Bs=Xy();jy.exports=e=>{e.aggr.mad=e.aggr.MAD=bi.mad,e.aggr.mean=e.aggr.MEAN=bi.mean,e.aggr.mode=e.aggr.MODE=bi.mode,e.aggr.prod=e.aggr.PROD=bi.prod,e.aggr.median=e.aggr.MEDIAN=bi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=bi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=bi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tr.current_time,e.fn.extract=e.fn.EXTRACT=Tr.extract,e.fn.date=e.fn.DATE=Tr.date,e.fn.date_format=e.fn.DATE_FORMAT=Tr.date_format,e.fn.date_add=e.fn.DATE_ADD=Tr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tr.date_diff,e.fn.now=e.fn.NOW=Tr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tr.get_server_time,e.fn.getdate=e.fn.GETDATE=Tr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Bs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Bs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Bs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Bs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Bs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Bs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Bs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Bs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Bs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Bs.geoNear}});var rI=T((dce,tI)=>{"use strict";var Rc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var GK=s_(),Zy=require("clone"),n_=require("recursive-iterator"),re=F(),ue=$(),bo=Es(),xK=y(),{hdb_errors:kK}=j(),{getDatabases:eI}=(fe(),Z(Ce)),VK="IS NULL",hs="There was a problem performing this search. Please check the logs and try again.";GK(Jt);var bm=class{static{a(this,"SQLSearch")}constructor(t,r){if(ue.isEmpty(t))throw re.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(),ue.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ue.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(hs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(hs)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(hs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(hs)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(hs)}}_getColumns(){let t=new n_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Zy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Rc.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=eI()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ue.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new n_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ue.isEmpty(r)&&r.right)if(ue.isNotEmptyAndHasValue(r.right.value)){let s=ue.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new Jt.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ue.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Jt.yy.LogicValue({value:i}):s instanceof Jt.yy.StringValue&&ue.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Jt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new n_(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(!ue.isEmpty(xK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ue.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ue.isEmptyOrZeroLength(r.left.columnid)||ue.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(ue.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"=":!ue.isEmpty(r.right.value)||!ue.isEmpty(r.left.value)?s.add(ue.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(ue.isEmptyOrZeroLength(this.all_table_attributes)&&ue.isEmptyOrZeroLength(this.statement.from)&&ue.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&&Rc.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(ue.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ue.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(ue.isEmptyOrZeroLength(this.all_table_attributes)&&!ue.isEmptyOrZeroLength(this.columns.columns))return t;if(ue.isEmptyOrZeroLength(this.all_table_attributes)&&ue.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Jt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Zy(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ue.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(VK)>-1&&this.tables.forEach(n=>{let i={columnid:eI()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Rc.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),!ue.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ue.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await bo.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 re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(hs)}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 bo.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,ue.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(hs)}else if(!ue.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ue.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 bo.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,ue.autoCast(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,ue.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(hs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await bo.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,ue.autoCast(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,ue.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(hs)}}}_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 Jt.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 Jt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Jt.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 Jt.yy.FuncValue:new Jt.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:"",_="";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&&(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 Jt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.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=Rc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=p.length;S<g;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 n_(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=Rc.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 re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(hs)}}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 bo.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 re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await Jt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.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 re.error(kK.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=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 bo.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 re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(hs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};tI.exports=bm});var Gr=T((Ece,sI)=>{"use strict";var $K=$O();sI.exports={searchByConditions:KK,searchByHash:WK,searchByValue:QK,search:zK};var ym=Es(),{transformReq:Im}=$(),YK=rI();async function KK(e){return Im(e),ym.searchByConditions(e)}a(KK,"searchByConditions");async function WK(e){Im(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ym.searchByHash(e))r&&t.push(r);return t}a(WK,"searchByHash");async function QK(e){Im(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ym.searchByValue(e))t.push(r);return t}a(QK,"searchByValue");function zK(e,t){try{let r=new $K(e);r.validate(),new YK(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(zK,"search")});var ln=T((mce,aI)=>{"use strict";var gc=require("crypto"),JK=X(),{CONFIG_PARAMS:XK}=y(),iI="aes-256-cbc",jK=32,ZK=16,wm=64,oI=32,eW=wm+oI,nI=new Map;aI.exports={encrypt:tW,decrypt:rW,createNatsTableStreamName:sW};function tW(e){let t=gc.randomBytes(jK),r=gc.randomBytes(ZK),s=gc.createCipheriv(iI,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(tW,"encrypt");function rW(e){let t=e.substr(0,wm),r=e.substr(wm,oI),s=e.substr(eW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=gc.createDecipheriv(iI,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(rW,"decrypt");function sW(e,t){let r=JK.get(XK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=nI.get(r);return s||(s=gc.createHash("md5").update(r).digest("hex"),nI.set(r,s)),s}a(sW,"createNatsTableStreamName")});var yi=T((Tce,uI)=>{"use strict";var Sce=Gr(),i_=F(),cI=Gl(),nW=ln(),o_=$(),{handleHDBError:a_,hdb_errors:iW}=j(),{HDB_ERROR_MSGS:c_,HTTP_STATUS_CODES:Cm}=iW,oW=X();oW.initSync();var{getDatabases:Lm}=(fe(),Z(Ce));uI.exports={describeAll:aW,describeTable:u_,describeSchema:cW};async function aW(e){try{let t=o_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Lm(),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 u_({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 u_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){i_.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 i_.error("Got an error in describeAll"),i_.error(t),a_(new Error,c_.DESCRIBE_ALL_ERR)}}a(aW,"describeAll");async function u_(e,t){o_.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=cI.describe_table(e);if(i)throw i;let c=Lm()[r];if(!c)throw a_(new Error,c_.SCHEMA_NOT_FOUND(e.schema),Cm.NOT_FOUND);let u=c[s];if(!u)throw a_(new Error,c_.TABLE_NOT_FOUND(e.schema,e.table),Cm.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=nW.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){i_.warn(`unable to stat table dbi due to ${f}`)}return d}a(u_,"descTable");async function cW(e){o_.transformReq(e);let t=cI.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=Lm()[s];if(!i)throw a_(new Error,c_.SCHEMA_NOT_FOUND(e.schema),Cm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),o_.isEmpty(u)||u.describe){let _=await u_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(cW,"describeSchema")});var kn=T((Oce,EI)=>{var uW=Ti(),{callbackify:_I,promisify:lW}=require("util"),{getDatabases:dI}=(fe(),Z(Ce));EI.exports={setSchemaDataToGlobal:lI,getTableSchema:_W,getSystemSchema:dW,setSchemaDataToGlobalAsync:lW(lI)};var fI=yi(),gce=_I(fI.describeAll),Ace=_I(fI.describeTable);function lI(e){global.hdb_schema=dI(),e&&e()}a(lI,"setSchemaDataToGlobal");function _W(e,t,r){let s=dI()[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(_W,"getTableSchema");function dW(){return uW}a(dW,"getSystemSchema")});var xr=T((bce,SI)=>{"use strict";var __=Dh(),bt=$(),fW=require("util"),d_=Es(),EW=kn(),hI=F(),{handleHDBError:Ii,hdb_errors:hW}=j(),{HTTP_STATUS_CODES:wi}=hW,mW=fW.promisify(EW.getTableSchema),pW="updated",mI="inserted",pI="upserted";SI.exports={insert:TW,update:RW,upsert:gW,validation:SW,flush:AW};async function SW(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await mW(e.schema,e.table),r=__(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&&bt.isEmptyOrZeroLength(c[s]))throw hI.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(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hI.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.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(SW,"validation");async function TW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=__(e);if(t)throw Ii(new Error,t.message,wi.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ii(new Error,r,wi.BAD_REQUEST);let s=await d_.createRecords(e);return l_(mI,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(TW,"insertData");async function RW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=__(e);if(t)throw Ii(new Error,t.message,wi.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ii(new Error,r,wi.BAD_REQUEST);let s=await d_.updateRecords(e);return bt.isEmpty(s.existing_rows)?l_(pW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):l_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(RW,"updateData");async function gW(e){if(e.operation!=="upsert")throw Ii(new Error,"invalid operation, must be upsert",wi.INTERNAL_SERVER_ERROR);let t=__(e);if(t)throw Ii(new Error,t.message,wi.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ii(new Error,r,wi.BAD_REQUEST);let s=await d_.upsertRecords(e);return l_(pI,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(gW,"upsertData");function l_(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===mI?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===pI?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(l_,"returnObject");function AW(e){return bt.transformReq(e),d_.flush(e.schema,e.table)}a(AW,"flush")});var Um=T((Ice,gI)=>{var OW=xe(),Dm=require("joi"),{hdb_table:NW,hdb_database:TI}=Ds(),RI={schema:TI,database:TI,table:NW},bW={date:Dm.date().iso().required()},yW={timestamp:Dm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};gI.exports=function(e,t){let r=t==="timestamp"?{...RI,...yW}:{...RI,...bW},s=Dm.object(r);return OW.validateBySchema(e,s)}});var NI=T((wce,OI)=>{var IW=xe(),Mm=require("joi"),{hdb_table:wW,hdb_database:AI}=Ds(),CW=Mm.object({schema:AI,database:AI,table:wW,hash_values:Mm.array().required(),ids:Mm.array()});OI.exports=function(e){return IW.validateBySchema(e,CW)}});var yI=T((Cce,bI)=>{"use strict";var Pm=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}},vm=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}},Bm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bI.exports={InsertObject:Pm,NoSQLSeachObject:vm,DeleteResponseObject:Bm}});var Di=T((Dce,DI)=>{"use strict";var wI=Um(),LW=NI(),Ci=$(),II=require("moment"),CI=F(),{promisify:DW,callbackify:UW}=require("util"),Li=y(),MW=kn(),Hm=DW(MW.getTableSchema),Fm=Es(),{DeleteResponseObject:PW}=yI(),{handleHDBError:Vn,hdb_errors:vW}=j(),{HDB_ERROR_MSGS:f_,HTTP_STATUS_CODES:$n}=vW,BW="records successfully deleted",HW=UW(LI);DI.exports={delete:HW,deleteRecord:LI,deleteFilesBefore:FW,deleteAuditLogsBefore:qW};async function FW(e){let t=wI(e,"date");if(t)throw Vn(t,t.message,$n.BAD_REQUEST,void 0,void 0,!0);if(Ci.transformReq(e),!II(e.date,II.ISO_8601).isValid())throw Vn(new Error,f_.INVALID_DATE,$n.BAD_REQUEST,Li.LOG_LEVELS.ERROR,f_.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Vn(new Error,s,$n.NOT_FOUND,Li.LOG_LEVELS.ERROR,s,!0);let n=await Fm.deleteRecordsBefore(e);if(await Hm(e.schema,e.table),CI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(FW,"deleteFilesBefore");async function qW(e){let t=wI(e,"timestamp");if(t)throw Vn(t,t.message,$n.BAD_REQUEST,void 0,void 0,!0);if(Ci.transformReq(e),isNaN(e.timestamp))throw Vn(new Error,f_.INVALID_VALUE("Timestamp"),$n.BAD_REQUEST,Li.LOG_LEVELS.ERROR,f_.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Vn(new Error,r,$n.NOT_FOUND,Li.LOG_LEVELS.ERROR,r,!0);let s=await Fm.deleteAuditLogsBefore(e);return await Hm(e.schema,e.table),CI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(qW,"deleteAuditLogsBefore");async function LI(e){e.ids&&(e.hash_values=e.ids);let t=LW(e);if(t)throw Vn(t,t.message,$n.BAD_REQUEST,void 0,void 0,!0);Ci.transformReq(e);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Vn(new Error,r,$n.NOT_FOUND,Li.LOG_LEVELS.ERROR,r,!0);try{await Hm(e.schema,e.table);let s=await Fm.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BW}`),s}catch(s){if(s.message===Li.SEARCH_NOT_FOUND_MESSAGE){let n=new PW;return n.message=Li.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LI,"deleteRecord")});var E_=T((Mce,PI)=>{var GW=require("crypto"),UI=9;function xW(e){let t=VW(UI),r=MI(e+t);return t+r}a(xW,"createHash");function kW(e,t){let r=e.substr(0,UI),s=r+MI(t+r);return e===s}a(kW,"validateHash");function VW(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(VW,"generateSalt");function MI(e){return GW.createHash("md5").update(e).digest("hex")}a(MI,"md5");PI.exports={hash:xW,validate:kW}});var BI=T((vce,vI)=>{var qm=xe(),Ft={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 $W(e){return Ft.password.presence=!0,Ft.username.presence=!0,Ft.role.presence=!0,Ft.active.presence=!0,qm.validateObject(e,Ft)}a($W,"addUserValidation");function YW(e){return Ft.password.presence=!1,Ft.username.presence=!0,Ft.role.presence=!1,Ft.active.presence=!1,qm.validateObject(e,Ft)}a(YW,"alterUserValidation");function KW(e){return Ft.password.presence=!1,Ft.username.presence=!0,Ft.role.presence=!1,Ft.active.presence=!1,qm.validateObject(e,Ft)}a(KW,"dropUserValidation");vI.exports={addUserValidation:$W,alterUserValidation:YW,dropUserValidation:KW}});var ke=T((Fce,FI)=>{"use strict";var{platform:Hce}=require("os"),WW="nats-server.zip",Gm="nats-server",QW=process.platform==="win32"?`${Gm}.exe`:Gm,xm="HDB",zW=/^[^\s.,*>]+$/,HI="__request__",JW=a(e=>`${e}.${HI}`,"REQUEST_SUBJECT"),XW={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},jW={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ZW={HUB:"hub.pid",LEAF:"leaf.pid"},eQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:xm,deliver_subject:"__HDB__.WORKQUEUE"},rQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:xm,deliver_subject:"HDB.SCHEMAQUEUE"},sQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:xm,deliver_subject:"HDB.USERQUEUE"},nQ={SUCCESS:"success",ERROR:"error"},iQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},oQ={TXN:"txn",MSGID:"msgid"},yo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},aQ={[yo.ERR]:1,[yo.WRN]:2,[yo.INF]:3,[yo.DBG]:4,[yo.TRC]:5},cQ={debug:"-D",trace:"-DVV"};FI.exports={NATS_SERVER_ZIP:WW,NATS_SERVER_NAME:Gm,NATS_BINARY_NAME:QW,PID_FILES:ZW,NATS_CONFIG_FILES:jW,SERVER_SUFFIX:eQ,WORK_QUEUE_CONSUMER_NAMES:tQ,SCHEMA_QUEUE_CONSUMER_NAMES:rQ,USER_QUEUE_CONSUMER_NAMES:sQ,NATS_TERM_CONSTRAINTS_RX:zW,REQUEST_SUFFIX:HI,UPDATE_REMOTE_RESPONSE_STATUSES:nQ,CLUSTER_STATUS_STATUSES:iQ,REQUEST_SUBJECT:JW,SUBJECT_PREFIXES:oQ,MSG_HEADERS:XW,LOG_LEVELS:yo,LOG_LEVEL_FLAGS:cQ,LOG_LEVEL_HIERARCHY:aQ}});var GI=T((Gce,qI)=>{"use strict";var uQ={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
- `)},_Q="certificate.pem",dQ="privateKey.pem",fQ="ca.pem";GI.exports={CERTIFICATE_VALUES:lQ,CERTIFICATE_PEM_NAME:_Q,PRIVATEKEY_PEM_NAME:dQ,CA_PEM_NAME:fQ}});var $m=T((Vce,KI)=>{"use strict";var YI=require("fs-extra"),ue=require("joi"),EQ=require("os"),{boolean:we,string:Hs,number:yt,array:Vm}=ue.types(),{totalmem:kI}=require("os"),yo=require("path"),hQ=G(),h_=$(),kce=xI(),VI=y(),mQ=xe(),$I="log",pQ="components",SQ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",TQ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",RQ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",gQ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",AQ="rootPath config parameter is undefined",OQ="clustering.enabled config parameter is undefined",Di=yt.min(0).required(),m_=Vm.items({host:Hs.required(),port:Di}).empty(null),ln;KI.exports={configValidator:NQ,routesValidator:LQ,route_constraints:m_};function NQ(e){if(ln=e.rootPath,h_.isEmpty(ln))throw AQ;let t=we.required(),r=yt.min(0).max(1e3).empty(null).default(CQ),s=Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(E_),n=Hs.optional().empty(null),i=Hs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(E_),c=ue.custom(yQ).empty(null).default(E_),u=e.clustering?.enabled;if(h_.isEmpty(u))throw OQ;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Di,routes:m_}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Di}).required()}).required(),network:ue.object({port:Di}).required()}).required(),leafServer:ue.object({network:ue.object({port:Di,routes:m_}).required(),streams:ue.object({maxAge:yt.min(120).allow(null).optional(),maxBytes:yt.min(1).allow(null).optional(),maxMsgs:yt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Hs.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:yt.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:yt}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Hs.custom(wQ).optional().empty(null),maxSize:Hs.custom(IQ).optional().empty(null),path:Hs.optional().empty(null).default(E_)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:Vm.optional(),headersTimeout:yt.min(1).optional(),keepAliveTimeout:yt.min(1).optional(),port:yt.optional().empty(null),securePort:yt.optional().empty(null),timeout:yt.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Di,securePort:Di}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:yt.optional(),cors:we.optional(),corsAccessList:Vm.optional(),headersTimeout:yt.min(1).optional(),port:yt.min(0).optional().empty(null),securePort:yt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(NQ,"configValidator");function bQ(e){return YI.existsSync(e)?null:`Specified path ${e} does not exist.`}a(bQ,"doesPathExist");function yQ(e,t){ue.assert(e,Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=bQ(e);if(r)return t.message(r)}a(yQ,"validatePath");function IQ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(SQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(RQ):e}a(IQ,"validateRotationMaxSize");function wQ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(TQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(gQ):e}a(wQ,"validateRotationInterval");function CQ(e,t){let r=t.state.path.join("."),s=EQ.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||kI();return i=Math.round(Math.min(i,kI())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),hQ.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(CQ,"setDefaultThreads");function E_(e,t){if(!h_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(h_.isEmpty(ln))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return yo.join(ln,pQ);case"logging.root":return yo.join(ln,$I);case"clustering.leafServer.streams.path":return yo.join(ln,"clustering","leaf");case"storage.path":let s=yo.join(ln,VI.LEGACY_DATABASES_DIR_NAME);return YI.existsSync(s)?s:yo.join(ln,VI.DATABASES_DIR_NAME);case"logging.rotation.path":return yo.join(ln,$I);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(E_,"setDefaultRoot");function LQ(e){let t=ue.object({routes:m_});return mQ.validateBySchema({routes:e},t)}a(LQ,"routesValidator")});var Ar=T((Kce,tw)=>{"use strict";var gr=y(),pt=$(),lt=G(),{configValidator:DQ,routesValidator:WI}=$m(),Xt=require("fs-extra"),UQ=require("yaml"),ms=require("path"),MQ=require("is-number"),zI=require("properties-reader"),PQ=require("lodash"),{handleHDBError:vQ}=j(),{HTTP_STATUS_CODES:BQ,HDB_ERROR_MSGS:p_}=Er(),Yce=require("minimist"),{server:HQ}=(fr(),Z(di)),{DATABASES_PARAM_CONFIG:gc,CONFIG_PARAMS:Rr,CONFIG_PARAM_MAP:ps}=gr,qQ="Unable to get config value because config is uninitialized",FQ="Config successfully initialized",GQ="Error backing up config file",xQ="Empty parameter sent to getConfigValue",JI=ms.join(gr.PACKAGE_ROOT,"config","yaml",gr.HDB_DEFAULT_CONFIG_FILE),kQ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",QI={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"},S_,_t,T_;tw.exports={createConfigFile:VQ,getDefaultConfig:$Q,getConfigValue:jI,initConfig:Km,flattenConfig:Io,updateConfigValue:ZI,updateConfigObject:KQ,getConfiguration:zQ,setConfiguration:JQ,readConfigFile:Qm,getClusteringRoutes:XQ,initOldConfig:ew,getConfigFromFile:jQ,getConfigFilePath:Ui,addConfig:ZQ,deleteConfigFromFile:ez,getConfigObj:tz};function VQ(e){let t=$n(JI);S_=Io(t.toJSON());let r;for(let o in e){let c=ps[o.toLowerCase()];if(c===Rr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Ym(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&XI(t,r),Wm(t);let s=t.toJSON();_t=Io(s);let n=t.getIn(["rootPath"]),i=ms.join(n,gr.HDB_CONFIG_FILE);Xt.createFileSync(i),Xt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(VQ,"createConfigFile");function XI(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(gc.TABLES))for(let i in s[n][gc.TABLES])for(let o in s[n][gc.TABLES][i]){let c=s[n][gc.TABLES][i][o],u=[Rr.DATABASES,n,gc.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=[Rr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(XI,"setSchemasConfig");function $Q(e){if(S_===void 0){let r=$n(JI);S_=Io(r.toJSON())}let t=ps[e.toLowerCase()];if(t!==void 0)return S_[t.toLowerCase()]}a($Q,"getDefaultConfig");function jI(e){if(e==null){lt.error(xQ);return}if(_t===void 0){lt.trace(qQ);return}let t=ps[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(jI,"getConfigValue");function Ui(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?ms.join(t,gr.HDB_CONFIG_FILE):zI(e).get(gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ui,"getConfigFilePath");function Km(e=!1){if(_t===void 0||e){let t;if(!pt.noBootFile()){t=pt.getPropsFilePath();try{Xt.accessSync(t,Xt.constants.F_OK|Xt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ui(t),s;if(r.includes("config/settings.js"))try{ew(r);return}catch(i){if(i.code!==gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=$n(r)}catch(i){if(i.code===gr.NODE_ERROR_CODES.ENOENT){lt.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 lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}YQ(s,r),Wm(s);let n=s.toJSON();if(HQ.config=n,_t=Io(n),_t.logging_rotation_rotate)for(let i in QI)_t[i]&&lt.error(`Config ${QI[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(FQ)}}a(Km,"initConfig");function YQ(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ms.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ms.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ms.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Xt.writeFileSync(t,String(e)))}a(YQ,"checkForUpdatedConfig");function Wm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=DQ(t);if(r.error)throw p_.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)}a(Wm,"validateConfig");function KQ(e,t){_t===void 0&&(_t={});let r=ps[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a(KQ,"updateConfigObject");function ZI(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&Km();let o=jI(ps.hdb_root),c=ms.join(o,gr.HDB_CONFIG_FILE),u=$n(c),_;if(r===void 0&&e.toLowerCase()===Rr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ps[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Ym(f,t);u.setIn([...E],h)}else for(let f in r){let E=ps[f.toLowerCase()];if(E===Rr.HTTP_SECUREPORT&&r[f]===_t[Rr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Rr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[Rr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Rr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Ym(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(g){lt.error(g)}}}_&&XI(u,_),Wm(u);let l=u.getIn(["rootPath"]),d=ms.join(l,gr.HDB_CONFIG_FILE);s===!0&&WQ(c,l),Xt.writeFileSync(d,String(u)),n&&(_t=Io(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ZI,"updateConfigValue");function WQ(e,t){try{let r=ms.join(t,"backup",`${gr.HDB_CONFIG_FILE}.bak`);Xt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(GQ),lt.error(r)}}a(WQ,"backupConfigFile");var QQ=["databases"];function Io(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)),T_=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])&&!QQ.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;!Rr[u.toUpperCase()]&&ps[u]&&(n[ps[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Io,"flattenConfig");function Ym(e,t){if(e===Rr.CLUSTERING_NODENAME||e===Rr.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(MQ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pt.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 pt.autoCast(t)}a(Ym,"castConfigValue");function zQ(){let e=pt.getPropsFilePath(),t=Ui(e);return $n(t).toJSON()}a(zQ,"getConfiguration");async function JQ(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ZI(void 0,void 0,n,!0),kQ}catch(i){throw typeof i=="string"||i instanceof String?vQ(i,i,BQ.BAD_REQUEST,void 0,void 0,!0):i}}a(JQ,"setConfiguration");function Qm(){let e=pt.getPropsFilePath();try{Xt.accessSync(e,Xt.constants.F_OK|Xt.constants.R_OK)}catch(s){if(!pt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ui(e);return $n(t).toJSON()}a(Qm,"readConfigFile");function $n(e){return UQ.parseDocument(Xt.readFileSync(e,"utf8"),{simpleKeys:!0})}a($n,"parseYamlDoc");function XQ(){let e=Qm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=WI(t);if(r)throw p_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=WI(s);if(n)throw p_.CONFIG_VALIDATION(n.message);if(!pt.isEmptyOrZeroLength(s)&&!pt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!pt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw p_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(XQ,"getClusteringRoutes");function ew(e){let t=zI(e);_t={};for(let r in ps){let s=t.get(r.toUpperCase());if(pt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ps[r].toLowerCase();n===Rr.LOGGING_ROOT?_t[n]=ms.dirname(s):_t[n]=s}return _t}a(ew,"initOldConfig");function jQ(e){let t=Qm();return PQ.get(t,e.replaceAll("_","."))}a(jQ,"getConfigFromFile");async function ZQ(e,t){let r=$n(Ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Xt.writeFile(Ui(),String(r))}a(ZQ,"addConfig");function ez(e){let t=Ui(pt.getPropsFilePath()),r=$n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ms.join(s,gr.HDB_CONFIG_FILE);Xt.writeFileSync(n,String(r))}a(ez,"deleteConfigFromFile");function tz(){return T_||(Km(),T_)}a(tz,"getConfigObj")});var sw=T((Qce,rw)=>{"use strict";var R_=y(),g_=class{static{a(this,"BaseLicense")}constructor(t=0,r=R_.RAM_ALLOCATION_ENUM.DEFAULT,s=R_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},zm=class extends g_{static{a(this,"ExtendedLicense")}constructor(t=0,r=R_.RAM_ALLOCATION_ENUM.DEFAULT,s=R_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rw.exports={BaseLicense:g_,ExtendedLicense:zm}});var Ac=T((Jce,uw)=>{"use strict";var Co=require("fs-extra"),nw=f_(),iw=require("crypto"),rz=require("moment"),sz=require("uuid").v4,Ft=G(),Xm=require("path"),nz=$(),Yn=y(),iz=sw().ExtendedLicense,wo="invalid license key format",oz="061183",az="mofi25",cz="aes-256-cbc",uz=16,lz=32,ow=X();ow.initSync();var Jm;uw.exports={validateLicense:aw,generateFingerPrint:dz,licenseSearch:cw,getLicense:hz};function jm(){return Xm.join(ow.getHdbBasePath(),Yn.LICENSE_KEY_DIR_NAME,Yn.LICENSE_FILE_NAME)}a(jm,"getLicenseDirPath");function _z(){let e=jm();return Xm.join(e,Yn.LICENSE_FILE_NAME)}a(_z,"getLicenseFilePath");function Zm(){let e=jm();return Xm.join(e,Yn.REG_KEY_FILE_NAME)}a(Zm,"getFingerPrintFilePath");async function dz(){let e=Zm();try{return await Co.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await fz();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(dz,"generateFingerPrint");async function fz(){let e=sz(),t=nw.hash(e),r=Zm();try{await Co.mkdirp(jm()),await Co.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(fz,"writeFingerprint");function aw(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Yn.RAM_ALLOCATION_ENUM.DEFAULT,version:Yn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Zm(),n=!1;try{n=Co.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=Co.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(az),c=o[1];c=Buffer.concat([Buffer.from(c)],uz);let u=Buffer.concat([Buffer.from(i)],lz),_=iw.createDecipheriv(cz,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=Ez(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(wo),Ft.error(wo),new Error(wo)}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(wo),Ft.error(wo),new Error(wo)}else r.exp_date=l;r.exp_date<rz().valueOf()&&(r.valid_date=!1),nw.validate(o[1],`${oz}${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||Ft.error("Invalid licence"),r}a(aw,"validateLicense");function Ez(e,t){try{let r=iw.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(Ez,"checkOldLicense");function cw(){let e=new iz,t=[];try{t=Co.readFileSync(_z(),"utf-8").split(Yn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(nz.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=aw(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){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=Yn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Jm=e,e}a(cw,"licenseSearch");async function hz(){return Jm||await cw(),Jm}a(hz,"getLicense")});var kr=T((tue,bw)=>{"use strict";var fw="username is required",Ew="nothing to update, must supply active, role or password to update",hw="password cannot be an empty string",mw="If role is specified, it cannot be empty.",pw="active must be true or false";bw.exports={addUser:Nz,alterUser:bz,dropUser:Iz,getSuperUser:Dz,userInfo:wz,listUsers:O_,listUsersExternal:Cz,setUsersToGlobal:Do,findAndValidateUser:Ow,getClusterUser:Uz,USERNAME_REQUIRED:fw,ALTERUSER_NOTHING_TO_UPDATE:Ew,EMPTY_PASSWORD:hw,EMPTY_ROLE:mw,ACTIVE_BOOLEAN:pw};var Sw=xr(),mz=Li(),rp=f_(),Tw=HI(),Rw=Gr(),sp=on(),Or=$(),gw=require("validate.js"),de=G(),{promisify:pz}=require("util"),np=un(),lw=y(),_w=ke(),Sz=Ar(),jce=X(),Zce=Ac(),Tz=Si(),{table:eue}=(fe(),Z(Ce)),{handleHDBError:qs,hdb_errors:Rz}=j(),{HTTP_STATUS_CODES:Fs,AUTHENTICATION_ERROR_MSGS:ep,HDB_ERROR_MSGS:Lo}=Rz,{UserEventMsg:ip}=us(),tp=require("lodash"),{server:op}=(fr(),Z(di)),gz=G();op.getUser=Ow;var Aw={username:!0,active:!0,role:!0,password:!0},dw=new Map,A_=Rw.searchByValue,Az=Rw.searchByHash,Oz=pz(mz.delete);async function Nz(e){let t=gw.cleanAttributes(e,Aw),r=Tw.addUserValidation(t);if(r)throw qs(new Error,r.message,Fs.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 A_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw qs(new Error,Lo.ROLE_NAME_NOT_FOUND(t.role),Fs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw qs(new Error,Lo.DUP_ROLES_FOUND(t.role),Fs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=np.encrypt(t.password)),t.password=rp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Sw.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await Do()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw qs(new Error,Lo.USER_ALREADY_EXISTS(t.username),Fs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],sp.signalUserChange(new ip(process.pid)),`${c.username} successfully added`}a(Nz,"addUser");async function bz(e){let t=gw.cleanAttributes(e,Aw);if(Or.isEmptyOrZeroLength(t.username))throw new Error(fw);if(Or.isEmptyOrZeroLength(t.password)&&Or.isEmptyOrZeroLength(t.role)&&Or.isEmptyOrZeroLength(t.active))throw new Error(Ew);if(!Or.isEmpty(t.password)&&Or.isEmptyOrZeroLength(t.password.trim()))throw new Error(hw);if(!Or.isEmpty(t.active)&&!Or.isBoolean(t.active))throw new Error(pw);let r=yz(t.username);if(!Or.isEmpty(t.password)&&!Or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=np.encrypt(t.password)),t.password=rp.hash(t.password)),t.role==="")throw new Error(mw);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 A_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=Lo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),qs(new Error,c,Fs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Lo.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),qs(new Error,c,Fs.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 Sw.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await Do()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return sp.signalUserChange(new ip(process.pid)),n}a(bz,"alterUser");function yz(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yz,"isClusterUser");async function Iz(e){try{let t=Tw.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Or.isEmpty(global.hdb_users.get(e.username)))throw qs(new Error,Lo.USER_NOT_EXIST(e.username),Fs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Oz(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await Do()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return sp.signalUserChange(new ip(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Iz,"dropUser");async function wz(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=tp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Az(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(wz,"userInfo");async function Cz(){let e;try{e=await O_()}catch(t){throw de.error("Got an error listing users."),de.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(Cz,"listUsersExternal");async function O_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await A_(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=tp.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 A_(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=tp.cloneDeep(o),o.role=r[o.role],Lz(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Or.errorizeMessage(e)}return null}a(O_,"listUsers");function Lz(e){try{if(!e){de.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(Tz)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(Lz,"appendSystemTablesToRole");async function Do(){try{let e=await O_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(Do,"setUsersToGlobal");async function Ow(e,t,r=!0){global.hdb_users||await Do();let s=global.hdb_users.get(e);if(!s)throw qs(new Error,ep.GENERIC_AUTH_FAIL,Fs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw qs(new Error,ep.USER_INACTIVE,Fs.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(dw.get(t)===s.password)return n;if(rp.validate(s.password,t))dw.set(t,s.password);else throw qs(new Error,ep.GENERIC_AUTH_FAIL,Fs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ow,"findAndValidateUser");async function Dz(){global.hdb_users||await Do();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(Dz,"getSuperUser");async function Uz(){let e=await O_(),t=Sz.getConfigFromFile(lw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Or.isEmpty(r)&&r?.role?.role===lw.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=np.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_w.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_w.SERVER_SUFFIX.ADMIN,r}a(Uz,"getClusterUser");var Nw=[];op.invalidateUser=function(e){for(let t of Nw)try{t(e)}catch(r){gz.error("Error invalidating user",r)}};op.onInvalidatedUser=function(e){Nw.push(e)}});var Nc=T((iue,Cw)=>{"use strict";var Mi=G(),Nr=y(),Mz=UO(),sue=xn(),nue=bi(),Pz=kr(),{validateEvent:yw}=us(),Oc=Es(),vz=require("process"),{resetDatabases:Bz}=(fe(),Z(Ce)),Hz={[Nr.ITC_EVENT_TYPES.SCHEMA]:qz,[Nr.ITC_EVENT_TYPES.USER]:ww};async function qz(e){let t=yw(e);if(t){Mi.error(t);return}Mi.trace("ITC schemaHandler received schema event:",e),await Mz(e.message),await Fz(e.message)}a(qz,"schemaHandler");async function Fz(e){try{Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Bz();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Mi.error(t)}}a(Fz,"syncSchemaMetadata");var Iw=[];async function ww(e){try{try{Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Mi.warn(r)}let t=yw(e);if(t){Mi.error(t);return}Mi.trace(`ITC userHandler ${Nr.HDB_ITC_CLIENT_PREFIX}${vz.pid} received user event:`,e),await Pz.setUsersToGlobal();for(let r of Iw)r()}catch(t){Mi.error(t)}}a(ww,"userHandler");ww.addListener=function(e){Iw.push(e)};Cw.exports=Hz});var us=T((_ue,Dw)=>{"use strict";var aue=G(),ap=$(),Gz=y(),{ITC_ERRORS:bc}=Er(),{parentPort:cue,threadId:xz,isMainThread:kz,workerData:uue}=require("worker_threads"),{onMessageFromWorkers:Vz,broadcast:lue,broadcastWithAcknowledgement:$z}=Je();Dw.exports={sendItcEvent:Yz,validateEvent:Lw,SchemaEventMsg:Kz,UserEventMsg:Wz};var N_;Vz(async(e,t)=>{N_=N_||Nc(),Lw(e),N_[e.type]&&await N_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Yz(e){return!kz&&e.message&&(e.message.originator=xz),$z(e)}a(Yz,"sendItcEvent");function Lw(e){if(typeof e!="object")return bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ap.isEmpty(e.type))return bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||ap.isEmpty(e.message))return bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ap.isEmpty(e.message.originator))return bc.MISSING_ORIGIN;if(Gz.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return bc.INVALID_EVENT(e.type)}a(Lw,"validateEvent");function Kz(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(Kz,"SchemaEventMsg");function Wz(e){this.originator=e}a(Wz,"UserEventMsg")});var on=T((Eue,vw)=>{"use strict";var Uw=y(),fue=$(),b_=G(),Mw=EO(),Uo,{sendItcEvent:Pw}=us();function Qz(e){try{b_.trace("signalSchemaChange called with message:",e),Uo=Uo||Nc();let t=new Mw(Uw.ITC_EVENT_TYPES.SCHEMA,e);return Uo.schema(t),Pw(t)}catch(t){b_.error(t)}}a(Qz,"signalSchemaChange");function zz(e){try{b_.trace("signalUserChange called with message:",e),Uo=Uo||Nc();let t=new Mw(Uw.ITC_EVENT_TYPES.USER,e);return Uo.user(t),Pw(t)}catch(t){b_.error(t)}}a(zz,"signalUserChange");vw.exports={signalSchemaChange:Qz,signalUserChange:zz}});var Cc={};ve(Cc,{addAnalyticsListener:()=>wc,recordAction:()=>br,recordActionBinary:()=>Vr,setAnalyticsEnabled:()=>Jz});function Jz(e){Yw=e}function br(e,t,r,s,n){if(!Yw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=w_.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},w_.set(i,o)}y_||Xz()}function Vr(e,t,r,s,n){br(!!e,t,r,s,n)}function wc(e){Qw.push(e)}function Xz(){y_=performance.now(),setTimeout(async()=>{let e=performance.now()-y_;y_=0;let t=[],r={time:Date.now(),period:e,threadId:Pi.threadId,metrics:t};for(let[n,i]of w_){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 zw){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 Jw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Pi.threadId,byThread:!0,...s});for(let n of Qw)n(t);w_=new Map,Pi.parentPort?Pi.parentPort.postMessage({type:Ww,report:r}):Zw({report:r})},Kw).unref()}async function jz(e,t=6e4){let r=lp(),s=Xw(),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:g}=p;for(let b of S||[]){let{path:O,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=b;w||(w=1);let be=F+(O?"-"+O:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[g];if(Pe)se=Pe;else{se.threads[g]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let Pe in te){let Ot=te[Pe];typeof Ot=="number"&&(se[Pe]=(se[Pe]*Pt+Ot*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},b),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[g]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await Jw()}for(let h of u){let{path:p,method:S,type:g,metric:b,count:O,total:Y,distribution:Q,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of F){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,Ot)=>Pe.value>Ot.value?1:-1);let g=S.count-1,b=[],O=0,Y=0,Q;for(let Pe of zw){let Ot=g*Pe;for(;O<Ot;)Q=p[Y++],O+=Q.count,Y===1&&O--;let ts=p[Y>1?Y-2:0];Q||(Q=p[0]),b.push(Q.value-(Q.value-ts.value)*(O-Ot)/Q.count)}let[F,w,K,B,x,te,be,se,Pt]=b;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,I_.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,I_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Bw,active:E-Hw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Bw=f,Hw=E}async function qw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function lp(){return Fw||(Fw=tt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Xw(){return Gw||(Gw=tt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function t2(){jw=!0;let e=(0,Ic.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await jz(Kw,e),await qw(lp(),Zz),await qw(Xw(),e2)},Math.min(e/2,2147483647)).unref()}function Zw(e,t){let r=e.report;r.threadId=t?.threadId||Pi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(xw+=s.mean*s.count);r.totalBytesProcessed=xw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(kw.get(t))}),kw.set(t,t.performance.eventLoopUtilization())),r.id=(0,I_.getNextMonotonicTime)(),lp().primaryStore.put(r.id,r),jw||t2(),r2&&(eC=n2(r))}async function n2(e){if(await eC,!Kn){let r=(0,yc.dirname)((0,$w.getLogFilePath)());try{Kn=await(0,cp.open)((0,yc.join)(r,"analytics.log"),"r+")}catch{Kn=await(0,cp.open)((0,yc.join)(r,"analytics.log"),"w+")}}let t=(await Kn.stat()).size;if(t>s2){let r=Buffer.alloc(t);await Kn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Kn.write(r,{position:0}),await Kn.truncate(r.length),t=r.length}await Kn.write(JSON.stringify(e)+`
8
- `,t)}var Pi,Vw,$w,yc,cp,I_,Ic,up,w_,Yw,y_,Kw,Ww,Qw,zw,Bw,Hw,Jw,Zz,e2,Fw,Gw,jw,xw,kw,r2,eC,Kn,s2,_n=Te(()=>{Pi=require("worker_threads"),Vw=D(Je());fe();$w=D(G()),yc=require("path"),cp=require("fs/promises"),I_=D(hr()),Ic=D(X()),up=D(y());fr();(0,Ic.initSync)();w_=new Map,Yw=(0,Ic.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Jz,"setAnalyticsEnabled");a(br,"recordAction");ct.recordAnalytics=br;a(Vr,"recordActionBinary");y_=0,Kw=1e3,Ww="analytics-report",Qw=[];a(wc,"addAnalyticsListener");zw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Xz,"sendAnalytics");a(jz,"aggregation");Bw=0,Hw=0,Jw=a(()=>new Promise(setImmediate),"rest");a(qw,"cleanup");Zz=36e5,e2=31536e6;a(lp,"getRawAnalyticsTable");a(Xw,"getAnalyticsTable");(0,Vw.setChildListenerByType)(Ww,Zw);a(t2,"startScheduledTasks");xw=0,kw=new Map,r2=!1;a(Zw,"recordAnalytics");s2=1e6;a(n2,"logAnalytics")});var hp={};ve(hp,{coerceType:()=>M_,makeTable:()=>B_,setServerUtilities:()=>f2,updateResource:()=>Mc});function B_(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=[]),_O(i,u);let S=KE(i,s,u),g=0,b,O,Y,Q={},F=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Pt=2,Pe={},Ot={},ts=864e5,gg,Ju,bH=10,yH=6;E&&Ng();class at extends Nt{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=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(I=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),U.length>0)if(U.length===1){let M=U[0];return(V,z,ie)=>{if(V?.source!==M)return M[I](z,ie,V)}}else return(M,V,z)=>{let ie=[];for(let k of U){if(M?.source===k)break;ie.push(k[I](V,z,M))}return Promise.all(ie)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(I=>{if(R[I]&&(!R[I].reliesOnPrototype||R.prototype[I]))return(U,M,V)=>{if(!U?.source)return R[I](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},Ot={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,U=a(async(M,V)=>{let z=M.value,ie=M.table?$e[c][M.table]:at;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[ie.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await ie.getResource(M.id,V,Lc);switch(M.type){case"put":return k._writeUpdate(z,Lc);case"delete":return k._writeDelete(Lc);case"publish":return k._writePublish(z,Lc);case"invalidate":return k.invalidate(Lc);default:Ve.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,vi.getWorkerIndex)()):(0,vi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ie;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ve.error("Bad subscription event",k);continue}if(k.source=m,ie)if(k.beginTxn)ie.resolve();else{U(k,ie);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(_i=>_i.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(tt({table:n,database:c,attributes:ne,origin:"cluster"}),vc.signalSchemaChange(new Bc.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(ie=k,U(k,k),new Promise(ne=>{ie.resolve=ne})):U(k,k)});I&&(await Ne,vc.signalUserChange(new Bc.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ve.error("error in subscription handler",Ee)}}}catch(M){Ve.error(M)}})(),this}static getResource(m,A,C){let R=super.getResource(m,A,C);if(m!=null){Oa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),I=Un(A),U=I.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ag(m,A,{transaction:U},L,M=>{if(M?Mc(R,M):R[Re]=null,A.onlyIfCached&&A.noCacheStore){if(!R.doesExist())throw new xs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=_E(m,M,A,R);if(V)return I?.disregardReadTxn(),R[dp]=!0,Ep(V,z=>(Mc(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=_E(this[Ie],this[Gs],this[me]);if(m)return this[dp]=!0,Ep(m,A=>{this[Gs]=A,this[Re]=A.value,this[U_]=A.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,ts=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ts=ts||(d+f)/4,dE()}static enableAuditing(m=!0){E=m,m&&Ng(),at.audit=m}static coerceId(m){return m===""?null:M_(m,Q)}static async dropTable(){if(delete $e[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.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));vc.signalSchemaChange(new Bc.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[os])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=ju(m);if(C?.read){let R=C.attribute_permissions;if(R){A||(A={});let L=A.select;if(L){let I=fp(R,"read");A.select=L.filter(U=>I[U])}else A.select=R.filter(I=>I.read).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=ju(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=fp(R,"update");for(let I in A)if(!L[I])return!1;for(let I of R){let U=I.attribute_name;!I.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[os]){let C=ju(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=fp(R,"insert");for(let I in A)if(!L[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,A){if(!Un(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Oa(C),Un(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Gs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,A,C),beforeIntermediate:Ot.invalidate?.bind(this,A,C),commit:(L,I)=>{if(I?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Gs],L,C_,E,this[me],0,"invalidate")}})}static evict(m,A,C){let R=this.Source,L;if(!((O||E)&&(!A||(L=i.getEntry(m),!L||!A)||L.version!==C))){if(O){if(i.hasLock(m,L.version))return;let I;for(let U in r)I||(I={}),I[U]=A[U];if(I){S(m,I,L,C,L_,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Xu(m,A,null)}),E)S(m,null,L,C,L_,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,aC.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],R=Un(C),L=this[Ie];Oa(L);let I=this[Gs];this[_p]=!0;let U={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!m[rC]||dl(m)){if(this.validate(m),C?.source?m=Fa(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Fa(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:Ot.put&&(()=>Ot.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Mc(this,V));let ie=V?.value;this[_p]=!1,Ve.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Xu(L,ie,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[os]){for await(let A of this.search(m))(await at.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let A=Un(this[me]),C=this[Ie];Oa(C);let R=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:Ot.delete?.bind(this,R,C),commit:(L,I,U)=>{let M=I?.value;U&&(R&&I?.version>(R.lastModified||0)&&(R.lastModified=I.version),Mc(this,I)),!(I?.version>L)&&(Xu(this[Ie],M),Ve.trace("Write delete entry",C,L),E||h?(S(C,null,this[Gs],L,0,E,this[me],0,"delete"),E||dE()):i.remove(this[Ie]))}}),!0}search(m){let A=Un(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(R=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,xs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>M_(Ne,Ee)):M_(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,oC.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Uc.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Uc.SEARCH_TYPES.CONTAINS||Ee===Uc.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Uc.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=a2:k.estimated_count=o2}return k.estimated_count}));let I=A.getReadTxn();I.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:U?.length<4}:{start:!1,transaction:I,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):D_.SKIP);else{let k=PE(M,I,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(vE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=PE(ne,I,C,at,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=ie(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,I.done()};let z=this[me];function ie(k,Ee){let Ne=Ee?.length,ne={transaction:I,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(_i,qe){if(vt&&qe!==void 0){let _r=!z.onlyIfCached&&_E(qe,_i,z,this);if(_r)return _r.then(CH=>Vt(CH))}let ys=_i?.value;if(!ys)return D_.SKIP;for(let _r=0;_r<Ne;_r++)if(!Ee[_r](ys))return D_.SKIP;return ys}return a(Vt,"processEntry"),k.map(_i=>Ag(_i,z,ne,!1,Vt))}return a(ie,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=uO(at,this[Ie]??null,function(I,U,M,V){try{let z=U.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ve.error(z)}},m.startTime,this[os]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[os]){if(L){if(R)throw new xs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=mr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||iC(C,V))&&A.send({id:V,timestamp:I,...M}),A.startTime=I}}else if(R){let I=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=mr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||iC(C,z)){let ie=V.getValue(i);if(I.push({id:z,timestamp:U,value:ie,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ve.error("Error getting history entry",U,V)}for(let U=I.length;U>0;)A.send(I[--U]);I[0]&&(A.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,P_.MAXIMUM_KEY],versions:!0}))U&&A.send({id:I,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let I=this[Gs]?.localTime;if(Ve.trace("Subscription from",L,"from",C),L<I){let U=[],M=I;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=mr(V),ie=z.getValue(i);U.push({id:C,value:ie,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)A.send(U[--V]);A.startTime=I}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[U_],timestamp:this[Gs]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[Re]||this[_p])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Un(this[me]),R=this[Ie]||null;Oa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Gs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:Ot.publish?.bind(this,L,R,m),commit:(I,U,M)=>{U===void 0&&h&&!E&&dE(),S(R,U?.value??null,U,U?.version||I,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((R,L,I)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(A||(A=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],ie=C(R[z.name],z,I+"."+z.name);ie&&(R[z.name]=ie)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(A||(A=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(A||(A=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(A||(A=[])).push(`Property ${I} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(A||(A=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof R!="boolean"&&(A||(A=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(A||(A=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,I+"[*]");z&&(R[U]=z)}}else(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(A||(A=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let I=p[R],U=C(m[I.name],I,I.name);U&&(m[I.name]=U)}if(A)throw new xs.ClientError(A.join(". "))}getUpdatedTime(){return this[U_]}wasLoadedFromSource(){return O?!!this[dp]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new xs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new xs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,R=1e3,L;A>C&&!m?.exactCount&&(L=R);let I=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&I++;if(L){let U=I;I=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&I++;let M=L*2,V=(I+U)/M,z=Math.pow((I-U+1)/L/2,2)+V*(1-V)/M,ie=Math.max(Math.sqrt(z)*A,1),k=Math.round(V*A),Ee=Math.max(k-1.96*ie,0),Ne=Math.min(k+1.96*ie,A),ne=Math.pow(10,Math.round(Math.log10(ie)));return ne>k&&(ne=ne/10),I=Math.round(k/ne)*ne,{recordCount:I,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:I}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Dc(),mr(R).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:A})){await Dc();let L=mr(R);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let R=C.localTime,L=0;do{await Dc();let I=u.get(R);if(I){let U=mr(I);A.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return A.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let IH=at.prototype;return IH[rC]=!0,d&&at.setTTLExpiration(d/1e3),B&&wH(),at;function Xu(W,m,A){let C;for(let R in r){let L=r[R],I=L.isIndexing,U=A?.[R],M=m?.[R];if(U===M&&!I)continue;C=!0;let V=(0,Pc.getIndexedValues)(M);if(V){tC&&L.prefetch(V.map(z=>({key:z,value:W})),nC);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Pc.getIndexedValues)(U),V){tC&&L.prefetch(V.map(z=>({key:z,value:W})),nC);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(Xu,"updateIndices");function Oa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>sC)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,P_.writeKey)(W,_2,0)>sC)throw new Error("Primary key size is too large: "+W.length);return!0}a(Oa,"checkValidId");function Ag(W,m,A,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return R(null,W);let I=i.getEntry(W,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),R(I,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((I,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>yH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<bH&&Pt++}a(M,"prefetch");function V(){try{I(L())}catch(z){U(z)}}a(V,"load")})}a(Ag,"loadLocalRecord");function ju(W){if(!W)return;let m=W.role.permission;if(m.super_user)return d2;let A=m[c],C,R=A?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ju,"getTablePermissions");function _E(W,m,A,C){if(O){let R;if(A.noCache?R=!0:(m?(!m.value||m.metadataFlags&(C_|L_)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,Vr(!R,"cache-hit",n)),R){let L=Og(W,m,A).then(I=>(I?.value?.[Re]&&Ve.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(I=>Ve.warn(I)),A?.onlyIfCached&&!C.doesExist())throw new xs.ServerError("Entry is not cached",504);return}else return L}}}a(_E,"ensureLoadedFromSource");function Un(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new hi,m.lmdbDb=i,m;m=A}while(!0)}else return new pl}a(Un,"txnForContext");async function Og(W,m,A){let C=m?.metadataFlags,R=m?.version,L,I;if(!i.attemptLock(W,R,()=>{clearTimeout(I);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(C_|L_)?L(Og(W,i.getEntry(W),A)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(W,R)},l2)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:R,source:null,resourceCache:A?.resourceCache},V=A?.responseHeaders;return new Promise((z,ie)=>{let k;Ep(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let _r of at.sources)if(_r.get&&(!_r.get.reliesOnPrototype||_r.prototype.get)&&(M.source=_r,ne=await _r.get(W,M),ne))break;Vt=C&C_;let qe=M.lastModified||Vt&&R;vt=Vt||qe>R||!U,qe||(qe=(0,Pc.getNextMonotonicTime)());let ys=performance.now()-Ne;if(br(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=qe,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:qe,value:ne})}catch(qe){qe.message+=` while resolving record ${W} for ${n}`,U&&((qe.code==="ECONNRESET"||qe.code==="ECONNREFUSED"||qe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(qe.statusCode===500||qe.statusCode===502||qe.statusCode===503||qe.statusCode===504))?(z({version:R,value:U}),Ve.trace(qe.message,"(returned stale record)")):ie(qe),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Un(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(qe,ys)=>{if(ys?.version!==R)return;let _r=Xu(W,U,ne);ne?(Ot.put?.(M,W,ne),S(W,ne,ys,qe,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(Ot.delete?.(M,W),E||h?S(W,null,ys,qe,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ve.error("Error committing cache update",Ee)})})}a(Og,"getFromSource");function dE(){if(ts!==gg&&(gg=ts,(0,vi.getWorkerIndex)()===(0,vi.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!ts)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/ts)*ts+W.getTime(),A=a(C=>{Ve.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Ju=setTimeout(()=>F=F.then(async()=>{if(A(Math.max(C+ts,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}Ve.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:I,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&U+u2<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,I,U),R++),await Dc();Ve.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ve.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(dE,"scheduleCleanup");function Ng(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(Ng,"addDeleteRemoval");function wH(){(0,vi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&at.evict(A,C.value,C.version),await Dc()}}catch(W){Ve.error("Error in evicting old records",W)}},c2).unref()}a(wH,"runRecordExpirationEviction")}function fp(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 nC(){}function f2(e){aC=e}function M_(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!E2.test(e)&&(e+="Z"),new Date(e)):r?e:(0,v_.autoCast)(e)}function iC(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 Ep(e,t,r){return e?.then?e.then(t,r):t(e)}function Mc(e,t){e[Gs]=t,e[Re]=t?.value??null,e[U_]=t?.version}var Ss,D_,Pc,oC,Uc,Hc,xs,vc,Bc,Ve,P_,vi,v_,i2,aC,o2,a2,c2,u2,tC,l2,U_,rC,Gs,_p,dp,Lc,C_,L_,_2,sC,d2,Fue,E2,Dc,H_=Te(()=>{Ss=D(y()),D_=require("lmdb"),Pc=D(hr()),oC=require("lodash");is();UE();Uc=D(ze()),Hc=D(X());dO();xs=D(j()),vc=D(on()),Bc=D(us());fe();Tl();Ve=D(G());ml();mi();P_=require("ordered-binary"),vi=D(Je());uo();v_=D($());Va();_n();i2=new Uint8Array(9);i2[8]=192;o2=1e8,a2=1e7,c2=6e4,u2=864e5;Hc.initSync();tC=Hc.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),l2=1e4,U_=Symbol.for("version"),rC=Symbol.for("incremental-update"),Gs=Symbol("entry"),_p=Symbol("is-saving"),dp=Symbol("loaded-from-source"),Lc={isNotification:!0,ensureLoaded:!1},C_=1,L_=8,_2=Buffer.allocUnsafeSlow(8192),sC=1978,d2={read:!0,insert:!0,update:!0,delete:!0},Fue=(0,v_.convertToMS)(Hc.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(B_,"makeTable");a(fp,"attributesAsObject");a(nC,"noop");a(f2,"setServerUtilities");E2=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(M_,"coerceType");a(iC,"isDescendantId");Dc=a(()=>new Promise(setImmediate),"rest");a(Ep,"when");a(Mc,"updateResource")});var Ce={};ve(Ce,{database:()=>mc,databases:()=>$e,dropDatabase:()=>Am,dropTableMeta:()=>R2,getDatabases:()=>_s,getTables:()=>h2,onUpdatedTable:()=>Rp,readMetaDb:()=>qc,resetDatabases:()=>m2,table:()=>tt,tables:()=>Ir});function h2(){return k_||_s(),Ir||{}}function _s(){if(k_)return $e;k_=!0,vo=new Map;let e=(0,Gt.getHdbBasePath)()&&(0,Fe.join)((0,Gt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),t=(0,Gt.get)(wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Gt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,yr.existsSync)(e)?e:(0,Fe.join)((0,Gt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,yr.existsSync)(e))for(let r of(0,yr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qc((0,Fe.join)(e,r.name),null,s)}if((0,yr.existsSync)((0,Po.getBaseSchemaPath)())){for(let r of(0,yr.readdirSync)((0,Po.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Po.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Po.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,yr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);qc((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,yr.existsSync)(n))for(let o of(0,yr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&qc((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,yr.existsSync)(u)&&qc(u,o,r,null,!0)}}for(let r in $e){let s=vo.get(r);if(s){let n=$e[r];r.includes("delete")&&$r.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||($r.trace(`delete table class ${i}`),delete n[i])}else if(delete $e[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[V_]}}return vo=null,$e}}function m2(){k_=!1;for(let[,e]of Wn)e.needsDeletion=!0;_s();for(let[e,t]of Wn)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Wn.delete(e));return $e}function qc(e,t,r=Sp,s,n){let i=new mp.default(e,!1);try{let o=Wn.get(e);o?o.needsDeletion=!1:(o=(0,F_.open)(i),Wn.set(e,o));let c=new Bi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(q_.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,yr.existsSync)(s)&&(i.path=s,_=(0,F_.open)(i),_.isLegacy=!0):_=wl(o));let l=_C(r),d=l[V_],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 g=f.get(p);g||f.set(p,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.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 x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){$r.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let g=l[E],b={},O=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,Gt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(g)b=g.indices,O=g.attributes,g.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Mo)||0)&&u.putSync(Mo,Y+1):(S.tableId=Y=u.get(Mo),Y||(Y=1),u.putSync(Mo,Y+1),u.putSync(S.key,S));let x=new Bi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=yl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!b[x.name]){let be=new Bi.default(!x.is_hash_attribute,x.is_hash_attribute);b[x.name]=o.openDB(x.key,be)}let te=O.find(be=>be.name===x.name);te?O.splice(O.indexOf(te),1,x):O.push(x)}}catch(te){$r.error("Error trying to update attribute",x,O,b,te)}}if(!g){g=dC(l,E,B_({primaryStore:Q,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let x of Tp)x(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function _C(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=Ir:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),vo&&!vo.has(e)){let r=new Set;t[V_]=r,vo.set(e,r)}return t}function dC(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=Sp),_s();let r=_C(e),s=(0,Fe.join)((0,Gt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),n=(0,Gt.get)(wr.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,Gt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||((0,yr.existsSync)(s)?s:(0,Fe.join)((0,Gt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=Wn.get(o);if(!c){let u=new mp.default(o,!1);c=(0,F_.open)(u),Wn.set(o,c)}return c}async function Am(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e];for(let r in t){let n=t[r].primaryStore.rootStore;Wn.delete(n.path),n.status==="open"&&(await n.close(),await cC.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[V_]}delete $e[e]}function tt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=Sp);let l=mc({database:t,table:e}),d=$e[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 g=new Bi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let b,O;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 w=l.auditStore;w||(w=wl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Gt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),$r.trace(`${e} table loading, opening primary store`);let K=new Bi.default(!1,!0),B=e+"/",x=yl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,g),x.tableId=S.get(Mo),x.tableId||(x.tableId=1),S.putSync(Mo,x.tableId+1),h.tableId=x.tableId,f=dC(d,e,B_({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,b=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,g)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),b=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),b=!0,F(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Bi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fc.workerData?.restartNumber)&&(b=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fc.workerData?.restartNumber)&&(b=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(b=!0,F(),S.put(K,w))}}finally{O&&O()}if(b&&(f.schemaVersion++,f.updatedAttributes()),$r.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=T2(f,Q,Y):b&&G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,b)for(let w of Tp)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),$r.trace(`${e} table loaded`),f;function F(){O||l.transactionSync(()=>({then(w){O=w}}))}a(F,"startTxn")}async function T2(e,t,r){try{let s=e.schemaVersion;await G_.signalSchemaChange(new x_.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,uC.getIndexedValues)(l[h]);if(p)for(let S=0,g=p.length;S<g;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,$r.error(f)}),Fc.workerData&&Fc.workerData.restartNumber!==lC.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>p2?await n:u>S2&&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 G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){$r.error("Error in indexing",s)}}function R2({table:e,database:t}){let r=mc({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 Rp(e){Tp.push(e)}var Gt,q_,F_,Fe,yr,Po,Bi,mp,wr,cC,pp,uC,G_,x_,Fc,$r,lC,Sp,V_,Ir,$e,Mo,Tp,k_,Wn,vo,p2,S2,fe=Te(()=>{Gt=D(X()),q_=D(ze()),F_=require("lmdb"),Fe=require("path"),yr=require("fs"),Po=D(Be());H_();Bi=D(Cl()),mp=D(Dl()),wr=D(y()),cC=D(require("fs-extra")),pp=require("../index"),uC=D(hr()),G_=D(on()),x_=D(us()),Fc=require("worker_threads"),$r=D(G()),lC=D(Je());uo();Va();Sp="data",V_=Symbol("defined-tables");(0,Gt.initSync)();Ir=Object.create(null),$e=Object.create(null);(0,pp._assignPackageExport)("databases",$e);(0,pp._assignPackageExport)("tables",Ir);Mo=Symbol.for("next-table-id"),Tp=[],Wn=new Map;a(h2,"getTables");a(_s,"getDatabases");a(m2,"resetDatabases");a(qc,"readMetaDb");a(_C,"ensureDB");a(dC,"setTable");a(mc,"database");a(Am,"dropDatabase");a(tt,"table");p2=1e3,S2=10;a(T2,"runIndexing");a(R2,"dropTableMeta");a(Rp,"onUpdatedTable")});var $=T((Que,yC)=>{"use strict";var Qn=require("path"),pC=require("fs-extra"),jt=G(),fC=require("fs-extra"),$_=require("os"),g2=require("net"),A2=require("recursive-iterator"),Ye=y(),O2=sA(),EC=require("papaparse"),Y_=require("moment"),{inspect:N2}=require("util"),hC=require("is-number"),Wue=require("lodash"),b2=require("minimist"),y2=require("https"),I2=require("http"),{hdb_errors:K_}=j(),w2=/^((\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)))$/,SC=require("util").promisify(setTimeout),C2=100,L2=5,D2="",U2=4,mC={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};yC.exports={isEmpty:Cr,isEmptyOrZeroLength:ks,arrayHasEmptyValues:v2,arrayHasEmptyOrZeroLengthValues:B2,buildFolderPath:H2,isBoolean:TC,errorizeMessage:M2,stripFileExtension:F2,autoCast:G2,autoCastJSON:RC,autoCastJSONDeep:Ap,removeDir:x2,compareVersions:k2,isCompatibleDataVersion:V2,escapeRawValue:$2,unescapeValue:Y2,stringifyProps:K2,timeoutPromise:Q2,isClusterOperation:J2,getClusterUser:j2,checkGlobalSchemaTable:X2,getHomeDir:AC,getPropsFilePath:W2,promisifyPapaParse:Z2,removeBOM:OC,createEventPromise:eJ,checkProcessRunning:tJ,checkSchemaTableExist:rJ,checkSchemaExists:NC,checkTableExists:bC,getStartOfTomorrowInSeconds:sJ,getLimitKey:nJ,isObject:q2,isNotEmptyAndHasValue:P2,autoCasterIsNumberCheck:gC,backtickASTSchemaItems:iJ,isPortTaken:z2,createForkArgs:oJ,autoCastBoolean:aJ,async_set_timeout:SC,getTableHashAttribute:cJ,doesSchemaExist:uJ,doesTableExist:lJ,stringifyObj:_J,ms_to_time:dJ,changeExtension:fJ,getEnvCliRootPath:Op,noBootFile:EJ,httpRequest:hJ,transformReq:mJ,convertToMS:pJ,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function M2(e){return e instanceof Error?e:new Error(e)}a(M2,"errorizeMessage");function Cr(e){return e==null}a(Cr,"isEmpty");function P2(e){return!Cr(e)&&(e||e===0||e===""||TC(e))}a(P2,"isNotEmptyAndHasValue");function ks(e){return Cr(e)||e.length===0||e.size===0}a(ks,"isEmptyOrZeroLength");function v2(e){if(Cr(e))return!0;for(let t=0;t<e.length;t++)if(Cr(e[t]))return!0;return!1}a(v2,"arrayHasEmptyValues");function B2(e){if(ks(e))return!0;for(let t=0;t<e.length;t++)if(ks(e[t]))return!0;return!1}a(B2,"arrayHasEmptyOrZeroLengthValues");function H2(...e){try{return e.join(Qn.sep)}catch{console.error(e)}}a(H2,"buildFolderPath");function TC(e){return Cr(e)?!1:e===!0||e===!1}a(TC,"isBoolean");function q2(e){return Cr(e)?!1:typeof e=="object"}a(q2,"isObject");function F2(e){return ks(e)?D2:e.slice(0,-U2)}a(F2,"stripFileExtension");function G2(e){return Cr(e)||e===""||typeof e!="string"?e:mC[e]!==void 0?mC[e]:gC(e)===!0?Number(e):w2.test(e)?new Date(e):e}a(G2,"autoCast");function RC(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(RC,"autoCastJSON");function Ap(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=Ap(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Ap(r);s!==r&&(e[t]=s)}return e}else return RC(e)}a(Ap,"autoCastJSONDeep");function gC(e){if(e.startsWith("0.")&&hC(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&hC(e))}a(gC,"autoCasterIsNumberCheck");async function x2(e){if(ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await fC.emptyDir(e),await fC.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(x2,"removeDir");function k2(e,t){if(ks(e)){jt.info("Invalid current version sent as parameter.");return}if(ks(t)){jt.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(k2,"compareVersions");function V2(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(V2,"isCompatibleDataVersion");function $2(e){if(Cr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a($2,"escapeRawValue");function Y2(e){if(Cr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Y2,"unescapeValue");function K2(e,t){if(Cr(e))return jt.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+$_.EOL}!ks(s)&&s[0]===";"?r+=" "+s+n+$_.EOL:ks(s)||(r+=s+"="+n+$_.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(K2,"stringifyProps");function AC(){let e;try{e=$_.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(AC,"getHomeDir");function W2(){let e=Qn.join(AC(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return pC.existsSync(e)||(e=Qn.join(__dirname,"../","hdb_boot_properties.file")),e}a(W2,"getPropsFilePath");function Q2(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Q2,"timeoutPromise");async function z2(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=g2.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(z2,"isPortTaken");function J2(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(J2,"isClusterOperation");function X2(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return K_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return K_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(X2,"checkGlobalSchemaTable");function j2(e,t){if(Cr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Cr(e)||ks(e)){jt.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){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(j2,"getClusterUser");function Z2(){EC.parsePromise=function(e,t,r){return new Promise(function(s,n){EC.parse(e,{header:!0,transformHeader:OC,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Z2,"promisifyPapaParse");function OC(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(OC,"removeBOM");function eJ(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${N2(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(eJ,"createEventPromise");async function tJ(e){let t=!0,r=0;do await SC(C2*r++),(await O2.findPs(e)).length>0&&(t=!1);while(t&&r<L2);if(t)throw new Error(`process ${e} was not started`)}a(tJ,"checkProcessRunning");function rJ(e,t){let r=NC(e);if(r)return r;let s=bC(e,t);if(s)return s}a(rJ,"checkSchemaTableExist");function NC(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return K_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NC,"checkSchemaExists");function bC(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return K_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bC,"checkTableExists");function sJ(){let e=Y_().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=Y_().utc().unix();return e-t}a(sJ,"getStartOfTomorrowInSeconds");function nJ(){return Y_().utc().format("DD-MM-YYYY")}a(nJ,"getLimitKey");function iJ(e){try{let t=new A2(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(iJ,"backtickASTSchemaItems");function oJ(e){return[e]}a(oJ,"createForkArgs");function aJ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(aJ,"autoCastBoolean");function cJ(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(cJ,"getTableHashAttribute");function uJ(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(uJ,"doesSchemaExist");function lJ(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(lJ,"doesTableExist");function _J(e){try{return JSON.stringify(e)}catch{return e}}a(_J,"stringifyObj");function dJ(e){let t=Y_.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(dJ,"ms_to_time");function fJ(e,t){let r=Qn.basename(e,Qn.extname(e));return Qn.join(Qn.dirname(e),r+t)}a(fJ,"changeExtension");function Op(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=b2(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Op,"getEnvCliRootPath");var gp;function EJ(){if(gp)return gp;let e=Op();Op()&&pC.pathExistsSync(Qn.join(e,Ye.HDB_CONFIG_FILE))&&(gp=!0)}a(EJ,"noBootFile");function hJ(e,t){let r;return e.protocol==="http:"?r=I2:r=y2,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(hJ,"httpRequest");function mJ(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(mJ,"transformReq");function pJ(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(pJ,"convertToMS")});var X=T((Jue,CC)=>{"use strict";var Np=require("fs-extra"),Ts=require("path"),IC=require("os"),SJ=require("properties-reader"),Gc=G(),Hi=$(),ee=y(),W_=Ar(),TJ="Error initializing environment manager",Q_="BOOT_PROPS_FILE_PATH",wC=!1,RJ={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},dn={};CC.exports={BOOT_PROPS_FILE_PATH:Q_,getHdbBasePath:gJ,setHdbBasePath:AJ,get:OJ,initSync:bJ,setProperty:he,initTestEnvironment:yJ};function gJ(){return dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(gJ,"getHdbBasePath");function AJ(e){dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(AJ,"setHdbBasePath");function OJ(e){let t=W_.getConfigValue(e);return t===void 0?dn[e]:t}a(OJ,"get");function he(e,t){RJ[e]&&(dn[e]=t),W_.updateConfigObject(e,t)}a(he,"setProperty");function NJ(){let e;try{e=Hi.getPropsFilePath(),Np.accessSync(e,Np.constants.F_OK|Np.constants.R_OK),wC=!0;let t=SJ(e);return dn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),dn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),dn[Q_]=e,!0}catch{return Gc.trace(`Environment manager found no properties file at ${e}`),!1}}a(NJ,"doesPropFileExist");function bJ(e=!1){try{(wC||NJ()||Hi.noBootFile())&&(W_.initConfig(e),dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=W_.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Gc.error(TJ),Gc.error(t),console.error(t),process.exit(1)}}a(bJ,"initSync");function yJ(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=Ts.join(__dirname,"../../","unitTests");dn[Q_]=Ts.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ts.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,IC.userInfo()?IC.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ts.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ts.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ts.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Hi.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Hi.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Hi.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,Hi.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ts.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Hi.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Q_}. Please check your boot props and settings files`;Gc.fatal(r),Gc.error(t)}}a(yJ,"initTestEnvironment")});var yp={};ve(yp,{loadGQLSchema:()=>CJ,start:()=>bp,startOnMainThread:()=>wJ});function bp({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 Q=function(F){if(F.kind==="NonNullType"){let B=Q(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:Q(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a(Q,"getProperty");let g=S.name.value,b=[],O={table:null,database:null,properties:b};f.set(g,O);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=g),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let w of F.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,b.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}O.typeName=g,g==="Query"&&(h=O)}function p(S){let g=f.get(S.type);g?S.properties=g.properties:S.type==="array"?p(S.elements):IJ.includes(S.type)||(0,LC.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 g of S.properties)p(g);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,z_.dirname)(s),S.tableClass):i.set((0,z_.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let g=f.get(S.type);if(!g)throw new Error(`${S.type} was not found as a Query export`);i.set((0,z_.dirname)(s)+"/"+S.name,g.tableClass)}}}var z_,LC,IJ,wJ,CJ,DC=Te(()=>{z_=require("path");fe();LC=D(Je()),IJ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(bp,"start");wJ=bp,CJ=bp({ensureTable:tt}).handleFile});async function J_(e){return LJ?(xc||(xc=DJ(MJ)),(await(await xc).import(e)).namespace):import(e)}async function DJ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),xc=new Compartment({console,Math,Date,fetch:UJ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,MC.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:Ir,databases:$e})}};let s=await(0,UC.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),xc}function UJ(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 MJ(){return{Resource:Nt,tables:Ir}}var UC,MC,LJ,xc,Ip=Te(()=>{is();fe();UC=require("fs/promises"),MC=require("path"),LJ=!1;a(J_,"secureImport");a(DJ,"getCompartment");a(UJ,"secureOnlyFetch");a(MJ,"getGlobalVars")});var Cp={};ve(Cp,{handleFile:()=>PJ});async function PJ(e,t,r,s){let n=new Map,i=(0,PC.pathToFileURL)(r).toString(),o=await J_(i);u(o.default)&&s.set((0,wp.dirname)(t),o.default),c(o,(0,wp.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 PC,wp,vC=Te(()=>{PC=require("url");Ip();wp=require("path");a(PJ,"handleFile")});var Dp={};ve(Dp,{start:()=>vJ});function vJ({resources:e}){e.set("login",Lp),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Lp,BC=Te(()=>{is();a(vJ,"start");Lp=class extends Nt{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 Mp=T((cle,FC)=>{"use strict";var{Readable:BJ}=require("stream"),HJ=1e4;FC.exports={streamAsJSON(e){return new Up({value:e})}};var Up=class extends BJ{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),HC)}catch(n){yield HC(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);qC(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>HJ?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 qC(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()}};function HC(e){return console.error(e),JSON.stringify(e.toString())}a(HC,"handleError");function qC(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(qC,"when")});var X_=T((lle,GC)=>{"use strict";var qJ=Es();GC.exports={writeTransaction:FJ};function FJ(e,t,r){return qJ.writeTransaction(e,t,r)}a(FJ,"writeTransaction")});var $C=T((fle,VC)=>{"use strict";var GJ=Gr(),xJ=xn(),xC=G(),kJ=xr(),dle=X_(),VJ=require("clone"),vp=require("alasql"),$J=r_(),kC=require("util"),YJ=kC.promisify(xJ.getTableSchema),KJ=kC.promisify(GJ.search),WJ=y(),Pp=$();$J(vp);VC.exports={update:zJ};var QJ="There was a problem performing this update. Please check the logs and try again.";async function zJ({statement:e,hdb_user:t}){let r=await YJ(e.table.databaseid,e.table.tableid),s=JJ(e.columns);Pp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=VJ(n),c=Pp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=vp.parse(u).statements[0],l=await KJ(_),d=XJ(s,l);return jJ(o,d,t)}a(zJ,"update");function JJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vp.compile(`SELECT ${r.expression.toString()} AS [${WJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw xC.error(t),new Error(QJ)}}a(JJ,"createUpdateRecord");function XJ(e,t){return Pp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(XJ,"buildUpdateRecords");async function jJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await kJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){xC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(jJ,"updateRecords")});var KC=T((ple,YC)=>{var ZJ=require("alasql"),e4=Gr(),t4=G(),r4=Es(),Hp=require("util"),Bp=$(),s4=y(),n4=xn(),hle=X_(),mle=xr(),i4="record",o4="successfully deleted",a4=Hp.callbackify(_4),c4=Hp.promisify(e4.search),u4=Hp.promisify(n4.getTableSchema);YC.exports={convertDelete:a4};function l4(e){return`${e.deleted_hashes.length} ${i4}${e.deleted_hashes.length===1?"":"s"} ${o4}`}a(l4,"generateReturnMessage");async function _4({statement:e,hdb_user:t}){let r=await u4(e.table.databaseid,e.table.tableid);Bp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=ZJ.parse(o).statements[0],u={operation:s4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await c4(c);let _=await r4.deleteRecords(u);return Bp.isEmptyOrZeroLength(_.message)&&(_.message=l4(_)),delete _.txn_time,_}catch(_){throw t4.error(_),_.hdb_code?_.message:_}}a(_4,"convertDelete")});var XC=T((Tle,JC)=>{"use strict";var d4=bi(),{hdb_errors:WC}=j(),{getDatabases:QC}=(fe(),Z(Ce));JC.exports={checkSchemaExists:zC,checkSchemaTableExists:f4,schema_describe:d4};async function zC(e){if(!QC()[e])return WC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(zC,"checkSchemaExists");async function f4(e,t){let r=await zC(e);if(r)return r;if(!QC()[e][t])return WC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(f4,"checkSchemaTableExists")});var kc=T((gle,E4)=>{E4.exports={name:"harperdb",version:"4.2.5",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:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"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.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@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:"1.7.4","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.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.1",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.9.9",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.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",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",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",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:"0.27.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.2.2","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 dt=T((yle,mL)=>{"use strict";var It=X();It.initSync();var h4=require("fs-extra"),m4=require("semver"),Yc=require("path"),{monotonicFactory:p4}=require("ulidx"),ZC=p4(),S4=require("util"),eL=require("child_process"),T4=S4.promisify(eL.exec),R4=eL.spawn,ge=ke(),Oe=y(),xp=$(),Yr=G(),j_=un(),g4=X_(),Vc=Ar(),{onMessageByType:A4}=Je(),{isMainThread:O4}=require("worker_threads"),{Encoder:N4,decode:kp}=require("msgpackr"),tL=new N4,{isEmpty:qi}=xp,rL=kr(),b4=48*36e11,y4=5e9;O4&&A4(Oe.ITC_EVENT_TYPES.RESTART,()=>{Rs=void 0,qo=void 0});var{connect:I4,StorageType:sL,RetentionPolicy:nL,AckPolicy:Z_,DeliverPolicy:ed,DiscardPolicy:w4,NatsConnection:Ale,JetStreamManager:Ole,JetStreamClient:Nle,StringCodec:ble,JSONCodec:C4,createInbox:Vp,headers:L4,ErrorCode:jC}=require("nats"),{PACKAGE_ROOT:D4}=y(),U4=kc(),{recordAction:M4}=(_n(),Z(Cc)),iL=C4(),P4="clustering",v4=U4.engines[ge.NATS_SERVER_NAME],B4=Yc.join(D4,"dependencies"),Gp=Yc.join(B4,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),qp,Fp,$c,Bo,Ho;mL.exports={runCommand:oL,checkNATSServerInstalled:H4,createConnection:$p,getConnection:td,getJetStreamManager:Kc,getJetStream:aL,getNATSReferences:Zt,getServerList:F4,createLocalStream:Yp,listStreams:cL,deleteLocalStream:G4,getServerConfig:Wc,listRemoteStreams:x4,viewStream:k4,viewStreamIterator:V4,publishToStream:$4,createWorkQueueStream:Y4,addSourceToWorkStream:lL,request:W4,removeSourceFromWorkStream:dL,reloadNATS:Kp,reloadNATSHub:Q4,reloadNATSLeaf:z4,extractServerName:_L,requestErrorHandler:J4,updateWorkStream:X4,createLocalTableStream:EL,createTableStreams:j4,purgeTableStream:hL,purgeSchemaTableStreams:Z4,getStreamInfo:e3,updateLocalStreams:r3,closeConnection:q4,getJsmServerName:Qc,addNatsMsgHeader:uL,updateIngestStreamConsumer:K4};async function oL(e,t=void 0){let{stdout:r,stderr:s}=await T4(e,{cwd:t});if(s)throw new Error(s.replace(`
6
+ `)},lQ="certificate.pem",_Q="privateKey.pem",dQ="ca.pem";qI.exports={CERTIFICATE_VALUES:uQ,CERTIFICATE_PEM_NAME:lQ,PRIVATEKEY_PEM_NAME:_Q,CA_PEM_NAME:dQ}});var Vm=T((kce,YI)=>{"use strict";var $I=require("fs-extra"),le=require("joi"),fQ=require("os"),{boolean:we,string:Hs,number:yt,array:km}=le.types(),{totalmem:xI}=require("os"),Io=require("path"),EQ=F(),m_=$(),xce=GI(),kI=y(),hQ=xe(),VI="log",mQ="components",pQ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",SQ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",TQ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",RQ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gQ="rootPath config parameter is undefined",AQ="clustering.enabled config parameter is undefined",Ui=yt.min(0).required(),p_=km.items({host:Hs.required(),port:Ui}).empty(null),_n;YI.exports={configValidator:OQ,routesValidator:CQ,route_constraints:p_};function OQ(e){if(_n=e.rootPath,m_.isEmpty(_n))throw gQ;let t=we.required(),r=yt.min(0).max(1e3).empty(null).default(wQ),s=Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(h_),n=Hs.optional().empty(null),i=Hs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=le.string().empty(null).default(h_),c=le.custom(bQ).empty(null).default(h_),u=e.clustering?.enabled;if(m_.isEmpty(u))throw AQ;let _;return u===!0?_=le.object({enabled:t,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:Ui,routes:p_}).required()}).required(),leafNodes:le.object({network:le.object({port:Ui}).required()}).required(),network:le.object({port:Ui}).required()}).required(),leafServer:le.object({network:le.object({port:Ui,routes:p_}).required(),streams:le.object({maxAge:yt.min(120).allow(null).optional(),maxBytes:yt.min(1).allow(null).optional(),maxMsgs:yt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:le.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Hs.optional().empty(null)}).required():_=le.object({enabled:t,tls:le.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),le.object({authentication:le.object({authorizeLocal:we,cacheTTL:yt.required(),enableSessions:we}),analytics:le.object({aggregatePeriod:yt}),componentsRoot:s.optional(),clustering:_,localStudio:le.object({enabled:t}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:we,logSuccessful:we}),file:we.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:we.optional(),compress:we.optional(),interval:Hs.custom(IQ).optional().empty(null),maxSize:Hs.custom(yQ).optional().empty(null),path:Hs.optional().empty(null).default(h_)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:le.object({network:le.object({cors:we.optional(),corsAccessList:km.optional(),headersTimeout:yt.min(1).optional(),keepAliveTimeout:yt.min(1).optional(),port:yt.optional().empty(null),securePort:yt.optional().empty(null),timeout:yt.min(1).optional()}).optional(),tls:le.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:Ui,securePort:Ui}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:le.object({compressionThreshold:yt.optional(),cors:we.optional(),corsAccessList:km.optional(),headersTimeout:yt.min(1).optional(),port:yt.min(0).optional().empty(null),securePort:yt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:le.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:le.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(OQ,"configValidator");function NQ(e){return $I.existsSync(e)?null:`Specified path ${e} does not exist.`}a(NQ,"doesPathExist");function bQ(e,t){le.assert(e,Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=NQ(e);if(r)return t.message(r)}a(bQ,"validatePath");function yQ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(pQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(TQ):e}a(yQ,"validateRotationMaxSize");function IQ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(SQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(RQ):e}a(IQ,"validateRotationInterval");function wQ(e,t){let r=t.state.path.join("."),s=fQ.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||xI();return i=Math.round(Math.min(i,xI())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),EQ.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(wQ,"setDefaultThreads");function h_(e,t){if(!m_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(m_.isEmpty(_n))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Io.join(_n,mQ);case"logging.root":return Io.join(_n,VI);case"clustering.leafServer.streams.path":return Io.join(_n,"clustering","leaf");case"storage.path":let s=Io.join(_n,kI.LEGACY_DATABASES_DIR_NAME);return $I.existsSync(s)?s:Io.join(_n,kI.DATABASES_DIR_NAME);case"logging.rotation.path":return Io.join(_n,VI);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(h_,"setDefaultRoot");function CQ(e){let t=le.object({routes:p_});return hQ.validateBySchema({routes:e},t)}a(CQ,"routesValidator")});var Ar=T((Yce,ew)=>{"use strict";var gr=y(),St=$(),lt=F(),{configValidator:LQ,routesValidator:KI}=Vm(),Xt=require("fs-extra"),DQ=require("yaml"),ms=require("path"),UQ=require("is-number"),QI=require("properties-reader"),MQ=require("lodash"),{handleHDBError:PQ}=j(),{HTTP_STATUS_CODES:vQ,HDB_ERROR_MSGS:S_}=Er(),$ce=require("minimist"),{server:BQ}=(fr(),Z(fi)),{DATABASES_PARAM_CONFIG:Ac,CONFIG_PARAMS:Rr,CONFIG_PARAM_MAP:ps}=gr,HQ="Unable to get config value because config is uninitialized",FQ="Config successfully initialized",qQ="Error backing up config file",GQ="Empty parameter sent to getConfigValue",zI=ms.join(gr.PACKAGE_ROOT,"config","yaml",gr.HDB_DEFAULT_CONFIG_FILE),xQ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",WI={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"},T_,_t,R_;ew.exports={createConfigFile:kQ,getDefaultConfig:VQ,getConfigValue:XI,initConfig:Ym,flattenConfig:wo,updateConfigValue:jI,updateConfigObject:YQ,getConfiguration:QQ,setConfiguration:zQ,readConfigFile:Wm,getClusteringRoutes:JQ,initOldConfig:ZI,getConfigFromFile:XQ,getConfigFilePath:Mi,addConfig:jQ,deleteConfigFromFile:ZQ,getConfigObj:ez};function kQ(e){let t=Yn(zI);T_=wo(t.toJSON());let r;for(let o in e){let c=ps[o.toLowerCase()];if(c===Rr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=$m(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&JI(t,r),Km(t);let s=t.toJSON();_t=wo(s);let n=t.getIn(["rootPath"]),i=ms.join(n,gr.HDB_CONFIG_FILE);Xt.createFileSync(i),Xt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(kQ,"createConfigFile");function JI(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!St.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Ac.TABLES))for(let i in s[n][Ac.TABLES])for(let o in s[n][Ac.TABLES][i]){let c=s[n][Ac.TABLES][i][o],u=[Rr.DATABASES,n,Ac.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=[Rr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(JI,"setSchemasConfig");function VQ(e){if(T_===void 0){let r=Yn(zI);T_=wo(r.toJSON())}let t=ps[e.toLowerCase()];if(t!==void 0)return T_[t.toLowerCase()]}a(VQ,"getDefaultConfig");function XI(e){if(e==null){lt.error(GQ);return}if(_t===void 0){lt.trace(HQ);return}let t=ps[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(XI,"getConfigValue");function Mi(e=St.getPropsFilePath()){let t=St.getEnvCliRootPath();return t?ms.join(t,gr.HDB_CONFIG_FILE):QI(e).get(gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Mi,"getConfigFilePath");function Ym(e=!1){if(_t===void 0||e){let t;if(!St.noBootFile()){t=St.getPropsFilePath();try{Xt.accessSync(t,Xt.constants.F_OK|Xt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Mi(t),s;if(r.includes("config/settings.js"))try{ZI(r);return}catch(i){if(i.code!==gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Yn(r)}catch(i){if(i.code===gr.NODE_ERROR_CODES.ENOENT){lt.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 lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}$Q(s,r),Km(s);let n=s.toJSON();if(BQ.config=n,_t=wo(n),_t.logging_rotation_rotate)for(let i in WI)_t[i]&&lt.error(`Config ${WI[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(FQ)}}a(Ym,"initConfig");function $Q(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ms.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ms.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ms.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Xt.writeFileSync(t,String(e)))}a($Q,"checkForUpdatedConfig");function Km(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=LQ(t);if(r.error)throw S_.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)}a(Km,"validateConfig");function YQ(e,t){_t===void 0&&(_t={});let r=ps[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a(YQ,"updateConfigObject");function jI(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&Ym();let o=XI(ps.hdb_root),c=ms.join(o,gr.HDB_CONFIG_FILE),u=Yn(c),_;if(r===void 0&&e.toLowerCase()===Rr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ps[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=$m(f,t);u.setIn([...E],h)}else for(let f in r){let E=ps[f.toLowerCase()];if(E===Rr.HTTP_SECUREPORT&&r[f]===_t[Rr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Rr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[Rr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Rr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=$m(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(g){lt.error(g)}}}_&&JI(u,_),Km(u);let l=u.getIn(["rootPath"]),d=ms.join(l,gr.HDB_CONFIG_FILE);s===!0&&KQ(c,l),Xt.writeFileSync(d,String(u)),n&&(_t=wo(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(jI,"updateConfigValue");function KQ(e,t){try{let r=ms.join(t,"backup",`${gr.HDB_CONFIG_FILE}.bak`);Xt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(qQ),lt.error(r)}}a(KQ,"backupConfigFile");var WQ=["databases"];function wo(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)),R_=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])&&!WQ.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;!Rr[u.toUpperCase()]&&ps[u]&&(n[ps[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(wo,"flattenConfig");function $m(e,t){if(e===Rr.CLUSTERING_NODENAME||e===Rr.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(UQ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||St.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 St.autoCast(t)}a($m,"castConfigValue");function QQ(){let e=St.getPropsFilePath(),t=Mi(e);return Yn(t).toJSON()}a(QQ,"getConfiguration");async function zQ(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return jI(void 0,void 0,n,!0),xQ}catch(i){throw typeof i=="string"||i instanceof String?PQ(i,i,vQ.BAD_REQUEST,void 0,void 0,!0):i}}a(zQ,"setConfiguration");function Wm(){let e=St.getPropsFilePath();try{Xt.accessSync(e,Xt.constants.F_OK|Xt.constants.R_OK)}catch(s){if(!St.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Mi(e);return Yn(t).toJSON()}a(Wm,"readConfigFile");function Yn(e){return DQ.parseDocument(Xt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Yn,"parseYamlDoc");function JQ(){let e=Wm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=St.isEmptyOrZeroLength(t)?[]:t;let r=KI(t);if(r)throw S_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=St.isEmptyOrZeroLength(s)?[]:s;let n=KI(s);if(n)throw S_.CONFIG_VALIDATION(n.message);if(!St.isEmptyOrZeroLength(s)&&!St.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!St.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw S_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JQ,"getClusteringRoutes");function ZI(e){let t=QI(e);_t={};for(let r in ps){let s=t.get(r.toUpperCase());if(St.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ps[r].toLowerCase();n===Rr.LOGGING_ROOT?_t[n]=ms.dirname(s):_t[n]=s}return _t}a(ZI,"initOldConfig");function XQ(e){let t=Wm();return MQ.get(t,e.replaceAll("_","."))}a(XQ,"getConfigFromFile");async function jQ(e,t){let r=Yn(Mi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Xt.writeFile(Mi(),String(r))}a(jQ,"addConfig");function ZQ(e){let t=Mi(St.getPropsFilePath()),r=Yn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ms.join(s,gr.HDB_CONFIG_FILE);Xt.writeFileSync(n,String(r))}a(ZQ,"deleteConfigFromFile");function ez(){return R_||(Ym(),R_)}a(ez,"getConfigObj")});var rw=T((Wce,tw)=>{"use strict";var g_=y(),A_=class{static{a(this,"BaseLicense")}constructor(t=0,r=g_.RAM_ALLOCATION_ENUM.DEFAULT,s=g_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Qm=class extends A_{static{a(this,"ExtendedLicense")}constructor(t=0,r=g_.RAM_ALLOCATION_ENUM.DEFAULT,s=g_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};tw.exports={BaseLicense:A_,ExtendedLicense:Qm}});var Oc=T((zce,cw)=>{"use strict";var Lo=require("fs-extra"),sw=E_(),nw=require("crypto"),tz=require("moment"),rz=require("uuid").v4,qt=F(),Jm=require("path"),sz=$(),Kn=y(),nz=rw().ExtendedLicense,Co="invalid license key format",iz="061183",oz="mofi25",az="aes-256-cbc",cz=16,uz=32,iw=X();iw.initSync();var zm;cw.exports={validateLicense:ow,generateFingerPrint:_z,licenseSearch:aw,getLicense:Ez};function Xm(){return Jm.join(iw.getHdbBasePath(),Kn.LICENSE_KEY_DIR_NAME,Kn.LICENSE_FILE_NAME)}a(Xm,"getLicenseDirPath");function lz(){let e=Xm();return Jm.join(e,Kn.LICENSE_FILE_NAME)}a(lz,"getLicenseFilePath");function jm(){let e=Xm();return Jm.join(e,Kn.REG_KEY_FILE_NAME)}a(jm,"getFingerPrintFilePath");async function _z(){let e=jm();try{return await Lo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await dz();throw qt.error(`Error writing fingerprint file to ${e}`),qt.error(t),new Error("There was an error generating the fingerprint")}}a(_z,"generateFingerPrint");async function dz(){let e=rz(),t=sw.hash(e),r=jm();try{await Lo.mkdirp(Xm()),await Lo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw qt.error(`Error writing fingerprint file to ${r}`),qt.error(s),new Error("There was an error generating the fingerprint")}return t}a(dz,"writeFingerprint");function ow(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Kn.RAM_ALLOCATION_ENUM.DEFAULT,version:Kn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return qt.error("empty license key passed to validate."),r;let s=jm(),n=!1;try{n=Lo.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=Lo.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(oz),c=o[1];c=Buffer.concat([Buffer.from(c)],cz);let u=Buffer.concat([Buffer.from(i)],uz),_=nw.createDecipheriv(az,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=fz(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Co),qt.error(Co),new Error(Co)}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(Co),qt.error(Co),new Error(Co)}else r.exp_date=l;r.exp_date<tz().valueOf()&&(r.valid_date=!1),sw.validate(o[1],`${iz}${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||qt.error("Invalid licence"),r}a(ow,"validateLicense");function fz(e,t){try{let r=nw.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{qt.warn("Check old license failed")}}a(fz,"checkOldLicense");function aw(){let e=new nz,t=[];try{t=Lo.readFileSync(lz(),"utf-8").split(Kn.NEW_LINE)}catch(r){r.code==="ENOENT"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(sz.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ow(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){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=Kn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return zm=e,e}a(aw,"licenseSearch");async function Ez(){return zm||await aw(),zm}a(Ez,"getLicense")});var kr=T((eue,Nw)=>{"use strict";var dw="username is required",fw="nothing to update, must supply active, role or password to update",Ew="password cannot be an empty string",hw="If role is specified, it cannot be empty.",mw="active must be true or false";Nw.exports={addUser:Oz,alterUser:Nz,dropUser:yz,getSuperUser:Lz,userInfo:Iz,listUsers:N_,listUsersExternal:wz,setUsersToGlobal:Uo,findAndValidateUser:Aw,getClusterUser:Dz,USERNAME_REQUIRED:dw,ALTERUSER_NOTHING_TO_UPDATE:fw,EMPTY_PASSWORD:Ew,EMPTY_ROLE:hw,ACTIVE_BOOLEAN:mw};var pw=xr(),hz=Di(),tp=E_(),Sw=BI(),Tw=Gr(),rp=on(),Or=$(),Rw=require("validate.js"),de=F(),{promisify:mz}=require("util"),sp=ln(),uw=y(),lw=ke(),pz=Ar(),Xce=X(),jce=Oc(),Sz=Ti(),{table:Zce}=(fe(),Z(Ce)),{handleHDBError:Fs,hdb_errors:Tz}=j(),{HTTP_STATUS_CODES:qs,AUTHENTICATION_ERROR_MSGS:Zm,HDB_ERROR_MSGS:Do}=Tz,{UserEventMsg:np}=us(),ep=require("lodash"),{server:ip}=(fr(),Z(fi)),Rz=F();ip.getUser=Aw;var gw={username:!0,active:!0,role:!0,password:!0},_w=new Map,O_=Tw.searchByValue,gz=Tw.searchByHash,Az=mz(hz.delete);async function Oz(e){let t=Rw.cleanAttributes(e,gw),r=Sw.addUserValidation(t);if(r)throw Fs(new Error,r.message,qs.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 O_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Fs(new Error,Do.ROLE_NAME_NOT_FOUND(t.role),qs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Fs(new Error,Do.DUP_ROLES_FOUND(t.role),qs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=sp.encrypt(t.password)),t.password=tp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await pw.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await Uo()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Fs(new Error,Do.USER_ALREADY_EXISTS(t.username),qs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],rp.signalUserChange(new np(process.pid)),`${c.username} successfully added`}a(Oz,"addUser");async function Nz(e){let t=Rw.cleanAttributes(e,gw);if(Or.isEmptyOrZeroLength(t.username))throw new Error(dw);if(Or.isEmptyOrZeroLength(t.password)&&Or.isEmptyOrZeroLength(t.role)&&Or.isEmptyOrZeroLength(t.active))throw new Error(fw);if(!Or.isEmpty(t.password)&&Or.isEmptyOrZeroLength(t.password.trim()))throw new Error(Ew);if(!Or.isEmpty(t.active)&&!Or.isBoolean(t.active))throw new Error(mw);let r=bz(t.username);if(!Or.isEmpty(t.password)&&!Or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=sp.encrypt(t.password)),t.password=tp.hash(t.password)),t.role==="")throw new Error(hw);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 O_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=Do.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Fs(new Error,c,qs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Do.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Fs(new Error,c,qs.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 pw.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await Uo()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return rp.signalUserChange(new np(process.pid)),n}a(Nz,"alterUser");function bz(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bz,"isClusterUser");async function yz(e){try{let t=Sw.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Or.isEmpty(global.hdb_users.get(e.username)))throw Fs(new Error,Do.USER_NOT_EXIST(e.username),qs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Az(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await Uo()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return rp.signalUserChange(new np(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yz,"dropUser");async function Iz(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ep.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await gz(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(Iz,"userInfo");async function wz(){let e;try{e=await N_()}catch(t){throw de.error("Got an error listing users."),de.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(wz,"listUsersExternal");async function N_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await O_(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=ep.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 O_(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=ep.cloneDeep(o),o.role=r[o.role],Cz(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Or.errorizeMessage(e)}return null}a(N_,"listUsers");function Cz(e){try{if(!e){de.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(Sz)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(Cz,"appendSystemTablesToRole");async function Uo(){try{let e=await N_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(Uo,"setUsersToGlobal");async function Aw(e,t,r=!0){global.hdb_users||await Uo();let s=global.hdb_users.get(e);if(!s)throw Fs(new Error,Zm.GENERIC_AUTH_FAIL,qs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Fs(new Error,Zm.USER_INACTIVE,qs.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(_w.get(t)===s.password)return n;if(tp.validate(s.password,t))_w.set(t,s.password);else throw Fs(new Error,Zm.GENERIC_AUTH_FAIL,qs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Aw,"findAndValidateUser");async function Lz(){global.hdb_users||await Uo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(Lz,"getSuperUser");async function Dz(){let e=await N_(),t=pz.getConfigFromFile(uw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Or.isEmpty(r)&&r?.role?.role===uw.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=sp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lw.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lw.SERVER_SUFFIX.ADMIN,r}a(Dz,"getClusterUser");var Ow=[];ip.invalidateUser=function(e){for(let t of Ow)try{t(e)}catch(r){Rz.error("Error invalidating user",r)}};ip.onInvalidatedUser=function(e){Ow.push(e)}});var bc=T((nue,ww)=>{"use strict";var Pi=F(),Nr=y(),Uz=DO(),rue=kn(),sue=yi(),Mz=kr(),{validateEvent:bw}=us(),Nc=Es(),Pz=require("process"),{resetDatabases:vz}=(fe(),Z(Ce)),Bz={[Nr.ITC_EVENT_TYPES.SCHEMA]:Hz,[Nr.ITC_EVENT_TYPES.USER]:Iw};async function Hz(e){let t=bw(e);if(t){Pi.error(t);return}Pi.trace("ITC schemaHandler received schema event:",e),await Uz(e.message),await Fz(e.message)}a(Hz,"schemaHandler");async function Fz(e){try{Nc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Nc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Nc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=vz();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Pi.error(t)}}a(Fz,"syncSchemaMetadata");var yw=[];async function Iw(e){try{try{Nc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Nc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Pi.warn(r)}let t=bw(e);if(t){Pi.error(t);return}Pi.trace(`ITC userHandler ${Nr.HDB_ITC_CLIENT_PREFIX}${Pz.pid} received user event:`,e),await Mz.setUsersToGlobal();for(let r of yw)r()}catch(t){Pi.error(t)}}a(Iw,"userHandler");Iw.addListener=function(e){yw.push(e)};ww.exports=Bz});var us=T((lue,Lw)=>{"use strict";var oue=F(),op=$(),qz=y(),{ITC_ERRORS:yc}=Er(),{parentPort:aue,threadId:Gz,isMainThread:xz,workerData:cue}=require("worker_threads"),{onMessageFromWorkers:kz,broadcast:uue,broadcastWithAcknowledgement:Vz}=Je();Lw.exports={sendItcEvent:$z,validateEvent:Cw,SchemaEventMsg:Yz,UserEventMsg:Kz};var b_;kz(async(e,t)=>{b_=b_||bc(),Cw(e),b_[e.type]&&await b_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function $z(e){return!xz&&e.message&&(e.message.originator=Gz),Vz(e)}a($z,"sendItcEvent");function Cw(e){if(typeof e!="object")return yc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||op.isEmpty(e.type))return yc.MISSING_TYPE;if(!e.hasOwnProperty("message")||op.isEmpty(e.message))return yc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||op.isEmpty(e.message.originator))return yc.MISSING_ORIGIN;if(qz.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return yc.INVALID_EVENT(e.type)}a(Cw,"validateEvent");function Yz(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(Yz,"SchemaEventMsg");function Kz(e){this.originator=e}a(Kz,"UserEventMsg")});var on=T((fue,Pw)=>{"use strict";var Dw=y(),due=$(),y_=F(),Uw=fO(),Mo,{sendItcEvent:Mw}=us();function Wz(e){try{y_.trace("signalSchemaChange called with message:",e),Mo=Mo||bc();let t=new Uw(Dw.ITC_EVENT_TYPES.SCHEMA,e);return Mo.schema(t),Mw(t)}catch(t){y_.error(t)}}a(Wz,"signalSchemaChange");function Qz(e){try{y_.trace("signalUserChange called with message:",e),Mo=Mo||bc();let t=new Uw(Dw.ITC_EVENT_TYPES.USER,e);return Mo.user(t),Mw(t)}catch(t){y_.error(t)}}a(Qz,"signalUserChange");Pw.exports={signalSchemaChange:Wz,signalUserChange:Qz}});var Lc={};ve(Lc,{addAnalyticsListener:()=>Cc,recordAction:()=>br,recordActionBinary:()=>Vr,setAnalyticsEnabled:()=>zz});function zz(e){$w=e}function br(e,t,r,s,n){if(!$w)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=C_.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},C_.set(i,o)}I_||Jz()}function Vr(e,t,r,s,n){br(!!e,t,r,s,n)}function Cc(e){Ww.push(e)}function Jz(){I_=performance.now(),setTimeout(async()=>{let e=performance.now()-I_;I_=0;let t=[],r={time:Date.now(),period:e,threadId:vi.threadId,metrics:t};for(let[n,i]of C_){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 Qw){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 zw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:vi.threadId,byThread:!0,...s});for(let n of Ww)n(t);C_=new Map,vi.parentPort?vi.parentPort.postMessage({type:Kw,report:r}):jw({report:r})},Yw).unref()}async function Xz(e,t=6e4){let r=up(),s=Jw(),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:g}=p;for(let b of S||[]){let{path:O,method:Y,type:Q,metric:G,count:w,total:K,distribution:B,threads:x,...te}=b;w||(w=1);let be=G+(O?"-"+O:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[g];if(Pe)se=Pe;else{se.threads[g]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let Pe in te){let Ot=te[Pe];typeof Ot=="number"&&(se[Pe]=(se[Pe]*Pt+Ot*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},b),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[g]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await zw()}for(let h of u){let{path:p,method:S,type:g,metric:b,count:O,total:Y,distribution:Q,threads:G,...w}=h;G=G.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of G){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=G.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,Ot)=>Pe.value>Ot.value?1:-1);let g=S.count-1,b=[],O=0,Y=0,Q;for(let Pe of Qw){let Ot=g*Pe;for(;O<Ot;)Q=p[Y++],O+=Q.count,Y===1&&O--;let ts=p[Y>1?Y-2:0];Q||(Q=p[0]),b.push(Q.value-(Q.value-ts.value)*(O-Ot)/Q.count)}let[G,w,K,B,x,te,be,se,Pt]=b;Object.assign(S,{p1:G,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,w_.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,w_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-vw,active:E-Bw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}vw=f,Bw=E}async function Hw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function up(){return Fw||(Fw=tt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Jw(){return qw||(qw=tt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function eJ(){Xw=!0;let e=(0,wc.get)(cp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Xz(Yw,e),await Hw(up(),jz),await Hw(Jw(),Zz)},Math.min(e/2,2147483647)).unref()}function jw(e,t){let r=e.report;r.threadId=t?.threadId||vi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Gw+=s.mean*s.count);r.totalBytesProcessed=Gw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(xw.get(t))}),xw.set(t,t.performance.eventLoopUtilization())),r.id=(0,w_.getNextMonotonicTime)(),up().primaryStore.put(r.id,r),Xw||eJ(),tJ&&(Zw=sJ(r))}async function sJ(e){if(await Zw,!Wn){let r=(0,Ic.dirname)((0,Vw.getLogFilePath)());try{Wn=await(0,ap.open)((0,Ic.join)(r,"analytics.log"),"r+")}catch{Wn=await(0,ap.open)((0,Ic.join)(r,"analytics.log"),"w+")}}let t=(await Wn.stat()).size;if(t>rJ){let r=Buffer.alloc(t);await Wn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Wn.write(r,{position:0}),await Wn.truncate(r.length),t=r.length}await Wn.write(JSON.stringify(e)+`
8
+ `,t)}var vi,kw,Vw,Ic,ap,w_,wc,cp,C_,$w,I_,Yw,Kw,Ww,Qw,vw,Bw,zw,jz,Zz,Fw,qw,Xw,Gw,xw,tJ,Zw,Wn,rJ,dn=Te(()=>{vi=require("worker_threads"),kw=D(Je());fe();Vw=D(F()),Ic=require("path"),ap=require("fs/promises"),w_=D(hr()),wc=D(X()),cp=D(y());fr();(0,wc.initSync)();C_=new Map,$w=(0,wc.get)(cp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(zz,"setAnalyticsEnabled");a(br,"recordAction");ct.recordAnalytics=br;a(Vr,"recordActionBinary");I_=0,Yw=1e3,Kw="analytics-report",Ww=[];a(Cc,"addAnalyticsListener");Qw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Jz,"sendAnalytics");a(Xz,"aggregation");vw=0,Bw=0,zw=a(()=>new Promise(setImmediate),"rest");a(Hw,"cleanup");jz=36e5,Zz=31536e6;a(up,"getRawAnalyticsTable");a(Jw,"getAnalyticsTable");(0,kw.setChildListenerByType)(Kw,jw);a(eJ,"startScheduledTasks");Gw=0,xw=new Map,tJ=!1;a(jw,"recordAnalytics");rJ=1e6;a(sJ,"logAnalytics")});var Ep={};ve(Ep,{coerceType:()=>P_,makeTable:()=>H_,setServerUtilities:()=>dJ,updateResource:()=>Pc});function H_(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=[]),lO(i,u);let S=WE(i,s,u),g=0,b,O,Y,Q={},G=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Pt=2,Pe={},Ot={},ts=864e5,Rg,Xu,NH=10,bH=6;E&&Og();class at extends Nt{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=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(I=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),U.length>0)if(U.length===1){let M=U[0];return(V,z,ie)=>{if(V?.source!==M)return M[I](z,ie,V)}}else return(M,V,z)=>{let ie=[];for(let k of U){if(M?.source===k)break;ie.push(k[I](V,z,M))}return Promise.all(ie)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(I=>{if(R[I]&&(!R[I].reliesOnPrototype||R.prototype[I]))return(U,M,V)=>{if(!U?.source)return R[I](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},Ot={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,U=a(async(M,V)=>{let z=M.value,ie=M.table?$e[c][M.table]:at;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[ie.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await ie.getResource(M.id,V,Dc);switch(M.type){case"put":return k._writeUpdate(z,Dc);case"delete":return k._writeDelete(Dc);case"publish":return k._writePublish(z,Dc);case"invalidate":return k.invalidate(Dc);default:Ve.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Bi.getWorkerIndex)()):(0,Bi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ie;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ve.error("Bad subscription event",k);continue}if(k.source=m,ie)if(k.beginTxn)ie.resolve();else{U(k,ie);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(di=>di.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(tt({table:n,database:c,attributes:ne,origin:"cluster"}),Bc.signalSchemaChange(new Hc.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(ie=k,U(k,k),new Promise(ne=>{ie.resolve=ne})):U(k,k)});I&&(await Ne,Bc.signalUserChange(new Hc.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ve.error("error in subscription handler",Ee)}}}catch(M){Ve.error(M)}})(),this}static getResource(m,A,C){let R=super.getResource(m,A,C);if(m!=null){Na(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),I=Mn(A),U=I.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return gg(m,A,{transaction:U},L,M=>{if(M?Pc(R,M):R[Re]=null,A.onlyIfCached&&A.noCacheStore){if(!R.doesExist())throw new xs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=dE(m,M,A,R);if(V)return I?.disregardReadTxn(),R[_p]=!0,fp(V,z=>(Pc(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=dE(this[Ie],this[Gs],this[me]);if(m)return this[_p]=!0,fp(m,A=>{this[Gs]=A,this[Re]=A.value,this[M_]=A.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,ts=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ts=ts||(d+f)/4,fE()}static enableAuditing(m=!0){E=m,m&&Og(),at.audit=m}static coerceId(m){return m===""?null:P_(m,Q)}static async dropTable(){if(delete $e[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.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));Bc.signalSchemaChange(new Hc.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[os])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=Zu(m);if(C?.read){let R=C.attribute_permissions;if(R){A||(A={});let L=A.select;if(L){let I=dp(R,"read");A.select=L.filter(U=>I[U])}else A.select=R.filter(I=>I.read).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=Zu(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=dp(R,"update");for(let I in A)if(!L[I])return!1;for(let I of R){let U=I.attribute_name;!I.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[os]){let C=Zu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=dp(R,"insert");for(let I in A)if(!L[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Zu(m)?.delete}update(m,A){if(!Mn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Na(C),Mn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Gs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,A,C),beforeIntermediate:Ot.invalidate?.bind(this,A,C),commit:(L,I)=>{if(I?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Gs],L,L_,E,this[me],0,"invalidate")}})}static evict(m,A,C){let R=this.Source,L;if(!((O||E)&&(!A||(L=i.getEntry(m),!L||!A)||L.version!==C))){if(O){if(i.hasLock(m,L.version))return;let I;for(let U in r)I||(I={}),I[U]=A[U];if(I){S(m,I,L,C,D_,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{ju(m,A,null)}),E)S(m,null,L,C,D_,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,oC.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],R=Mn(C),L=this[Ie];Na(L);let I=this[Gs];this[lp]=!0;let U={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!m[tC]||fl(m)){if(this.validate(m),C?.source?m=Ga(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Ga(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:Ot.put&&(()=>Ot.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Pc(this,V));let ie=V?.value;this[lp]=!1,Ve.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(ju(L,ie,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[os]){for await(let A of this.search(m))(await at.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let A=Mn(this[me]),C=this[Ie];Na(C);let R=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:Ot.delete?.bind(this,R,C),commit:(L,I,U)=>{let M=I?.value;U&&(R&&I?.version>(R.lastModified||0)&&(R.lastModified=I.version),Pc(this,I)),!(I?.version>L)&&(ju(this[Ie],M),Ve.trace("Write delete entry",C,L),E||h?(S(C,null,this[Gs],L,0,E,this[me],0,"delete"),E||fE()):i.remove(this[Ie]))}}),!0}search(m){let A=Mn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(R=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,xs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>P_(Ne,Ee)):P_(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,iC.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Mc.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Mc.SEARCH_TYPES.CONTAINS||Ee===Mc.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Mc.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=oJ:k.estimated_count=iJ}return k.estimated_count}));let I=A.getReadTxn();I.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:U?.length<4}:{start:!1,transaction:I,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):U_.SKIP);else{let k=vE(M,I,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(BE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=vE(ne,I,C,at,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=ie(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,I.done()};let z=this[me];function ie(k,Ee){let Ne=Ee?.length,ne={transaction:I,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(di,Fe){if(vt&&Fe!==void 0){let _r=!z.onlyIfCached&&dE(Fe,di,z,this);if(_r)return _r.then(wH=>Vt(wH))}let ys=di?.value;if(!ys)return U_.SKIP;for(let _r=0;_r<Ne;_r++)if(!Ee[_r](ys))return U_.SKIP;return ys}return a(Vt,"processEntry"),k.map(di=>gg(di,z,ne,!1,Vt))}return a(ie,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=cO(at,this[Ie]??null,function(I,U,M,V){try{let z=U.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ve.error(z)}},m.startTime,this[os]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[os]){if(L){if(R)throw new xs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=mr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||nC(C,V))&&A.send({id:V,timestamp:I,...M}),A.startTime=I}}else if(R){let I=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=mr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||nC(C,z)){let ie=V.getValue(i);if(I.push({id:z,timestamp:U,value:ie,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ve.error("Error getting history entry",U,V)}for(let U=I.length;U>0;)A.send(I[--U]);I[0]&&(A.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,v_.MAXIMUM_KEY],versions:!0}))U&&A.send({id:I,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let I=this[Gs]?.localTime;if(Ve.trace("Subscription from",L,"from",C),L<I){let U=[],M=I;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=mr(V),ie=z.getValue(i);U.push({id:C,value:ie,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)A.send(U[--V]);A.startTime=I}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[M_],timestamp:this[Gs]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[Re]||this[lp])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Mn(this[me]),R=this[Ie]||null;Na(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Gs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:Ot.publish?.bind(this,L,R,m),commit:(I,U,M)=>{U===void 0&&h&&!E&&fE(),S(R,U?.value??null,U,U?.version||I,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((R,L,I)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(A||(A=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],ie=C(R[z.name],z,I+"."+z.name);ie&&(R[z.name]=ie)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(A||(A=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(A||(A=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(A||(A=[])).push(`Property ${I} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(A||(A=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof R!="boolean"&&(A||(A=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(A||(A=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,I+"[*]");z&&(R[U]=z)}}else(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(A||(A=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let I=p[R],U=C(m[I.name],I,I.name);U&&(m[I.name]=U)}if(A)throw new xs.ClientError(A.join(". "))}getUpdatedTime(){return this[M_]}wasLoadedFromSource(){return O?!!this[_p]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new xs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new xs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,R=1e3,L;A>C&&!m?.exactCount&&(L=R);let I=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&I++;if(L){let U=I;I=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&I++;let M=L*2,V=(I+U)/M,z=Math.pow((I-U+1)/L/2,2)+V*(1-V)/M,ie=Math.max(Math.sqrt(z)*A,1),k=Math.round(V*A),Ee=Math.max(k-1.96*ie,0),Ne=Math.min(k+1.96*ie,A),ne=Math.pow(10,Math.round(Math.log10(ie)));return ne>k&&(ne=ne/10),I=Math.round(k/ne)*ne,{recordCount:I,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:I}}static updatedAttributes(){hl(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Uc(),mr(R).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:A})){await Uc();let L=mr(R);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let R=C.localTime,L=0;do{await Uc();let I=u.get(R);if(I){let U=mr(I);A.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return A.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let yH=at.prototype;return yH[tC]=!0,d&&at.setTTLExpiration(d/1e3),B&&IH(),at;function ju(W,m,A){let C;for(let R in r){let L=r[R],I=L.isIndexing,U=A?.[R],M=m?.[R];if(U===M&&!I)continue;C=!0;let V=(0,vc.getIndexedValues)(M);if(V){eC&&L.prefetch(V.map(z=>({key:z,value:W})),sC);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,vc.getIndexedValues)(U),V){eC&&L.prefetch(V.map(z=>({key:z,value:W})),sC);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(ju,"updateIndices");function Na(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>rC)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,v_.writeKey)(W,lJ,0)>rC)throw new Error("Primary key size is too large: "+W.length);return!0}a(Na,"checkValidId");function gg(W,m,A,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return R(null,W);let I=i.getEntry(W,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),R(I,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((I,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>bH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<NH&&Pt++}a(M,"prefetch");function V(){try{I(L())}catch(z){U(z)}}a(V,"load")})}a(gg,"loadLocalRecord");function Zu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return _J;let A=m[c],C,R=A?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(Zu,"getTablePermissions");function dE(W,m,A,C){if(O){let R;if(A.noCache?R=!0:(m?(!m.value||m.metadataFlags&(L_|D_)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,Vr(!R,"cache-hit",n)),R){let L=Ag(W,m,A).then(I=>(I?.value?.[Re]&&Ve.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(I=>Ve.warn(I)),A?.onlyIfCached&&!C.doesExist())throw new xs.ServerError("Entry is not cached",504);return}else return L}}}a(dE,"ensureLoadedFromSource");function Mn(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new mi,m.lmdbDb=i,m;m=A}while(!0)}else return new Sl}a(Mn,"txnForContext");async function Ag(W,m,A){let C=m?.metadataFlags,R=m?.version,L,I;if(!i.attemptLock(W,R,()=>{clearTimeout(I);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(L_|D_)?L(Ag(W,i.getEntry(W),A)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(W,R)},uJ)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:R,source:null,resourceCache:A?.resourceCache},V=A?.responseHeaders;return new Promise((z,ie)=>{let k;fp(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let _r of at.sources)if(_r.get&&(!_r.get.reliesOnPrototype||_r.prototype.get)&&(M.source=_r,ne=await _r.get(W,M),ne))break;Vt=C&L_;let Fe=M.lastModified||Vt&&R;vt=Vt||Fe>R||!U,Fe||(Fe=(0,vc.getNextMonotonicTime)());let ys=performance.now()-Ne;if(br(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=Fe,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:Fe,value:ne})}catch(Fe){Fe.message+=` while resolving record ${W} for ${n}`,U&&((Fe.code==="ECONNRESET"||Fe.code==="ECONNREFUSED"||Fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(Fe.statusCode===500||Fe.statusCode===502||Fe.statusCode===503||Fe.statusCode===504))?(z({version:R,value:U}),Ve.trace(Fe.message,"(returned stale record)")):ie(Fe),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Mn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(Fe,ys)=>{if(ys?.version!==R)return;let _r=ju(W,U,ne);ne?(Ot.put?.(M,W,ne),S(W,ne,ys,Fe,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(Ot.delete?.(M,W),E||h?S(W,null,ys,Fe,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ve.error("Error committing cache update",Ee)})})}a(Ag,"getFromSource");function fE(){if(ts!==Rg&&(Rg=ts,(0,Bi.getWorkerIndex)()===(0,Bi.getWorkerCount)()-1)){if(Xu&&clearTimeout(Xu),!ts)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/ts)*ts+W.getTime(),A=a(C=>{Ve.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Xu=setTimeout(()=>G=G.then(async()=>{if(A(Math.max(C+ts,Date.now())),i.rootStore.status!=="open"){clearTimeout(Xu);return}Ve.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:I,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&U+cJ<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,I,U),R++),await Uc();Ve.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ve.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(fE,"scheduleCleanup");function Og(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(Og,"addDeleteRemoval");function IH(){(0,Bi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&at.evict(A,C.value,C.version),await Uc()}}catch(W){Ve.error("Error in evicting old records",W)}},aJ).unref()}a(IH,"runRecordExpirationEviction")}function dp(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 sC(){}function dJ(e){oC=e}function P_(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!fJ.test(e)&&(e+="Z"),new Date(e)):r?e:(0,B_.autoCast)(e)}function nC(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 fp(e,t,r){return e?.then?e.then(t,r):t(e)}function Pc(e,t){e[Gs]=t,e[Re]=t?.value??null,e[M_]=t?.version}var Ss,U_,vc,iC,Mc,Fc,xs,Bc,Hc,Ve,v_,Bi,B_,nJ,oC,iJ,oJ,aJ,cJ,eC,uJ,M_,tC,Gs,lp,_p,Dc,L_,D_,lJ,rC,_J,Fue,fJ,Uc,F_=Te(()=>{Ss=D(y()),U_=require("lmdb"),vc=D(hr()),iC=require("lodash");is();ME();Mc=D(ze()),Fc=D(X());_O();xs=D(j()),Bc=D(on()),Hc=D(us());fe();Rl();Ve=D(F());pl();pi();v_=require("ordered-binary"),Bi=D(Je());lo();B_=D($());$a();dn();nJ=new Uint8Array(9);nJ[8]=192;iJ=1e8,oJ=1e7,aJ=6e4,cJ=864e5;Fc.initSync();eC=Fc.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uJ=1e4,M_=Symbol.for("version"),tC=Symbol.for("incremental-update"),Gs=Symbol("entry"),lp=Symbol("is-saving"),_p=Symbol("loaded-from-source"),Dc={isNotification:!0,ensureLoaded:!1},L_=1,D_=8,lJ=Buffer.allocUnsafeSlow(8192),rC=1978,_J={read:!0,insert:!0,update:!0,delete:!0},Fue=(0,B_.convertToMS)(Fc.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(H_,"makeTable");a(dp,"attributesAsObject");a(sC,"noop");a(dJ,"setServerUtilities");fJ=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(P_,"coerceType");a(nC,"isDescendantId");Uc=a(()=>new Promise(setImmediate),"rest");a(fp,"when");a(Pc,"updateResource")});var Ce={};ve(Ce,{database:()=>pc,databases:()=>$e,dropDatabase:()=>Om,dropTableMeta:()=>TJ,getDatabases:()=>_s,getTables:()=>EJ,onUpdatedTable:()=>Tp,readMetaDb:()=>qc,resetDatabases:()=>hJ,table:()=>tt,tables:()=>Ir});function EJ(){return V_||_s(),Ir||{}}function _s(){if(V_)return $e;V_=!0,Bo=new Map;let e=(0,Gt.getHdbBasePath)()&&(0,qe.join)((0,Gt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),t=(0,Gt.get)(wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Gt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,yr.existsSync)(e)?e:(0,qe.join)((0,Gt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,yr.existsSync)(e))for(let r of(0,yr.readdirSync)(e,{withFileTypes:!0})){let s=(0,qe.basename)(r.name,".mdb");r.isFile()&&(0,qe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qc((0,qe.join)(e,r.name),null,s)}if((0,yr.existsSync)((0,vo.getBaseSchemaPath)())){for(let r of(0,yr.readdirSync)((0,vo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,qe.join)((0,vo.getBaseSchemaPath)(),r.name),n=(0,qe.join)((0,vo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,yr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,qe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,qe.join)(n,i.name);qc((0,qe.join)(s,i.name),(0,qe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,yr.existsSync)(n))for(let o of(0,yr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,qe.extname)(o.name).toLowerCase()===".mdb"&&qc((0,qe.join)(n,o.name),(0,qe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,qe.join)(c.path,(0,qe.basename)(o+".mdb"));(0,yr.existsSync)(u)&&qc(u,o,r,null,!0)}}for(let r in $e){let s=Bo.get(r);if(s){let n=$e[r];r.includes("delete")&&$r.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||($r.trace(`delete table class ${i}`),delete n[i])}else if(delete $e[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[$_]}}return Bo=null,$e}}function hJ(){V_=!1;for(let[,e]of Qn)e.needsDeletion=!0;_s();for(let[e,t]of Qn)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Qn.delete(e));return $e}function qc(e,t,r=pp,s,n){let i=new hp.default(e,!1);try{let o=Qn.get(e);o?o.needsDeletion=!1:(o=(0,G_.open)(i),Qn.set(e,o));let c=new Hi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(q_.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,yr.existsSync)(s)&&(i.path=s,_=(0,G_.open)(i),_.isLegacy=!0):_=Cl(o));let l=lC(r),d=l[$_],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 g=f.get(p);g||f.set(p,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.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 x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){$r.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let g=l[E],b={},O=[],Y,Q,G=typeof S.audit=="boolean"?S.audit:(0,Gt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(g)b=g.indices,O=g.attributes,g.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Po)||0)&&u.putSync(Po,Y+1):(S.tableId=Y=u.get(Po),Y||(Y=1),u.putSync(Po,Y+1),u.putSync(S.key,S));let x=new Hi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Il(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!b[x.name]){let be=new Hi.default(!x.is_hash_attribute,x.is_hash_attribute);b[x.name]=o.openDB(x.key,be)}let te=O.find(be=>be.name===x.name);te?O.splice(O.indexOf(te),1,x):O.push(x)}}catch(te){$r.error("Error trying to update attribute",x,O,b,te)}}if(!g){g=_C(l,E,H_({primaryStore:Q,auditStore:_,audit:G,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let x of Sp)x(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function lC(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=Ir:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),Bo&&!Bo.has(e)){let r=new Set;t[$_]=r,Bo.set(e,r)}return t}function _C(e,t,r){return e[t]=r,r}function pc({database:e,table:t}){e||(e=pp),_s();let r=lC(e),s=(0,qe.join)((0,Gt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),n=(0,Gt.get)(wr.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,Gt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||((0,yr.existsSync)(s)?s:(0,qe.join)((0,Gt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME));let o=(0,qe.join)(s,(i?t:e)+".mdb"),c=Qn.get(o);if(!c){let u=new hp.default(o,!1);c=(0,G_.open)(u),Qn.set(o,c)}return c}async function Om(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e];for(let r in t){let n=t[r].primaryStore.rootStore;Qn.delete(n.path),n.status==="open"&&(await n.close(),await aC.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[$_]}delete $e[e]}function tt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=pp);let l=pc({database:t,table:e}),d=$e[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 g=new Hi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let b,O;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 w=l.auditStore;w||(w=Cl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Gt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),$r.trace(`${e} table loading, opening primary store`);let K=new Hi.default(!1,!0),B=e+"/",x=Il(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,g),x.tableId=S.get(Po),x.tableId||(x.tableId=1),S.putSync(Po,x.tableId+1),h.tableId=x.tableId,f=_C(d,e,H_({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,b=!0,G(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,g)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){G(),b=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),b=!0,G(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Hi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gc.workerData?.restartNumber)&&(b=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gc.workerData?.restartNumber)&&(b=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(b=!0,G(),S.put(K,w))}}finally{O&&O()}if(b&&(f.schemaVersion++,f.updatedAttributes()),$r.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=SJ(f,Q,Y):b&&x_.signalSchemaChange(new k_.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,b)for(let w of Sp)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),$r.trace(`${e} table loaded`),f;function G(){O||l.transactionSync(()=>({then(w){O=w}}))}a(G,"startTxn")}async function SJ(e,t,r){try{let s=e.schemaVersion;await x_.signalSchemaChange(new k_.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,cC.getIndexedValues)(l[h]);if(p)for(let S=0,g=p.length;S<g;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,$r.error(f)}),Gc.workerData&&Gc.workerData.restartNumber!==uC.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>mJ?await n:u>pJ&&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 x_.signalSchemaChange(new k_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){$r.error("Error in indexing",s)}}function TJ({table:e,database:t}){let r=pc({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 Tp(e){Sp.push(e)}var Gt,q_,G_,qe,yr,vo,Hi,hp,wr,aC,mp,cC,x_,k_,Gc,$r,uC,pp,$_,Ir,$e,Po,Sp,V_,Qn,Bo,mJ,pJ,fe=Te(()=>{Gt=D(X()),q_=D(ze()),G_=require("lmdb"),qe=require("path"),yr=require("fs"),vo=D(Be());F_();Hi=D(Ll()),hp=D(Ul()),wr=D(y()),aC=D(require("fs-extra")),mp=require("../index"),cC=D(hr()),x_=D(on()),k_=D(us()),Gc=require("worker_threads"),$r=D(F()),uC=D(Je());lo();$a();pp="data",$_=Symbol("defined-tables");(0,Gt.initSync)();Ir=Object.create(null),$e=Object.create(null);(0,mp._assignPackageExport)("databases",$e);(0,mp._assignPackageExport)("tables",Ir);Po=Symbol.for("next-table-id"),Sp=[],Qn=new Map;a(EJ,"getTables");a(_s,"getDatabases");a(hJ,"resetDatabases");a(qc,"readMetaDb");a(lC,"ensureDB");a(_C,"setTable");a(pc,"database");a(Om,"dropDatabase");a(tt,"table");mJ=1e3,pJ=10;a(SJ,"runIndexing");a(TJ,"dropTableMeta");a(Tp,"onUpdatedTable")});var $=T((Wue,bC)=>{"use strict";var zn=require("path"),mC=require("fs-extra"),jt=F(),dC=require("fs-extra"),Y_=require("os"),RJ=require("net"),gJ=require("recursive-iterator"),Ye=y(),AJ=rA(),fC=require("papaparse"),K_=require("moment"),{inspect:OJ}=require("util"),EC=require("is-number"),Kue=require("lodash"),NJ=require("minimist"),bJ=require("https"),yJ=require("http"),{hdb_errors:W_}=j(),IJ=/^((\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)))$/,pC=require("util").promisify(setTimeout),wJ=100,CJ=5,LJ="",DJ=4,hC={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};bC.exports={isEmpty:Cr,isEmptyOrZeroLength:ks,arrayHasEmptyValues:PJ,arrayHasEmptyOrZeroLengthValues:vJ,buildFolderPath:BJ,isBoolean:SC,errorizeMessage:UJ,stripFileExtension:FJ,autoCast:qJ,autoCastJSON:TC,autoCastJSONDeep:gp,removeDir:GJ,compareVersions:xJ,isCompatibleDataVersion:kJ,escapeRawValue:VJ,unescapeValue:$J,stringifyProps:YJ,timeoutPromise:WJ,isClusterOperation:zJ,getClusterUser:XJ,checkGlobalSchemaTable:JJ,getHomeDir:gC,getPropsFilePath:KJ,promisifyPapaParse:jJ,removeBOM:AC,createEventPromise:ZJ,checkProcessRunning:e2,checkSchemaTableExist:t2,checkSchemaExists:OC,checkTableExists:NC,getStartOfTomorrowInSeconds:r2,getLimitKey:s2,isObject:HJ,isNotEmptyAndHasValue:MJ,autoCasterIsNumberCheck:RC,backtickASTSchemaItems:n2,isPortTaken:QJ,createForkArgs:i2,autoCastBoolean:o2,async_set_timeout:pC,getTableHashAttribute:a2,doesSchemaExist:c2,doesTableExist:u2,stringifyObj:l2,ms_to_time:_2,changeExtension:d2,getEnvCliRootPath:Ap,noBootFile:f2,httpRequest:E2,transformReq:h2,convertToMS:m2,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function UJ(e){return e instanceof Error?e:new Error(e)}a(UJ,"errorizeMessage");function Cr(e){return e==null}a(Cr,"isEmpty");function MJ(e){return!Cr(e)&&(e||e===0||e===""||SC(e))}a(MJ,"isNotEmptyAndHasValue");function ks(e){return Cr(e)||e.length===0||e.size===0}a(ks,"isEmptyOrZeroLength");function PJ(e){if(Cr(e))return!0;for(let t=0;t<e.length;t++)if(Cr(e[t]))return!0;return!1}a(PJ,"arrayHasEmptyValues");function vJ(e){if(ks(e))return!0;for(let t=0;t<e.length;t++)if(ks(e[t]))return!0;return!1}a(vJ,"arrayHasEmptyOrZeroLengthValues");function BJ(...e){try{return e.join(zn.sep)}catch{console.error(e)}}a(BJ,"buildFolderPath");function SC(e){return Cr(e)?!1:e===!0||e===!1}a(SC,"isBoolean");function HJ(e){return Cr(e)?!1:typeof e=="object"}a(HJ,"isObject");function FJ(e){return ks(e)?LJ:e.slice(0,-DJ)}a(FJ,"stripFileExtension");function qJ(e){return Cr(e)||e===""||typeof e!="string"?e:hC[e]!==void 0?hC[e]:RC(e)===!0?Number(e):IJ.test(e)?new Date(e):e}a(qJ,"autoCast");function TC(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(TC,"autoCastJSON");function gp(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=gp(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=gp(r);s!==r&&(e[t]=s)}return e}else return TC(e)}a(gp,"autoCastJSONDeep");function RC(e){if(e.startsWith("0.")&&EC(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&EC(e))}a(RC,"autoCasterIsNumberCheck");async function GJ(e){if(ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await dC.emptyDir(e),await dC.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(GJ,"removeDir");function xJ(e,t){if(ks(e)){jt.info("Invalid current version sent as parameter.");return}if(ks(t)){jt.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(xJ,"compareVersions");function kJ(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(kJ,"isCompatibleDataVersion");function VJ(e){if(Cr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a(VJ,"escapeRawValue");function $J(e){if(Cr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a($J,"unescapeValue");function YJ(e,t){if(Cr(e))return jt.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+Y_.EOL}!ks(s)&&s[0]===";"?r+=" "+s+n+Y_.EOL:ks(s)||(r+=s+"="+n+Y_.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(YJ,"stringifyProps");function gC(){let e;try{e=Y_.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(gC,"getHomeDir");function KJ(){let e=zn.join(gC(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return mC.existsSync(e)||(e=zn.join(__dirname,"../","hdb_boot_properties.file")),e}a(KJ,"getPropsFilePath");function WJ(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(WJ,"timeoutPromise");async function QJ(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=RJ.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(QJ,"isPortTaken");function zJ(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(zJ,"isClusterOperation");function JJ(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return W_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return W_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(JJ,"checkGlobalSchemaTable");function XJ(e,t){if(Cr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Cr(e)||ks(e)){jt.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){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(XJ,"getClusterUser");function jJ(){fC.parsePromise=function(e,t,r){return new Promise(function(s,n){fC.parse(e,{header:!0,transformHeader:AC,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(jJ,"promisifyPapaParse");function AC(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(AC,"removeBOM");function ZJ(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${OJ(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(ZJ,"createEventPromise");async function e2(e){let t=!0,r=0;do await pC(wJ*r++),(await AJ.findPs(e)).length>0&&(t=!1);while(t&&r<CJ);if(t)throw new Error(`process ${e} was not started`)}a(e2,"checkProcessRunning");function t2(e,t){let r=OC(e);if(r)return r;let s=NC(e,t);if(s)return s}a(t2,"checkSchemaTableExist");function OC(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return W_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OC,"checkSchemaExists");function NC(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return W_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(NC,"checkTableExists");function r2(){let e=K_().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=K_().utc().unix();return e-t}a(r2,"getStartOfTomorrowInSeconds");function s2(){return K_().utc().format("DD-MM-YYYY")}a(s2,"getLimitKey");function n2(e){try{let t=new gJ(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(n2,"backtickASTSchemaItems");function i2(e){return[e]}a(i2,"createForkArgs");function o2(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(o2,"autoCastBoolean");function a2(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(a2,"getTableHashAttribute");function c2(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(c2,"doesSchemaExist");function u2(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(u2,"doesTableExist");function l2(e){try{return JSON.stringify(e)}catch{return e}}a(l2,"stringifyObj");function _2(e){let t=K_.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(_2,"ms_to_time");function d2(e,t){let r=zn.basename(e,zn.extname(e));return zn.join(zn.dirname(e),r+t)}a(d2,"changeExtension");function Ap(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=NJ(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Ap,"getEnvCliRootPath");var Rp;function f2(){if(Rp)return Rp;let e=Ap();Ap()&&mC.pathExistsSync(zn.join(e,Ye.HDB_CONFIG_FILE))&&(Rp=!0)}a(f2,"noBootFile");function E2(e,t){let r;return e.protocol==="http:"?r=yJ:r=bJ,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(E2,"httpRequest");function h2(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(h2,"transformReq");function m2(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(m2,"convertToMS")});var X=T((zue,wC)=>{"use strict";var Op=require("fs-extra"),Ts=require("path"),yC=require("os"),p2=require("properties-reader"),xc=F(),Fi=$(),ee=y(),Q_=Ar(),S2="Error initializing environment manager",z_="BOOT_PROPS_FILE_PATH",IC=!1,T2={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},fn={};wC.exports={BOOT_PROPS_FILE_PATH:z_,getHdbBasePath:R2,setHdbBasePath:g2,get:A2,initSync:N2,setProperty:he,initTestEnvironment:b2};function R2(){return fn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(R2,"getHdbBasePath");function g2(e){fn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(g2,"setHdbBasePath");function A2(e){let t=Q_.getConfigValue(e);return t===void 0?fn[e]:t}a(A2,"get");function he(e,t){T2[e]&&(fn[e]=t),Q_.updateConfigObject(e,t)}a(he,"setProperty");function O2(){let e;try{e=Fi.getPropsFilePath(),Op.accessSync(e,Op.constants.F_OK|Op.constants.R_OK),IC=!0;let t=p2(e);return fn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),fn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),fn[z_]=e,!0}catch{return xc.trace(`Environment manager found no properties file at ${e}`),!1}}a(O2,"doesPropFileExist");function N2(e=!1){try{(IC||O2()||Fi.noBootFile())&&(Q_.initConfig(e),fn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Q_.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){xc.error(S2),xc.error(t),console.error(t),process.exit(1)}}a(N2,"initSync");function b2(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=Ts.join(__dirname,"../../","unitTests");fn[z_]=Ts.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ts.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,yC.userInfo()?yC.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ts.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ts.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ts.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Fi.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Fi.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Fi.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,Fi.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ts.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Fi.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${z_}. Please check your boot props and settings files`;xc.fatal(r),xc.error(t)}}a(b2,"initTestEnvironment")});var bp={};ve(bp,{loadGQLSchema:()=>w2,start:()=>Np,startOnMainThread:()=>I2});function Np({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 Q=function(G){if(G.kind==="NonNullType"){let B=Q(G.type);return B.nullable=!1,B}if(G.kind==="ListType")return{type:"array",elements:Q(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.loc.startToken}),K};a(Q,"getProperty");let g=S.name.value,b=[],O={table:null,database:null,properties:b};f.set(g,O);for(let G of S.directives){if(G.name.value==="table"){for(let w of G.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=g),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(G.name.value==="sealed"&&(O.sealed=!0),G.name.value==="export"){O.export=!0;for(let w of G.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let Y=!1;for(let G of S.fields){let w=Q(G.type);w.name=G.name.value,b.push(w);for(let K of G.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}O.typeName=g,g==="Query"&&(h=O)}function p(S){let g=f.get(S.type);g?S.properties=g.properties:S.type==="array"?p(S.elements):y2.includes(S.type)||(0,CC.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 g of S.properties)p(g);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,J_.dirname)(s),S.tableClass):i.set((0,J_.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let g=f.get(S.type);if(!g)throw new Error(`${S.type} was not found as a Query export`);i.set((0,J_.dirname)(s)+"/"+S.name,g.tableClass)}}}var J_,CC,y2,I2,w2,LC=Te(()=>{J_=require("path");fe();CC=D(Je()),y2=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(Np,"start");I2=Np,w2=Np({ensureTable:tt}).handleFile});async function X_(e){return C2?(kc||(kc=L2(U2)),(await(await kc).import(e)).namespace):import(e)}async function L2(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),kc=new Compartment({console,Math,Date,fetch:D2,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,UC.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:Ir,databases:$e})}};let s=await(0,DC.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),kc}function D2(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 U2(){return{Resource:Nt,tables:Ir}}var DC,UC,C2,kc,yp=Te(()=>{is();fe();DC=require("fs/promises"),UC=require("path"),C2=!1;a(X_,"secureImport");a(L2,"getCompartment");a(D2,"secureOnlyFetch");a(U2,"getGlobalVars")});var wp={};ve(wp,{handleFile:()=>M2});async function M2(e,t,r,s){let n=new Map,i=(0,MC.pathToFileURL)(r).toString(),o=await X_(i);u(o.default)&&s.set((0,Ip.dirname)(t),o.default),c(o,(0,Ip.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 MC,Ip,PC=Te(()=>{MC=require("url");yp();Ip=require("path");a(M2,"handleFile")});var Lp={};ve(Lp,{start:()=>P2});function P2({resources:e}){e.set("login",Cp),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Cp,vC=Te(()=>{is();a(P2,"start");Cp=class extends Nt{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 Up=T((ale,FC)=>{"use strict";var{Readable:v2}=require("stream"),B2=1e4;FC.exports={streamAsJSON(e){return new Dp({value:e})}};var Dp=class extends v2{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),BC)}catch(n){yield BC(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);HC(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>B2?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 HC(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()}};function BC(e){return console.error(e),JSON.stringify(e.toString())}a(BC,"handleError");function HC(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(HC,"when")});var j_=T((ule,qC)=>{"use strict";var H2=Es();qC.exports={writeTransaction:F2};function F2(e,t,r){return H2.writeTransaction(e,t,r)}a(F2,"writeTransaction")});var VC=T((dle,kC)=>{"use strict";var q2=Gr(),G2=kn(),GC=F(),x2=xr(),_le=j_(),k2=require("clone"),Pp=require("alasql"),V2=s_(),xC=require("util"),$2=xC.promisify(G2.getTableSchema),Y2=xC.promisify(q2.search),K2=y(),Mp=$();V2(Pp);kC.exports={update:Q2};var W2="There was a problem performing this update. Please check the logs and try again.";async function Q2({statement:e,hdb_user:t}){let r=await $2(e.table.databaseid,e.table.tableid),s=z2(e.columns);Mp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=k2(n),c=Mp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Pp.parse(u).statements[0],l=await Y2(_),d=J2(s,l);return X2(o,d,t)}a(Q2,"update");function z2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Pp.compile(`SELECT ${r.expression.toString()} AS [${K2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw GC.error(t),new Error(W2)}}a(z2,"createUpdateRecord");function J2(e,t){return Mp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(J2,"buildUpdateRecords");async function X2(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){GC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(X2,"updateRecords")});var YC=T((mle,$C)=>{var j2=require("alasql"),Z2=Gr(),e4=F(),t4=Es(),Bp=require("util"),vp=$(),r4=y(),s4=kn(),Ele=j_(),hle=xr(),n4="record",i4="successfully deleted",o4=Bp.callbackify(l4),a4=Bp.promisify(Z2.search),c4=Bp.promisify(s4.getTableSchema);$C.exports={convertDelete:o4};function u4(e){return`${e.deleted_hashes.length} ${n4}${e.deleted_hashes.length===1?"":"s"} ${i4}`}a(u4,"generateReturnMessage");async function l4({statement:e,hdb_user:t}){let r=await c4(e.table.databaseid,e.table.tableid);vp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=vp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=j2.parse(o).statements[0],u={operation:r4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await a4(c);let _=await t4.deleteRecords(u);return vp.isEmptyOrZeroLength(_.message)&&(_.message=u4(_)),delete _.txn_time,_}catch(_){throw e4.error(_),_.hdb_code?_.message:_}}a(l4,"convertDelete")});var JC=T((Sle,zC)=>{"use strict";var _4=yi(),{hdb_errors:KC}=j(),{getDatabases:WC}=(fe(),Z(Ce));zC.exports={checkSchemaExists:QC,checkSchemaTableExists:d4,schema_describe:_4};async function QC(e){if(!WC()[e])return KC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(QC,"checkSchemaExists");async function d4(e,t){let r=await QC(e);if(r)return r;if(!WC()[e][t])return KC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(d4,"checkSchemaTableExists")});var Vc=T((Rle,f4)=>{f4.exports={name:"harperdb",version:"4.2.6",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:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"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.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@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:"1.7.4","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.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.1",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.9.9",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.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",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",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",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:"0.27.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.2.2","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 dt=T((ble,hL)=>{"use strict";var It=X();It.initSync();var E4=require("fs-extra"),h4=require("semver"),Kc=require("path"),{monotonicFactory:m4}=require("ulidx"),jC=m4(),p4=require("util"),ZC=require("child_process"),S4=p4.promisify(ZC.exec),T4=ZC.spawn,ge=ke(),Oe=y(),Gp=$(),Yr=F(),Z_=ln(),R4=j_(),$c=Ar(),{onMessageByType:g4}=Je(),{isMainThread:A4}=require("worker_threads"),{Encoder:O4,decode:xp}=require("msgpackr"),eL=new O4,{isEmpty:qi}=Gp,tL=kr(),N4=48*36e11,b4=5e9;A4&&g4(Oe.ITC_EVENT_TYPES.RESTART,()=>{Rs=void 0,qo=void 0});var{connect:y4,StorageType:rL,RetentionPolicy:sL,AckPolicy:ed,DeliverPolicy:td,DiscardPolicy:I4,NatsConnection:gle,JetStreamManager:Ale,JetStreamClient:Ole,StringCodec:Nle,JSONCodec:w4,createInbox:kp,headers:C4,ErrorCode:XC}=require("nats"),{PACKAGE_ROOT:L4}=y(),D4=Vc(),{recordAction:U4}=(dn(),Z(Lc)),nL=w4(),M4="clustering",P4=D4.engines[ge.NATS_SERVER_NAME],v4=Kc.join(L4,"dependencies"),qp=Kc.join(v4,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),Hp,Fp,Yc,Ho,Fo;hL.exports={runCommand:iL,checkNATSServerInstalled:B4,createConnection:Vp,getConnection:rd,getJetStreamManager:Wc,getJetStream:oL,getNATSReferences:Zt,getServerList:F4,createLocalStream:$p,listStreams:aL,deleteLocalStream:q4,getServerConfig:Qc,listRemoteStreams:G4,viewStream:x4,viewStreamIterator:k4,publishToStream:V4,createWorkQueueStream:$4,addSourceToWorkStream:uL,request:K4,removeSourceFromWorkStream:_L,reloadNATS:Yp,reloadNATSHub:W4,reloadNATSLeaf:Q4,extractServerName:lL,requestErrorHandler:z4,updateWorkStream:J4,createLocalTableStream:fL,createTableStreams:X4,purgeTableStream:EL,purgeSchemaTableStreams:j4,getStreamInfo:Z4,updateLocalStreams:t3,closeConnection:H4,getJsmServerName:zc,addNatsMsgHeader:cL,updateIngestStreamConsumer:Y4};async function iL(e,t=void 0){let{stdout:r,stderr:s}=await S4(e,{cwd:t});if(s)throw new Error(s.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(oL,"runCommand");async function H4(){try{await h4.access(Gp)}catch{return!1}let e=await oL(`${Gp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return m4.eq(t,v4)}a(H4,"checkNATSServerInstalled");async function $p(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await rL.getClusterUser();if(qi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Yr.trace("create nats connection called");let i=await I4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a($p,"createConnection");async function q4(){Rs&&(await Rs.drain(),Rs=void 0,Bo=void 0,Ho=void 0,qo=void 0)}a(q4,"closeConnection");var Rs,qo;async function td(){return qo||(qo=$p(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Rs=await qo),Rs||qo}a(td,"getConnection");async function Kc(){if(Bo)return Bo;qi(Rs)&&await td();let{domain:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bo=await Rs.jetstreamManager({domain:e,timeout:6e4}),Bo}a(Kc,"getJetStreamManager");async function aL(){if(Ho)return Ho;qi(Rs)&&await td();let{domain:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ho=Rs.jetstream({domain:e,timeout:6e4}),Ho}a(aL,"getJetStream");async function Zt(){let e=Rs||await td(),t=Bo||await Kc(),r=Ho||await aL();return{connection:e,jsm:t,js:r}}a(Zt,"getNATSReferences");async function F4(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await rL.getClusterUser(),n=await $p(t,r,s),i=Vp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=iL.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 xp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(F4,"getServerList");async function Yp(e,t){let{jsm:r}=await Zt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sL.File,retention:nL.Limits,subjects:t,discard:w4.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Yp,"createLocalStream");async function cL(){let{jsm:e}=await Zt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(cL,"listStreams");async function G4(e){let{jsm:t}=await Zt();await t.streams.delete(e)}a(G4,"deleteLocalStream");async function x4(e){let{connection:t}=await Zt(),r=[],s=Vp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(iL.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(x4,"listRemoteStreams");async function k4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=ZC(),o={durable_name:i,ack_policy:Z_.Explicit};t&&(o.deliver_policy=ed.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=kp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(k4,"viewStream");async function*V4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=ZC(),o={durable_name:i,ack_policy:Z_.Explicit};t&&(o.deliver_policy=ed.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=kp(_.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(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(V4,"viewStreamIterator");async function $4(e,t,r,s){Yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=uL(s,r);let{js:n}=await Zt(),i=await Qc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:tL.encode(s);try{Yr.trace(`publishToStream publishing to subject: ${o}`),M4(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 fL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Yr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Yp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a($4,"publishToStream");function uL(e,t){t===void 0&&(t=L4());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(uL,"addNatsMsgHeader");function Wc(e){e=e.toLowerCase();let t=Yc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),P4);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return qi(Fp)&&(Fp={port:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Yc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),Fp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return qi(qp)&&(qp={port:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:Yc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),qp;Yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Wc,"getServerConfig");async function Y4(e){let{jsm:t}=await Zt(),r=await Qc();try{await t.streams.add({name:e.stream_name,storage:sL.File,retention:nL.Limits,max_age:b4,max_bytes:y4,subjects:[`${ge.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:Z_.Explicit,durable_name:e.durable_name,deliver_policy:ed.All,max_ack_pending:1e4});else throw s}}a(Y4,"createWorkQueueStream");async function K4(){let{jsm:e}=await Zt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Z_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:ed.All,max_ack_pending:1e4}))}a(K4,"updateIngestStreamConsumer");async function lL(e,t,r){let{jsm:s}=await Zt(),n=await s.streams.info(t),i=_L(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=j_.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:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(lL,"addSourceToWorkStream");function _L(e){return e.split(".")[1]}a(_L,"extractServerName");async function dL(e,t,r){let{jsm:s}=await Zt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=j_.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(dL,"removeSourceFromWorkStream");async function W4(e,t,r=6e4,s=Vp()){if(!xp.isObject(t))throw new Error("data param must be an object");let n=tL.encode(t),{connection:i}=await Zt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return kp(c.data)}a(W4,"request");function Kp(e){return new Promise(async(t,r)=>{let s=R4(Gp,["--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(Kp,"reloadNATS");async function Q4(){let{pid_file_path:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Kp(e)}a(Q4,"reloadNATSHub");async function z4(){let{pid_file_path:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Kp(e)}a(z4,"reloadNATSLeaf");function J4(e,t,r){let s;switch(e.code){case jC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case jC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(J4,"requestErrorHandler");async function X4(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await fL(async()=>{e.subscribe===!0?await lL(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await dL(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(X4,"updateWorkStream");function fL(e){return g4.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(fL,"exclusiveLock");async function EL(e,t){let r=j_.createNatsTableStreamName(e,t),s=await Qc(),n=t3(e,t,s);await Yp(r,[n])}a(EL,"createLocalTableStream");async function j4(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(j4,"createTableStreams");async function hL(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=j_.createNatsTableStreamName(e,t),{jsm:s}=await Zt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Yr.warn(r);else throw r}}a(hL,"purgeTableStream");async function Z4(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await hL(e,t[r])}a(Z4,"purgeSchemaTableStreams");async function e3(e){return(await Kc()).streams.info(e)}a(e3,"getStreamInfo");function t3(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(t3,"createSubjectName");async function Qc(){if($c)return $c;if($c=(await Kc())?.nc?.info?.server_name,$c===void 0)throw new Error("Unable to get jetstream manager server name");return $c}a(Qc,"getJsmServerName");async function r3(){let e=await Kc(),t=await Qc(),r=await cL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=s3(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(r3,"updateLocalStreams");function s3(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.get(Oe.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(s3,"updateStreamLimits")});var id=T((Cle,RL)=>{"use strict";var Fo=Fl(),Go=XC(),n3=G(),i3=require("uuid").v4,wle=require("clone"),sd=on(),xo=y(),o3=require("util"),zn=Es(),{handleHDBError:er,hdb_errors:a3}=j(),{HDB_ERROR_MSGS:rd,HTTP_STATUS_CODES:tr}=a3,{SchemaEventMsg:nd}=us(),pL=dt(),{getDatabases:c3}=(fe(),Z(Ce)),{transformReq:ko}=$();RL.exports={createSchema:u3,createSchemaStructure:SL,createTable:l3,createTableStructure:TL,createAttribute:h3,dropSchema:_3,dropTable:d3,dropAttribute:f3,getBackup:m3};async function u3(e){let t=await SL(e);return sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(u3,"createSchema");async function SL(e){let t=Fo.schema_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(ko(e),!await Go.checkSchemaExists(e.schema))throw er(new Error,rd.SCHEMA_EXISTS_ERR(e.schema),tr.BAD_REQUEST,xo.LOG_LEVELS.ERROR,rd.SCHEMA_EXISTS_ERR(e.schema),!0);return await zn.createSchema(e),`database '${e.schema}' successfully created`}a(SL,"createSchemaStructure");async function l3(e){return ko(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TL(e)}a(l3,"createTable");async function TL(e){let t=Fo.create_table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(Fo.validateTableResidence(e.residence),!await Go.checkSchemaTableExists(e.schema,e.table))throw er(new Error,rd.TABLE_EXISTS_ERR(e.schema,e.table),tr.BAD_REQUEST,xo.LOG_LEVELS.ERROR,rd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:i3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await zn.createTable(s,e);else throw er(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",tr.BAD_REQUEST);else await zn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(TL,"createTableStructure");async function _3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Fo.schema_object(e),s=t??r;if(s)throw er(s,s.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let n=await Go.checkSchemaExists(e.schema);if(n)throw er(new Error,n,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,n,!0);let i=await Go.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await zn.dropSchema(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await pL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(_3,"dropSchema");async function d3(e){let t=Fo.table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let r=await Go.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,r,!0);return await zn.dropTable(e),await pL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(d3,"dropTable");async function f3(e){let t=Fo.attribute_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let r=await Go.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw er(new Error,"You cannot drop a hash attribute",tr.BAD_REQUEST,void 0,void 0,!0);if(xo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw er(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,tr.BAD_REQUEST,void 0,void 0,!0);try{return await zn.dropAttribute(e),E3(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw n3.error(`Got an error deleting attribute ${o3.inspect(e)}.`),s}}a(f3,"dropAttribute");function E3(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(E3,"dropAttributeFromGlobal");async function h3(e){ko(e);let t=c3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw er(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,tr.BAD_REQUEST,void 0,void 0,!0);return await zn.createAttribute(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(h3,"createAttribute");function m3(e){return zn.getBackup(e)}a(m3,"getBackup")});var AL=T((Dle,gL)=>{"use strict";var{OPERATIONS_ENUM:p3}=y(),Wp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=p3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};gL.exports=Wp});var Qp=T((Ple,IL)=>{"use strict";var S3=Es(),Mle=AL(),od=$(),ad=y(),T3=X(),{handleHDBError:OL,hdb_errors:R3}=j(),{HDB_ERROR_MSGS:NL,HTTP_STATUS_CODES:bL}=R3,g3=Object.values(ad.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),yL="To use this operation audit log must be enabled in harperdb-config.yaml";IL.exports=A3;async function A3(e){if(od.isEmpty(e.schema))throw new Error(NL.SCHEMA_REQUIRED_ERR);if(od.isEmpty(e.table))throw new Error(NL.TABLE_REQUIRED_ERR);if(!T3.get(ad.CONFIG_PARAMS.LOGGING_AUDITLOG))throw OL(new Error,yL,bL.BAD_REQUEST,ad.LOG_LEVELS.ERROR,yL,!0);let t=od.checkSchemaTableExist(e.schema,e.table);if(t)throw OL(new Error,t,bL.NOT_FOUND,ad.LOG_LEVELS.ERROR,t,!0);if(!od.isEmpty(e.search_type)&&g3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await S3.readAuditLog(e)}a(A3,"readAuditLog")});var CL=T((Ble,wL)=>{"use strict";var{OPERATIONS_ENUM:O3}=y(),zp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=O3.GET_BACKUP,this.schema=t,this.table=r}};wL.exports=zp});var UL=T((Gle,DL)=>{"use strict";var N3=Es(),qle=CL(),Jp=$(),b3=y(),Fle=X(),{handleHDBError:y3,hdb_errors:I3}=j(),{HDB_ERROR_MSGS:LL,HTTP_STATUS_CODES:w3}=I3;DL.exports=C3;async function C3(e){if(Jp.isEmpty(e.schema))throw new Error(LL.SCHEMA_REQUIRED_ERR);if(Jp.isEmpty(e.table))throw new Error(LL.TABLE_REQUIRED_ERR);let t=Jp.checkSchemaTableExist(e.schema,e.table);if(t)throw y3(new Error,t,w3.NOT_FOUND,b3.LOG_LEVELS.ERROR,t,!0);return await N3.getBackup(read_audit_log_object)}a(C3,"getBackup")});var qL=T((kle,HL)=>{var Jn=require("validate.js"),PL=xe(),Vo=y(),{handleHDBError:L3,hdb_errors:D3}=j(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:U3}=D3,Xp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),M3={STRUCTURE_USER:"structure_user"},ML=Object.values(Vo.ROLE_TYPES_ENUM),P3="attribute_permissions",v3="attribute_name",{PERMS_CRUD_ENUM:$o}=Vo,B3=[P3,...Object.values($o)],vL=[$o.READ,$o.INSERT,$o.UPDATE],H3=[v3,...vL];function q3(e){let t=Xp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,BL(e,t)}a(q3,"addRoleValidation");function F3(e){let t=Xp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,BL(e,t)}a(F3,"alterRoleValidation");function G3(e){let t=Xp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,PL.validateObject(e,t)}a(G3,"dropRoleValidation");var x3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function BL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)x3.includes(s[o])||n.push(s[o]);n.length>0&&st(je.INVALID_ROLE_JSON_KEYS(n),r);let i=PL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=k3(e);o&&st(o,r),ML.forEach(c=>{e.permission[c]&&!Jn.isBoolean(e.permission[c])&&st(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(ML.indexOf(o)<0){if(o===M3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(je.SCHEMA_NOT_FOUND(d),r)}continue}st(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(je.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){st(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{B3.includes(l)||st(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values($o).forEach(l=>{Jn.isDefined(_[l])?Jn.isBoolean(_[l])||st(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(je.TABLE_PERM_MISSING(l),r,o,u)}),Jn.isDefined(_.attribute_permissions)){if(!Jn.isArray(_.attribute_permissions)){st(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(je.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=>{!H3.includes(p)&&p!==$o.DELETE&&st(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Jn.isDefined(E.attribute_name)){st(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}vL.forEach(p=>{Jn.isDefined(E[p])?Jn.isBoolean(E[p])||st(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(je.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;st(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return V3(r)}a(BL,"customValidate");HL.exports={addRoleValidation:q3,alterRoleValidation:F3,dropRoleValidation:G3};function k3(e){let{operation:t,permission:r}=e;if(t===Vo.OPERATIONS_ENUM.ADD_ROLE||t===Vo.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 je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Vo.ROLE_TYPES_ENUM.SUPER_USER:Vo.ROLE_TYPES_ENUM.CLUSTER_USER;return je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(k3,"validateNoSUPerms");function V3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:je.ROLE_PERMS_ERROR,...e};return L3(new Error,s,U3.BAD_REQUEST)}else return null}a(V3,"generateRolePermResponse");function st(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(st,"addPermError")});var sS=T(($le,kL)=>{"use strict";var FL=xr(),GL=Gr(),$3=Li(),Zp=qL(),eS=on(),Y3=require("uuid").v4,K3=require("util"),cd=y(),W3=$(),tS=GL.searchByValue,Q3=GL.searchByHash,z3=K3.promisify($3.delete),J3=Ms(),X3=Ao(),{hdb_errors:j3,handleHDBError:Yo}=j(),{HDB_ERROR_MSGS:xL,HTTP_STATUS_CODES:ud}=j3,{UserEventMsg:rS}=us();kL.exports={addRole:Z3,alterRole:eX,dropRole:tX,listRoles:rX};function jp(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(jp,"scrubRoleDetails");async function Z3(e){let t=Zp.addRoleValidation(e);if(t)throw t;e=jp(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 Yo(i)}if(s&&s.length>0)throw Yo(new Error,xL.ROLE_ALREADY_EXISTS(e.role),ud.CONFLICT,void 0,void 0,!0);e.id||(e.id=Y3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FL.insert(n),eS.signalUserChange(new rS(process.pid)),e=jp(e),e}a(Z3,"addRole");async function eX(e){let t=Zp.alterRoleValidation(e);if(t)throw t;e=jp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FL.update(r)}catch(n){throw Yo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Yo(new Error,"Invalid role id",ud.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(eX,"alterRole");async function tX(e){let t=Zp.dropRoleValidation(e);if(t)throw Yo(new Error,t,ud.BAD_REQUEST,void 0,void 0,!0);let r=new X3(cd.SYSTEM_SCHEMA_NAME,cd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await Q3(r));if(s.length===0)throw Yo(new Error,xL.ROLE_NOT_FOUND,ud.NOT_FOUND,void 0,void 0,!0);let n=new J3(cd.SYSTEM_SCHEMA_NAME,cd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(W3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await z3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(tX,"dropRole");async function rX(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(rX,"listRoles")});var KL=T((Kle,YL)=>{"use strict";var sX=X(),Xn=require("joi"),nX=xe(),VL=require("moment"),iX=require("fs-extra"),nS=require("path"),oX=require("lodash"),zc=y(),{LOG_LEVELS:Fi}=y(),aX="YYYY-MM-DD hh:mm:ss",cX=nS.resolve(__dirname,"../logs");YL.exports=function(e){return nX.validateBySchema(e,uX)};var uX=Xn.object({from:Xn.custom($L),until:Xn.custom($L),level:Xn.valid(Fi.NOTIFY,Fi.FATAL,Fi.ERROR,Fi.WARN,Fi.INFO,Fi.DEBUG,Fi.TRACE),order:Xn.valid("asc","desc"),limit:Xn.number().min(1),start:Xn.number().min(0),log_name:Xn.custom(lX)});function $L(e,t){if(VL(e,VL.ISO_8601).format(aX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($L,"validateDatetime");function lX(e,t){if(oX.invert(zc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=sX.get(zc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?zc.LOG_NAMES.HDB:e,i=n===zc.LOG_NAMES.INSTALL?nS.join(cX,zc.LOG_NAMES.INSTALL):nS.join(s,n);return iX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(lX,"validateReadLogPath")});var oS=T((Qle,QL)=>{"use strict";var ld=y(),_X=G(),dX=X(),fX=KL(),iS=require("path"),WL=require("fs-extra"),{once:EX}=require("events"),{handleHDBError:hX,hdb_errors:mX}=j(),{PACKAGE_ROOT:pX}=y(),SX=iS.join(pX,"logs"),TX=1e3,RX=200;QL.exports=gX;async function gX(e){let t=fX(e);if(t)throw hX(t,t.message,mX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=dX.get(ld.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ld.LOG_NAMES.HDB:e.log_name,n=s===ld.LOG_NAMES.INSTALL?iS.join(SX,ld.LOG_NAMES.INSTALL):iS.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?TX: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(WL.statSync(n).size-(h+5)*RX,0));let S=WL.createReadStream(n,{start:p});S.on("error",F=>{_X.error(F)});let g=0,b=[],O="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}O=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=O.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&g<E?g++:F.level===o&&w>=K&&w<=B&&(jn(F,f,b),g++,g===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&g<E?g++:F.level===o&&w>=K&&(jn(F,f,b),g++,g===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&g<E?g++:F.level===o&&w<=B&&(jn(F,f,b),g++,g===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&g<E?g++:w>=K&&w<=B&&(jn(F,f,b),g++,g===h&&S.destroy());break;case i:F.level===o&&g<E?g++:F.level===o&&(jn(F,f,b),g++,g===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&g<E?g++:w>=K&&g>=E&&(jn(F,f,b),g++,g===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(jn(F,f,b),g++,g===h&&S.destroy());break;default:g<E?g++:(jn(F,f,b),g++,g===h&&S.destroy())}}return a(Q,"onLogMessage"),await EX(S,"close"),b}a(gX,"readLog");function jn(e,t,r){t==="desc"?AX(e,r):t==="asc"?OX(e,r):r.push(e)}a(jn,"pushLineToResult");function AX(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(AX,"insertDescending");function OX(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(OX,"insertAscending")});var dd=T((Zle,jL)=>{"use strict";var aS=require("joi"),{string:_d,boolean:zL,date:NX}=aS.types(),bX=xe(),{validateSchemaExists:Jle,validateTableExists:Xle,validateSchemaName:jle}=Ds(),yX=y(),IX=ke(),JL=X();JL.initSync();var wX=_d.invalid(JL.get(yX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(IX.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(),XL={operation:_d.valid("add_node","update_node"),node_name:wX,subscriptions:aS.array().items({table:_d.optional(),schema:_d.required(),subscribe:zL.required(),publish:zL.required().custom(LX),start_time:NX.iso()}).min(1).required()};function CX(e){return bX.validateBySchema(e,aS.object(XL))}a(CX,"addUpdateNodeValidator");function LX(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(LX,"checkForFalsy");jL.exports={addUpdateNodeValidator:CX,validation_schema:XL}});var eD=T((t_e,ZL)=>{var DX=xe(),UX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ZL.exports=function(e){return DX.validateObject(e,UX)}});var uS=T((r_e,tD)=>{"use strict";var MX=y().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=MX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tD.exports=cS});var sD=T((n_e,rD)=>{"use strict";var PX={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};rD.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:PX,JWTRSAKeys:_S}});var jc=T((o_e,aD)=>{"use strict";var Xc=require("jsonwebtoken"),dS=require("fs-extra"),fS=$(),Kr=y(),{handleHDBError:rr,hdb_errors:vX}=j(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:nr}=vX,Jc=G(),nD=f_(),mS=kr(),BX=xr().update,HX=uS(),qX=on(),{UserEventMsg:FX}=us(),Zn=X();Zn.initSync();var ES=require("path"),{JWTTokens:GX,JWTRSAKeys:xX,TOKEN_TYPE_ENUM:fd}=sD(),kX=Zn.get(Kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Zn.get(Kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",VX=Zn.get(Kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Zn.get(Kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ed="RS256",hS;aD.exports={createTokens:$X,validateOperationToken:KX,refreshOperationToken:YX,validateRefreshToken:oD};async function $X(e){if(fS.isEmpty(e)||typeof e!="object")throw rr(new Error,nr.INVALID_AUTH_OBJECT,sr.BAD_REQUEST,void 0,void 0,!0);if(fS.isEmpty(e.username))throw rr(new Error,nr.USERNAME_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);if(fS.isEmpty(e.password))throw rr(new Error,nr.PASSWORD_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Jc.error(f),rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}let r=await hd(),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 iD(i,r.private_key,r.passphrase),c=await Xc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:VX,algorithm:Ed,subject:fd.REFRESH}),u=nD.hash(c),_=new HX(Kr.SYSTEM_SCHEMA_NAME,Kr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await BX(_)}catch(f){Jc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw rr(new Error,nr.REFRESH_TOKEN_SAVE_FAILED,sr.INTERNAL_SERVER_ERROR);return qX.signalUserChange(new FX(process.pid)),new GX(o,c)}a($X,"createTokens");async function iD(e,t,r){return await Xc.sign(e,{key:t,passphrase:r},{expiresIn:kX,algorithm:Ed,subject:fd.OPERATION})}a(iD,"signOperationToken");async function hd(){if(hS===void 0)try{let e=ES.join(Zn.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=ES.join(Zn.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=ES.join(Zn.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new xX(i,n,s)}catch(e){throw Jc.error(e),rr(new Error,nr.NO_ENCRYPTION_KEYS,sr.INTERNAL_SERVER_ERROR)}return hS}a(hd,"getJWTRSAKeys");async function YX(e){if(!e)throw rr(new Error,nr.INVALID_BODY,sr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw rr(new Error,nr.REFRESH_TOKEN_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);await oD(e.refresh_token);let t=await hd(),r=await Xc.decode(e.refresh_token);return{operation_token:await iD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(YX,"refreshOperationToken");async function KX(e){try{let t=await hd(),r=await Xc.verify(e,t.public_key,{algorithms:Ed,subject:fd.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Jc.warn(t),t.name&&t.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}}a(KX,"validateOperationToken");async function oD(e){let t;try{let r=await hd(),s=await Xc.verify(e,r.public_key,{algorithms:Ed,subject:fd.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Jc.warn(r),r.name&&r.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}if(!nD.validate(t.refresh_token,e))throw rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED);return t}a(oD,"validateRefreshToken")});var pS=T((u_e,lD)=>{"use strict";var WX=eD(),Ko=require("passport"),QX=require("passport-local").Strategy,zX=require("passport-http").BasicStrategy,JX=require("util"),XX=kr(),uD=JX.callbackify(XX.findAndValidateUser),c_e=Er(),jX=y(),cD=jc();Ko.use(new QX(function(e,t,r){uD(e,t,r)}));Ko.use(new zX(function(e,t,r){uD(e,t,r)}));Ko.serializeUser(function(e,t){t(null,e)});Ko.deserializeUser(function(e,t){t(null,e)});function ZX(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":Ko.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===jX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):cD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ko.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(ZX,"authorize");function ej(e,t){let r=WX(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(ej,"checkPermissions");lD.exports={authorize:ZX,checkPermissions:ej}});var Wo=T((__e,_D)=>{"use strict";var SS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};_D.exports={Node:SS,NodeSubscription:TS}});var fD=T((f_e,dD)=>{"use strict";var tj=y().OPERATIONS_ENUM,RS=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}};dD.exports=RS});var Zc=T((h_e,ED)=>{"use strict";var gS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=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)}};ED.exports={RemotePayloadObject:gS,RemotePayloadSubscription:AS}});var mD=T((p_e,hD)=>{"use strict";var OS=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}};hD.exports=OS});var TD=T((A_e,SD)=>{"use strict";var rj=mD(),T_e=ze(),pD=Ue(),sj=G(),{getSchemaPath:R_e,getTransactionAuditStorePath:g_e}=Be(),{getDatabases:nj}=(fe(),Z(Ce));SD.exports=ij;async function ij(e){let t=new rj;try{let r=nj()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await pD.environmentDataSize(schema_path,e.name),o=await pD.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){sj.warn(`unable to stat table dbi due to ${r}`)}return t}a(ij,"lmdbGetTableSize")});var gD=T((N_e,RD)=>{"use strict";var NS=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}};RD.exports=NS});var Qo=T((w_e,bD)=>{"use strict";var oj=require("fs-extra"),aj=require("path"),xt=require("systeminformation"),ei=G(),cj=dt(),bS=ke(),pd=y(),uj=TD(),ND=bi(),{getThreadInfo:AD}=Je(),vS=X();vS.initSync();var lj=gD(),{openEnvironment:y_e}=Ue(),{getSchemaPath:I_e}=Be(),{database:_j}=(fe(),Z(Ce)),md;bD.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:LS,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:US,systemInformation:dj,getTableSize:MS,getMetrics:PS};function yS(){return xt.time()}a(yS,"getTimeInfo");async function IS(){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:g,...b}=await xt.currentLoad();return b.cpus=[],g.forEach(O=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=O;b.cpus.push(x)}),l.current_load=b,l}catch(e){return ei.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return ei.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await oj.readFile(aj.join(vS.get(pd.CONFIG_PARAMS.ROOTPATH),pd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===pd.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(CS,"getHDBProcessInfo");async function LS(){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 ei.error(`error in getDiskInfo: ${t}`),e}}a(LS,"getDiskInfo");async function DS(){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 ei.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function US(){if(md!==void 0)return md;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,md=e,md}catch(t){return ei.error(`error in getSystemInformation: ${t}`),e}}a(US,"getSystemInformation");async function MS(){let e=[],t=await ND.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await uj(s));return e}a(MS,"getTableSize");async function PS(){let e=await ND.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=_j({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(PS,"getMetrics");async function OD(){if(vS.get(pd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await cj.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(OD,"getNatsStreamInfo");async function dj(e){let t=new lj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await US(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await LS(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await AD(),t.replication=await OD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await US();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await LS();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await AD();break;case"replication":t.replication=await OD();break;default:break}return t}a(dj,"systemInformation")});var BS=T((L_e,yD)=>{"use strict";yD.exports={version:fj,printVersion:Ej};var Sd=kc();function fj(){if(Sd)return Sd.version}a(fj,"version");function Ej(){Sd&&console.log(`HarperDB Version ${Sd.version}`)}a(Ej,"printVersion")});var fn=T((P_e,LD)=>{"use strict";var hj=xr(),HS=$(),mj=require("util"),Gi=y(),ID=X();ID.initSync();var pj=pS(),wD=Gr(),{Node:U_e,NodeSubscription:M_e}=Wo(),Sj=Ao(),Tj=fD(),{RemotePayloadObject:Rj,RemotePayloadSubscription:gj}=Zc(),{handleHDBError:Aj,hdb_errors:Oj}=j(),{HTTP_STATUS_CODES:Nj,HDB_ERROR_MSGS:bj}=Oj,yj=Ms(),Ij=Qo(),wj=BS(),{getDatabases:Cj}=(fe(),Z(Ce)),Lj=mj.promisify(pj.authorize),Dj=wD.searchByHash,Uj=wD.searchByValue;LD.exports={authHeaderToUser:Mj,isEmpty:Pj,getNodeRecord:vj,upsertNodeRecord:Bj,buildNodePayloads:Hj,checkClusteringEnabled:qj,getAllNodeRecords:Fj,getSystemInfo:Gj,reverseSubscription:CD};async function Mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Lj(t,null),e}a(Mj,"authHeaderToUser");function Pj(e){return e==null}a(Pj,"isEmpty");async function vj(e){let t=new Sj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Dj(t)}a(vj,"getNodeRecord");async function Bj(e){let t=new Tj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return hj.upsert(t)}a(Bj,"upsertNodeRecord");function CD(e){if(HS.isEmpty(e.subscribe)||HS.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(CD,"reverseSubscription");function Hj(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=HS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=CD(c),E=Cj()[u]?.[_],h=new gj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new Rj(r,t,n,s)}a(Hj,"buildNodePayloads");function qj(){if(!ID.get(Gi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aj(new Error,bj.CLUSTERING_NOT_ENABLED,Nj.BAD_REQUEST,void 0,void 0,!0)}a(qj,"checkClusteringEnabled");async function Fj(){let e=new yj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Uj(e))}a(Fj,"getAllNodeRecords");async function Gj(){let e=await Ij.getSystemInformation();return{hdb_version:wj.version(),node_version:e.node_version,platform:e.platform}}a(Gj,"getSystemInfo")});var qS=T((B_e,qD)=>{"use strict";var Td=dt(),DD=$(),UD=ke(),MD=y(),Rd=G(),PD=id(),xj=rm(),{RemotePayloadObject:kj}=Zc(),{handleHDBError:vD,hdb_errors:Vj}=j(),{HTTP_STATUS_CODES:BD}=Vj,{NodeSubscription:HD}=Wo();qD.exports=$j;async function $j(e,t){let r;try{r=await Td.request(`${t}.${UD.REQUEST_SUFFIX}`,new kj(MD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Rd.trace("Response from remote describe all request:",r)}catch(o){Rd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Td.requestErrorHandler(o,"add_node",t);throw vD(new Error,c,BD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw vD(new Error,o,BD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===MD.SYSTEM_SCHEMA_NAME){await Td.createLocalTableStream(c,u);let h=new HD(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=DD.doesSchemaExist(c),l=s[c]!==void 0,d=u?DD.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Rd.trace(`addNode creating schema: ${c}`),await PD.createSchema({operation:"create_schema",schema:c})),!d&&f){Rd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new xj(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await PD.createTable(h)}await Td.createLocalTableStream(c,u);let E=new HD(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a($j,"reviewSubscriptions")});var Od=T((q_e,xD)=>{"use strict";var{handleHDBError:gd,hdb_errors:Yj}=j(),{HTTP_STATUS_CODES:Ad}=Yj,{addUpdateNodeValidator:Kj}=dd(),eu=G(),GD=y(),FD=ke(),Wj=$(),FS=dt(),tu=fn(),Qj=X(),zj=qS(),{Node:Jj,NodeSubscription:Xj}=Wo(),{broadcast:jj}=Je(),Zj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",eZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",tZ=Qj.get(GD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=rZ;async function rZ(e,t=!1){eu.trace("addNode called with:",e),tu.checkClusteringEnabled();let r=Kj(e);if(r)throw gd(r,r.message,Ad.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await tu.getNodeRecord(s);if(!Wj.isEmptyOrZeroLength(d))throw gd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Ad.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await zj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Zj,o;let c=tu.buildNodePayloads(n,tZ,GD.OPERATIONS_ENUM.ADD_NODE,await tu.getSystemInfo());eu.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${FD.REQUEST_SUFFIX}`,c)}catch(d){eu.error(`addNode received error from request: ${d}`);let f=FS.requestErrorHandler(d,"add_node",s);throw gd(new Error,f,Ad.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw gd(new Error,d,Ad.INTERNAL_SERVER_ERROR,"error",d)}eu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];eu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await FS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Xj(E.schema,E.table,E.publish,E.subscribe))}let l=new Jj(s,_,u.system_info);return await tu.upsertNodeRecord(l),jj({type:"nats_update"}),i.length>0?o.message=eZ:o.message=`Successfully added '${s}' to manifest`,o}a(rZ,"addNode")});var xS=T((G_e,$D)=>{"use strict";var{handleHDBError:Nd,hdb_errors:sZ}=j(),{HTTP_STATUS_CODES:bd}=sZ,{addUpdateNodeValidator:nZ}=dd(),ru=G(),VD=y(),kD=ke(),iZ=$(),GS=dt(),su=fn(),oZ=X(),{cloneDeep:aZ}=require("lodash"),cZ=qS(),{NodeSubscription:uZ}=Wo(),{broadcast:lZ}=Je(),_Z="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",fZ=oZ.get(VD.CONFIG_PARAMS.CLUSTERING_NODENAME);$D.exports=EZ;async function EZ(e){ru.trace("updateNode called with:",e),su.checkClusteringEnabled();let t=nZ(e);if(t)throw Nd(t,t.message,bd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=aZ(await su.getNodeRecord(r));if(iZ.isEmptyOrZeroLength(s))throw Nd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,bd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await cZ(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=_Z,o;let c=su.buildNodePayloads(n,fZ,VD.OPERATIONS_ENUM.UPDATE_NODE,await su.getSystemInfo());ru.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${kD.REQUEST_SUFFIX}`,c)}catch(_){ru.error(`updateNode received error from request: ${_}`);let l=GS.requestErrorHandler(_,"update_node",r);throw Nd(new Error,l,bd.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw Nd(new Error,_,bd.INTERNAL_SERVER_ERROR,"error",_)}ru.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];ru.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await GS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await hZ(s[0],n,u.system_info),i.length>0?o.message=dZ:o.message=`Successfully updated '${r}'`,o}a(EZ,"updateNode");async function hZ(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 uZ(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await su.upsertNodeRecord(s),lZ({type:"nats_update"})}a(hZ,"updateNodeTable")});var zD=T((k_e,QD)=>{"use strict";var WD=require("joi"),{string:YD}=WD.types(),mZ=xe(),KD=y(),pZ=X(),SZ=ke();QD.exports=TZ;function TZ(e){let t=YD.invalid(pZ.get(KD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SZ.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=WD.object({operation:YD.valid(KD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return mZ.validateBySchema(e,r)}a(TZ,"removeNodeValidator")});var Id=T(($_e,tU)=>{"use strict";var{handleHDBError:JD,hdb_errors:RZ}=j(),{HTTP_STATUS_CODES:XD}=RZ,gZ=zD(),nu=G(),jD=fn(),AZ=$(),yd=y(),ZD=ke(),eU=dt(),OZ=X(),{RemotePayloadObject:NZ}=Zc(),{NodeSubscription:bZ}=Wo(),yZ=dc(),IZ=Li(),{broadcast:wZ}=Je(),CZ=OZ.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);tU.exports=LZ;async function LZ(e){nu.trace("removeNode called with:",e),jD.checkClusteringEnabled();let t=gZ(e);if(t)throw JD(t,t.message,XD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await jD.getNodeRecord(r);if(AZ.isEmptyOrZeroLength(s))throw JD(new Error,`Node '${r}' was not found.`,XD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new NZ(yd.OPERATIONS_ENUM.REMOVE_NODE,CZ,[]),i,o=!1;try{i=await eU.request(`${r}.${ZD.REQUEST_SUFFIX}`,n),nu.trace("Remove node reply from remote node:",r,i)}catch(u){nu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];nu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new bZ(l.schema,l.table,!1,!1);await eU.updateWorkStream(d,r)}let c=new yZ(yd.SYSTEM_SCHEMA_NAME,yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await IZ.deleteRecord(c),wZ({type:"nats_update"}),i?.status===ZD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(nu.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(LZ,"removeNode")});var nU=T((K_e,sU)=>{"use strict";var rU=require("joi"),{string:DZ,array:UZ}=rU.types(),MZ=xe(),PZ=dd();sU.exports=vZ;function vZ(e){let t=rU.object({operation:DZ.valid("configure_cluster").required(),connections:UZ.items(PZ.validation_schema).required()});return MZ.validateBySchema(e,t)}a(vZ,"configureClusterValidator")});var kS=T((Q_e,uU)=>{"use strict";var BZ=y(),wd=G(),HZ=$(),qZ=Id(),FZ=Od(),iU=fn(),GZ=nU(),{handleHDBError:oU,hdb_errors:xZ}=j(),{HTTP_STATUS_CODES:aU}=xZ,kZ="Configure cluster complete.",VZ="Failed to configure the cluster. Check the logs for more details.",$Z="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uU.exports=YZ;async function YZ(e){wd.trace("configure cluster called with:",e),iU.checkClusteringEnabled();let t=GZ(e);if(t)throw oU(t,t.message,aU.BAD_REQUEST,void 0,void 0,!0);let r=await iU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(cU(qZ,{operation:BZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);wd.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(cU(FZ,E,E.node_name))}let c=await Promise.allSettled(i);wd.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"&&(wd.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(HZ.isEmptyOrZeroLength(u))return{message:kZ,connections:_};if(l)return{message:$Z,failed_nodes:u,connections:_};throw oU(new Error,VZ,aU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(YZ,"configureCluster");async function cU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(cU,"functionWrapper")});var _U=T((J_e,lU)=>{"use strict";var Cd=require("joi"),KZ=xe(),{validateSchemaExists:WZ,validateTableExists:QZ,validateSchemaName:zZ}=Ds(),JZ=Cd.object({operation:Cd.string().valid("purge_stream"),schema:Cd.string().custom(WZ).custom(zZ).required(),table:Cd.string().custom(QZ).required()});function XZ(e){return KZ.validateBySchema(e,JZ)}a(XZ,"purgeStreamValidator");lU.exports=XZ});var VS=T((j_e,dU)=>{"use strict";var{handleHDBError:jZ,hdb_errors:ZZ}=j(),{HTTP_STATUS_CODES:e5}=ZZ,t5=_U(),r5=dt(),s5=fn();dU.exports=n5;async function n5(e){let t=t5(e);if(t)throw jZ(t,t.message,e5.BAD_REQUEST,void 0,void 0,!0);s5.checkClusteringEnabled();let{schema:r,table:s}=e;return await r5.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(n5,"purgeStream")});var KS=T((ede,SU)=>{"use strict";var YS=fn(),i5=dt(),hU=X(),Ld=y(),xi=ke(),o5=$(),$S=G(),{RemotePayloadObject:a5}=Zc(),{ErrorCode:fU}=require("nats"),EU=hU.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED),mU=hU.get(Ld.CONFIG_PARAMS.CLUSTERING_NODENAME);SU.exports={clusterStatus:c5,buildNodeStatus:pU};async function c5(){let e={node_name:mU,is_enabled:EU,connections:[]};if(!EU)return e;let t=await YS.getAllNodeRecords();if(o5.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(pU(t[s],e.connections));return await Promise.allSettled(r),e}a(c5,"clusterStatus");async function pU(e,t){let r=e.name,s=new a5(Ld.OPERATIONS_ENUM.CLUSTER_STATUS,mU,void 0,await YS.getSystemInfo()),n,i,o=xi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await i5.request(xi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===xi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=xi.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===fU.NoResponders?o=xi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===fU.Timeout?o=xi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=xi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new u5(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!==Ld.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(pU,"buildNodeStatus");function u5(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(u5,"NodeStatusObject")});var QS=T((rde,TU)=>{"use strict";var{handleHDBError:l5,hdb_errors:_5}=j(),{HTTP_STATUS_CODES:d5}=_5,f5=dt(),E5=fn(),WS=$(),Dd=require("joi"),h5=xe(),m5=2e3,p5=Dd.object({timeout:Dd.number().min(1),connected_nodes:Dd.boolean(),routes:Dd.boolean()});TU.exports=S5;async function S5(e){E5.checkClusteringEnabled();let t=h5.validateBySchema(e,p5);if(t)throw l5(t,t.message,d5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await f5.getServerList(r??m5),_={};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:WS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(S5,"clusterNetwork")});var OU=T((nde,AU)=>{"use strict";var zS=require("joi"),RU=xe(),{route_constraints:gU}=$m();AU.exports={setRoutesValidator:T5,deleteRoutesValidator:R5};function T5(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:gU.required()});return RU.validateBySchema(e,t)}a(T5,"setRoutesValidator");function R5(e){let t=zS.object({routes:gU.required()});return RU.validateBySchema(e,t)}a(R5,"deleteRoutesValidator")});var XS=T((ode,IU)=>{"use strict";var ki=Ar(),JS=$(),Ud=y(),NU=OU(),{handleHDBError:bU,hdb_errors:g5}=j(),{HTTP_STATUS_CODES:yU}=g5,A5="cluster routes successfully set",O5="cluster routes successfully deleted";IU.exports={setRoutes:N5,getRoutes:b5,deleteRoutes:y5};function N5(e){let t=NU.setRoutesValidator(e);if(t)throw bU(t,t.message,yU.BAD_REQUEST,void 0,void 0,!0);let r=ki.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=JS.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"?ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:A5,set:o,skipped:i}}a(N5,"setRoutes");function b5(){let e=ki.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(b5,"getRoutes");function y5(e){let t=NU.deleteRoutesValidator(e);if(t)throw bU(t,t.message,yU.BAD_REQUEST,void 0,void 0,!0);let r=ki.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=JS.isEmptyOrZeroLength(s)?null:s,ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:O5,deleted:i,skipped:o}}a(y5,"deleteRoutes")});var CU=T((cde,wU)=>{"use strict";var iu=require("alasql"),Vi=require("recursive-iterator"),gs=G(),I5=$(),ou=y(),jS=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,C5(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=w5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new iu.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 w5(e){return e.filter(t=>t[ou.PERMS_CRUD_ENUM.READ])}a(w5,"filterReadRestrictedAttrs");function C5(e,t,r,s,n){L5(e,t,r,s,n)}a(C5,"interpretAST");function au(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(au,"addSchemaTableToMap");function L5(e,t,r,s,n){if(!e){gs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof iu.yy.Insert?P5(e,t,r):e instanceof iu.yy.Select?D5(e,t,r,s,n):e instanceof iu.yy.Update?U5(e,t,r):e instanceof iu.yy.Delete?M5(e,t,r):gs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(L5,"getRecordAttributesAST");function D5(e,t,r,s,n){if(!e){gs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(I5.isEmptyOrZeroLength(i)){gs.error("No schema specified");return}e.from.forEach(c=>{au(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),au(c.table,t,r,s,n)});let o=new Vi(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{gs.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 Vi(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{gs.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 Vi(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{gs.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 Vi(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{gs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(D5,"getSelectAttributes");function U5(e,t,r){if(!e){gs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Vi(e.columns),n=e.table.databaseid;au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.table.tableid,n,i.columnid,t,r)}a(U5,"getUpdateAttributes");function M5(e,t,r){if(!e){gs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Vi(e.where),n=e.table.databaseid;au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.table.tableid,n,i.columnid,t,r)}a(M5,"getDeleteAttributes");function P5(e,t,r){if(!e){gs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Vi(e.columns),n=e.into.databaseid;au(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.into.tableid,n,i.columnid,t,r)}a(P5,"getInsertAttributes");function ZS(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(ZS,"pushAttribute");wU.exports=jS});var rT=T((lde,MU)=>{var Md=Ac(),LU=require("chalk"),Lr=G(),DU=require("prompt"),{promisify:v5}=require("util"),eT=y(),B5=require("fs-extra"),H5=require("path"),q5=$(),F5=BS(),UU=X();UU.initSync();var G5=require("moment"),x5=v5(DU.get),k5=H5.join(UU.getHdbBasePath(),eT.LICENSE_KEY_DIR_NAME,eT.LICENSE_FILE_NAME,eT.LICENSE_FILE_NAME);MU.exports={getFingerprint:$5,setLicense:V5,parseLicense:tT,register:Y5,getRegistrationInfo:W5};async function V5(e){if(e&&e.key&&e.company){try{Lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Lr.error(r),Lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(V5,"setLicense");async function $5(){let e={};try{e=await Md.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Lr.error(r),Lr.error(t),new Error(r)}return e}a($5,"getFingerprint");async function tT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Lr.info("Validating license input...");let r=Md.validateLicense(e,t);if(Lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Lr.info("writing license to disk"),await B5.writeFile(k5,JSON.stringify({license_key:e,company:t}))}catch(s){throw Lr.error("Failed to write License"),s}return"Registration successful."}a(tT,"parseLicense");async function Y5(){let e=await K5();return tT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Y5,"register");async function K5(){let e=await Md.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{DU.start()}catch(s){Lr.error(s)}let r;try{r=await x5(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(K5,"promptForRegistration");async function W5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Md.getLicense()}catch(r){throw Lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(q5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=F5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=G5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(W5,"getRegistrationInfo")});var vU=T((dde,PU)=>{"use strict";var Q5=ke(),sT=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+Q5.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"}};PU.exports=sT});var qU=T((Ede,HU)=>{"use strict";var BU=ke(),nT=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+BU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+BU.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"}};HU.exports=nT});var GU=T((mde,FU)=>{"use strict";var iT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};FU.exports=iT});var kU=T((Sde,xU)=>{"use strict";var z5=ke(),oT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+z5.SERVER_SUFFIX.ADMIN,this.password=r}};xU.exports=oT});var uT=T((Rde,YU)=>{"use strict";var zo=require("path"),Bd=require("fs-extra"),J5=vU(),X5=qU(),j5=GU(),Z5=kU(),aT=kr(),Xo=$(),ir=Ar(),vd=y(),cu=ke(),{CONFIG_PARAMS:Ze}=vd,uu=G(),lu=X(),VU=un(),cT=dt(),Jo="clustering",e8=1e4,$U=5;YU.exports={generateNatsConfig:r8,removeNatsConfig:s8,getHubConfigPath:t8};function t8(){let e=lu.get(Ze.ROOTPATH);return zo.join(e,Jo,cu.NATS_CONFIG_FILES.HUB_SERVER)}a(t8,"getHubConfigPath");async function r8(e=!1,t=void 0){lu.initSync();let r=lu.get(Ze.ROOTPATH),s=zo.join(r,Jo,cu.PID_FILES.HUB),n=zo.join(r,Jo,cu.PID_FILES.LEAF),i=ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zo.join(r,Jo,cu.NATS_CONFIG_FILES.HUB_SERVER),c=zo.join(r,Jo,cu.NATS_CONFIG_FILES.LEAF_SERVER),u=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERTIFICATE),_=ir.getConfigFromFile(Ze.CLUSTERING_TLS_PRIVATEKEY),l=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERT_AUTH),d=ir.getConfigFromFile(Ze.CLUSTERING_TLS_INSECURE),f=ir.getConfigFromFile(Ze.CLUSTERING_TLS_VERIFY),E=ir.getConfigFromFile(Ze.CLUSTERING_NODENAME),h=ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cT.checkNATSServerInstalled()||Hd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await aT.listUsers(),S=ir.getConfigFromFile(Ze.CLUSTERING_USER),g=await aT.getClusterUser();(Xo.isEmpty(g)||g.active!==!0)&&Hd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Pd(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Pd(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Pd(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await Pd(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],O=[];for(let[x,te]of p.entries())te.role.role===vd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(b.push(new Z5(te.username,VU.decrypt(te.hash))),O.push(new j5(te.username,VU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=ir.getClusteringRoutes();if(!Xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new J5(ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,b,O);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Bd.writeJson(o,F),uu.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new X5(ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],b,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Bd.writeJson(c,B),uu.trace(`Leaf server config written to ${c}`))}a(r8,"generateNatsConfig");async function Pd(e){let t=lu.get(e);return Xo.isEmpty(t)&&Hd(`port undefined for '${e}'`),await Xo.isPortTaken(t)&&Hd(`'${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(Pd,"isPortAvailable");function Hd(e){let t=`Error generating clustering config: ${e}`;uu.error(t),console.error(t),process.exit(1)}a(Hd,"generateNatsConfigError");async function s8(e){let{port:t,config_file:r}=cT.getServerConfig(e),{username:s,decrypt_hash:n}=await aT.getClusterUser(),i=0,o=2e3;for(;i<$U;){try{let _=await cT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){uu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=$U)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 Xo.async_set_timeout(o*(i*2))}let c="0".repeat(e8),u=zo.join(lu.get(Ze.ROOTPATH),Jo,r);await Bd.writeFile(u,c),await Bd.remove(u),uu.notify(e,"started.")}a(s8,"removeNatsConfig")});var XU=T((Ade,JU)=>{"use strict";var Dr=X(),n8=Ac(),ae=y(),_u=ke(),En=require("path"),{PACKAGE_ROOT:Fd}=y(),KU=X(),qd=$(),jo="/dev/null",i8=En.join(Fd,"launchServiceScripts"),WU=En.join(Fd,"utility/scripts"),o8=En.join(WU,ae.HDB_RESTART_SCRIPT),QU=En.resolve(Fd,"dependencies",`${process.platform}-${process.arch}`,_u.NATS_BINARY_NAME);function zU(){let t=n8.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qd.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Fd}}a(zU,"generateMainServerConfig");var a8=9930;function c8(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=En.join(e,"clustering",_u.NATS_CONFIG_FILES.HUB_SERVER),r=En.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=KU.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=_u.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==a8?"-"+s:""),script:QU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=jo,i.error_file=jo),i}a(c8,"generateNatsHubServerConfig");var u8=9940;function l8(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=En.join(e,"clustering",_u.NATS_CONFIG_FILES.LEAF_SERVER),r=En.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=KU.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=_u.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==u8?"-"+s:""),script:QU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=jo,i.error_file=jo),i}a(l8,"generateNatsLeafServerConfig");function _8(){Dr.initSync();let e=En.join(Dr.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:i8,autorestart:!1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=jo,t.error_file=jo),t}a(_8,"generateClusteringUpgradeV4ServiceConfig");function d8(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return qd.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:WU},script:o8}}a(d8,"generateRestart");function f8(){return{apps:[zU()]}}a(f8,"generateAllServiceConfigs");JU.exports={generateAllServiceConfigs:f8,generateMainServerConfig:zU,generateRestart:d8,generateNatsHubServerConfig:c8,generateNatsLeafServerConfig:l8,generateClusteringUpgradeV4ServiceConfig:_8}});var _M=T((bde,lM)=>{"use strict";var Ae=y(),E8=$(),hn=uT(),du=dt(),Vs=ke(),ti=XU(),Gd=X(),ri=G(),h8=fn(),{startWorker:jU,onMessageFromWorkers:m8}=Je(),p8=Qo(),Nde=require("util"),S8=require("child_process"),T8=require("fs"),{execFile:R8}=S8,pe;lM.exports={enterPM2Mode:g8,start:si,stop:lT,reload:eM,restart:tM,list:_T,describe:sM,connect:mn,kill:y8,startAllServices:I8,startService:dT,getUniqueServicesList:nM,restartAllServices:w8,isServiceRegistered:iM,reloadStopStart:oM,restartHdb:rM,deleteProcess:N8,startClusteringProcesses:cM,startClusteringThreads:uM,isHdbRestartRunning:b8,isClusteringRunning:L8,stopClustering:C8,reloadClustering:D8};var fu=!1;m8(e=>{e.type==="restart"&&Gd.initSync(!0)});function g8(){fu=!0}a(g8,"enterPM2Mode");function mn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{ri.setupConsoleLogging(),r&&t(r),e(s)})})}a(mn,"connect");var or,A8=10,ZU;function si(e,t=!1){if(fu)return O8(e);let r=R8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=or.indexOf(r);o>-1&&or.splice(o,1),!ZU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<A8&&(T8.existsSync(hn.getHubConfigPath())?si(e):(await hn.generateNatsConfig(!0),si(e),await new Promise(c=>setTimeout(c,3e3)),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Gd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Vs.LOG_LEVEL_HIERARCHY[o]>=Vs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Vs.LOG_LEVELS.ERR||l===Vs.LOG_LEVELS.WRN?ri.OUTPUTS.STDERR:ri.OUTPUTS.STDOUT;ri.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Vs.LOG_LEVELS[f]}if(Vs.LOG_LEVEL_HIERARCHY[o]>=Vs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Vs.LOG_LEVELS.ERR||l===Vs.LOG_LEVELS.WRN?ri.OUTPUTS.STDERR:ri.OUTPUTS.STDOUT;ri.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),or=[],!or&&!t){let i=a(()=>{ZU=!0,or&&(or.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)}or.push(r)}a(si,"start");function O8(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(O8,"startWithPM2");function lT(e){if(!fu){for(let t of or||[])t.name===e&&(or.splice(or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(lT,"stop");function eM(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(eM,"reload");function tM(e){if(!fu)for(let t of or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(tM,"restart");function N8(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(N8,"deleteProcess");async function rM(){await si(ti.generateRestart())}a(rM,"restartHdb");async function b8(){let e=await _T();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(b8,"isHdbRestartRunning");function _T(){return new Promise(async(e,t)=>{try{await mn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(_T,"list");function sM(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(sM,"describe");function y8(){if(!fu){for(let e of or||[])e.kill();or=[];return}return new Promise(async(e,t)=>{try{await mn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(y8,"kill");async function I8(){try{await cM(),await uM(),await si(ti.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(I8,"startAllServices");async function dT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ti.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ti.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ti.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ti.generateNatsHubServerConfig(),await si(r,t),await hn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ti.generateNatsLeafServerConfig(),await si(r,t),await hn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ti.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await si(r)}catch(r){throw pe?.disconnect(),r}}a(dT,"startService");async function nM(){try{let e=await _T(),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 pe?.disconnect(),e}}a(nM,"getUniqueServicesList");async function w8(e=[]){try{let t=!1,r=await nM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await tM(o))}t&&await oM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(w8,"restartAllServices");async function iM(e){if(or?.find(r=>r.name===e))return!0;let t=await p8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(iM,"isServiceRegistered");async function oM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Gd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Gd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await sM(e),s=E8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lT(e),await dT(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await rM():await eM(e)}a(oM,"reloadStopStart");var aM;async function cM(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await dT(r,e)}}a(cM,"startClusteringProcesses");async function uM(){aM=jU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await du.createWorkQueueStream(Vs.WORK_QUEUE_CONSUMER_NAMES),await du.updateIngestStreamConsumer(),await du.updateLocalStreams();let e=await h8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){ri.info("Starting clustering upgrade 4.0.0 process"),jU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(uM,"startClusteringThreads");async function C8(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await aM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await lT(t)}}a(C8,"stopClustering");async function L8(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await iM(t)===!1)return!1}return!0}a(L8,"isClusteringRunning");async function D8(){await hn.generateNatsConfig(!0),await du.reloadNATSHub(),await du.reloadNATSLeaf(),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(D8,"reloadClustering")});var $d=T((Ide,SM)=>{"use strict";var U8=require("minimist"),{isMainThread:hT,parentPort:EM}=require("worker_threads"),Ke=y(),{PROCESS_DESCRIPTORS_VALIDATE:Eu}=Ke,$s=G(),mT=$(),xd=uT(),Zo=dt(),fT=ke(),hM=Ar(),Ys=_M(),dM=Qo(),M8=TE(),{restartWorkers:kd,onMessageByType:P8}=Je(),{handleHDBError:v8,hdb_errors:B8}=j(),{HTTP_STATUS_CODES:H8}=B8,Vd=X();Vd.initSync();var hu=`Restarting HarperDB. This may take up to ${Ke.RESTART_TIMEOUT_MS/1e3} seconds.`,q8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",fM="Clustering is not enabled so cannot be restarted",F8="Invalid service",ea,Wr;SM.exports={restart:mM,restartService:pT};hT&&P8(Ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?pT({service:e.workerType}):mM({operation:"restart"})});async function mM(e){Wr=Object.keys(e).length===0,ea=await Ys.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR);let t=U8(process.argv);if(t.service){await pT(t);return}if(Wr&&!ea){console.error(q8);return}if(Wr&&console.log(hu),ea){Ys.enterPM2Mode(),$s.notify(hu);let r=M8(Object.keys(Ke.CONFIG_PARAM_MAP),!0);return mT.isEmptyOrZeroLength(Object.keys(r))||hM.updateConfigValue(void 0,void 0,r,!0,!0),x8(),hu}return hT?($s.notify(hu),setTimeout(()=>{kd()},50)):EM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART}),hu}a(mM,"restart");async function pT(e){let{service:t}=e;if(Ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw v8(new Error,F8,H8.BAD_REQUEST,void 0,void 0,!0);if(ea=await Ys.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR),!hT)return EM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Eu.clustering:if(!Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fM;break}Wr&&console.log("Restarting clustering"),$s.notify("Restarting clustering"),await pM();break;case Eu.clustering_config:case Eu["clustering config"]:if(!Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fM;break}Wr&&console.log("Restarting clustering_config"),$s.notify("Restarting clustering_config"),await Ys.reloadClustering();break;case"custom_functions":case"custom functions":case Eu.harperdb:case Eu.http_workers:if(Wr&&!ea){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Wr&&console.log("Restarting http_workers"),$s.notify("Restarting http_workers"),Wr?await Ys.restart(Ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{kd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?($s.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(pT,"restartService");async function G8(){await Zo.publishToStream(`${fT.SUBJECT_PREFIXES.TXN}.${fT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,fT.WORK_QUEUE_CONSUMER_NAMES.stream_name,Zo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(G8,"postDummyNatsMsg");async function x8(){await pM(),await Ys.restart(Ke.HDB_PROC_DESCRIPTOR),await mT.async_set_timeout(2e3),Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await ET(),Wr&&(await Zo.closeConnection(),process.exit(0))}a(x8,"restartPM2Mode");async function pM(){if(!hM.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dM.getHDBProcessInfo()).clustering.length===0)$s.trace("Clustering not running, restart will start clustering services"),await xd.generateNatsConfig(!0),await Ys.startClusteringProcesses(),await Ys.startClusteringThreads(),await ET(),Wr&&await Zo.closeConnection();else{await G8(),await xd.generateNatsConfig(!0),ea?($s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ys.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ys.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dM.getHDBProcessInfo()).clustering.forEach(n=>{$s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mT.async_set_timeout(3e3),await ET(),await Zo.updateLocalStreams(),Wr&&await Zo.closeConnection(),$s.trace("Restart clustering restarting ingest and reply service threads");let t=kd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=kd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pM,"restartClustering");async function ET(){await xd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(ET,"removeNatsConfig")});var CM=T((Lde,wM)=>{"use strict";var Cde=require("lodash"),ar=y(),{handleHDBError:TM,hdb_errors:k8}=j(),{HDB_ERROR_MSGS:V8,HTTP_STATUS_CODES:$8}=k8,ST=G();wM.exports={getRolePermissions:K8};var $i=Object.create(null),Y8=a(e=>({key:e,perms:{}}),"perms_template_obj"),OM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),NM=a((e=!1,t=!1,r=!1,s=!1)=>({[ar.PERMS_CRUD_ENUM.READ]:e,[ar.PERMS_CRUD_ENUM.INSERT]:t,[ar.PERMS_CRUD_ENUM.UPDATE]:r,[ar.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),TT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...NM(t,r,s,n)}),"table_perms_template"),RM=a((e,t=NM())=>({attribute_name:e,describe:IM(t),[mu]:t[mu],[RT]:t[RT],[gT]:t[gT]}),"attr_perms_template"),gM=a((e,t=!1)=>({attribute_name:e,describe:t,[mu]:t}),"timestamp_attr_perms_template"),{READ:mu,INSERT:RT,UPDATE:gT}=ar.PERMS_CRUD_ENUM,bM=Object.values(ar.PERMS_CRUD_ENUM),yM=[mu,RT,gT];function K8(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[ar.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if($i[t]&&$i[t].key===s)return $i[t].perms;let n=W8(e,r);return $i[t]?$i[t].key=s:$i[t]=Y8(s),$i[t].perms=n,n}catch(r){if(!e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ar.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 ST.error(s),ST.debug(r),TM(new Error,V8.OUTDATED_PERMS_TRANSLATION_ERROR,$8.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw ST.error(s),TM(new Error)}}}a(K8,"getRolePermissions");function W8(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ar.SYSTEM_SCHEMA_NAME]=s[ar.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]=Q8(t[i]);return}r[i]=OM(),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],_=z8(c,u);r[i].describe||bM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=TT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=TT()})}),r}a(W8,"translateRolePermissions");function Q8(e){let t=OM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=TT(!0,!0,!0,!0,!0)}),t}a(Q8,"createStructureUserPermissions");function z8(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 ar.TIME_STAMP_NAMES.includes(d)&&(f=gM(d,l[mu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=RM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=IM(l),n.attribute_permissions.push(l),c||J8(l,u)}else if(_!==o){let l;ar.TIME_STAMP_NAMES.includes(_)?l=gM(_):l=RM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=AM(n),n}else return e.describe=AM(e),e}a(z8,"getTableAttrPerms");function AM(e){return bM.filter(t=>e[t]).length>0}a(AM,"getSchemaTableDescribePerm");function IM(e){return yM.filter(t=>e[t]).length>0}a(IM,"getAttributeDescribePerm");function J8(e,t){yM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(J8,"checkForHashPerms")});var LM={};ve(LM,{Headers:()=>ni});var ni,Yd=Te(()=>{ni=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 pu={};ve(pu,{authentication:()=>qM,bypassAuth:()=>s6,login:()=>i6,logout:()=>o6,start:()=>n6});function s6(){HM=!0}async function qM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?e6?Z8:[]:j8?X8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Kd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Kd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Kd){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 UM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Qd.AuthAuditLog(E,h,wt.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===wt.AUTH_AUDIT_STATUS.SUCCESS?DM.notify(S):DM.error(S)},"authAuditLog"),d;if(s){if(d=Yi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ct.getUser(p,S):null;break;case"Bearer":try{d=await(0,Wd.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,Wd.validateRefreshToken)(h),c({status:-1})}catch{throw g}}break}}catch(g){return r6&&(Yi.get(h)||(Yi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ii({error:g.message},e)})}Yi.set(s,d),t6&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ct.getUser(_.user,null,!1):HM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,PM.getSuperUser)());Kd&&(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,UM.put(E)},e.login=async function(E,h){e.user=await ct.getUser(E,h),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")&&Bn.loginPath?(f.status=302,f.headers.set("Location",Bn.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 ni);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function n6({server:e,port:t}){e.request(qM,{port:t||"all"}),MM||(MM=!0,setInterval(()=>{Yi=new Map},Qr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BM.user.addListener(()=>{Yi=new Map}))}async function i6(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 o6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var PM,Wd,vM,Qr,wt,Qd,BM,DM,X8,j8,Z8,e6,UM,Kd,HM,t6,r6,Yi,MM,zd=Te(()=>{PM=D(kr());fr();Ga();Wd=D(jc());fe();vM=require("uuid"),Qr=D(X()),wt=D(y()),Qd=D(G()),BM=D(Nc());Yd();ta();DM=(0,Qd.loggerWithTag)("auth-event");Qr.initSync();X8=Qr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),j8=Qr.get(wt.CONFIG_PARAMS.HTTP_CORS),Z8=Qr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),e6=Qr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UM=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Kd=Qr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HM=Qr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,t6=Qr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,r6=Qr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Yi=new Map;ct.onInvalidatedUser(()=>{Yi=new Map});a(s6,"bypassAuth");a(qM,"authentication");a(n6,"start");a(i6,"login");a(o6,"logout")});var YM=T((Fde,$M)=>{"use strict";var Se=require("joi"),FM=require("fs-extra"),GM=require("path"),Sn=xe(),xM=X(),kM=y(),VM=G(),{hdb_errors:a6}=j(),{HDB_ERROR_MSGS:kt}=a6,pn=/^[a-zA-Z0-9-_]+$/;$M.exports={getDropCustomFunctionValidator:u6,setCustomFunctionValidator:l6,addComponentValidator:E6,dropCustomFunctionProjectValidator:h6,packageComponentValidator:m6,deployComponentValidator:p6,setComponentFileValidator:_6,getComponentFileValidator:f6,dropComponentFileValidator:d6};function Jd(e,t,r){try{let s=xM.get(kM.CONFIG_PARAMS.COMPONENTSROOT),n=GM.join(s,t);return FM.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return VM.error(s),r.message(kt.VALIDATION_ERR)}}a(Jd,"checkProjectExists");function Su(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Su,"checkFilePath");function c6(e,t,r,s){try{let n=xM.get(kM.CONFIG_PARAMS.COMPONENTSROOT),i=GM.join(n,e,t,r+".js");return FM.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return VM.error(n),s.message(kt.VALIDATION_ERR)}}a(c6,"checkFileExists");function u6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(pn).custom(c6.bind(null,e.project,e.type)).custom(Su).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return Sn.validateBySchema(e,t)}a(u6,"getDropCustomFunctionValidator");function l6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(Su).required(),function_content:Se.string().required()});return Sn.validateBySchema(e,t)}a(l6,"setCustomFunctionValidator");function _6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(Su).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Sn.validateBySchema(e,t)}a(_6,"setComponentFileValidator");function d6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(Su).optional()});return Sn.validateBySchema(e,t)}a(d6,"dropComponentFileValidator");function f6(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(Su).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Sn.validateBySchema(e,t)}a(f6,"getComponentFileValidator");function E6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Sn.validateBySchema(e,t)}a(E6,"addComponentValidator");function h6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Sn.validateBySchema(e,t)}a(h6,"dropCustomFunctionProjectValidator");function m6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return Sn.validateBySchema(e,t)}a(m6,"packageComponentValidator");function p6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:Se.string().optional()});return Sn.validateBySchema(e,t)}a(p6,"deployComponentValidator")});var ef=T((xde,jM)=>{"use strict";var Xd=require("joi"),jd=require("path"),KM=require("fs-extra"),{exec:S6}=require("child_process"),T6=require("util"),WM=T6.promisify(S6),Tu=y(),{handleHDBError:ra,hdb_errors:R6}=j(),{HTTP_STATUS_CODES:sa}=R6,Ru=X(),g6=xe(),na=G();Ru.initSync();var AT=Ru.get(Tu.CONFIG_PARAMS.COMPONENTSROOT),QM="npm install --omit=dev --json",A6=`${QM} --dry-run`;jM.exports={installModules:y6,auditModules:I6,installAllRootModules:O6,uninstallRootModule:N6,linkHarperdb:b6};async function O6(e=!1){await Zd(),await gu(e?"npm install --ignore-scripts":"npm install",Ru.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(O6,"installAllRootModules");async function N6(e){await gu(`npm uninstall ${e}`,Ru.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(N6,"uninstallRootModule");async function b6(){await Zd(),await gu(`npm link ${Tu.PACKAGE_ROOT}`,Ru.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(b6,"linkHarperdb");async function gu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await WM(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(gu,"runCommand");async function y6(e){na.info(`starting installModules for request: ${e}`);let t=XM(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?A6:QM;await Zd(),await JM(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 _=jd.join(AT,u),l,d=null;try{let{stdout:f,stderr:E}=await WM(n,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(iL,"runCommand");async function B4(){try{await E4.access(qp)}catch{return!1}let e=await iL(`${qp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return h4.eq(t,P4)}a(B4,"checkNATSServerInstalled");async function Vp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await tL.getClusterUser();if(qi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Yr.trace("create nats connection called");let i=await y4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(Vp,"createConnection");async function H4(){Rs&&(await Rs.drain(),Rs=void 0,Ho=void 0,Fo=void 0,qo=void 0)}a(H4,"closeConnection");var Rs,qo;async function rd(){return qo||(qo=Vp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Rs=await qo),Rs||qo}a(rd,"getConnection");async function Wc(){if(Ho)return Ho;qi(Rs)&&await rd();let{domain:e}=Qc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ho=await Rs.jetstreamManager({domain:e,timeout:6e4}),Ho}a(Wc,"getJetStreamManager");async function oL(){if(Fo)return Fo;qi(Rs)&&await rd();let{domain:e}=Qc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Fo=Rs.jetstream({domain:e,timeout:6e4}),Fo}a(oL,"getJetStream");async function Zt(){let e=Rs||await rd(),t=Ho||await Wc(),r=Fo||await oL();return{connection:e,jsm:t,js:r}}a(Zt,"getNATSReferences");async function F4(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await tL.getClusterUser(),n=await Vp(t,r,s),i=kp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=nL.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 Gp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(F4,"getServerList");async function $p(e,t){let{jsm:r}=await Zt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:rL.File,retention:sL.Limits,subjects:t,discard:I4.Old,max_msgs:n,max_bytes:i,max_age:s})}a($p,"createLocalStream");async function aL(){let{jsm:e}=await Zt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(aL,"listStreams");async function q4(e){let{jsm:t}=await Zt();await t.streams.delete(e)}a(q4,"deleteLocalStream");async function G4(e){let{connection:t}=await Zt(),r=[],s=kp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(nL.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(G4,"listRemoteStreams");async function x4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=jC(),o={durable_name:i,ack_policy:ed.Explicit};t&&(o.deliver_policy=td.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=xp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(x4,"viewStream");async function*k4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=jC(),o={durable_name:i,ack_policy:ed.Explicit};t&&(o.deliver_policy=td.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=xp(_.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(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(k4,"viewStreamIterator");async function V4(e,t,r,s){Yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=cL(s,r);let{js:n}=await Zt(),i=await zc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:eL.encode(s);try{Yr.trace(`publishToStream publishing to subject: ${o}`),U4(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 dL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Yr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await $p(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(V4,"publishToStream");function cL(e,t){t===void 0&&(t=C4());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(cL,"addNatsMsgHeader");function Qc(e){e=e.toLowerCase();let t=Kc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),M4);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return qi(Fp)&&(Fp={port:$c.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:$c.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Kc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),Fp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return qi(Hp)&&(Hp={port:$c.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:$c.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:$c.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:Kc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),Hp;Yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Qc,"getServerConfig");async function $4(e){let{jsm:t}=await Zt(),r=await zc();try{await t.streams.add({name:e.stream_name,storage:rL.File,retention:sL.Limits,max_age:N4,max_bytes:b4,subjects:[`${ge.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:ed.Explicit,durable_name:e.durable_name,deliver_policy:td.All,max_ack_pending:1e4});else throw s}}a($4,"createWorkQueueStream");async function Y4(){let{jsm:e}=await Zt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ed.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:td.All,max_ack_pending:1e4}))}a(Y4,"updateIngestStreamConsumer");async function uL(e,t,r){let{jsm:s}=await Zt(),n=await s.streams.info(t),i=lL(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Z_.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:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(uL,"addSourceToWorkStream");function lL(e){return e.split(".")[1]}a(lL,"extractServerName");async function _L(e,t,r){let{jsm:s}=await Zt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Z_.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(_L,"removeSourceFromWorkStream");async function K4(e,t,r=6e4,s=kp()){if(!Gp.isObject(t))throw new Error("data param must be an object");let n=eL.encode(t),{connection:i}=await Zt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return xp(c.data)}a(K4,"request");function Yp(e){return new Promise(async(t,r)=>{let s=T4(qp,["--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(Yp,"reloadNATS");async function W4(){let{pid_file_path:e}=Qc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Yp(e)}a(W4,"reloadNATSHub");async function Q4(){let{pid_file_path:e}=Qc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Yp(e)}a(Q4,"reloadNATSLeaf");function z4(e,t,r){let s;switch(e.code){case XC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case XC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(z4,"requestErrorHandler");async function J4(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await dL(async()=>{e.subscribe===!0?await uL(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await _L(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(J4,"updateWorkStream");function dL(e){return R4.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(dL,"exclusiveLock");async function fL(e,t){let r=Z_.createNatsTableStreamName(e,t),s=await zc(),n=e3(e,t,s);await $p(r,[n])}a(fL,"createLocalTableStream");async function X4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await fL(s,n)}}a(X4,"createTableStreams");async function EL(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Z_.createNatsTableStreamName(e,t),{jsm:s}=await Zt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Yr.warn(r);else throw r}}a(EL,"purgeTableStream");async function j4(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await EL(e,t[r])}a(j4,"purgeSchemaTableStreams");async function Z4(e){return(await Wc()).streams.info(e)}a(Z4,"getStreamInfo");function e3(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(e3,"createSubjectName");async function zc(){if(Yc)return Yc;if(Yc=(await Wc())?.nc?.info?.server_name,Yc===void 0)throw new Error("Unable to get jetstream manager server name");return Yc}a(zc,"getJsmServerName");async function t3(){let e=await Wc(),t=await zc(),r=await aL();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===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(t3,"updateLocalStreams");function r3(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.get(Oe.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 od=T((wle,TL)=>{"use strict";var Go=Gl(),xo=JC(),s3=F(),n3=require("uuid").v4,Ile=require("clone"),nd=on(),ko=y(),i3=require("util"),Jn=Es(),{handleHDBError:er,hdb_errors:o3}=j(),{HDB_ERROR_MSGS:sd,HTTP_STATUS_CODES:tr}=o3,{SchemaEventMsg:id}=us(),mL=dt(),{getDatabases:a3}=(fe(),Z(Ce)),{transformReq:Vo}=$();TL.exports={createSchema:c3,createSchemaStructure:pL,createTable:u3,createTableStructure:SL,createAttribute:E3,dropSchema:l3,dropTable:_3,dropAttribute:d3,getBackup:h3};async function c3(e){let t=await pL(e);return nd.signalSchemaChange(new id(process.pid,e.operation,e.schema)),t}a(c3,"createSchema");async function pL(e){let t=Go.schema_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(Vo(e),!await xo.checkSchemaExists(e.schema))throw er(new Error,sd.SCHEMA_EXISTS_ERR(e.schema),tr.BAD_REQUEST,ko.LOG_LEVELS.ERROR,sd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Jn.createSchema(e),`database '${e.schema}' successfully created`}a(pL,"createSchemaStructure");async function u3(e){return Vo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await SL(e)}a(u3,"createTable");async function SL(e){let t=Go.create_table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(Go.validateTableResidence(e.residence),!await xo.checkSchemaTableExists(e.schema,e.table))throw er(new Error,sd.TABLE_EXISTS_ERR(e.schema,e.table),tr.BAD_REQUEST,ko.LOG_LEVELS.ERROR,sd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:n3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Jn.createTable(s,e);else throw er(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",tr.BAD_REQUEST);else await Jn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(SL,"createTableStructure");async function l3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Go.schema_object(e),s=t??r;if(s)throw er(s,s.message,tr.BAD_REQUEST,void 0,void 0,!0);Vo(e);let n=await xo.checkSchemaExists(e.schema);if(n)throw er(new Error,n,tr.NOT_FOUND,ko.LOG_LEVELS.ERROR,n,!0);let i=await xo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Jn.dropSchema(e),nd.signalSchemaChange(new id(process.pid,e.operation,e.schema)),await mL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(l3,"dropSchema");async function _3(e){let t=Go.table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);Vo(e);let r=await xo.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,ko.LOG_LEVELS.ERROR,r,!0);return await Jn.dropTable(e),await mL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(_3,"dropTable");async function d3(e){let t=Go.attribute_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);Vo(e);let r=await xo.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,ko.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw er(new Error,"You cannot drop a hash attribute",tr.BAD_REQUEST,void 0,void 0,!0);if(ko.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw er(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,tr.BAD_REQUEST,void 0,void 0,!0);try{return await Jn.dropAttribute(e),f3(e),nd.signalSchemaChange(new id(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw s3.error(`Got an error deleting attribute ${i3.inspect(e)}.`),s}}a(d3,"dropAttribute");function f3(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(f3,"dropAttributeFromGlobal");async function E3(e){Vo(e);let t=a3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw er(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,tr.BAD_REQUEST,void 0,void 0,!0);return await Jn.createAttribute(e),nd.signalSchemaChange(new id(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(E3,"createAttribute");function h3(e){return Jn.getBackup(e)}a(h3,"getBackup")});var gL=T((Lle,RL)=>{"use strict";var{OPERATIONS_ENUM:m3}=y(),Kp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=m3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};RL.exports=Kp});var Wp=T((Mle,yL)=>{"use strict";var p3=Es(),Ule=gL(),ad=$(),cd=y(),S3=X(),{handleHDBError:AL,hdb_errors:T3}=j(),{HDB_ERROR_MSGS:OL,HTTP_STATUS_CODES:NL}=T3,R3=Object.values(cd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),bL="To use this operation audit log must be enabled in harperdb-config.yaml";yL.exports=g3;async function g3(e){if(ad.isEmpty(e.schema))throw new Error(OL.SCHEMA_REQUIRED_ERR);if(ad.isEmpty(e.table))throw new Error(OL.TABLE_REQUIRED_ERR);if(!S3.get(cd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw AL(new Error,bL,NL.BAD_REQUEST,cd.LOG_LEVELS.ERROR,bL,!0);let t=ad.checkSchemaTableExist(e.schema,e.table);if(t)throw AL(new Error,t,NL.NOT_FOUND,cd.LOG_LEVELS.ERROR,t,!0);if(!ad.isEmpty(e.search_type)&&R3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await p3.readAuditLog(e)}a(g3,"readAuditLog")});var wL=T((vle,IL)=>{"use strict";var{OPERATIONS_ENUM:A3}=y(),Qp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=A3.GET_BACKUP,this.schema=t,this.table=r}};IL.exports=Qp});var DL=T((qle,LL)=>{"use strict";var O3=Es(),Hle=wL(),zp=$(),N3=y(),Fle=X(),{handleHDBError:b3,hdb_errors:y3}=j(),{HDB_ERROR_MSGS:CL,HTTP_STATUS_CODES:I3}=y3;LL.exports=w3;async function w3(e){if(zp.isEmpty(e.schema))throw new Error(CL.SCHEMA_REQUIRED_ERR);if(zp.isEmpty(e.table))throw new Error(CL.TABLE_REQUIRED_ERR);let t=zp.checkSchemaTableExist(e.schema,e.table);if(t)throw b3(new Error,t,I3.NOT_FOUND,N3.LOG_LEVELS.ERROR,t,!0);return await O3.getBackup(read_audit_log_object)}a(w3,"getBackup")});var HL=T((xle,BL)=>{var Xn=require("validate.js"),ML=xe(),$o=y(),{handleHDBError:C3,hdb_errors:L3}=j(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:D3}=L3,Jp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),U3={STRUCTURE_USER:"structure_user"},UL=Object.values($o.ROLE_TYPES_ENUM),M3="attribute_permissions",P3="attribute_name",{PERMS_CRUD_ENUM:Yo}=$o,v3=[M3,...Object.values(Yo)],PL=[Yo.READ,Yo.INSERT,Yo.UPDATE],B3=[P3,...PL];function H3(e){let t=Jp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,vL(e,t)}a(H3,"addRoleValidation");function F3(e){let t=Jp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,vL(e,t)}a(F3,"alterRoleValidation");function q3(e){let t=Jp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ML.validateObject(e,t)}a(q3,"dropRoleValidation");var G3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function vL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)G3.includes(s[o])||n.push(s[o]);n.length>0&&st(je.INVALID_ROLE_JSON_KEYS(n),r);let i=ML.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=x3(e);o&&st(o,r),UL.forEach(c=>{e.permission[c]&&!Xn.isBoolean(e.permission[c])&&st(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(UL.indexOf(o)<0){if(o===U3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(je.SCHEMA_NOT_FOUND(d),r)}continue}st(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(je.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){st(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{v3.includes(l)||st(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Yo).forEach(l=>{Xn.isDefined(_[l])?Xn.isBoolean(_[l])||st(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(je.TABLE_PERM_MISSING(l),r,o,u)}),Xn.isDefined(_.attribute_permissions)){if(!Xn.isArray(_.attribute_permissions)){st(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(je.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!B3.includes(p)&&p!==Yo.DELETE&&st(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Xn.isDefined(E.attribute_name)){st(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}PL.forEach(p=>{Xn.isDefined(E[p])?Xn.isBoolean(E[p])||st(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(je.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;st(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return k3(r)}a(vL,"customValidate");BL.exports={addRoleValidation:H3,alterRoleValidation:F3,dropRoleValidation:q3};function x3(e){let{operation:t,permission:r}=e;if(t===$o.OPERATIONS_ENUM.ADD_ROLE||t===$o.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 je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?$o.ROLE_TYPES_ENUM.SUPER_USER:$o.ROLE_TYPES_ENUM.CLUSTER_USER;return je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(x3,"validateNoSUPerms");function k3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:je.ROLE_PERMS_ERROR,...e};return C3(new Error,s,D3.BAD_REQUEST)}else return null}a(k3,"generateRolePermResponse");function st(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(st,"addPermError")});var rS=T((Vle,xL)=>{"use strict";var FL=xr(),qL=Gr(),V3=Di(),jp=HL(),Zp=on(),$3=require("uuid").v4,Y3=require("util"),ud=y(),K3=$(),eS=qL.searchByValue,W3=qL.searchByHash,Q3=Y3.promisify(V3.delete),z3=Ms(),J3=Oo(),{hdb_errors:X3,handleHDBError:Ko}=j(),{HDB_ERROR_MSGS:GL,HTTP_STATUS_CODES:ld}=X3,{UserEventMsg:tS}=us();xL.exports={addRole:j3,alterRole:Z3,dropRole:eX,listRoles:tX};function Xp(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(Xp,"scrubRoleDetails");async function j3(e){let t=jp.addRoleValidation(e);if(t)throw t;e=Xp(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 eS(r)||[])}catch(i){throw Ko(i)}if(s&&s.length>0)throw Ko(new Error,GL.ROLE_ALREADY_EXISTS(e.role),ld.CONFLICT,void 0,void 0,!0);e.id||(e.id=$3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FL.insert(n),Zp.signalUserChange(new tS(process.pid)),e=Xp(e),e}a(j3,"addRole");async function Z3(e){let t=jp.alterRoleValidation(e);if(t)throw t;e=Xp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FL.update(r)}catch(n){throw Ko(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ko(new Error,"Invalid role id",ld.BAD_REQUEST,void 0,void 0,!0);return await Zp.signalUserChange(new tS(process.pid)),e}a(Z3,"alterRole");async function eX(e){let t=jp.dropRoleValidation(e);if(t)throw Ko(new Error,t,ld.BAD_REQUEST,void 0,void 0,!0);let r=new J3(ud.SYSTEM_SCHEMA_NAME,ud.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await W3(r));if(s.length===0)throw Ko(new Error,GL.ROLE_NOT_FOUND,ld.NOT_FOUND,void 0,void 0,!0);let n=new z3(ud.SYSTEM_SCHEMA_NAME,ud.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await eS(n)),o=!1;if(K3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Q3(c),Zp.signalUserChange(new tS(process.pid)),`${s[0].role} successfully deleted`}a(eX,"dropRole");async function tX(){return eS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(tX,"listRoles")});var YL=T((Yle,$L)=>{"use strict";var rX=X(),jn=require("joi"),sX=xe(),kL=require("moment"),nX=require("fs-extra"),sS=require("path"),iX=require("lodash"),Jc=y(),{LOG_LEVELS:Gi}=y(),oX="YYYY-MM-DD hh:mm:ss",aX=sS.resolve(__dirname,"../logs");$L.exports=function(e){return sX.validateBySchema(e,cX)};var cX=jn.object({from:jn.custom(VL),until:jn.custom(VL),level:jn.valid(Gi.NOTIFY,Gi.FATAL,Gi.ERROR,Gi.WARN,Gi.INFO,Gi.DEBUG,Gi.TRACE),order:jn.valid("asc","desc"),limit:jn.number().min(1),start:jn.number().min(0),log_name:jn.custom(uX)});function VL(e,t){if(kL(e,kL.ISO_8601).format(oX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(VL,"validateDatetime");function uX(e,t){if(iX.invert(Jc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=rX.get(Jc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Jc.LOG_NAMES.HDB:e,i=n===Jc.LOG_NAMES.INSTALL?sS.join(aX,Jc.LOG_NAMES.INSTALL):sS.join(s,n);return nX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(uX,"validateReadLogPath")});var iS=T((Wle,WL)=>{"use strict";var _d=y(),lX=F(),_X=X(),dX=YL(),nS=require("path"),KL=require("fs-extra"),{once:fX}=require("events"),{handleHDBError:EX,hdb_errors:hX}=j(),{PACKAGE_ROOT:mX}=y(),pX=nS.join(mX,"logs"),SX=1e3,TX=200;WL.exports=RX;async function RX(e){let t=dX(e);if(t)throw EX(t,t.message,hX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=_X.get(_d.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?_d.LOG_NAMES.HDB:e.log_name,n=s===_d.LOG_NAMES.INSTALL?nS.join(pX,_d.LOG_NAMES.INSTALL):nS.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?SX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(KL.statSync(n).size-(h+5)*TX,0));let S=KL.createReadStream(n,{start:p});S.on("error",G=>{lX.error(G)});let g=0,b=[],O="",Y;S.on("data",G=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=O+G;let K=0,B;for(;(B=w.exec(G))&&!S.destroyed;){Y&&(Y.message=G.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}O=G.slice(K)}),S.on("end",G=>{S.destroyed||Y&&(Y.message=O.trim(),Q(Y))}),S.resume();function Q(G){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),G.level===o&&w>=K&&w<=B&&g<E?g++:G.level===o&&w>=K&&w<=B&&(Zn(G,f,b),g++,g===h&&S.destroy());break;case(i&&c):w=new Date(G.timestamp),K=new Date(u),G.level===o&&w>=K&&g<E?g++:G.level===o&&w>=K&&(Zn(G,f,b),g++,g===h&&S.destroy());break;case(i&&_):w=new Date(G.timestamp),B=new Date(l),G.level===o&&w<=B&&g<E?g++:G.level===o&&w<=B&&(Zn(G,f,b),g++,g===h&&S.destroy());break;case(c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&g<E?g++:w>=K&&w<=B&&(Zn(G,f,b),g++,g===h&&S.destroy());break;case i:G.level===o&&g<E?g++:G.level===o&&(Zn(G,f,b),g++,g===h&&S.destroy());break;case c:w=new Date(G.timestamp),K=new Date(u),w>=K&&g<E?g++:w>=K&&g>=E&&(Zn(G,f,b),g++,g===h&&S.destroy());break;case _:w=new Date(G.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(Zn(G,f,b),g++,g===h&&S.destroy());break;default:g<E?g++:(Zn(G,f,b),g++,g===h&&S.destroy())}}return a(Q,"onLogMessage"),await fX(S,"close"),b}a(RX,"readLog");function Zn(e,t,r){t==="desc"?gX(e,r):t==="asc"?AX(e,r):r.push(e)}a(Zn,"pushLineToResult");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,"insertDescending");function AX(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(AX,"insertAscending")});var fd=T((jle,XL)=>{"use strict";var oS=require("joi"),{string:dd,boolean:QL,date:OX}=oS.types(),NX=xe(),{validateSchemaExists:zle,validateTableExists:Jle,validateSchemaName:Xle}=Ds(),bX=y(),yX=ke(),zL=X();zL.initSync();var IX=dd.invalid(zL.get(bX.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(),JL={operation:dd.valid("add_node","update_node"),node_name:IX,subscriptions:oS.array().items({table:dd.optional(),schema:dd.required(),subscribe:QL.required(),publish:QL.required().custom(CX),start_time:OX.iso()}).min(1).required()};function wX(e){return NX.validateBySchema(e,oS.object(JL))}a(wX,"addUpdateNodeValidator");function CX(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(CX,"checkForFalsy");XL.exports={addUpdateNodeValidator:wX,validation_schema:JL}});var ZL=T((e_e,jL)=>{var LX=xe(),DX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};jL.exports=function(e){return LX.validateObject(e,DX)}});var cS=T((t_e,eD)=>{"use strict";var UX=y().OPERATIONS_ENUM,aS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=UX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};eD.exports=aS});var rD=T((s_e,tD)=>{"use strict";var MX={OPERATION:"operation",REFRESH:"refresh"},uS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},lS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};tD.exports={JWTTokens:uS,TOKEN_TYPE_ENUM:MX,JWTRSAKeys:lS}});var Zc=T((i_e,oD)=>{"use strict";var jc=require("jsonwebtoken"),_S=require("fs-extra"),dS=$(),Kr=y(),{handleHDBError:rr,hdb_errors:PX}=j(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:nr}=PX,Xc=F(),sD=E_(),hS=kr(),vX=xr().update,BX=cS(),HX=on(),{UserEventMsg:FX}=us(),ei=X();ei.initSync();var fS=require("path"),{JWTTokens:qX,JWTRSAKeys:GX,TOKEN_TYPE_ENUM:Ed}=rD(),xX=ei.get(Kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ei.get(Kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kX=ei.get(Kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ei.get(Kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",hd="RS256",ES;oD.exports={createTokens:VX,validateOperationToken:YX,refreshOperationToken:$X,validateRefreshToken:iD};async function VX(e){if(dS.isEmpty(e)||typeof e!="object")throw rr(new Error,nr.INVALID_AUTH_OBJECT,sr.BAD_REQUEST,void 0,void 0,!0);if(dS.isEmpty(e.username))throw rr(new Error,nr.USERNAME_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);if(dS.isEmpty(e.password))throw rr(new Error,nr.PASSWORD_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await hS.findAndValidateUser(e.username,e.password),!t)throw rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Xc.error(f),rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}let r=await md(),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 nD(i,r.private_key,r.passphrase),c=await jc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kX,algorithm:hd,subject:Ed.REFRESH}),u=sD.hash(c),_=new BX(Kr.SYSTEM_SCHEMA_NAME,Kr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await vX(_)}catch(f){Xc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw rr(new Error,nr.REFRESH_TOKEN_SAVE_FAILED,sr.INTERNAL_SERVER_ERROR);return HX.signalUserChange(new FX(process.pid)),new qX(o,c)}a(VX,"createTokens");async function nD(e,t,r){return await jc.sign(e,{key:t,passphrase:r},{expiresIn:xX,algorithm:hd,subject:Ed.OPERATION})}a(nD,"signOperationToken");async function md(){if(ES===void 0)try{let e=fS.join(ei.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=fS.join(ei.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=fS.join(ei.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await _S.readFile(e)).toString(),n=(await _S.readFile(t)).toString(),i=(await _S.readFile(r)).toString();ES=new GX(i,n,s)}catch(e){throw Xc.error(e),rr(new Error,nr.NO_ENCRYPTION_KEYS,sr.INTERNAL_SERVER_ERROR)}return ES}a(md,"getJWTRSAKeys");async function $X(e){if(!e)throw rr(new Error,nr.INVALID_BODY,sr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw rr(new Error,nr.REFRESH_TOKEN_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);await iD(e.refresh_token);let t=await md(),r=await jc.decode(e.refresh_token);return{operation_token:await nD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a($X,"refreshOperationToken");async function YX(e){try{let t=await md(),r=await jc.verify(e,t.public_key,{algorithms:hd,subject:Ed.OPERATION});return await hS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Xc.warn(t),t.name&&t.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}}a(YX,"validateOperationToken");async function iD(e){let t;try{let r=await md(),s=await jc.verify(e,r.public_key,{algorithms:hd,subject:Ed.REFRESH});t=await hS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Xc.warn(r),r.name&&r.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}if(!sD.validate(t.refresh_token,e))throw rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED);return t}a(iD,"validateRefreshToken")});var mS=T((c_e,uD)=>{"use strict";var KX=ZL(),Wo=require("passport"),WX=require("passport-local").Strategy,QX=require("passport-http").BasicStrategy,zX=require("util"),JX=kr(),cD=zX.callbackify(JX.findAndValidateUser),a_e=Er(),XX=y(),aD=Zc();Wo.use(new WX(function(e,t,r){cD(e,t,r)}));Wo.use(new QX(function(e,t,r){cD(e,t,r)}));Wo.serializeUser(function(e,t){t(null,e)});Wo.deserializeUser(function(e,t){t(null,e)});function jX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let 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":Wo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===XX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?aD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):aD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Wo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(jX,"authorize");function ZX(e,t){let r=KX(e);if(r){t(r);return}let 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(ZX,"checkPermissions");uD.exports={authorize:jX,checkPermissions:ZX}});var Qo=T((l_e,lD)=>{"use strict";var pS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},SS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};lD.exports={Node:pS,NodeSubscription:SS}});var dD=T((d_e,_D)=>{"use strict";var ej=y().OPERATIONS_ENUM,TS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=ej.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_D.exports=TS});var eu=T((E_e,fD)=>{"use strict";var RS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},gS=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)}};fD.exports={RemotePayloadObject:RS,RemotePayloadSubscription:gS}});var hD=T((m_e,ED)=>{"use strict";var AS=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}};ED.exports=AS});var SD=T((g_e,pD)=>{"use strict";var tj=hD(),S_e=ze(),mD=Ue(),rj=F(),{getSchemaPath:T_e,getTransactionAuditStorePath:R_e}=Be(),{getDatabases:sj}=(fe(),Z(Ce));pD.exports=nj;async function nj(e){let t=new tj;try{let r=sj()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await mD.environmentDataSize(schema_path,e.name),o=await mD.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(nj,"lmdbGetTableSize")});var RD=T((O_e,TD)=>{"use strict";var OS=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}};TD.exports=OS});var zo=T((I_e,ND)=>{"use strict";var ij=require("fs-extra"),oj=require("path"),xt=require("systeminformation"),ti=F(),aj=dt(),NS=ke(),Sd=y(),cj=SD(),OD=yi(),{getThreadInfo:gD}=Je(),PS=X();PS.initSync();var uj=RD(),{openEnvironment:b_e}=Ue(),{getSchemaPath:y_e}=Be(),{database:lj}=(fe(),Z(Ce)),pd;ND.exports={getHDBProcessInfo:wS,getNetworkInfo:LS,getDiskInfo:CS,getMemoryInfo:IS,getCPUInfo:yS,getTimeInfo:bS,getSystemInformation:DS,systemInformation:_j,getTableSize:US,getMetrics:MS};function bS(){return xt.time()}a(bS,"getTimeInfo");async function yS(){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:g,...b}=await xt.currentLoad();return b.cpus=[],g.forEach(O=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:G,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=O;b.cpus.push(x)}),l.current_load=b,l}catch(e){return ti.error(`error in getCPUInfo: ${e}`),{}}}a(yS,"getCPUInfo");async function IS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return ti.error(`error in getMemoryInfo: ${e}`),{}}}a(IS,"getMemoryInfo");async function wS(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await ij.readFile(oj.join(PS.get(Sd.CONFIG_PARAMS.ROOTPATH),Sd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Sd.NODE_ERROR_CODES.ENOENT)ti.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 ti.error(`error in getHDBProcessInfo: ${t}`),e}}a(wS,"getHDBProcessInfo");async function CS(){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 ti.error(`error in getDiskInfo: ${t}`),e}}a(CS,"getDiskInfo");async function LS(){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 ti.error(`error in getNetworkInfo: ${t}`),e}}a(LS,"getNetworkInfo");async function DS(){if(pd!==void 0)return pd;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,pd=e,pd}catch(t){return ti.error(`error in getSystemInformation: ${t}`),e}}a(DS,"getSystemInformation");async function US(){let e=[],t=await OD.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await cj(s));return e}a(US,"getTableSize");async function MS(){let e=await OD.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=lj({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){ti.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(MS,"getMetrics");async function AD(){if(PS.get(Sd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await aj.getNATSReferences(),r=await t.streams.info(NS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(NS.WORK_QUEUE_CONSUMER_NAMES.stream_name,NS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(AD,"getNatsStreamInfo");async function _j(e){let t=new uj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await DS(),t.time=bS(),t.cpu=await yS(),t.memory=await IS(),t.disk=await CS(),t.network=await LS(),t.harperdb_processes=await wS(),t.table_size=await US(),t.metrics=await MS(),t.threads=await gD(),t.replication=await AD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await DS();break;case"time":t.time=bS();break;case"cpu":t.cpu=await yS();break;case"memory":t.memory=await IS();break;case"disk":t.disk=await CS();break;case"network":t.network=await LS();break;case"harperdb_processes":t.harperdb_processes=await wS();break;case"table_size":t.table_size=await US();break;case"database_metrics":case"metrics":t.metrics=await MS();break;case"threads":t.threads=await gD();break;case"replication":t.replication=await AD();break;default:break}return t}a(_j,"systemInformation")});var vS=T((C_e,bD)=>{"use strict";bD.exports={version:dj,printVersion:fj};var Td=Vc();function dj(){if(Td)return Td.version}a(dj,"version");function fj(){Td&&console.log(`HarperDB Version ${Td.version}`)}a(fj,"printVersion")});var En=T((M_e,CD)=>{"use strict";var Ej=xr(),BS=$(),hj=require("util"),xi=y(),yD=X();yD.initSync();var mj=mS(),ID=Gr(),{Node:D_e,NodeSubscription:U_e}=Qo(),pj=Oo(),Sj=dD(),{RemotePayloadObject:Tj,RemotePayloadSubscription:Rj}=eu(),{handleHDBError:gj,hdb_errors:Aj}=j(),{HTTP_STATUS_CODES:Oj,HDB_ERROR_MSGS:Nj}=Aj,bj=Ms(),yj=zo(),Ij=vS(),{getDatabases:wj}=(fe(),Z(Ce)),Cj=hj.promisify(mj.authorize),Lj=ID.searchByHash,Dj=ID.searchByValue;CD.exports={authHeaderToUser:Uj,isEmpty:Mj,getNodeRecord:Pj,upsertNodeRecord:vj,buildNodePayloads:Bj,checkClusteringEnabled:Hj,getAllNodeRecords:Fj,getSystemInfo:qj,reverseSubscription:wD};async function Uj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cj(t,null),e}a(Uj,"authHeaderToUser");function Mj(e){return e==null}a(Mj,"isEmpty");async function Pj(e){let t=new pj(xi.SYSTEM_SCHEMA_NAME,xi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Lj(t)}a(Pj,"getNodeRecord");async function vj(e){let t=new Sj(xi.SYSTEM_SCHEMA_NAME,xi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ej.upsert(t)}a(vj,"upsertNodeRecord");function wD(e){if(BS.isEmpty(e.subscribe)||BS.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(wD,"reverseSubscription");function Bj(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=BS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=wD(c),E=wj()[u]?.[_],h=new Rj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new Tj(r,t,n,s)}a(Bj,"buildNodePayloads");function Hj(){if(!yD.get(xi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw gj(new Error,Nj.CLUSTERING_NOT_ENABLED,Oj.BAD_REQUEST,void 0,void 0,!0)}a(Hj,"checkClusteringEnabled");async function Fj(){let e=new bj(xi.SYSTEM_SCHEMA_NAME,xi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Dj(e))}a(Fj,"getAllNodeRecords");async function qj(){let e=await yj.getSystemInformation();return{hdb_version:Ij.version(),node_version:e.node_version,platform:e.platform}}a(qj,"getSystemInfo")});var HS=T((v_e,HD)=>{"use strict";var Rd=dt(),LD=$(),DD=ke(),UD=y(),gd=F(),MD=od(),Gj=sm(),{RemotePayloadObject:xj}=eu(),{handleHDBError:PD,hdb_errors:kj}=j(),{HTTP_STATUS_CODES:vD}=kj,{NodeSubscription:BD}=Qo();HD.exports=Vj;async function Vj(e,t){let r;try{r=await Rd.request(`${t}.${DD.REQUEST_SUFFIX}`,new xj(UD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),gd.trace("Response from remote describe all request:",r)}catch(o){gd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Rd.requestErrorHandler(o,"add_node",t);throw PD(new Error,c,vD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===DD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw PD(new Error,o,vD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===UD.SYSTEM_SCHEMA_NAME){await Rd.createLocalTableStream(c,u);let h=new BD(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=LD.doesSchemaExist(c),l=s[c]!==void 0,d=u?LD.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(gd.trace(`addNode creating schema: ${c}`),await MD.createSchema({operation:"create_schema",schema:c})),!d&&f){gd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Gj(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await MD.createTable(h)}await Rd.createLocalTableStream(c,u);let E=new BD(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(Vj,"reviewSubscriptions")});var Nd=T((H_e,GD)=>{"use strict";var{handleHDBError:Ad,hdb_errors:$j}=j(),{HTTP_STATUS_CODES:Od}=$j,{addUpdateNodeValidator:Yj}=fd(),tu=F(),qD=y(),FD=ke(),Kj=$(),FS=dt(),ru=En(),Wj=X(),Qj=HS(),{Node:zj,NodeSubscription:Jj}=Qo(),{broadcast:Xj}=Je(),jj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",eZ=Wj.get(qD.CONFIG_PARAMS.CLUSTERING_NODENAME);GD.exports=tZ;async function tZ(e,t=!1){tu.trace("addNode called with:",e),ru.checkClusteringEnabled();let r=Yj(e);if(r)throw Ad(r,r.message,Od.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await ru.getNodeRecord(s);if(!Kj.isEmptyOrZeroLength(d))throw Ad(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Od.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Qj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=jj,o;let c=ru.buildNodePayloads(n,eZ,qD.OPERATIONS_ENUM.ADD_NODE,await ru.getSystemInfo());tu.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${FD.REQUEST_SUFFIX}`,c)}catch(d){tu.error(`addNode received error from request: ${d}`);let f=FS.requestErrorHandler(d,"add_node",s);throw Ad(new Error,f,Od.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Ad(new Error,d,Od.INTERNAL_SERVER_ERROR,"error",d)}tu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];tu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await FS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Jj(E.schema,E.table,E.publish,E.subscribe))}let l=new zj(s,_,u.system_info);return await ru.upsertNodeRecord(l),Xj({type:"nats_update"}),i.length>0?o.message=Zj:o.message=`Successfully added '${s}' to manifest`,o}a(tZ,"addNode")});var GS=T((q_e,VD)=>{"use strict";var{handleHDBError:bd,hdb_errors:rZ}=j(),{HTTP_STATUS_CODES:yd}=rZ,{addUpdateNodeValidator:sZ}=fd(),su=F(),kD=y(),xD=ke(),nZ=$(),qS=dt(),nu=En(),iZ=X(),{cloneDeep:oZ}=require("lodash"),aZ=HS(),{NodeSubscription:cZ}=Qo(),{broadcast:uZ}=Je(),lZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",_Z="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dZ=iZ.get(kD.CONFIG_PARAMS.CLUSTERING_NODENAME);VD.exports=fZ;async function fZ(e){su.trace("updateNode called with:",e),nu.checkClusteringEnabled();let t=sZ(e);if(t)throw bd(t,t.message,yd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=oZ(await nu.getNodeRecord(r));if(nZ.isEmptyOrZeroLength(s))throw bd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,yd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await aZ(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=lZ,o;let c=nu.buildNodePayloads(n,dZ,kD.OPERATIONS_ENUM.UPDATE_NODE,await nu.getSystemInfo());su.trace("updateNode sending remote payload:",c);let u;try{u=await qS.request(`${r}.${xD.REQUEST_SUFFIX}`,c)}catch(_){su.error(`updateNode received error from request: ${_}`);let l=qS.requestErrorHandler(_,"update_node",r);throw bd(new Error,l,yd.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===xD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw bd(new Error,_,yd.INTERNAL_SERVER_ERROR,"error",_)}su.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];su.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await qS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await EZ(s[0],n,u.system_info),i.length>0?o.message=_Z:o.message=`Successfully updated '${r}'`,o}a(fZ,"updateNode");async function EZ(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 cZ(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await nu.upsertNodeRecord(s),uZ({type:"nats_update"})}a(EZ,"updateNodeTable")});var QD=T((x_e,WD)=>{"use strict";var KD=require("joi"),{string:$D}=KD.types(),hZ=xe(),YD=y(),mZ=X(),pZ=ke();WD.exports=SZ;function SZ(e){let t=$D.invalid(mZ.get(YD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(pZ.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=KD.object({operation:$D.valid(YD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return hZ.validateBySchema(e,r)}a(SZ,"removeNodeValidator")});var wd=T((V_e,eU)=>{"use strict";var{handleHDBError:zD,hdb_errors:TZ}=j(),{HTTP_STATUS_CODES:JD}=TZ,RZ=QD(),iu=F(),XD=En(),gZ=$(),Id=y(),jD=ke(),ZD=dt(),AZ=X(),{RemotePayloadObject:OZ}=eu(),{NodeSubscription:NZ}=Qo(),bZ=fc(),yZ=Di(),{broadcast:IZ}=Je(),wZ=AZ.get(Id.CONFIG_PARAMS.CLUSTERING_NODENAME);eU.exports=CZ;async function CZ(e){iu.trace("removeNode called with:",e),XD.checkClusteringEnabled();let t=RZ(e);if(t)throw zD(t,t.message,JD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await XD.getNodeRecord(r);if(gZ.isEmptyOrZeroLength(s))throw zD(new Error,`Node '${r}' was not found.`,JD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new OZ(Id.OPERATIONS_ENUM.REMOVE_NODE,wZ,[]),i,o=!1;try{i=await ZD.request(`${r}.${jD.REQUEST_SUFFIX}`,n),iu.trace("Remove node reply from remote node:",r,i)}catch(u){iu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];iu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new NZ(l.schema,l.table,!1,!1);await ZD.updateWorkStream(d,r)}let c=new bZ(Id.SYSTEM_SCHEMA_NAME,Id.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await yZ.deleteRecord(c),IZ({type:"nats_update"}),i?.status===jD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(iu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(CZ,"removeNode")});var sU=T((Y_e,rU)=>{"use strict";var tU=require("joi"),{string:LZ,array:DZ}=tU.types(),UZ=xe(),MZ=fd();rU.exports=PZ;function PZ(e){let t=tU.object({operation:LZ.valid("configure_cluster").required(),connections:DZ.items(MZ.validation_schema).required()});return UZ.validateBySchema(e,t)}a(PZ,"configureClusterValidator")});var xS=T((W_e,cU)=>{"use strict";var vZ=y(),Cd=F(),BZ=$(),HZ=wd(),FZ=Nd(),nU=En(),qZ=sU(),{handleHDBError:iU,hdb_errors:GZ}=j(),{HTTP_STATUS_CODES:oU}=GZ,xZ="Configure cluster complete.",kZ="Failed to configure the cluster. Check the logs for more details.",VZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";cU.exports=$Z;async function $Z(e){Cd.trace("configure cluster called with:",e),nU.checkClusteringEnabled();let t=qZ(e);if(t)throw iU(t,t.message,oU.BAD_REQUEST,void 0,void 0,!0);let r=await nU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(aU(HZ,{operation:vZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Cd.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(aU(FZ,E,E.node_name))}let c=await Promise.allSettled(i);Cd.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"&&(Cd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(BZ.isEmptyOrZeroLength(u))return{message:xZ,connections:_};if(l)return{message:VZ,failed_nodes:u,connections:_};throw iU(new Error,kZ,oU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a($Z,"configureCluster");async function aU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(aU,"functionWrapper")});var lU=T((z_e,uU)=>{"use strict";var Ld=require("joi"),YZ=xe(),{validateSchemaExists:KZ,validateTableExists:WZ,validateSchemaName:QZ}=Ds(),zZ=Ld.object({operation:Ld.string().valid("purge_stream"),schema:Ld.string().custom(KZ).custom(QZ).required(),table:Ld.string().custom(WZ).required()});function JZ(e){return YZ.validateBySchema(e,zZ)}a(JZ,"purgeStreamValidator");uU.exports=JZ});var kS=T((X_e,_U)=>{"use strict";var{handleHDBError:XZ,hdb_errors:jZ}=j(),{HTTP_STATUS_CODES:ZZ}=jZ,e5=lU(),t5=dt(),r5=En();_U.exports=s5;async function s5(e){let t=e5(e);if(t)throw XZ(t,t.message,ZZ.BAD_REQUEST,void 0,void 0,!0);r5.checkClusteringEnabled();let{schema:r,table:s}=e;return await t5.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(s5,"purgeStream")});var YS=T((Z_e,pU)=>{"use strict";var $S=En(),n5=dt(),EU=X(),Dd=y(),ki=ke(),i5=$(),VS=F(),{RemotePayloadObject:o5}=eu(),{ErrorCode:dU}=require("nats"),fU=EU.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED),hU=EU.get(Dd.CONFIG_PARAMS.CLUSTERING_NODENAME);pU.exports={clusterStatus:a5,buildNodeStatus:mU};async function a5(){let e={node_name:hU,is_enabled:fU,connections:[]};if(!fU)return e;let t=await $S.getAllNodeRecords();if(i5.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(mU(t[s],e.connections));return await Promise.allSettled(r),e}a(a5,"clusterStatus");async function mU(e,t){let r=e.name,s=new o5(Dd.OPERATIONS_ENUM.CLUSTER_STATUS,hU,void 0,await $S.getSystemInfo()),n,i,o=ki.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await n5.request(ki.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ki.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ki.CLUSTER_STATUS_STATUSES.CLOSED,VS.error(`Error getting node status from ${r} `,n))}catch(u){VS.warn(`Error getting node status from ${r}`,u),u.code===dU.NoResponders?o=ki.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===dU.Timeout?o=ki.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ki.CLUSTER_STATUS_STATUSES.CLOSED}let c=new c5(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!==Dd.PRE_4_0_0_VERSION&&await $S.upsertNodeRecord(u)}catch(u){VS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(mU,"buildNodeStatus");function c5(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(c5,"NodeStatusObject")});var WS=T((tde,SU)=>{"use strict";var{handleHDBError:u5,hdb_errors:l5}=j(),{HTTP_STATUS_CODES:_5}=l5,d5=dt(),f5=En(),KS=$(),Ud=require("joi"),E5=xe(),h5=2e3,m5=Ud.object({timeout:Ud.number().min(1),connected_nodes:Ud.boolean(),routes:Ud.boolean()});SU.exports=p5;async function p5(e){f5.checkClusteringEnabled();let t=E5.validateBySchema(e,m5);if(t)throw u5(t,t.message,_5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||KS.autoCastBoolean(s),o=n===void 0||KS.autoCastBoolean(n),c={nodes:[]},u=await d5.getServerList(r??h5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:KS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(p5,"clusterNetwork")});var AU=T((sde,gU)=>{"use strict";var QS=require("joi"),TU=xe(),{route_constraints:RU}=Vm();gU.exports={setRoutesValidator:S5,deleteRoutesValidator:T5};function S5(e){let t=QS.object({server:QS.valid("hub","leaf").required(),routes:RU.required()});return TU.validateBySchema(e,t)}a(S5,"setRoutesValidator");function T5(e){let t=QS.object({routes:RU.required()});return TU.validateBySchema(e,t)}a(T5,"deleteRoutesValidator")});var JS=T((ide,yU)=>{"use strict";var Vi=Ar(),zS=$(),Md=y(),OU=AU(),{handleHDBError:NU,hdb_errors:R5}=j(),{HTTP_STATUS_CODES:bU}=R5,g5="cluster routes successfully set",A5="cluster routes successfully deleted";yU.exports={setRoutes:O5,getRoutes:N5,deleteRoutes:b5};function O5(e){let t=OU.setRoutesValidator(e);if(t)throw NU(t,t.message,bU.BAD_REQUEST,void 0,void 0,!0);let r=Vi.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=zS.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"?Vi.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Vi.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:g5,set:o,skipped:i}}a(O5,"setRoutes");function N5(){let e=Vi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(N5,"getRoutes");function b5(e){let t=OU.deleteRoutesValidator(e);if(t)throw NU(t,t.message,bU.BAD_REQUEST,void 0,void 0,!0);let r=Vi.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=zS.isEmptyOrZeroLength(s)?null:s,Vi.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=zS.isEmptyOrZeroLength(n)?null:n,Vi.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:A5,deleted:i,skipped:o}}a(b5,"deleteRoutes")});var wU=T((ade,IU)=>{"use strict";var ou=require("alasql"),$i=require("recursive-iterator"),gs=F(),y5=$(),au=y(),XS=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=>au.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=>!au.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][au.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=I5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!au.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new ou.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 I5(e){return e.filter(t=>t[au.PERMS_CRUD_ENUM.READ])}a(I5,"filterReadRestrictedAttrs");function w5(e,t,r,s,n){C5(e,t,r,s,n)}a(w5,"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 C5(e,t,r,s,n){if(!e){gs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ou.yy.Insert?M5(e,t,r):e instanceof ou.yy.Select?L5(e,t,r,s,n):e instanceof ou.yy.Update?D5(e,t,r):e instanceof ou.yy.Delete?U5(e,t,r):gs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(C5,"getRecordAttributesAST");function L5(e,t,r,s,n){if(!e){gs.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)){gs.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 $i(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{gs.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 $i(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{gs.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 $i(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{gs.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 $i(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{gs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(L5,"getSelectAttributes");function D5(e,t,r){if(!e){gs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new $i(e.columns),n=e.table.databaseid;cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(D5,"getUpdateAttributes");function U5(e,t,r){if(!e){gs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new $i(e.where),n=e.table.databaseid;cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(U5,"getDeleteAttributes");function M5(e,t,r){if(!e){gs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new $i(e.columns),n=e.into.databaseid;cu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.into.tableid,n,i.columnid,t,r)}a(M5,"getInsertAttributes");function jS(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(jS,"pushAttribute");IU.exports=XS});var tT=T((ude,UU)=>{var Pd=Oc(),CU=require("chalk"),Lr=F(),LU=require("prompt"),{promisify:P5}=require("util"),ZS=y(),v5=require("fs-extra"),B5=require("path"),H5=$(),F5=vS(),DU=X();DU.initSync();var q5=require("moment"),G5=P5(LU.get),x5=B5.join(DU.getHdbBasePath(),ZS.LICENSE_KEY_DIR_NAME,ZS.LICENSE_FILE_NAME,ZS.LICENSE_FILE_NAME);UU.exports={getFingerprint:V5,setLicense:k5,parseLicense:eT,register:$5,getRegistrationInfo:K5};async function k5(e){if(e&&e.key&&e.company){try{Lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await eT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Lr.error(r),Lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(k5,"setLicense");async function V5(){let e={};try{e=await Pd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Lr.error(r),Lr.error(t),new Error(r)}return e}a(V5,"getFingerprint");async function eT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Lr.info("Validating license input...");let r=Pd.validateLicense(e,t);if(Lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Lr.info("writing license to disk"),await v5.writeFile(x5,JSON.stringify({license_key:e,company:t}))}catch(s){throw Lr.error("Failed to write License"),s}return"Registration successful."}a(eT,"parseLicense");async function $5(){let e=await Y5();return eT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a($5,"register");async function Y5(){let e=await Pd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:CU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:CU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{LU.start()}catch(s){Lr.error(s)}let r;try{r=await G5(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Y5,"promptForRegistration");async function K5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Pd.getLicense()}catch(r){throw Lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(H5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=F5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=q5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(K5,"getRegistrationInfo")});var PU=T((_de,MU)=>{"use strict";var W5=ke(),rT=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+W5.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"}};MU.exports=rT});var HU=T((fde,BU)=>{"use strict";var vU=ke(),sT=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"}};BU.exports=sT});var qU=T((hde,FU)=>{"use strict";var nT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};FU.exports=nT});var xU=T((pde,GU)=>{"use strict";var Q5=ke(),iT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Q5.SERVER_SUFFIX.ADMIN,this.password=r}};GU.exports=iT});var cT=T((Tde,$U)=>{"use strict";var Jo=require("path"),Hd=require("fs-extra"),z5=PU(),J5=HU(),X5=qU(),j5=xU(),oT=kr(),jo=$(),ir=Ar(),Bd=y(),uu=ke(),{CONFIG_PARAMS:Ze}=Bd,lu=F(),_u=X(),kU=ln(),aT=dt(),Xo="clustering",Z5=1e4,VU=5;$U.exports={generateNatsConfig:t8,removeNatsConfig:r8,getHubConfigPath:e8};function e8(){let e=_u.get(Ze.ROOTPATH);return Jo.join(e,Xo,uu.NATS_CONFIG_FILES.HUB_SERVER)}a(e8,"getHubConfigPath");async function t8(e=!1,t=void 0){_u.initSync();let r=_u.get(Ze.ROOTPATH),s=Jo.join(r,Xo,uu.PID_FILES.HUB),n=Jo.join(r,Xo,uu.PID_FILES.LEAF),i=ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Jo.join(r,Xo,uu.NATS_CONFIG_FILES.HUB_SERVER),c=Jo.join(r,Xo,uu.NATS_CONFIG_FILES.LEAF_SERVER),u=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERTIFICATE),_=ir.getConfigFromFile(Ze.CLUSTERING_TLS_PRIVATEKEY),l=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERT_AUTH),d=ir.getConfigFromFile(Ze.CLUSTERING_TLS_INSECURE),f=ir.getConfigFromFile(Ze.CLUSTERING_TLS_VERIFY),E=ir.getConfigFromFile(Ze.CLUSTERING_NODENAME),h=ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await aT.checkNATSServerInstalled()||Fd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await oT.listUsers(),S=ir.getConfigFromFile(Ze.CLUSTERING_USER),g=await oT.getClusterUser();(jo.isEmpty(g)||g.active!==!0)&&Fd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vd(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vd(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vd(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await vd(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],O=[];for(let[x,te]of p.entries())te.role.role===Bd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(b.push(new j5(te.username,kU.decrypt(te.hash))),O.push(new X5(te.username,kU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=ir.getClusteringRoutes();if(!jo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${x.host}:${x.port}`);let G=new z5(ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,b,O);l==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=jo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Bd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hd.writeJson(o,G),lu.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new J5(ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],b,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===Bd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hd.writeJson(c,B),lu.trace(`Leaf server config written to ${c}`))}a(t8,"generateNatsConfig");async function vd(e){let t=_u.get(e);return jo.isEmpty(t)&&Fd(`port undefined for '${e}'`),await jo.isPortTaken(t)&&Fd(`'${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(vd,"isPortAvailable");function Fd(e){let t=`Error generating clustering config: ${e}`;lu.error(t),console.error(t),process.exit(1)}a(Fd,"generateNatsConfigError");async function r8(e){let{port:t,config_file:r}=aT.getServerConfig(e),{username:s,decrypt_hash:n}=await oT.getClusterUser(),i=0,o=2e3;for(;i<VU;){try{let _=await aT.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>=VU)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 jo.async_set_timeout(o*(i*2))}let c="0".repeat(Z5),u=Jo.join(_u.get(Ze.ROOTPATH),Xo,r);await Hd.writeFile(u,c),await Hd.remove(u),lu.notify(e,"started.")}a(r8,"removeNatsConfig")});var JU=T((gde,zU)=>{"use strict";var Dr=X(),s8=Oc(),ae=y(),du=ke(),hn=require("path"),{PACKAGE_ROOT:Gd}=y(),YU=X(),qd=$(),Zo="/dev/null",n8=hn.join(Gd,"launchServiceScripts"),KU=hn.join(Gd,"utility/scripts"),i8=hn.join(KU,ae.HDB_RESTART_SCRIPT),WU=hn.resolve(Gd,"dependencies",`${process.platform}-${process.arch}`,du.NATS_BINARY_NAME);function QU(){let t=s8.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qd.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Gd}}a(QU,"generateMainServerConfig");var o8=9930;function a8(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=hn.join(e,"clustering",du.NATS_CONFIG_FILES.HUB_SERVER),r=hn.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=YU.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=du.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==o8?"-"+s:""),script:WU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zo,i.error_file=Zo),i}a(a8,"generateNatsHubServerConfig");var c8=9940;function u8(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=hn.join(e,"clustering",du.NATS_CONFIG_FILES.LEAF_SERVER),r=hn.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=YU.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=du.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==c8?"-"+s:""),script:WU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zo,i.error_file=Zo),i}a(u8,"generateNatsLeafServerConfig");function l8(){Dr.initSync();let e=hn.join(Dr.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:n8,autorestart:!1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Zo,t.error_file=Zo),t}a(l8,"generateClusteringUpgradeV4ServiceConfig");function _8(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return qd.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:KU},script:i8}}a(_8,"generateRestart");function d8(){return{apps:[QU()]}}a(d8,"generateAllServiceConfigs");zU.exports={generateAllServiceConfigs:d8,generateMainServerConfig:QU,generateRestart:_8,generateNatsHubServerConfig:a8,generateNatsLeafServerConfig:u8,generateClusteringUpgradeV4ServiceConfig:l8}});var lM=T((Nde,uM)=>{"use strict";var Ae=y(),f8=$(),mn=cT(),fu=dt(),Vs=ke(),ri=JU(),xd=X(),si=F(),E8=En(),{startWorker:XU,onMessageFromWorkers:h8}=Je(),m8=zo(),Ode=require("util"),p8=require("child_process"),S8=require("fs"),{execFile:T8}=p8,pe;uM.exports={enterPM2Mode:R8,start:ni,stop:uT,reload:ZU,restart:eM,list:lT,describe:rM,connect:pn,kill:b8,startAllServices:y8,startService:_T,getUniqueServicesList:sM,restartAllServices:I8,isServiceRegistered:nM,reloadStopStart:iM,restartHdb:tM,deleteProcess:O8,startClusteringProcesses:aM,startClusteringThreads:cM,isHdbRestartRunning:N8,isClusteringRunning:C8,stopClustering:w8,reloadClustering:L8};var Eu=!1;h8(e=>{e.type==="restart"&&xd.initSync(!0)});function R8(){Eu=!0}a(R8,"enterPM2Mode");function pn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{si.setupConsoleLogging(),r&&t(r),e(s)})})}a(pn,"connect");var or,g8=10,jU;function ni(e,t=!1){if(Eu)return A8(e);let r=T8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=or.indexOf(r);o>-1&&or.splice(o,1),!jU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<g8&&(S8.existsSync(mn.getHubConfigPath())?ni(e):(await mn.generateNatsConfig(!0),ni(e),await new Promise(c=>setTimeout(c,3e3)),await mn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await mn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=xd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Vs.LOG_LEVEL_HIERARCHY[o]>=Vs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Vs.LOG_LEVELS.ERR||l===Vs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Vs.LOG_LEVELS[f]}if(Vs.LOG_LEVEL_HIERARCHY[o]>=Vs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Vs.LOG_LEVELS.ERR||l===Vs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),or=[],!or&&!t){let i=a(()=>{jU=!0,or&&(or.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)}or.push(r)}a(ni,"start");function A8(e){return new Promise(async(t,r)=>{try{await pn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(A8,"startWithPM2");function uT(e){if(!Eu){for(let t of or||[])t.name===e&&(or.splice(or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await pn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(uT,"stop");function ZU(e){return new Promise(async(t,r)=>{try{await pn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(ZU,"reload");function eM(e){if(!Eu)for(let t of or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await pn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(eM,"restart");function O8(e){return new Promise(async(t,r)=>{try{await pn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(O8,"deleteProcess");async function tM(){await ni(ri.generateRestart())}a(tM,"restartHdb");async function N8(){let e=await lT();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(N8,"isHdbRestartRunning");function lT(){return new Promise(async(e,t)=>{try{await pn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(lT,"list");function rM(e){return new Promise(async(t,r)=>{try{await pn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(rM,"describe");function b8(){if(!Eu){for(let e of or||[])e.kill();or=[];return}return new Promise(async(e,t)=>{try{await pn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(b8,"kill");async function y8(){try{await aM(),await cM(),await ni(ri.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(y8,"startAllServices");async function _T(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ri.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ri.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ri.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ri.generateNatsHubServerConfig(),await ni(r,t),await mn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ri.generateNatsLeafServerConfig(),await ni(r,t),await mn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ni(r)}catch(r){throw pe?.disconnect(),r}}a(_T,"startService");async function sM(){try{let e=await lT(),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 pe?.disconnect(),e}}a(sM,"getUniqueServicesList");async function I8(e=[]){try{let t=!1,r=await sM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await eM(o))}t&&await iM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(I8,"restartAllServices");async function nM(e){if(or?.find(r=>r.name===e))return!0;let t=await m8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(nM,"isServiceRegistered");async function iM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?xd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):xd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await rM(e),s=f8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await uT(e),await _T(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await tM():await ZU(e)}a(iM,"reloadStopStart");var oM;async function aM(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await _T(r,e)}}a(aM,"startClusteringProcesses");async function cM(){oM=XU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await fu.createWorkQueueStream(Vs.WORK_QUEUE_CONSUMER_NAMES),await fu.updateIngestStreamConsumer(),await fu.updateLocalStreams();let e=await E8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){si.info("Starting clustering upgrade 4.0.0 process"),XU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(cM,"startClusteringThreads");async function w8(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await oM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await uT(t)}}a(w8,"stopClustering");async function C8(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await nM(t)===!1)return!1}return!0}a(C8,"isClusteringRunning");async function L8(){await mn.generateNatsConfig(!0),await fu.reloadNATSHub(),await fu.reloadNATSLeaf(),await mn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await mn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(L8,"reloadClustering")});var Yd=T((yde,pM)=>{"use strict";var D8=require("minimist"),{isMainThread:ET,parentPort:fM}=require("worker_threads"),Ke=y(),{PROCESS_DESCRIPTORS_VALIDATE:hu}=Ke,$s=F(),hT=$(),kd=cT(),ea=dt(),dT=ke(),EM=Ar(),Ys=lM(),_M=zo(),U8=RE(),{restartWorkers:Vd,onMessageByType:M8}=Je(),{handleHDBError:P8,hdb_errors:v8}=j(),{HTTP_STATUS_CODES:B8}=v8,$d=X();$d.initSync();var mu=`Restarting HarperDB. This may take up to ${Ke.RESTART_TIMEOUT_MS/1e3} seconds.`,H8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",dM="Clustering is not enabled so cannot be restarted",F8="Invalid service",ta,Wr;pM.exports={restart:hM,restartService:mT};ET&&M8(Ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?mT({service:e.workerType}):hM({operation:"restart"})});async function hM(e){Wr=Object.keys(e).length===0,ta=await Ys.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR);let t=D8(process.argv);if(t.service){await mT(t);return}if(Wr&&!ta){console.error(H8);return}if(Wr&&console.log(mu),ta){Ys.enterPM2Mode(),$s.notify(mu);let r=U8(Object.keys(Ke.CONFIG_PARAM_MAP),!0);return hT.isEmptyOrZeroLength(Object.keys(r))||EM.updateConfigValue(void 0,void 0,r,!0,!0),G8(),mu}return ET?($s.notify(mu),setTimeout(()=>{Vd()},50)):fM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART}),mu}a(hM,"restart");async function mT(e){let{service:t}=e;if(Ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw P8(new Error,F8,B8.BAD_REQUEST,void 0,void 0,!0);if(ta=await Ys.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR),!ET)return fM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case hu.clustering:if(!$d.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dM;break}Wr&&console.log("Restarting clustering"),$s.notify("Restarting clustering"),await mM();break;case hu.clustering_config:case hu["clustering config"]:if(!$d.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dM;break}Wr&&console.log("Restarting clustering_config"),$s.notify("Restarting clustering_config"),await Ys.reloadClustering();break;case"custom_functions":case"custom functions":case hu.harperdb:case hu.http_workers:if(Wr&&!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}Wr&&console.log("Restarting http_workers"),$s.notify("Restarting http_workers"),Wr?await Ys.restart(Ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?($s.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(mT,"restartService");async function q8(){await ea.publishToStream(`${dT.SUBJECT_PREFIXES.TXN}.${dT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,dT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ea.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(q8,"postDummyNatsMsg");async function G8(){await mM(),await Ys.restart(Ke.HDB_PROC_DESCRIPTOR),await hT.async_set_timeout(2e3),$d.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await fT(),Wr&&(await ea.closeConnection(),process.exit(0))}a(G8,"restartPM2Mode");async function mM(){if(!EM.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await _M.getHDBProcessInfo()).clustering.length===0)$s.trace("Clustering not running, restart will start clustering services"),await kd.generateNatsConfig(!0),await Ys.startClusteringProcesses(),await Ys.startClusteringThreads(),await fT(),Wr&&await ea.closeConnection();else{await q8(),await kd.generateNatsConfig(!0),ta?($s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ys.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ys.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await _M.getHDBProcessInfo()).clustering.forEach(n=>{$s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await hT.async_set_timeout(3e3),await fT(),await ea.updateLocalStreams(),Wr&&await ea.closeConnection(),$s.trace("Restart clustering restarting ingest and reply service threads");let t=Vd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Vd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(mM,"restartClustering");async function fT(){await kd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await kd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(fT,"removeNatsConfig")});var wM=T((Cde,IM)=>{"use strict";var wde=require("lodash"),ar=y(),{handleHDBError:SM,hdb_errors:x8}=j(),{HDB_ERROR_MSGS:k8,HTTP_STATUS_CODES:V8}=x8,pT=F();IM.exports={getRolePermissions:Y8};var Yi=Object.create(null),$8=a(e=>({key:e,perms:{}}),"perms_template_obj"),AM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),OM=a((e=!1,t=!1,r=!1,s=!1)=>({[ar.PERMS_CRUD_ENUM.READ]:e,[ar.PERMS_CRUD_ENUM.INSERT]:t,[ar.PERMS_CRUD_ENUM.UPDATE]:r,[ar.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),ST=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...OM(t,r,s,n)}),"table_perms_template"),TM=a((e,t=OM())=>({attribute_name:e,describe:yM(t),[pu]:t[pu],[TT]:t[TT],[RT]:t[RT]}),"attr_perms_template"),RM=a((e,t=!1)=>({attribute_name:e,describe:t,[pu]:t}),"timestamp_attr_perms_template"),{READ:pu,INSERT:TT,UPDATE:RT}=ar.PERMS_CRUD_ENUM,NM=Object.values(ar.PERMS_CRUD_ENUM),bM=[pu,TT,RT];function Y8(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[ar.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Yi[t]&&Yi[t].key===s)return Yi[t].perms;let n=K8(e,r);return Yi[t]?Yi[t].key=s:Yi[t]=$8(s),Yi[t].perms=n,n}catch(r){if(!e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ar.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 pT.error(s),pT.debug(r),SM(new Error,k8.OUTDATED_PERMS_TRANSLATION_ERROR,V8.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw pT.error(s),SM(new Error)}}}a(Y8,"getRolePermissions");function K8(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ar.SYSTEM_SCHEMA_NAME]=s[ar.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]=W8(t[i]);return}r[i]=AM(),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],_=Q8(c,u);r[i].describe||NM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=ST()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ST()})}),r}a(K8,"translateRolePermissions");function W8(e){let t=AM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ST(!0,!0,!0,!0,!0)}),t}a(W8,"createStructureUserPermissions");function Q8(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 ar.TIME_STAMP_NAMES.includes(d)&&(f=RM(d,l[pu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=TM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=yM(l),n.attribute_permissions.push(l),c||z8(l,u)}else if(_!==o){let l;ar.TIME_STAMP_NAMES.includes(_)?l=RM(_):l=TM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=gM(n),n}else return e.describe=gM(e),e}a(Q8,"getTableAttrPerms");function gM(e){return NM.filter(t=>e[t]).length>0}a(gM,"getSchemaTableDescribePerm");function yM(e){return bM.filter(t=>e[t]).length>0}a(yM,"getAttributeDescribePerm");function z8(e,t){bM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(z8,"checkForHashPerms")});var CM={};ve(CM,{Headers:()=>ii});var ii,Kd=Te(()=>{ii=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 Su={};ve(Su,{authentication:()=>HM,bypassAuth:()=>r6,login:()=>n6,logout:()=>i6,start:()=>s6});function r6(){BM=!0}async function HM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Z8?j8:[]:X8?J8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ii([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Wd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Wd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Wd){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 DM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new zd.AuthAuditLog(E,h,wt.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===wt.AUTH_AUDIT_STATUS.SUCCESS?LM.notify(S):LM.error(S)},"authAuditLog"),d;if(s){if(d=Ki.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ct.getUser(p,S):null;break;case"Bearer":try{d=await(0,Qd.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,Qd.validateRefreshToken)(h),c({status:-1})}catch{throw g}}break}}catch(g){return t6&&(Ki.get(h)||(Ki.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:oi({error:g.message},e)})}Ki.set(s,d),e6&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ct.getUser(_.user,null,!1):BM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,MM.getSuperUser)());Wd&&(e.session.update=function(E){if(!u){u=(0,PM.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,DM.put(E)},e.login=async function(E,h){e.user=await ct.getUser(E,h),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")&&Hn.loginPath?(f.status=302,f.headers.set("Location",Hn.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 ii);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function s6({server:e,port:t}){e.request(HM,{port:t||"all"}),UM||(UM=!0,setInterval(()=>{Ki=new Map},Qr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),vM.user.addListener(()=>{Ki=new Map}))}async function n6(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 i6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var MM,Qd,PM,Qr,wt,zd,vM,LM,J8,X8,j8,Z8,DM,Wd,BM,e6,t6,Ki,UM,Jd=Te(()=>{MM=D(kr());fr();xa();Qd=D(Zc());fe();PM=require("uuid"),Qr=D(X()),wt=D(y()),zd=D(F()),vM=D(bc());Kd();ra();LM=(0,zd.loggerWithTag)("auth-event");Qr.initSync();J8=Qr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),X8=Qr.get(wt.CONFIG_PARAMS.HTTP_CORS),j8=Qr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Z8=Qr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),DM=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Wd=Qr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,BM=Qr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,e6=Qr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,t6=Qr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ki=new Map;ct.onInvalidatedUser(()=>{Ki=new Map});a(r6,"bypassAuth");a(HM,"authentication");a(s6,"start");a(n6,"login");a(i6,"logout")});var $M=T((Fde,VM)=>{"use strict";var Se=require("joi"),FM=require("fs-extra"),qM=require("path"),Tn=xe(),GM=X(),xM=y(),kM=F(),{hdb_errors:o6}=j(),{HDB_ERROR_MSGS:kt}=o6,Sn=/^[a-zA-Z0-9-_]+$/;VM.exports={getDropCustomFunctionValidator:c6,setCustomFunctionValidator:u6,addComponentValidator:f6,dropCustomFunctionProjectValidator:E6,packageComponentValidator:h6,deployComponentValidator:m6,setComponentFileValidator:l6,getComponentFileValidator:d6,dropComponentFileValidator:_6};function Xd(e,t,r){try{let s=GM.get(xM.CONFIG_PARAMS.COMPONENTSROOT),n=qM.join(s,t);return FM.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return kM.error(s),r.message(kt.VALIDATION_ERR)}}a(Xd,"checkProjectExists");function Tu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Tu,"checkFilePath");function a6(e,t,r,s){try{let n=GM.get(xM.CONFIG_PARAMS.COMPONENTSROOT),i=qM.join(n,e,t,r+".js");return FM.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return kM.error(n),s.message(kt.VALIDATION_ERR)}}a(a6,"checkFileExists");function c6(e){let t=Se.object({project:Se.string().pattern(Sn).custom(Xd.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(Sn).custom(a6.bind(null,e.project,e.type)).custom(Tu).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return Tn.validateBySchema(e,t)}a(c6,"getDropCustomFunctionValidator");function u6(e){let t=Se.object({project:Se.string().pattern(Sn).custom(Xd.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(Tu).required(),function_content:Se.string().required()});return Tn.validateBySchema(e,t)}a(u6,"setCustomFunctionValidator");function l6(e){let t=Se.object({project:Se.string().pattern(Sn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(Tu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Tn.validateBySchema(e,t)}a(l6,"setComponentFileValidator");function _6(e){let t=Se.object({project:Se.string().pattern(Sn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(Tu).optional()});return Tn.validateBySchema(e,t)}a(_6,"dropComponentFileValidator");function d6(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(Tu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Tn.validateBySchema(e,t)}a(d6,"getComponentFileValidator");function f6(e){let t=Se.object({project:Se.string().pattern(Sn).custom(Xd.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Tn.validateBySchema(e,t)}a(f6,"addComponentValidator");function E6(e){let t=Se.object({project:Se.string().pattern(Sn).custom(Xd.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Tn.validateBySchema(e,t)}a(E6,"dropCustomFunctionProjectValidator");function h6(e){let t=Se.object({project:Se.string().pattern(Sn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return Tn.validateBySchema(e,t)}a(h6,"packageComponentValidator");function m6(e){let t=Se.object({project:Se.string().pattern(Sn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:Se.string().optional()});return Tn.validateBySchema(e,t)}a(m6,"deployComponentValidator")});var tf=T((Gde,XM)=>{"use strict";var jd=require("joi"),Zd=require("path"),YM=require("fs-extra"),{exec:p6}=require("child_process"),S6=require("util"),KM=S6.promisify(p6),Ru=y(),{handleHDBError:sa,hdb_errors:T6}=j(),{HTTP_STATUS_CODES:na}=T6,gu=X(),R6=xe(),ia=F();gu.initSync();var gT=gu.get(Ru.CONFIG_PARAMS.COMPONENTSROOT),WM="npm install --omit=dev --json",g6=`${WM} --dry-run`;XM.exports={installModules:b6,auditModules:y6,installAllRootModules:A6,uninstallRootModule:O6,linkHarperdb:N6};async function A6(e=!1){await ef(),await Au(e?"npm install --ignore-scripts":"npm install",gu.get(Ru.CONFIG_PARAMS.ROOTPATH))}a(A6,"installAllRootModules");async function O6(e){await Au(`npm uninstall ${e}`,gu.get(Ru.CONFIG_PARAMS.ROOTPATH))}a(O6,"uninstallRootModule");async function N6(){await ef(),await Au(`npm link ${Ru.PACKAGE_ROOT}`,gu.get(Ru.CONFIG_PARAMS.ROOTPATH))}a(N6,"linkHarperdb");async function Au(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await KM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
12
+ `,""))}return s&&!s.includes("Debugger listening")&&ia.error("Error running NPM command:",e,s),ia.trace(r,s),r.replace(`
13
+ `,"")}a(Au,"runCommand");async function b6(e){ia.info(`starting installModules for request: ${e}`);let t=JM(e);if(t)throw sa(t,t.message,na.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?g6:WM;await ef(),await zM(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Zd.join(gT,u),l,d=null;try{let{stdout:f,stderr:E}=await KM(n,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=zM(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(y6,"installModules");function zM(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(zM,"parseNPMStdErr");async function I6(e){na.info(`starting auditModules for request: ${e}`);let t=XM(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST);let{projects:r}=e;await Zd(),await JM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=jd.join(AT,o);s[o]={npm_output:null,npm_error:null};try{let u=await gu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=zM(u.stderr)}}return na.info(`finished auditModules with response ${s}`),s}a(I6,"auditModules");async function Zd(){try{return await gu("npm -v"),!0}catch{throw ra(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",sa.BAD_REQUEST,void 0,void 0,!0)}}a(Zd,"checkNPMInstalled");async function JM(e){if(!Array.isArray(e)||e.length===0)throw ra(new Error,"projects argument must be an array with at least 1 element",sa.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=jd.join(AT,i.toString());if(!await KM.pathExists(o)){t.push(i);continue}let u=jd.join(o,"package.json");await KM.pathExists(u)||r.push(i)}if(t.length>0)throw ra(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,sa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ra(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,sa.BAD_REQUEST,void 0,void 0,!0)}a(JM,"checkProjectPaths");function XM(e){let t=Xd.object({projects:Xd.array().min(1).items(Xd.string()).required(),dry_run:Xd.boolean().default(!1)});return g6.validateBySchema(e,t)}a(XM,"modulesValidator")});var NT=T((Vde,sP)=>{"use strict";var ia=require("fs-extra"),OT=require("path"),tf=G(),ZM=$(),rf=y(),rP=X(),w6=Ar();sP.exports=C6;async function C6(){let e=L6(),t=rP.get(rf.CONFIG_PARAMS.ROOTPATH),r=OT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+rf.PACKAGE_ROOT}},n=OT.join(t,"node_modules");await ia.ensureDir(n);let i,o=!0,c=!1;try{i=await ia.readJson(r)}catch(u){if(ZM.isEmptyOrZeroLength(e))return;if(u.code!==rf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!ZM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await eP(_);s.dependencies[u]=l+_}if(!o){tf.notify("Installing components"),await tP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await eP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(tf.notify("Removing component",u),c=!0);c&&(tf.notify("Updating components."),await tP(r,s,i))}a(C6,"installComponents");function L6(){let e=w6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(L6,"getComponentsConfig");async function eP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":OT.extname(e)||await ia.pathExists(e)?"file:":"github:"}a(eP,"getPkgPrefix");async function tP(e,t,r){tf.trace("npm installing components package.json",t),await ia.writeFile(e,JSON.stringify(t,null," "));try{await ef().installAllRootModules(rP.get(rf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ia.writeFile(e,JSON.stringify(r,null," ")):await ia.unlink(e),s}}a(tP,"installPackages")});var IT=T((Kde,aP)=>{"use strict";var Le=require("fs-extra"),bT=require("fast-glob"),le=require("path"),iP=require("tar-fs"),Yde=require("uuid").v4,yT=require("normalize-path"),Ks=YM(),St=G(),Me=y(),nt=X(),Au=Ar(),D6=$(),{PACKAGE_ROOT:U6}=y(),{handleHDBError:Tt,hdb_errors:M6}=j(),{basename:P6}=require("path"),v6=NT(),oP=X(),B6=y(),{Readable:H6}=require("stream"),{isMainThread:q6}=require("worker_threads"),{HDB_ERROR_MSGS:Ki,HTTP_STATUS_CODES:Rt}=M6,F6=le.join(U6,"application-template"),nP=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function G6(){St.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Ki.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(G6,"customFunctionsStatus");function x6(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{bT.sync(yT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:bT.sync(yT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:bT.sync(yT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Ki.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(x6,"getCustomFunctions");function k6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Ki.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(k6,"getCustomFunction");function V6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ks.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Ki.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(V6,"setCustomFunction");function $6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Ki.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a($6,"dropCustomFunction");function Y6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(F6,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Ki.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(Y6,"addComponent");function K6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!D6.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 Au.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Ki.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(K6,"dropCustomFunctionProject");async function W6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;St.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(nP);let i=le.join(nP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),iP.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(W6,"packageComponent");async function Q6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(St.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=H6.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(iP.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await Au.addConfig(s,{package:i}),!n){await v6();let f=oP.get(B6.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(q6)return;let c=new Map;c.isWorker=!0;let u=(nf(),Z(sf)),_;u.setErrorReporter(f=>_=f);let l=P6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return St.info("Installed component"),`Successfully deployed: ${s}`}a(Q6,"deployComponent");async function z6(){let e=Au.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)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(nf(),Z(sf)).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(z6,"getComponents");async function J6(e){let t=Ks.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=Au.getConfigObj()[e.project]||e.project==="harperdb"?le.join(oP.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(J6,"getComponentFile");async function X6(e){let t=Ks.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(X6,"setComponentFile");async function j6(e){let t=Ks.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),Au.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(j6,"dropComponent");aP.exports={customFunctionsStatus:G6,getCustomFunctions:x6,getCustomFunction:k6,setCustomFunction:V6,dropCustomFunction:$6,addComponent:Y6,dropCustomFunctionProject:K6,packageComponent:W6,deployComponent:Q6,getComponents:z6,getComponentFile:J6,setComponentFile:X6,dropComponent:j6}});var wT=T((Qde,uP)=>{"use strict";var Ws=require("joi"),cP=xe();uP.exports={readTransactionLogValidator:Z6,deleteTransactionLogsBeforeValidator:e9};function Z6(e){let t=Ws.object({schema:Ws.string().required(),table:Ws.string().required(),from:Ws.date().timestamp(),to:Ws.date().timestamp(),limit:Ws.number().min(1)});return cP.validateBySchema(e,t)}a(Z6,"readTransactionLogValidator");function e9(e){let t=Ws.object({schema:Ws.string().required(),table:Ws.string().required(),timestamp:Ws.date().timestamp().required()});return cP.validateBySchema(e,t)}a(e9,"deleteTransactionLogsBeforeValidator")});var af=T((Jde,EP)=>{"use strict";var CT=y(),of=dt(),lP=$(),_P=X(),dP=un(),{handleHDBError:oa,hdb_errors:t9}=j(),{HTTP_STATUS_CODES:aa}=t9,{readTransactionLogValidator:r9,deleteTransactionLogsBeforeValidator:s9}=wT(),fP="This operation relies on clustering and cannot run with it disable.",n9="Logs successfully deleted from transaction log.",i9="All logs successfully deleted from transaction log.";EP.exports={readTransactionLog:o9,deleteTransactionLogsBefore:a9};async function*o9(e){let t=r9(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(!_P.get(CT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oa(new Error,fP,aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lP.checkSchemaTableExist(r,s);if(n)throw oa(new Error,n,aa.NOT_FOUND,void 0,void 0,!0);let i=dP.createNatsTableStreamName(r,s),o=await of.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===CT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(o9,"readTransactionLog");async function a9(e){let t=s9(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(!_P.get(CT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oa(new Error,fP,aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lP.checkSchemaTableExist(r,s);if(i)throw oa(new Error,i,aa.NOT_FOUND,void 0,void 0,!0);let o=dP.createNatsTableStreamName(r,s),{jsm:c}=await of.getNATSReferences(),u=await of.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=n9,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=i9):d=(await of.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(a9,"deleteTransactionLogsBefore")});var mP=T((jde,hP)=>{"use strict";var LT=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}};hP.exports=LT});var SP=T((efe,pP)=>{"use strict";var DT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};pP.exports=DT});var MT=T((rfe,RP)=>{"use strict";var TP=mP(),c9=SP(),{HDB_ERROR_MSGS:u9}=Er(),UT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=u9.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 TP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new c9(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 TP(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}};RP.exports=UT});var _f=T((nfe,BP)=>{"use strict";var PT=xr(),cf=Gr(),Jr=id(),bu=bi(),vT=Li(),l9=Qp(),_9=UL(),yu=kr(),uf=sS(),ft=G(),d9=oS(),f9=Od(),E9=xS(),h9=Id(),m9=kS(),p9=VS(),S9=KS(),T9=QS(),BT=XS(),Tn=$(),R9=CU(),HT=rT(),OP=$d(),zr=y(),NP=CM(),g9=Qo(),bP=jc(),yP=(zd(),Z(pu)),IP=Ar(),Ur=IT(),A9=require("alasql"),wP=af(),CP=ef(),LP=MT(),{handleHDBError:cr,hdb_errors:DP}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:Ou}=DP,v=new Map,UP="delete",oi="insert",Rn="read",Wi="update",Nu="describe",gP=bu.describeSchema.name,AP=bu.describeTable.name,MP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},O9="catchup",N9="handleGetJob",b9="handleGetJobsByStartDate",lf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},y9=[Jr.createTable.name,Jr.createAttribute.name,Jr.dropTable.name,Jr.dropAttribute.name],PP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(PT.insert.name,new q(!1,[oi]));v.set(PT.update.name,new q(!1,[Wi]));v.set(PT.upsert.name,new q(!1,[oi,Wi]));v.set(cf.searchByConditions.name,new q(!1,[Rn]));v.set(cf.searchByHash.name,new q(!1,[Rn]));v.set(cf.searchByValue.name,new q(!1,[Rn]));v.set(cf.search.name,new q(!1,[Rn]));v.set(Jr.createSchema.name,new q(!0,[]));v.set(Jr.createTable.name,new q(!0,[]));v.set(Jr.createAttribute.name,new q(!1,[oi]));v.set(Jr.dropSchema.name,new q(!0,[]));v.set(Jr.dropTable.name,new q(!0,[]));v.set(Jr.dropAttribute.name,new q(!0,[]));v.set(bu.describeSchema.name,new q(!1,[Rn]));v.set(bu.describeTable.name,new q(!1,[Rn]));v.set(vT.deleteRecord.name,new q(!1,[UP]));v.set(yu.addUser.name,new q(!0,[]));v.set(yu.alterUser.name,new q(!0,[]));v.set(yu.dropUser.name,new q(!0,[]));v.set(yu.listUsersExternal.name,new q(!0,[]));v.set(uf.listRoles.name,new q(!0,[]));v.set(uf.addRole.name,new q(!0,[]));v.set(uf.alterRole.name,new q(!0,[]));v.set(uf.dropRole.name,new q(!0,[]));v.set(d9.name,new q(!0,[]));v.set(f9.name,new q(!0,[]));v.set(E9.name,new q(!0,[]));v.set(h9.name,new q(!0,[]));v.set(m9.name,new q(!0,[]));v.set(p9.name,new q(!0,[]));v.set(BT.setRoutes.name,new q(!0,[]));v.set(BT.getRoutes.name,new q(!0,[]));v.set(BT.deleteRoutes.name,new q(!0,[]));v.set(IP.setConfiguration.name,new q(!0,[]));v.set(S9.clusterStatus.name,new q(!0,[]));v.set(T9.name,new q(!0,[]));v.set(HT.getFingerprint.name,new q(!0,[]));v.set(HT.setLicense.name,new q(!0,[]));v.set(vT.deleteFilesBefore.name,new q(!0,[]));v.set(vT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(OP.restart.name,new q(!0,[]));v.set(OP.restartService.name,new q(!0,[]));v.set(l9.name,new q(!0,[]));v.set(_9.name,new q(!0,[Rn]));v.set(g9.systemInformation.name,new q(!0,[]));v.set(IP.getConfiguration.name,new q(!0,[]));v.set(wP.readTransactionLog.name,new q(!0,[]));v.set(wP.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(CP.installModules.name,new q(!0,[]));v.set(CP.auditModules.name,new q(!0,[]));v.set(bP.createTokens.name,new q(!1,[]));v.set(bP.refreshOperationToken.name,new q(!1,[]));v.set(yP.login.name,new q(!1,[]));v.set(yP.logout.name,new q(!1,[]));v.set(Ur.customFunctionsStatus.name,new q(!0,[]));v.set(Ur.getCustomFunctions.name,new q(!0,[]));v.set(Ur.getComponents.name,new q(!0,[]));v.set(Ur.getComponentFile.name,new q(!0,[]));v.set(Ur.setComponentFile.name,new q(!0,[]));v.set(Ur.dropComponent.name,new q(!0,[]));v.set(Ur.getCustomFunction.name,new q(!0,[]));v.set(Ur.setCustomFunction.name,new q(!0,[]));v.set(Ur.dropCustomFunction.name,new q(!0,[]));v.set(Ur.addComponent.name,new q(!0,[]));v.set(Ur.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ur.packageComponent.name,new q(!0,[]));v.set(Ur.deployComponent.name,new q(!0,[]));v.set(HT.getRegistrationInfo.name,new q(!1,[]));v.set(yu.userInfo.name,new q(!1,[]));v.set(bu.describeAll.name,new q(!1,[]));v.set(N9,new q(!1,[]));v.set(b9,new q(!0,[]));v.set(O9,new q(!0,[]));v.set(lf.CSV_DATA_LOAD,new q(!1,[oi,Wi]));v.set(lf.CSV_URL_LOAD,new q(!1,[oi,Wi]));v.set(lf.CSV_FILE_LOAD,new q(!1,[oi,Wi]));v.set(lf.IMPORT_FROM_S3,new q(!1,[oi,Wi]));v.set(PP.EXPORT_TO_S3,new q(!0,[]));v.set(PP.EXPORT_LOCAL,new q(!0,[]));v.set(zr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[UP]));v.set(zr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Rn]));v.set(zr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[oi]));v.set(zr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Wi]));BP.exports={verifyPerms:w9,verifyPermsAst:I9,verifyBulkLoadAttributePerms:L9};function I9(e,t,r){if(Tn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Tn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Tn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),cr(new Error);try{let s=new LP,n=new R9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ft.info("No schemas defined in verifyPermsAst(), will not continue."),cr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&MP[r])throw cr(new Error,Ct.DROP_SYSTEM,Ou.FORBIDDEN);if(c&&!u)return null;let _=NP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof A9.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=FT(t.role.permission,f,d[E]);qT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw cr(s)}}a(I9,"verifyPermsAst");function w9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),cr(new Error,Ct.DEFAULT_INVALID_REQUEST,Ou.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new LP;if(Tn.isEmptyOrZeroLength(e.hdb_user.role)||Tn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ft.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.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(zr.SYSTEM_SCHEMA_NAME)||n===zr.SYSTEM_SCHEMA_NAME;if(l&&MP[r])throw cr(new Error,Ct.DROP_SYSTEM,Ou.FORBIDDEN);if(u&&!l||_===!0&&(r===Jr.createSchema.name||r===Jr.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=NP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===gP||r===AP){if(n===zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===gP&&(!d[n]||!d[n][Nu]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===AP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Nu]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=vP(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&&zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[zr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[zr.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let E=C9(e),h=FT(e.hdb_user.role.permission,n,i);return qT(E,h,r,i,n,c,s),c.getPermsResponse()}a(w9,"verifyPerms");function vP(e,t,r,s,n){if(Tn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),cr(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 ft.info(`operation ${t} not found.`),cr(new Error,Ct.OP_NOT_FOUND(t),Ou.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Nu]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Nu]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Tn.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)&&(ft.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=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),cr(DP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(vP,"hasPermissions");function qT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),cr(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),cr(new Error);if(Tn.isEmptyOrZeroLength(t))return ft.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[Nu]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Rn)throw cr(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,Ou.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(qT,"checkAttributePerms");function C9(e){let t=new Set;try{if(e.action)return t;if(e.operation===zr.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){ft.info(r)}return t}a(C9,"getRecordAttributes");function FT(e,t,r){let s=new Map;if(Tn.isEmpty(e))return ft.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{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(FT,"getAttributePermissions");function L9(e,t,r,s,n,i,o){let c=new Set(i),u=FT(e,s,n);qT(c,u,t,n,s,o,r)}a(L9,"verifyBulkLoadAttributePerms")});var ff=T((ofe,xP)=>{"use strict";xP.exports={evaluateSQL:V9,processAST:GP,convertSQLToAST:FP,checkASTPermissions:qP};var D9=xr(),HP=require("util"),U9=HP.callbackify(D9.insert),M9=Gr().search,P9=$C().update,v9=HP.callbackify(P9),B9=KC().convertDelete,ai=require("alasql"),H9=_f(),df=G(),q9=r_(),F9=$(),Iu=y(),{hdb_errors:G9,handleHDBError:GT}=j(),{HTTP_STATUS_CODES:xT}=G9;q9(ai);var x9=403,k9="There was a problem performing this insert. Please check the logs and try again.",kT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function V9(e,t){let r=e.parsed_sql_object;if(!r){r=FP(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:df.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ai.yy.Select)&&F9.isEmptyOrZeroLength(s))return t("No schema specified",null)}GP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(V9,"evaluateSQL");function qP(e,t){let r;try{r=H9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(qP,"checkASTPermissions");function FP(e){let t=new kT;if(!e)throw GT(new Error,"The 'sql' parameter is missing from the request body",xT.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]?GT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,xT.BAD_REQUEST):GT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",xT.BAD_REQUEST)}return t}a(FP,"convertSQLToAST");function GP(e,t,r){try{let s=$9;if(!e.bypass_auth&&!t.permissions_checked){let i=qP(e,t);if(i&&i.length>0)return r(x9,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Iu.VALID_SQL_OPS_ENUM.SELECT:s=M9,n=t.ast.statements[0];break;case Iu.VALID_SQL_OPS_ENUM.INSERT:s=Y9;break;case Iu.VALID_SQL_OPS_ENUM.UPDATE:s=v9;break;case Iu.VALID_SQL_OPS_ENUM.DELETE:s=B9;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(GP,"processAST");function $9(e,t){df.info(e),t("unknown sql statement")}a($9,"nullFunction");function Y9({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=K9(i,e.values)}catch(o){return r(o)}U9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){df.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Y9,"convertInsert");function K9(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 [${Iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw df.error(r),new Error(k9)}}a(K9,"createDataObjects")});var VT=T((cfe,VP)=>{"use strict";var{S3:W9,GetObjectCommand:Q9}=require("@aws-sdk/client-s3");VP.exports={getFileStreamFromS3:z9,getS3AuthObj:kP};async function z9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await kP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Q9(r))).Body}a(z9,"getFileStreamFromS3");function kP(e,t,r){return new W9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kP,"getS3AuthObj")});var Ef=T((lfe,ZP)=>{"use strict";var KP=Gr(),J9=ff(),X9=VT(),{AsyncParser:j9,Transform:Z9}=require("json2csv"),Cu=require("stream"),Mr=$(),$T=require("fs-extra"),e7=require("path"),Xr=G(),{promisify:WP}=require("util"),wu=$(),{handleHDBError:it,hdb_errors:t7}=j(),{HDB_ERROR_MSGS:ur,HTTP_STATUS_CODES:ot}=t7,{streamAsJSON:r7}=Mp(),{Upload:s7}=require("@aws-sdk/lib-storage"),$P=["search_by_value","search_by_hash","sql"],YP=["json","csv"],QP="json",zP="csv",n7="Successfully exported JSON locally.",i7="Successfully exported CSV locally.",o7=1e3,a7=KP.searchByHash,c7=KP.searchByValue,u7=WP(J9.evaluateSQL),l7=WP(Cu.finished);ZP.exports={export_to_s3:E7,export_local:_7,toCsvStream:JP};async function _7(e){Xr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=XP(e);if(!Mr.isEmpty(t))throw Xr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Mr.isEmpty(e.path))throw Xr.error(ur.MISSING_VALUE("path")),it(new Error,ur.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Mr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(e7.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Mr.buildFolderPath(e.path,r);await d7(e.path);let n=await jP(e);return await f7(s,e.format,n)}a(_7,"export_local");async function d7(e){if(Xr.trace("in confirmPath"),Mr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await $T.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,Xr.error(s),it(new Error,s,ot.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 Xr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(d7,"confirmPath");async function f7(e,t,r){if(Xr.trace("in saveToLocal"),wu.isEmptyOrZeroLength(e))throw it(new Error,ur.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(wu.isEmptyOrZeroLength(t))throw it(new Error,ur.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(wu.isEmpty(r))throw it(new Error,ur.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===QP){let s=$T.createWriteStream(e);return r7(r).pipe(s),await l7(s),{message:n7,path:e}}else if(t===zP){let s=$T.createWriteStream(e),n=Cu.Readable.from(r),i={},o={objectMode:!0};return await new j9(i,o).fromInput(n).toOutput(s).promise(!1),{message:i7,path:e}}throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(f7,"saveToLocal");async function E7(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ur.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ur.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ur.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ur.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ur.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ur.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=XP(e);if(!Mr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Xr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await jP(e)}catch(u){throw Xr.error(u),u}let s,n=await X9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Cu.PassThrough;if(e.format===zP){i=e.s3.key+".csv";let u=JP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===QP){i=e.s3.key+".json";let u=new Cu.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%o7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST);return new s7({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(E7,"export_to_s3");function JP(e){let t=Cu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Z9(r,s);return t.pipe(n)}a(JP,"toCsvStream");function XP(e){if(Xr.trace("in exportCoreValidation"),Mr.isEmpty(e.format))return"format missing";if(YP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${YP.join(", ")}`;let t=e.search_operation.operation;if(Mr.isEmpty(t))return"search_operation.operation missing";if($P.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${$P.join(", ")}`}a(XP,"exportCoreValidation");async function jP(e){Xr.trace("in getRecords");let t,r;if(wu.isEmpty(e.search_operation)||wu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ur.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=c7;break;case"search_by_hash":t=a7;break;case"sql":t=u7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Xr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(jP,"getRecords")});var av={};ve(av,{contentTypes:()=>KT,findBestSerializer:()=>pf,getDeserializer:()=>ca,registerContentHandlers:()=>WT,serialize:()=>Sf,serializeMessage:()=>ii});function h7(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function WT(e){e.register(p7,{serializers:[{regex:/^application\/json$/,serializer:hf.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Qi.EncoderStream(Lu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?mf.Readable.from((0,Qs.encodeIter)(t,Lu)):(0,Qs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,YT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Qs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Qi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function pf(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=Lt.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(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Sf(e,t,r){let s=tv&&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=pf(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,gn.createBrotliCompress)({params:{[gn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?gn.constants.BROTLI_MODE_TEXT:gn.constants.BROTLI_MODE_GENERIC,[gn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>tv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function ii(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=pf(t);return r=t.serialize=s.serializer.serialize,r(e)}function S7(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 ca(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||rv(e,s);return o=>S7(o).then(i)}return e&&Lt.get(e)?.deserialize||rv(e,s)}function rv(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 JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function T7(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 hf,YT,Qs,Qi,gn,mf,sv,nv,iv,Lu,Lt,KT,ev,ov,m7,p7,tv,ta=Te(()=>{hf=D(Mp()),YT=D(Ef()),Qs=require("msgpackr"),Qi=require("cbor-x"),gn=require("zlib"),mf=require("stream");fr();sv=require("../index"),nv=D(X()),iv=D(y()),Lu={useRecords:!1,useToJSON:!0},Lt=new Map,KT=Lt;ct.contentTypes=KT;(0,sv._assignPackageExport)("contentTypes",KT);Lt.set("application/json",{serializeStream:hf.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ev=new Qi.Encoder(Lu);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Qi.EncoderStream(Lu).end(e)},serialize:ev.encode,deserialize:ev.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?mf.Readable.from((0,Qs.encodeIter)(e,Lu)):(0,Qs.pack)(e)},serialize:Qs.pack,deserialize:Qs.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,YT.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return mf.Readable.from(T7(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+`
15
+ `,""):null}catch(f){f.stderr?i[u].npm_error=QM(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 ia.info(`finished installModules with response ${i}`),i}a(b6,"installModules");function QM(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(QM,"parseNPMStdErr");async function y6(e){ia.info(`starting auditModules for request: ${e}`);let t=JM(e);if(t)throw sa(t,t.message,na.BAD_REQUEST);let{projects:r}=e;await ef(),await zM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Zd.join(gT,o);s[o]={npm_output:null,npm_error:null};try{let u=await Au("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=QM(u.stderr)}}return ia.info(`finished auditModules with response ${s}`),s}a(y6,"auditModules");async function ef(){try{return await Au("npm -v"),!0}catch{throw sa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",na.BAD_REQUEST,void 0,void 0,!0)}}a(ef,"checkNPMInstalled");async function zM(e){if(!Array.isArray(e)||e.length===0)throw sa(new Error,"projects argument must be an array with at least 1 element",na.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=Zd.join(gT,i.toString());if(!await YM.pathExists(o)){t.push(i);continue}let u=Zd.join(o,"package.json");await YM.pathExists(u)||r.push(i)}if(t.length>0)throw sa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,na.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw sa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,na.BAD_REQUEST,void 0,void 0,!0)}a(zM,"checkProjectPaths");function JM(e){let t=jd.object({projects:jd.array().min(1).items(jd.string()).required(),dry_run:jd.boolean().default(!1)});return R6.validateBySchema(e,t)}a(JM,"modulesValidator")});var OT=T((kde,rP)=>{"use strict";var oa=require("fs-extra"),AT=require("path"),rf=F(),jM=$(),sf=y(),tP=X(),I6=Ar();rP.exports=w6;async function w6(){let e=C6(),t=tP.get(sf.CONFIG_PARAMS.ROOTPATH),r=AT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+sf.PACKAGE_ROOT}},n=AT.join(t,"node_modules");await oa.ensureDir(n);let i,o=!0,c=!1;try{i=await oa.readJson(r)}catch(u){if(jM.isEmptyOrZeroLength(e))return;if(u.code!==sf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!jM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await ZM(_);s.dependencies[u]=l+_}if(!o){rf.notify("Installing components"),await eP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await ZM(_);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 eP(r,s,i))}a(w6,"installComponents");function C6(){let e=I6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(C6,"getComponentsConfig");async function ZM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":AT.extname(e)||await oa.pathExists(e)?"file:":"github:"}a(ZM,"getPkgPrefix");async function eP(e,t,r){rf.trace("npm installing components package.json",t),await oa.writeFile(e,JSON.stringify(t,null," "));try{await tf().installAllRootModules(tP.get(sf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await oa.writeFile(e,JSON.stringify(r,null," ")):await oa.unlink(e),s}}a(eP,"installPackages")});var yT=T((Yde,oP)=>{"use strict";var Le=require("fs-extra"),NT=require("fast-glob"),_e=require("path"),nP=require("tar-fs"),$de=require("uuid").v4,bT=require("normalize-path"),Ks=$M(),ft=F(),Me=y(),nt=X(),Ou=Ar(),L6=$(),{PACKAGE_ROOT:D6}=y(),{handleHDBError:Tt,hdb_errors:U6}=j(),{basename:M6}=require("path"),P6=OT(),iP=X(),v6=y(),{Readable:B6}=require("stream"),{isMainThread:H6}=require("worker_threads"),{HDB_ERROR_MSGS:Wi,HTTP_STATUS_CODES:Rt}=U6,F6=_e.join(D6,"application-template"),sP=_e.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function q6(){ft.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Wi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,t)}return e}a(q6,"customFunctionsStatus");function G6(){ft.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{NT.sync(bT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:NT.sync(bT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:NT.sync(bT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Wi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,r)}return e}a(G6,"getCustomFunctions");function x6(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=Ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=_e.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Wi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(x6,"getCustomFunction");function k6(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=Ks.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(_e.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Wi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(k6,"setCustomFunction");function V6(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=Ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(_e.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Wi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,o)}}a(V6,"dropCustomFunction");function $6(e){e.project&&(e.project=_e.parse(e.project).name);let t=Ks.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=_e.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(F6,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Wi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,n)}}a($6,"addComponent");function Y6(e){e.project&&(e.project=_e.parse(e.project).name);let t=Ks.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!L6.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 Ou.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=_e.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Wi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,ft.ERR,i)}}a(Y6,"dropCustomFunctionProject");async function K6(e){e.project&&(e.project=_e.parse(e.project).name);let t=Ks.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;ft.trace("packaging component",s);let n;try{n=await Le.realpath(_e.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(_e.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(sP);let i=_e.join(sP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(_e.join(n,"node_modules"))}),nP.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(K6,"packageComponent");async function W6(e){e.project&&(e.project=_e.parse(e.project).name);let t=Ks.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(ft.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=_e.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=B6.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(nP.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(_e.join(o,"package"),o),await Le.remove(_e.join(o,"package")))}if(await Ou.addConfig(s,{package:i}),!n){await P6();let f=iP.get(v6.CONFIG_PARAMS.ROOTPATH);o=_e.join(f,"node_modules",s)}if(H6)return;let c=new Map;c.isWorker=!0;let u=(of(),Z(nf)),_;u.setErrorReporter(f=>_=f);let l=M6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return ft.info("Installed component"),`Successfully deployed: ${s}`}a(W6,"deployComponent");async function Q6(){let e=Ou.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 Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=_e.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:_e.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return ft.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(_e.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(_e.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(of(),Z(nf)).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(Q6,"getComponents");async function z6(e){let t=Ks.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=Ou.getConfigObj()[e.project]||e.project==="harperdb"?_e.join(iP.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(_e.join(s,e.project,e.file));return{message:await Le.readFile(_e.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${_e.join(e.project,e.file)}'`):i}}a(z6,"getComponentFile");async function J6(e){let t=Ks.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=_e.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(J6,"setComponentFile");async function X6(e){let t=Ks.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?_e.join(e.project,e.file):e.project,s=_e.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),Ou.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(X6,"dropComponent");oP.exports={customFunctionsStatus:q6,getCustomFunctions:G6,getCustomFunction:x6,setCustomFunction:k6,dropCustomFunction:V6,addComponent:$6,dropCustomFunctionProject:Y6,packageComponent:K6,deployComponent:W6,getComponents:Q6,getComponentFile:z6,setComponentFile:J6,dropComponent:X6}});var IT=T((Wde,cP)=>{"use strict";var Ws=require("joi"),aP=xe();cP.exports={readTransactionLogValidator:j6,deleteTransactionLogsBeforeValidator:Z6};function j6(e){let t=Ws.object({schema:Ws.string().required(),table:Ws.string().required(),from:Ws.date().timestamp(),to:Ws.date().timestamp(),limit:Ws.number().min(1)});return aP.validateBySchema(e,t)}a(j6,"readTransactionLogValidator");function Z6(e){let t=Ws.object({schema:Ws.string().required(),table:Ws.string().required(),timestamp:Ws.date().timestamp().required()});return aP.validateBySchema(e,t)}a(Z6,"deleteTransactionLogsBeforeValidator")});var cf=T((zde,fP)=>{"use strict";var wT=y(),af=dt(),uP=$(),lP=X(),_P=ln(),{handleHDBError:aa,hdb_errors:e9}=j(),{HTTP_STATUS_CODES:ca}=e9,{readTransactionLogValidator:t9,deleteTransactionLogsBeforeValidator:r9}=IT(),dP="This operation relies on clustering and cannot run with it disable.",s9="Logs successfully deleted from transaction log.",n9="All logs successfully deleted from transaction log.";fP.exports={readTransactionLog:i9,deleteTransactionLogsBefore:o9};async function*i9(e){let t=t9(e);if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);if(!lP.get(wT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw aa(new Error,dP,ca.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=uP.checkSchemaTableExist(r,s);if(n)throw aa(new Error,n,ca.NOT_FOUND,void 0,void 0,!0);let i=_P.createNatsTableStreamName(r,s),o=await af.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===wT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(i9,"readTransactionLog");async function o9(e){let t=r9(e);if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);if(!lP.get(wT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw aa(new Error,dP,ca.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=uP.checkSchemaTableExist(r,s);if(i)throw aa(new Error,i,ca.NOT_FOUND,void 0,void 0,!0);let o=_P.createNatsTableStreamName(r,s),{jsm:c}=await af.getNATSReferences(),u=await af.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=s9,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=n9):d=(await af.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(o9,"deleteTransactionLogsBefore")});var hP=T((Xde,EP)=>{"use strict";var CT=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}};EP.exports=CT});var pP=T((Zde,mP)=>{"use strict";var LT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};mP.exports=LT});var UT=T((tfe,TP)=>{"use strict";var SP=hP(),a9=pP(),{HDB_ERROR_MSGS:c9}=Er(),DT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=c9.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 SP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new a9(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 SP(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}};TP.exports=DT});var df=T((sfe,vP)=>{"use strict";var MT=xr(),uf=Gr(),Jr=od(),yu=yi(),PT=Di(),u9=Wp(),l9=DL(),Iu=kr(),lf=rS(),Et=F(),_9=iS(),d9=Nd(),f9=GS(),E9=wd(),h9=xS(),m9=kS(),p9=YS(),S9=WS(),vT=JS(),Rn=$(),T9=wU(),BT=tT(),AP=Yd(),zr=y(),OP=wM(),R9=zo(),NP=Zc(),bP=(Jd(),Z(Su)),yP=Ar(),Ur=yT(),g9=require("alasql"),IP=cf(),wP=tf(),CP=UT(),{handleHDBError:cr,hdb_errors:LP}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:Nu}=LP,v=new Map,DP="delete",ai="insert",gn="read",Qi="update",bu="describe",RP=yu.describeSchema.name,gP=yu.describeTable.name,UP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},A9="catchup",O9="handleGetJob",N9="handleGetJobsByStartDate",_f={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},b9=[Jr.createTable.name,Jr.createAttribute.name,Jr.dropTable.name,Jr.dropAttribute.name],MP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(MT.insert.name,new q(!1,[ai]));v.set(MT.update.name,new q(!1,[Qi]));v.set(MT.upsert.name,new q(!1,[ai,Qi]));v.set(uf.searchByConditions.name,new q(!1,[gn]));v.set(uf.searchByHash.name,new q(!1,[gn]));v.set(uf.searchByValue.name,new q(!1,[gn]));v.set(uf.search.name,new q(!1,[gn]));v.set(Jr.createSchema.name,new q(!0,[]));v.set(Jr.createTable.name,new q(!0,[]));v.set(Jr.createAttribute.name,new q(!1,[ai]));v.set(Jr.dropSchema.name,new q(!0,[]));v.set(Jr.dropTable.name,new q(!0,[]));v.set(Jr.dropAttribute.name,new q(!0,[]));v.set(yu.describeSchema.name,new q(!1,[gn]));v.set(yu.describeTable.name,new q(!1,[gn]));v.set(PT.deleteRecord.name,new q(!1,[DP]));v.set(Iu.addUser.name,new q(!0,[]));v.set(Iu.alterUser.name,new q(!0,[]));v.set(Iu.dropUser.name,new q(!0,[]));v.set(Iu.listUsersExternal.name,new q(!0,[]));v.set(lf.listRoles.name,new q(!0,[]));v.set(lf.addRole.name,new q(!0,[]));v.set(lf.alterRole.name,new q(!0,[]));v.set(lf.dropRole.name,new q(!0,[]));v.set(_9.name,new q(!0,[]));v.set(d9.name,new q(!0,[]));v.set(f9.name,new q(!0,[]));v.set(E9.name,new q(!0,[]));v.set(h9.name,new q(!0,[]));v.set(m9.name,new q(!0,[]));v.set(vT.setRoutes.name,new q(!0,[]));v.set(vT.getRoutes.name,new q(!0,[]));v.set(vT.deleteRoutes.name,new q(!0,[]));v.set(yP.setConfiguration.name,new q(!0,[]));v.set(p9.clusterStatus.name,new q(!0,[]));v.set(S9.name,new q(!0,[]));v.set(BT.getFingerprint.name,new q(!0,[]));v.set(BT.setLicense.name,new q(!0,[]));v.set(PT.deleteFilesBefore.name,new q(!0,[]));v.set(PT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(AP.restart.name,new q(!0,[]));v.set(AP.restartService.name,new q(!0,[]));v.set(u9.name,new q(!0,[]));v.set(l9.name,new q(!0,[gn]));v.set(R9.systemInformation.name,new q(!0,[]));v.set(yP.getConfiguration.name,new q(!0,[]));v.set(IP.readTransactionLog.name,new q(!0,[]));v.set(IP.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(wP.installModules.name,new q(!0,[]));v.set(wP.auditModules.name,new q(!0,[]));v.set(NP.createTokens.name,new q(!1,[]));v.set(NP.refreshOperationToken.name,new q(!1,[]));v.set(bP.login.name,new q(!1,[]));v.set(bP.logout.name,new q(!1,[]));v.set(Ur.customFunctionsStatus.name,new q(!0,[]));v.set(Ur.getCustomFunctions.name,new q(!0,[]));v.set(Ur.getComponents.name,new q(!0,[]));v.set(Ur.getComponentFile.name,new q(!0,[]));v.set(Ur.setComponentFile.name,new q(!0,[]));v.set(Ur.dropComponent.name,new q(!0,[]));v.set(Ur.getCustomFunction.name,new q(!0,[]));v.set(Ur.setCustomFunction.name,new q(!0,[]));v.set(Ur.dropCustomFunction.name,new q(!0,[]));v.set(Ur.addComponent.name,new q(!0,[]));v.set(Ur.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ur.packageComponent.name,new q(!0,[]));v.set(Ur.deployComponent.name,new q(!0,[]));v.set(BT.getRegistrationInfo.name,new q(!1,[]));v.set(Iu.userInfo.name,new q(!1,[]));v.set(yu.describeAll.name,new q(!1,[]));v.set(O9,new q(!1,[]));v.set(N9,new q(!0,[]));v.set(A9,new q(!0,[]));v.set(_f.CSV_DATA_LOAD,new q(!1,[ai,Qi]));v.set(_f.CSV_URL_LOAD,new q(!1,[ai,Qi]));v.set(_f.CSV_FILE_LOAD,new q(!1,[ai,Qi]));v.set(_f.IMPORT_FROM_S3,new q(!1,[ai,Qi]));v.set(MP.EXPORT_TO_S3,new q(!0,[]));v.set(MP.EXPORT_LOCAL,new q(!0,[]));v.set(zr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[DP]));v.set(zr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[gn]));v.set(zr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ai]));v.set(zr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Qi]));vP.exports={verifyPerms:I9,verifyPermsAst:y9,verifyBulkLoadAttributePerms:C9};function y9(e,t,r){if(Rn.isEmptyOrZeroLength(e))throw Et.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Rn.isEmptyOrZeroLength(t))throw Et.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Rn.isEmptyOrZeroLength(r))throw Et.info("verify_perms_ast has a null operation parameter"),cr(new Error);try{let s=new CP,n=new T9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Et.info("No schemas defined in verifyPermsAst(), will not continue."),cr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&UP[r])throw cr(new Error,Ct.DROP_SYSTEM,Nu.FORBIDDEN);if(c&&!u)return null;let _=OP.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=PP(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=FT(t.role.permission,f,d[E]);HT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw cr(s)}}a(y9,"verifyPermsAst");function I9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Et.info("null required parameter in verifyPerms"),cr(new Error,Ct.DEFAULT_INVALID_REQUEST,Nu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new CP;if(Rn.isEmptyOrZeroLength(e.hdb_user.role)||Rn.isEmptyOrZeroLength(e.hdb_user.role.permission))return Et.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.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(zr.SYSTEM_SCHEMA_NAME)||n===zr.SYSTEM_SCHEMA_NAME;if(l&&UP[r])throw cr(new Error,Ct.DROP_SYSTEM,Nu.FORBIDDEN);if(u&&!l||_===!0&&(r===Jr.createSchema.name||r===Jr.dropSchema.name))return null;if(b9.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=OP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RP||r===gP){if(n===zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===RP&&(!d[n]||!d[n][bu]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===gP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][bu]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=PP(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&&zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[zr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[zr.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let E=w9(e),h=FT(e.hdb_user.role.permission,n,i);return HT(E,h,r,i,n,c,s),c.getPermsResponse()}a(I9,"verifyPerms");function PP(e,t,r,s,n){if(Rn.arrayHasEmptyValues([e,t,r]))throw Et.info("hasPermissions has an invalid parameter"),cr(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 Et.info(`operation ${t} not found.`),cr(new Error,Ct.OP_NOT_FOUND(t),Nu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return Et.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][bu]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[bu]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Rn.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)&&(Et.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=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Et.error(E),Et.error(f),cr(LP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(PP,"hasPermissions");function HT(e,t,r,s,n,i,o){if(!e||!t)throw Et.info("no attributes specified in checkAttributePerms."),cr(new Error);let c=v.get(r).perms;if(!c||c==="")throw Et.info(`no permissions found for ${r} in checkAttributePerms().`),cr(new Error);if(Rn.isEmptyOrZeroLength(t))return Et.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[bu]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==gn)throw cr(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,Nu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(HT,"checkAttributePerms");function w9(e){let t=new Set;try{if(e.action)return t;if(e.operation===zr.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){Et.info(r)}return t}a(w9,"getRecordAttributes");function FT(e,t,r){let s=new Map;if(Rn.isEmpty(e))return Et.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{Et.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(FT,"getAttributePermissions");function C9(e,t,r,s,n,i,o){let c=new Set(i),u=FT(e,s,n);HT(c,u,t,n,s,o,r)}a(C9,"verifyBulkLoadAttributePerms")});var Ef=T((ife,GP)=>{"use strict";GP.exports={evaluateSQL:k9,processAST:qP,convertSQLToAST:FP,checkASTPermissions:HP};var L9=xr(),BP=require("util"),D9=BP.callbackify(L9.insert),U9=Gr().search,M9=VC().update,P9=BP.callbackify(M9),v9=YC().convertDelete,ci=require("alasql"),B9=df(),ff=F(),H9=s_(),F9=$(),wu=y(),{hdb_errors:q9,handleHDBError:qT}=j(),{HTTP_STATUS_CODES:GT}=q9;H9(ci);var G9=403,x9="There was a problem performing this insert. Please check the logs and try again.",xT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function k9(e,t){let r=e.parsed_sql_object;if(!r){r=FP(e.sql);let s,n=r.ast.statements[0];if(n instanceof ci.yy.Insert?s=n.into.databaseid:n instanceof ci.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ci.yy.Update||n instanceof ci.yy.Delete?s=n.table.databaseid:ff.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ci.yy.Select)&&F9.isEmptyOrZeroLength(s))return t("No schema specified",null)}qP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(k9,"evaluateSQL");function HP(e,t){let r;try{r=B9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(HP,"checkASTPermissions");function FP(e){let t=new xT;if(!e)throw qT(new Error,"The 'sql' parameter is missing from the request body",GT.BAD_REQUEST);try{let r=e.trim(),s=ci.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
17
+ `);throw s[1]?qT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,GT.BAD_REQUEST):qT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",GT.BAD_REQUEST)}return t}a(FP,"convertSQLToAST");function qP(e,t,r){try{let s=V9;if(!e.bypass_auth&&!t.permissions_checked){let i=HP(e,t);if(i&&i.length>0)return r(G9,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case wu.VALID_SQL_OPS_ENUM.SELECT:s=U9,n=t.ast.statements[0];break;case wu.VALID_SQL_OPS_ENUM.INSERT:s=$9;break;case wu.VALID_SQL_OPS_ENUM.UPDATE:s=P9;break;case wu.VALID_SQL_OPS_ENUM.DELETE:s=v9;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 V9(e,t){ff.info(e),t("unknown sql statement")}a(V9,"nullFunction");function $9({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=Y9(i,e.values)}catch(o){return r(o)}D9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){ff.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a($9,"convertInsert");function Y9(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]]=ci.compile(`SELECT ${n.toString()} AS [${wu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw ff.error(r),new Error(x9)}}a(Y9,"createDataObjects")});var kT=T((afe,kP)=>{"use strict";var{S3:K9,GetObjectCommand:W9}=require("@aws-sdk/client-s3");kP.exports={getFileStreamFromS3:Q9,getS3AuthObj:xP};async function Q9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await xP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new W9(r))).Body}a(Q9,"getFileStreamFromS3");function xP(e,t,r){return new K9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(xP,"getS3AuthObj")});var hf=T((ufe,jP)=>{"use strict";var YP=Gr(),z9=Ef(),J9=kT(),{AsyncParser:X9,Transform:j9}=require("json2csv"),Lu=require("stream"),Mr=$(),VT=require("fs-extra"),Z9=require("path"),Xr=F(),{promisify:KP}=require("util"),Cu=$(),{handleHDBError:it,hdb_errors:e7}=j(),{HDB_ERROR_MSGS:ur,HTTP_STATUS_CODES:ot}=e7,{streamAsJSON:t7}=Up(),{Upload:r7}=require("@aws-sdk/lib-storage"),VP=["search_by_value","search_by_hash","sql"],$P=["json","csv"],WP="json",QP="csv",s7="Successfully exported JSON locally.",n7="Successfully exported CSV locally.",i7=1e3,o7=YP.searchByHash,a7=YP.searchByValue,c7=KP(z9.evaluateSQL),u7=KP(Lu.finished);jP.exports={export_to_s3:f7,export_local:l7,toCsvStream:zP};async function l7(e){Xr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=JP(e);if(!Mr.isEmpty(t))throw Xr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Mr.isEmpty(e.path))throw Xr.error(ur.MISSING_VALUE("path")),it(new Error,ur.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Mr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Z9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Mr.buildFolderPath(e.path,r);await _7(e.path);let n=await XP(e);return await d7(s,e.format,n)}a(l7,"export_local");async function _7(e){if(Xr.trace("in confirmPath"),Mr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await VT.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,Xr.error(s),it(new Error,s,ot.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 Xr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(_7,"confirmPath");async function d7(e,t,r){if(Xr.trace("in saveToLocal"),Cu.isEmptyOrZeroLength(e))throw it(new Error,ur.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(Cu.isEmptyOrZeroLength(t))throw it(new Error,ur.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(Cu.isEmpty(r))throw it(new Error,ur.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===WP){let s=VT.createWriteStream(e);return t7(r).pipe(s),await u7(s),{message:s7,path:e}}else if(t===QP){let s=VT.createWriteStream(e),n=Lu.Readable.from(r),i={},o={objectMode:!0};return await new X9(i,o).fromInput(n).toOutput(s).promise(!1),{message:n7,path:e}}throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(d7,"saveToLocal");async function f7(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ur.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ur.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ur.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ur.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ur.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ur.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=JP(e);if(!Mr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Xr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await XP(e)}catch(u){throw Xr.error(u),u}let s,n=await J9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Lu.PassThrough;if(e.format===QP){i=e.s3.key+".csv";let u=zP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===WP){i=e.s3.key+".json";let u=new Lu.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%i7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST);return new r7({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(f7,"export_to_s3");function zP(e){let t=Lu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new j9(r,s);return t.pipe(n)}a(zP,"toCsvStream");function JP(e){if(Xr.trace("in exportCoreValidation"),Mr.isEmpty(e.format))return"format missing";if($P.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${$P.join(", ")}`;let t=e.search_operation.operation;if(Mr.isEmpty(t))return"search_operation.operation missing";if(VP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${VP.join(", ")}`}a(JP,"exportCoreValidation");async function XP(e){Xr.trace("in getRecords");let t,r;if(Cu.isEmpty(e.search_operation)||Cu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ur.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=a7;break;case"search_by_hash":t=o7;break;case"sql":t=c7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Xr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(XP,"getRecords")});var ov={};ve(ov,{contentTypes:()=>YT,findBestSerializer:()=>Sf,getDeserializer:()=>ua,registerContentHandlers:()=>KT,serialize:()=>Tf,serializeMessage:()=>oi});function E7(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function KT(e){e.register(m7,{serializers:[{regex:/^application\/json$/,serializer:mf.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new zi.EncoderStream(Du).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?pf.Readable.from((0,Qs.encodeIter)(t,Du)):(0,Qs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,$T.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Qs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,zi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Sf(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=Lt.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(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Tf(e,t,r){let s=ev&&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=Sf(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,An.createBrotliCompress)({params:{[An.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?An.constants.BROTLI_MODE_TEXT:An.constants.BROTLI_MODE_GENERIC,[An.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>ev?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,An.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function oi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Sf(t);return r=t.serialize=s.serializer.serialize,r(e)}function p7(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 ua(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||tv(e,s);return o=>p7(o).then(i)}return e&&Lt.get(e)?.deserialize||tv(e,s)}function tv(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 JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function S7(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 mf,$T,Qs,zi,An,pf,rv,sv,nv,Du,Lt,YT,ZP,iv,h7,m7,ev,ra=Te(()=>{mf=D(Up()),$T=D(hf()),Qs=require("msgpackr"),zi=require("cbor-x"),An=require("zlib"),pf=require("stream");fr();rv=require("../index"),sv=D(X()),nv=D(y()),Du={useRecords:!1,useToJSON:!0},Lt=new Map,YT=Lt;ct.contentTypes=YT;(0,rv._assignPackageExport)("contentTypes",YT);Lt.set("application/json",{serializeStream:mf.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ZP=new zi.Encoder(Du);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new zi.EncoderStream(Du).end(e)},serialize:ZP.encode,deserialize:ZP.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?pf.Readable.from((0,Qs.encodeIter)(e,Du)):(0,Qs.pack)(e)},serialize:Qs.pack,deserialize:Qs.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,$T.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return pf.Readable.from(S7(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
18
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
19
19
  `}return e.id&&(t+="id: "+e.id+`
20
20
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -23,13 +23,13 @@ var LH=Object.create;var Na=Object.defineProperty;var DH=Object.getOwnPropertyDe
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});Lt.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()}});ov={type:"application/json",serializeStream:hf.streamAsJSON,serialize:JSON.stringify,deserialize:h7,q:.8};Lt.set("*/*",ov);Lt.set("",ov);a(h7,"tryJSONParse");a(WT,"registerContentHandlers");m7=require("fastify-plugin"),p7=m7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=pf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(pf,"findBestSerializer");tv=nv.default.get(iv.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Sf,"serialize");a(ii,"serializeMessage");a(S7,"streamToBuffer");a(ca,"getDeserializer");a(rv,"deserializerUnknownType");a(T7,"transformIterable")});var Tf={};ve(Tf,{start:()=>A7});async function g7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new ni;try{e.responseHeaders=n;let i=e.url.slice(1),o=zT.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 Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ca(r["content-type"],!0)(e.body)}catch(p){throw new Uu.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 Uu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Uu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,QT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){R7[0]=f;let p=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[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),QT.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=Sf(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?zi.warn(i):zi.info(i):zi.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=Sf(i.contentType?i:i.toString(),e,o),o}}function A7(e){QT=e,!cv&&(cv=!0,zT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return g7(t,r)}),e.server.ws(async(t,r,s)=>{Du++;let n=new ss;uv||(uv=!0,wc(l=>{Du>0&&l.push({metric:"ws-connections",connections:Du,byThread:!0})}));let i;t.on("error",l=>{i=!0,zi.warn(l)});let o;t.on("message",a(function(d){o||(o=ca(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Du--,Vr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=zT.getMatch(u);if(Vr(!!_,"connection","ws","connect"),!_)t.send(ii(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:Du}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ii(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var zi,Uu,Dt,R7,QT,cv,zT,uv,Du,lv=Te(()=>{ta();_n();zi=D(G()),Uu=D(j());Tl();qa();mi();Yd();Dt=new Uint8Array(8),R7=new Float64Array(Dt.buffer,0,1),QT={};a(g7,"http");Du=0;a(A7,"start")});var JT=T((gfe,_v)=>{var{recordAction:Rf,recordActionBinary:O7}=(_n(),Z(Cc)),N7=require("fastify-plugin"),b7=200;_v.exports=N7(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),Rf(o,"duration",_,d,l),O7(n.raw.statusCode<400,"success",_,d,l);let f=b7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Rf(performance.now()-c,"transfer",_,d,l),Rf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Rf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var eR=T((Afe,mv)=>{var bf=require("clone"),yf=xe(),y7=$(),Of=y(),I7=G(),gf=require("fs"),XT=require("joi"),{string:Nf}=XT.types(),{hdb_errors:w7,handleHDBError:Mu}=j(),{HDB_ERROR_MSGS:C7,HTTP_STATUS_CODES:Af}=w7,{common_validators:ua}=Ds(),dv=1e9,fv=" is required",L7=["insert","update","upsert"],jT={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:L7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},D7={schema:Nf.required(),table:Nf.required(),action:Nf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:U7,AWS_SECRET:M7,AWS_BUCKET:P7,AWS_FILE_KEY:v7,REGION:B7}=Of.S3_BUCKET_AUTH_KEYS,H7={s3:{presence:!0},[`s3.${U7}`]:{presence:!0,type:"String"},[`s3.${M7}`]:{presence:!0,type:"String"},[`s3.${P7}`]:{presence:!0,type:"String"},[`s3.${v7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${B7}`]:{presence:!0,type:"String"}},Ev=bf(jT);Ev.data.presence={message:fv};var hv=bf(jT);hv.file_path.presence={message:fv};var q7=Object.assign(bf(jT),H7),ZT=bf(D7);ZT.csv_url=Nf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ZT.passthrough_headers=XT.object();function F7(e){let t=yf.validateObject(e,Ev);return If(e,t)}a(F7,"dataObject");function G7(e){let t=yf.validateBySchema(e,XT.object(ZT));return If(e,t)}a(G7,"urlObject");function x7(e){let t=yf.validateObject(e,hv);return If(e,t)}a(x7,"fileObject");function k7(e){let t=yf.validateObject(e,q7);return If(e,t)}a(k7,"s3FileObject");function If(e,t){if(!t){let r=y7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Mu(new Error,r,Af.BAD_REQUEST);if(e.operation===Of.OPERATIONS_ENUM.CSV_FILE_LOAD){try{gf.accessSync(e.file_path,gf.constants.R_OK|gf.constants.F_OK)}catch(s){return s.code===Of.NODE_ERROR_CODES.ENOENT?Mu(s,`No such file or directory ${s.path}`,Af.BAD_REQUEST):s.code===Of.NODE_ERROR_CODES.EACCES?Mu(s,`Permission denied ${s.path}`,Af.BAD_REQUEST):Mu(s)}try{let s=gf.statSync(e.file_path).size;if(s>dv)return Mu(new Error,C7.MAX_FILE_SIZE_ERR(s,dv),Af.BAD_REQUEST)}catch(s){I7.error(s),console.error(s)}}}return t}a(If,"postValidateChecks");mv.exports={dataObject:F7,urlObject:G7,fileObject:x7,s3FileObject:k7}});var tR=T((Nfe,pv)=>{"use strict";var Pu=G(),wf=y();async function V7(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===wf.OPERATIONS_ENUM.INSERT||t.operation===wf.OPERATIONS_ENUM.UPDATE||t.operation===wf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===wf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Pu.info(i.message),i):i.http_resp_msg?(Pu.error(`Error calling operation: ${e.name}`),Pu.error(i.http_resp_msg),i):(Pu.error(`Error calling operation: ${e.name}`),Pu.error(i),i)}}a(V7,"callOperationFunctionAsAwait");pv.exports={callOperationFunctionAsAwait:V7}});var Tv=T((yfe,Sv)=>{"use strict";var rR=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}},sR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};Sv.exports={BulkLoadFileObject:rR,BulkLoadDataObject:sR}});var gv=T((wfe,Rv)=>{"use strict";var nR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Rv.exports=nR});var lR=T((Pfe,qv)=>{"use strict";var Cf=xr(),Df=eR(),$7=require("needle"),As=y(),Lfe=ke(),la=$(),{handleHDBError:We,hdb_errors:Lv}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:Xi}=Lv,_a=G(),iR=require("papaparse");la.promisifyPapaParse();var Os=require("fs-extra"),Y7=require("path"),{chain:Av}=require("stream-chain"),Ov=require("stream-json/streamers/StreamArray"),Nv=require("stream-json/utils/Batch"),bv=require("stream-chain/utils/comp"),{finished:yv}=require("stream"),K7=X(),Dv=tR(),W7=VT(),{BulkLoadFileObject:aR,BulkLoadDataObject:Q7}=Tv(),cR=MT(),{verifyBulkLoadAttributePerms:Uv}=_f(),Dfe=gv(),Ufe=dt(),Mfe=un(),{databases:z7}=(fe(),Z(Ce)),{coerceType:J7}=(H_(),Z(hp)),Iv="No records parsed from csv file.",Ji=`${K7.get("HDB_ROOT")}/tmp`,{schema_regex:X7}=Ds(),wv=1024*1024*2,Cv=5e3,j7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};qv.exports={csvDataLoad:Z7,csvURLLoad:eee,csvFileLoad:tee,importFromS3:ree};async function Z7(e,t){let r=Df.dataObject(e);if(r)throw We(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=vv(e.schema,e.table),i=iR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:oR.bind(null,n),dynamicTyping:!1}),o=new cR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Uv(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw We(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new Q7(e.action,e.schema,e.table,i.data);return s=await Dv.callOperationFunctionAsAwait(Bv,u,null),s.message===Iv?Iv:Hv(s.records,s.number_written)}catch(n){throw ji(n)}}a(Z7,"csvDataLoad");async function eee(e){let t=Df.urlObject(e);if(t)throw We(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ji}/${r}`;try{await see(e,r)}catch(n){throw _a.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),We(n,Xi(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new aR(this.job_operation_function.name,e.action,e.schema,e.table,s,As.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await uR(n);return await Lf(s),i}catch(n){throw await Lf(s),ji(n)}}a(eee,"csvURLLoad");async function tee(e){let t=Df.fileObject(e);if(t)throw We(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new aR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,As.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await uR(r)}catch(s){throw ji(s)}}a(tee,"csvFileLoad");async function ree(e){let t=Df.s3FileObject(e);if(t)throw We(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Y7.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ji}/${n}`;let i=new aR(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await nee(n,e);let o=await uR(i);return await Lf(r),o}catch(s){throw await Lf(r),ji(s)}}a(ree,"importFromS3");async function see(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await $7("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 We(s,n,s.statusCode,As.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}oee(r,e.csv_url),await iee(t,r.raw)}a(see,"downloadCSVFile");async function nee(e,t){try{let r=`${Ji}/${e}`;await Os.mkdirp(Ji),await Os.writeFile(`${Ji}/${e}`,"",{flag:"a+"});let s=await Os.createWriteStream(r),n=await W7.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(){_a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw _a.error(Et.S3_DOWNLOAD_ERR+" - "+r),We(r,Xi(Et.S3_DOWNLOAD_ERR))}}a(nee,"downloadFileFromS3");async function iee(e,t){try{await Os.mkdirp(Ji),await Os.writeFile(`${Ji}/${e}`,t)}catch(r){throw _a.error(Et.WRITE_TEMP_FILE_ERR),We(r,Xi(Et.DEFAULT_BULK_LOAD_ERR))}}a(iee,"writeFileToTempFolder");async function Lf(e){if(e)try{await Os.access(e),await Os.unlink(e)}catch{_a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Lf,"deleteTempFile");function oee(e,t){if(e.statusCode!==Lv.HTTP_STATUS_CODES.OK)throw We(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!j7[e.headers["content-type"]])throw We(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw We(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(oee,"validateURLResponse");async function uR(e){try{let t;switch(e.file_type){case As.VALID_S3_FILE_TYPES.CSV:t=await aee(e);break;case As.VALID_S3_FILE_TYPES.JSON:t=await cee(e);break;default:throw We(new Error,Et.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,As.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return Hv(t.records,t.number_written)}catch(t){throw ji(t)}}a(uR,"fileLoad");async function Mv(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 Cf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Uv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=We(c);r(u)}}a(Mv,"validateChunk");async function Pv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;la.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!la.isEmpty(c)&&!la.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 Dv.callOperationFunctionAsAwait(Bv,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=We(c,Xi(Et.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(Pv,"insertChunk");async function aee(e){let t={records:0,number_written:0},r=vv(e.schema,e.table);try{let s=new cR,n=Os.createReadStream(e.file_path,{highWaterMark:wv});n.setEncoding("utf8"),await iR.parsePromise(n,Mv.bind(null,e,s),oR.bind(null,r));let i=s.getPermsResponse();if(i)throw We(new Error,i,Ut.BAD_REQUEST);return n=Os.createReadStream(e.file_path,{highWaterMark:wv}),n.setEncoding("utf8"),await iR.parsePromise(n,Pv.bind(null,e,t),oR.bind(null,r)),n.destroy(),t}catch(s){throw We(s,Xi(Et.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(aee,"callPapaParse");function vv(e,t){let r=z7[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>J7(i,n));return s}a(vv,"createTransformMap");function oR(e,t,r){let s=e.get(r);return s?s(t):la.autoCast(t)}a(oR,"typeFunction");async function cee(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new cR,n=Av([Os.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new Nv({batchSize:Cv}),bv(async c=>{await Mv(e,s,r,c)})]);await new Promise((c,u)=>{yv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw We(new Error,i,Ut.BAD_REQUEST);let o=Av([Os.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new Nv({batchSize:Cv}),bv(async c=>{await Pv(e,t,r,c)})]);return await new Promise((c,u)=>{yv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw We(s,Xi(Et.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(cee,"insertJson");async function Bv(e){let t={};try{e.data&&e.data.length>0&&uee(e.data[0])?t=await lee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",_a.info(t.message))}catch(r){throw ji(r)}return t}a(Bv,"callBulkFileLoad");function uee(e){let t=Object.keys(e);for(let r of t)if(!X7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(uee,"validateColumnNames");async function lee(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Cf.insert;break;case"update":i=Cf.update;break;case"upsert":i=Cf.upsert;break;default:throw We(new Error,Et.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,As.LOG_LEVELS.ERROR,Et.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=la.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw ji(o)}}a(lee,"bulkFileLoad");function Hv(e,t){return`successfully loaded ${t} of ${e} records`}a(Hv,"buildResponseMsg");function ji(e){return We(e,Xi(Et.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ji,"buildTopLevelErrMsg")});var Gv=T((Bfe,Fv)=>{"use strict";var _R=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Fv.exports=_R});var Vv=T((qfe,kv)=>{"use strict";var _ee=y(),xv=require("moment"),dee=require("uuid").v4,dR=class{static{a(this,"JobObject")}constructor(){this.id=dee(),this.type=void 0,this.start_datetime=xv().valueOf(),this.created_datetime=xv().valueOf(),this.end_datetime=void 0,this.status=_ee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kv.exports=dR});var fR=T((Gfe,zv)=>{"use strict";var fee=require("uuid").v4,Kv=xr(),Wv=Gr(),Eee=Ms(),hee=Ao(),mee=Gv(),Qe=y(),pee=Vv(),See=uS(),jr=G(),Tee=tc(),da=$(),{promisify:Ree}=require("util"),Zi=require("moment"),gee=ff(),Uf=eR(),$v=Mm(),{deleteTransactionLogsBeforeValidator:Aee}=wT(),{handleHDBError:Oee,hdb_errors:Nee}=j(),{HTTP_STATUS_CODES:bee}=Nee,Yv=Wv.searchByValue,yee=Wv.searchByHash,Iee=Kv.insert,wee=Ree(gee.evaluateSQL),Cee=Kv.update;zv.exports={addJob:Uee,updateJob:Pee,handleGetJob:Lee,handleGetJobsByStartDate:Dee,getJobById:Qv};async function Lee(e){try{let t=await Qv(e.id);return da.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 jr.error("There was an error getting job",t),new Error(r)}}a(Lee,"handleGetJob");async function Dee(e){try{let t=await Mee(e);if(jr.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=Zi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Zi(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 jr.error(r),new Error(r)}}a(Dee,"handleGetJobsByStartDate");async function Uee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||da.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return jr.info(l),t.error=l,t}if(!Qe.JOB_TYPE_ENUM[e.operation])return jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Uf.fileObject(e);break;case Qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=Uf.urlObject(e);break;case Qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Uf.dataObject(e);break;case Qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Uf.s3FileObject(e);break;case Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=$v(e,"date");break;case Qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=$v(e,"timestamp");break;case Qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Aee(e);break;default:break}if(s)throw Oee(s,s.message,bee.BAD_REQUEST,void 0,void 0,!0);let n=new pee;n.type=e.operation===Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Eee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await Yv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=fee();try{o=await Yv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Tee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await Iee(u)}catch(l){return jr.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,jr.trace(l)}return t}a(Uee,"addJob");async function Mee(e){let t=Zi(e.from_date,Zi.ISO_8601),r=Zi(e.to_date,Zi.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 mee(s,e.hdb_user);try{return await wee(n)}catch(i){throw jr.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(Mee,"getJobsInDateRange");async function Qv(e){if(da.isEmptyOrZeroLength(e))return da.errorizeMessage("Invalid job ID specified.");let t=new hee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await yee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return jr.error(s),da.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Qv,"getJobById");async function Pee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(da.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Qe.JOB_STATUS_ENUM.COMPLETE||e.status===Qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Zi().valueOf());let t=new See(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Cee(t),r}a(Pee,"updateJob")});var t0=T((kfe,e0)=>{"use strict";var Jv=$(),lr=y(),vee=require("moment"),Mf=lR(),Pf=G(),Xv=fR(),jv=Ef(),Zv=Li(),Bee=Je(),Hee=af(),ER=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function qee(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(Jv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Jv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case lr.JOB_TYPE_ENUM.csv_file_load:await An(e,Mf.csvFileLoad);break;case lr.JOB_TYPE_ENUM.csv_url_load:await An(e,Mf.csvURLLoad);break;case lr.JOB_TYPE_ENUM.csv_data_load:await An(e,Mf.csvDataLoad);break;case lr.JOB_TYPE_ENUM.import_from_s3:await An(e,Mf.importFromS3);break;case lr.JOB_TYPE_ENUM.empty_trash:break;case lr.JOB_TYPE_ENUM.export_local:await An(e,jv.export_local);break;case lr.JOB_TYPE_ENUM.export_to_s3:await An(e,jv.export_to_s3);break;case lr.JOB_TYPE_ENUM.delete_files_before:case lr.JOB_TYPE_ENUM.delete_records_before:await An(e,Zv.deleteFilesBefore);break;case lr.JOB_TYPE_ENUM.delete_audit_logs_before:await An(e,Zv.deleteAuditLogsBefore);break;case lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await An(e,Hee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(qee,"parseMessage");async function An(e,t){try{e.job.status=lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=vee().valueOf(),await Xv.updateJob(e.job),await Fee(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):Pf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Pf.error(s),e.job.message=s,e.job.status=lr.JOB_STATUS_ENUM.ERROR;try{await Xv.updateJob(e.job)}catch(n){throw Pf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(An,"runJob");async function Fee(e){Pf.trace("launching job thread:",e),Bee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Fee,"launchJobThread");e0.exports={parseMessage:qee,RunnerMessage:ER}});var s0=T(($fe,r0)=>{"use strict";var hR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r0.exports=hR});var T0=T((Kfe,gR)=>{"use strict";var qf=Gr(),SR=ff(),vf=lR(),On=id(),Bf=bi(),Bu=Li(),Gee=Qp(),vu=kr(),Hf=sS(),Mt=IT(),ht=G(),xee=oS(),kee=Od(),Vee=xS(),$ee=Id(),Yee=kS(),Kee=VS(),Wee=KS(),Qee=QS(),mR=XS(),n0=Ef(),zee=_f(),TR=fR(),P=y(),{hdb_errors:qu,handleHDBError:Hu}=j(),{HTTP_STATUS_CODES:i0}=qu,pR=rT(),o0=$d(),h0=require("util"),fa=xr(),Jee=xn(),Xee=Qo(),a0=t0(),c0=jc(),u0=(zd(),Z(pu)),l0=Ar(),_0=af(),d0=ef(),{setServerUtilities:jee}=(H_(),Z(hp)),{CONTEXT:Zee}=(is(),Z(qE)),{_assignPackageExport:ete}=require("../index"),{transformReq:tte}=$(),{server:rte}=(fr(),Z(di)),ste=tR(),f0=qf.searchByHash,nte=qf.searchByValue,ite=h0.promisify(qf.search),ote=h0.promisify(SR.evaluateSQL),ate={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=s0();async function m0(e,t){try{if(e.body.operation!=="read_log"&&(ht.log_level===P.LOG_LEVELS.INFO||ht.log_level===P.LOG_LEVELS.DEBUG||ht.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ht.info(o)}}catch(s){ht.error(s)}let r=await ste.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ate[e.body.operation]&&Jee.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(m0,"processLocalTransaction");var E0=ute();gR.exports={chooseOperation:p0,getOperationFunction:S0,operation:RR,processLocalTransaction:m0};jee(gR.exports);rte.operation=RR;function p0(e){let t;try{t=S0(e)}catch(n){throw ht.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=SR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=SR.checkASTPermissions(e,i);if(o)throw ht.error(`${i0.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Hu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.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=zee.verifyPerms(i,n);if(o)throw ht.error(`${i0.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Hu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Hu(n,"There was an error when trying to choose an operation path")}return r}a(p0,"chooseOperation");function S0(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),E0.has(e.operation))return E0.get(e.operation);throw Hu(new Error,qu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(S0,"getOperationFunction");ete("operation",RR);function RR(e,t){e.hdb_user=this[Zee]?.user,e.bypass_auth=!t;let r=p0(e);return m0({body:e},r)}a(RR,"operation");async function cte(e){ht.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[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await fa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await fa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await fa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Bu.deleteRecord(i);break;default:ht.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ht.info("Invalid operation in transaction"),ht.error(o)}}a(cte,"catchup");async function zs(e){tte(e);let t,r;try{r=await TR.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new a0.RunnerMessage(t,e);return await a0.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 ht.error(n),Hu(s,n)}}a(zs,"executeJob");function ute(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(fa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(fa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(fa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(qf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(f0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(f0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(nte)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(ite)),e.set(P.OPERATIONS_ENUM.SQL,new H(ote)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(zs,vf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(zs,vf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(zs,vf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(zs,vf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(On.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(On.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(On.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(On.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(On.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(On.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(On.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(On.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(Bf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(Bf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(Bf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(Bf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Bu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(vu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(vu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(vu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(vu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Hf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Hf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Hf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Hf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(vu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(xee)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(kee)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(Vee)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H($ee)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(Yee)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(Kee)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(l0.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(Wee.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Qee)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(mR.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(mR.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(mR.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(zs,n0.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(zs,Bu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(zs,Bu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(zs,n0.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(TR.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(TR.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(pR.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(pR.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(pR.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(o0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(o0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(cte)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(Xee.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(zs,Bu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Gee)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(c0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(c0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(u0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(u0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(l0.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(_0.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(zs,_0.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(d0.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(d0.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(On.getBackup)),e}a(ute,"initializeOperationFunctionMap")});var Gf=T((Qfe,A0)=>{"use strict";var AR=y(),lte=$(),Fu=G(),{handleHDBError:OR,hdb_errors:Ff}=j(),{isMainThread:_te}=require("worker_threads"),{Readable:dte}=require("stream"),R0=require("os"),fte=require("util"),Ete=pS(),hte=fte.promisify(Ete.authorize),g0=T0(),{createGzip:mte,constants:pte}=require("zlib");function Ste(e){let t=`Found an uncaught exception with message: ${e.message}. ${R0.EOL}Stack: ${e.stack} ${R0.EOL}Terminating ${_te?"HDB":"thread"}.`;console.error(t),Fu.fatal(t),process.exit(1)}a(Ste,"handleServerUncaughtException");function Tte(e,t,r){if(Fu[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:Ff.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(Tte,"serverErrorHandler");function Rte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=OR(new Error,"Invalid JSON.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(lte.isEmpty(e.body.operation)){let s=OR(new Error,"Request body must include an 'operation' property.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Rte,"reqBodyValidationHandler");function gte(e,t,r){let s;e.body.operation!==AR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==AR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==AR.OPERATIONS_ENUM.LOGOUT?hte(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Fu.warn(n),Fu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(OR(n,i,Ff.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(gte,"authHandler");async function Ate(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=g0.chooseOperation(e.body);let n=await g0.processLocalTransaction(e,s);if(n instanceof dte&&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(mte({level:pte.Z_BEST_SPEED})))}return n}catch(n){throw Fu.error(n),n}}a(Ate,"handlePostRequest");A0.exports={authHandler:gte,handlePostRequest:Ate,handleServerUncaughtException:Ste,serverErrorHandler:Tte,reqBodyValidationHandler:Rte}});var y0=T((Jfe,b0)=>{"use strict";var Ote=require("fastify-plugin"),{handlePostRequest:O0,authHandler:Nte,reqBodyValidationHandler:bte}=Gf();async function yte(e){e.decorate("hdbCore",{preValidation:[bte,Nte],request:t=>N0(O0(t,response)),requestWithoutAuthentication:(t,r)=>N0(O0(t,r,!0))})}a(yte,"hdbCore");async function N0(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(N0,"convertAsyncIterators");b0.exports=Ote(yte)});var w0=T((jfe,I0)=>{"use strict";var NR=require("fs"),Ea=X();Ea.initSync();var{CONFIG_PARAMS:Gu}=y(),Ite=1024*1024*1024;function wte(e){let t=Ea.get(Gu.HTTP_TIMEOUT),r=Ea.get(Gu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:Ite,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ea.get(Gu.TLS_PRIVATEKEY),i=Ea.get(Gu.TLS_CERTIFICATE),o=Ea.get(Gu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:NR.readFileSync(`${n}`),cert:NR.readFileSync(i)+(o?`
26
+ `},compressible:!1,q:.8});Lt.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()}});iv={type:"application/json",serializeStream:mf.streamAsJSON,serialize:JSON.stringify,deserialize:E7,q:.8};Lt.set("*/*",iv);Lt.set("",iv);a(E7,"tryJSONParse");a(KT,"registerContentHandlers");h7=require("fastify-plugin"),m7=h7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Sf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Sf,"findBestSerializer");ev=sv.default.get(nv.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Tf,"serialize");a(oi,"serializeMessage");a(p7,"streamToBuffer");a(ua,"getDeserializer");a(tv,"deserializerUnknownType");a(S7,"transformIterable")});var Rf={};ve(Rf,{start:()=>g7});async function R7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Tl(e);let n=new ii;try{e.responseHeaders=n;let i=e.url.slice(1),o=QT.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 Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ua(r["content-type"],!0)(e.body)}catch(p){throw new Mu.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 Mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Mu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,WT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){T7[0]=f;let p=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[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),WT.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=Tf(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Ji.warn(i):Ji.info(i):Ji.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=Tf(i.contentType?i:i.toString(),e,o),o}}function g7(e){WT=e,!av&&(av=!0,QT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return R7(t,r)}),e.server.ws(async(t,r,s)=>{Uu++;let n=new ss;cv||(cv=!0,Cc(l=>{Uu>0&&l.push({metric:"ws-connections",connections:Uu,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ji.warn(l)});let o;t.on("message",a(function(d){o||(o=ua(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Uu--,Vr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=QT.getMatch(u);if(Vr(!!_,"connection","ws","connect"),!_)t.send(oi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:Uu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=oi(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Ji,Mu,Dt,T7,WT,av,QT,cv,Uu,uv=Te(()=>{ra();dn();Ji=D(F()),Mu=D(j());Rl();qa();pi();Kd();Dt=new Uint8Array(8),T7=new Float64Array(Dt.buffer,0,1),WT={};a(R7,"http");Uu=0;a(g7,"start")});var zT=T((Rfe,lv)=>{var{recordAction:gf,recordActionBinary:A7}=(dn(),Z(Lc)),O7=require("fastify-plugin"),N7=200;lv.exports=O7(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),gf(o,"duration",_,d,l),A7(n.raw.statusCode<400,"success",_,d,l);let f=N7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{gf(performance.now()-c,"transfer",_,d,l),gf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,gf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var ZT=T((gfe,hv)=>{var yf=require("clone"),If=xe(),b7=$(),Nf=y(),y7=F(),Af=require("fs"),JT=require("joi"),{string:bf}=JT.types(),{hdb_errors:I7,handleHDBError:Pu}=j(),{HDB_ERROR_MSGS:w7,HTTP_STATUS_CODES:Of}=I7,{common_validators:la}=Ds(),_v=1e9,dv=" is required",C7=["insert","update","upsert"],XT={database:{presence:!1,format:la.schema_format,length:la.schema_length},schema:{presence:!1,format:la.schema_format,length:la.schema_length},table:{presence:!0,format:la.schema_format,length:la.schema_length},action:{inclusion:{within:C7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},L7={schema:bf.required(),table:bf.required(),action:bf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:D7,AWS_SECRET:U7,AWS_BUCKET:M7,AWS_FILE_KEY:P7,REGION:v7}=Nf.S3_BUCKET_AUTH_KEYS,B7={s3:{presence:!0},[`s3.${D7}`]:{presence:!0,type:"String"},[`s3.${U7}`]:{presence:!0,type:"String"},[`s3.${M7}`]:{presence:!0,type:"String"},[`s3.${P7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${v7}`]:{presence:!0,type:"String"}},fv=yf(XT);fv.data.presence={message:dv};var Ev=yf(XT);Ev.file_path.presence={message:dv};var H7=Object.assign(yf(XT),B7),jT=yf(L7);jT.csv_url=bf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();jT.passthrough_headers=JT.object();function F7(e){let t=If.validateObject(e,fv);return wf(e,t)}a(F7,"dataObject");function q7(e){let t=If.validateBySchema(e,JT.object(jT));return wf(e,t)}a(q7,"urlObject");function G7(e){let t=If.validateObject(e,Ev);return wf(e,t)}a(G7,"fileObject");function x7(e){let t=If.validateObject(e,H7);return wf(e,t)}a(x7,"s3FileObject");function wf(e,t){if(!t){let r=b7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Pu(new Error,r,Of.BAD_REQUEST);if(e.operation===Nf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Af.accessSync(e.file_path,Af.constants.R_OK|Af.constants.F_OK)}catch(s){return s.code===Nf.NODE_ERROR_CODES.ENOENT?Pu(s,`No such file or directory ${s.path}`,Of.BAD_REQUEST):s.code===Nf.NODE_ERROR_CODES.EACCES?Pu(s,`Permission denied ${s.path}`,Of.BAD_REQUEST):Pu(s)}try{let s=Af.statSync(e.file_path).size;if(s>_v)return Pu(new Error,w7.MAX_FILE_SIZE_ERR(s,_v),Of.BAD_REQUEST)}catch(s){y7.error(s),console.error(s)}}}return t}a(wf,"postValidateChecks");hv.exports={dataObject:F7,urlObject:q7,fileObject:G7,s3FileObject:x7}});var eR=T((Ofe,mv)=>{"use strict";var vu=F(),Cf=y();async function k7(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===Cf.OPERATIONS_ENUM.INSERT||t.operation===Cf.OPERATIONS_ENUM.UPDATE||t.operation===Cf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Cf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(vu.info(i.message),i):i.http_resp_msg?(vu.error(`Error calling operation: ${e.name}`),vu.error(i.http_resp_msg),i):(vu.error(`Error calling operation: ${e.name}`),vu.error(i),i)}}a(k7,"callOperationFunctionAsAwait");mv.exports={callOperationFunctionAsAwait:k7}});var Sv=T((bfe,pv)=>{"use strict";var tR=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}},rR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};pv.exports={BulkLoadFileObject:tR,BulkLoadDataObject:rR}});var Rv=T((Ife,Tv)=>{"use strict";var sR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Tv.exports=sR});var uR=T((Mfe,Hv)=>{"use strict";var Lf=xr(),Uf=ZT(),V7=require("needle"),As=y(),Cfe=ke(),_a=$(),{handleHDBError:We,hdb_errors:Cv}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ht,CHECK_LOGS_WRAPPER:ji}=Cv,da=F(),nR=require("papaparse");_a.promisifyPapaParse();var Os=require("fs-extra"),$7=require("path"),{chain:gv}=require("stream-chain"),Av=require("stream-json/streamers/StreamArray"),Ov=require("stream-json/utils/Batch"),Nv=require("stream-chain/utils/comp"),{finished:bv}=require("stream"),Y7=X(),Lv=eR(),K7=kT(),{BulkLoadFileObject:oR,BulkLoadDataObject:W7}=Sv(),aR=UT(),{verifyBulkLoadAttributePerms:Dv}=df(),Lfe=Rv(),Dfe=dt(),Ufe=ln(),{databases:Q7}=(fe(),Z(Ce)),{coerceType:z7}=(F_(),Z(Ep)),yv="No records parsed from csv file.",Xi=`${Y7.get("HDB_ROOT")}/tmp`,{schema_regex:J7}=Ds(),Iv=1024*1024*2,wv=5e3,X7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Hv.exports={csvDataLoad:j7,csvURLLoad:Z7,csvFileLoad:eee,importFromS3:tee};async function j7(e,t){let r=Uf.dataObject(e);if(r)throw We(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=Pv(e.schema,e.table),i=nR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:iR.bind(null,n),dynamicTyping:!1}),o=new aR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Dv(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 We(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new W7(e.action,e.schema,e.table,i.data);return s=await Lv.callOperationFunctionAsAwait(vv,u,null),s.message===yv?yv:Bv(s.records,s.number_written)}catch(n){throw Zi(n)}}a(j7,"csvDataLoad");async function Z7(e){let t=Uf.urlObject(e);if(t)throw We(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Xi}/${r}`;try{await ree(e,r)}catch(n){throw da.error(ht.DOWNLOAD_FILE_ERR(r)+" - "+n),We(n,ji(ht.DOWNLOAD_FILE_ERR(r)))}try{let n=new oR(this.job_operation_function.name,e.action,e.schema,e.table,s,As.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await cR(n);return await Df(s),i}catch(n){throw await Df(s),Zi(n)}}a(Z7,"csvURLLoad");async function eee(e){let t=Uf.fileObject(e);if(t)throw We(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new oR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,As.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await cR(r)}catch(s){throw Zi(s)}}a(eee,"csvFileLoad");async function tee(e){let t=Uf.s3FileObject(e);if(t)throw We(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=$7.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Xi}/${n}`;let i=new oR(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await see(n,e);let o=await cR(i);return await Df(r),o}catch(s){throw await Df(r),Zi(s)}}a(tee,"importFromS3");async function ree(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await V7("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 We(s,n,s.statusCode,As.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}iee(r,e.csv_url),await nee(t,r.raw)}a(ree,"downloadCSVFile");async function see(e,t){try{let r=`${Xi}/${e}`;await Os.mkdirp(Xi),await Os.writeFile(`${Xi}/${e}`,"",{flag:"a+"});let s=await Os.createWriteStream(r),n=await K7.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(ht.S3_DOWNLOAD_ERR+" - "+r),We(r,ji(ht.S3_DOWNLOAD_ERR))}}a(see,"downloadFileFromS3");async function nee(e,t){try{await Os.mkdirp(Xi),await Os.writeFile(`${Xi}/${e}`,t)}catch(r){throw da.error(ht.WRITE_TEMP_FILE_ERR),We(r,ji(ht.DEFAULT_BULK_LOAD_ERR))}}a(nee,"writeFileToTempFolder");async function Df(e){if(e)try{await Os.access(e),await Os.unlink(e)}catch{da.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Df,"deleteTempFile");function iee(e,t){if(e.statusCode!==Cv.HTTP_STATUS_CODES.OK)throw We(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!X7[e.headers["content-type"]])throw We(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw We(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(iee,"validateURLResponse");async function cR(e){try{let t;switch(e.file_type){case As.VALID_S3_FILE_TYPES.CSV:t=await oee(e);break;case As.VALID_S3_FILE_TYPES.JSON:t=await aee(e);break;default:throw We(new Error,ht.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,As.LOG_LEVELS.ERROR,ht.INVALID_FILE_EXT_ERR(e))}return Bv(t.records,t.number_written)}catch(t){throw Zi(t)}}a(cR,"fileLoad");async function Uv(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 Lf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Dv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=We(c);r(u)}}a(Uv,"validateChunk");async function Mv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;_a.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!_a.isEmpty(c)&&!_a.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 Lv.callOperationFunctionAsAwait(vv,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=We(c,ji(ht.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,ht.INSERT_CSV_ERR+" - "+c);r(u)}}a(Mv,"insertChunk");async function oee(e){let t={records:0,number_written:0},r=Pv(e.schema,e.table);try{let s=new aR,n=Os.createReadStream(e.file_path,{highWaterMark:Iv});n.setEncoding("utf8"),await nR.parsePromise(n,Uv.bind(null,e,s),iR.bind(null,r));let i=s.getPermsResponse();if(i)throw We(new Error,i,Ut.BAD_REQUEST);return n=Os.createReadStream(e.file_path,{highWaterMark:Iv}),n.setEncoding("utf8"),await nR.parsePromise(n,Mv.bind(null,e,t),iR.bind(null,r)),n.destroy(),t}catch(s){throw We(s,ji(ht.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,ht.PAPA_PARSE_ERR+s)}}a(oee,"callPapaParse");function Pv(e,t){let r=Q7[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>z7(i,n));return s}a(Pv,"createTransformMap");function iR(e,t,r){let s=e.get(r);return s?s(t):_a.autoCast(t)}a(iR,"typeFunction");async function aee(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new aR,n=gv([Os.createReadStream(e.file_path,{encoding:"utf-8"}),Av.withParser(),c=>c.value,new Ov({batchSize:wv}),Nv(async c=>{await Uv(e,s,r,c)})]);await new Promise((c,u)=>{bv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw We(new Error,i,Ut.BAD_REQUEST);let o=gv([Os.createReadStream(e.file_path,{encoding:"utf-8"}),Av.withParser(),c=>c.value,new Ov({batchSize:wv}),Nv(async c=>{await Mv(e,t,r,c)})]);return await new Promise((c,u)=>{bv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw We(s,ji(ht.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,ht.INSERT_JSON_ERR+s)}}a(aee,"insertJson");async function vv(e){let t={};try{e.data&&e.data.length>0&&cee(e.data[0])?t=await uee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",da.info(t.message))}catch(r){throw Zi(r)}return t}a(vv,"callBulkFileLoad");function cee(e){let t=Object.keys(e);for(let r of t)if(!J7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(cee,"validateColumnNames");async function uee(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Lf.insert;break;case"update":i=Lf.update;break;case"upsert":i=Lf.upsert;break;default:throw We(new Error,ht.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,As.LOG_LEVELS.ERROR,ht.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=_a.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Zi(o)}}a(uee,"bulkFileLoad");function Bv(e,t){return`successfully loaded ${t} of ${e} records`}a(Bv,"buildResponseMsg");function Zi(e){return We(e,ji(ht.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Zi,"buildTopLevelErrMsg")});var qv=T((vfe,Fv)=>{"use strict";var lR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Fv.exports=lR});var kv=T((Hfe,xv)=>{"use strict";var lee=y(),Gv=require("moment"),_ee=require("uuid").v4,_R=class{static{a(this,"JobObject")}constructor(){this.id=_ee(),this.type=void 0,this.start_datetime=Gv().valueOf(),this.created_datetime=Gv().valueOf(),this.end_datetime=void 0,this.status=lee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};xv.exports=_R});var dR=T((qfe,Qv)=>{"use strict";var dee=require("uuid").v4,Yv=xr(),Kv=Gr(),fee=Ms(),Eee=Oo(),hee=qv(),Qe=y(),mee=kv(),pee=cS(),jr=F(),See=rc(),fa=$(),{promisify:Tee}=require("util"),eo=require("moment"),Ree=Ef(),Mf=ZT(),Vv=Um(),{deleteTransactionLogsBeforeValidator:gee}=IT(),{handleHDBError:Aee,hdb_errors:Oee}=j(),{HTTP_STATUS_CODES:Nee}=Oee,$v=Kv.searchByValue,bee=Kv.searchByHash,yee=Yv.insert,Iee=Tee(Ree.evaluateSQL),wee=Yv.update;Qv.exports={addJob:Dee,updateJob:Mee,handleGetJob:Cee,handleGetJobsByStartDate:Lee,getJobById:Wv};async function Cee(e){try{let t=await Wv(e.id);return fa.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 jr.error("There was an error getting job",t),new Error(r)}}a(Cee,"handleGetJob");async function Lee(e){try{let t=await Uee(e);if(jr.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=eo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=eo(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 jr.error(r),new Error(r)}}a(Lee,"handleGetJobsByStartDate");async function Dee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||fa.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return jr.info(l),t.error=l,t}if(!Qe.JOB_TYPE_ENUM[e.operation])return jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Mf.fileObject(e);break;case Qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=Mf.urlObject(e);break;case Qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Mf.dataObject(e);break;case Qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Mf.s3FileObject(e);break;case Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=Vv(e,"date");break;case Qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=Vv(e,"timestamp");break;case Qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=gee(e);break;default:break}if(s)throw Aee(s,s.message,Nee.BAD_REQUEST,void 0,void 0,!0);let n=new mee;n.type=e.operation===Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new fee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await $v(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=dee();try{o=await $v(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new See(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await yee(u)}catch(l){return jr.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,jr.trace(l)}return t}a(Dee,"addJob");async function Uee(e){let t=eo(e.from_date,eo.ISO_8601),r=eo(e.to_date,eo.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 hee(s,e.hdb_user);try{return await Iee(n)}catch(i){throw jr.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(Uee,"getJobsInDateRange");async function Wv(e){if(fa.isEmptyOrZeroLength(e))return fa.errorizeMessage("Invalid job ID specified.");let t=new Eee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await bee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return jr.error(s),fa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Wv,"getJobById");async function Mee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(fa.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Qe.JOB_STATUS_ENUM.COMPLETE||e.status===Qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=eo().valueOf());let t=new pee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await wee(t),r}a(Mee,"updateJob")});var e0=T((xfe,Zv)=>{"use strict";var zv=$(),lr=y(),Pee=require("moment"),Pf=uR(),vf=F(),Jv=dR(),Xv=hf(),jv=Di(),vee=Je(),Bee=cf(),fR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hee(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(zv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(zv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case lr.JOB_TYPE_ENUM.csv_file_load:await On(e,Pf.csvFileLoad);break;case lr.JOB_TYPE_ENUM.csv_url_load:await On(e,Pf.csvURLLoad);break;case lr.JOB_TYPE_ENUM.csv_data_load:await On(e,Pf.csvDataLoad);break;case lr.JOB_TYPE_ENUM.import_from_s3:await On(e,Pf.importFromS3);break;case lr.JOB_TYPE_ENUM.empty_trash:break;case lr.JOB_TYPE_ENUM.export_local:await On(e,Xv.export_local);break;case lr.JOB_TYPE_ENUM.export_to_s3:await On(e,Xv.export_to_s3);break;case lr.JOB_TYPE_ENUM.delete_files_before:case lr.JOB_TYPE_ENUM.delete_records_before:await On(e,jv.deleteFilesBefore);break;case lr.JOB_TYPE_ENUM.delete_audit_logs_before:await On(e,jv.deleteAuditLogsBefore);break;case lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await On(e,Bee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hee,"parseMessage");async function On(e,t){try{e.job.status=lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Pee().valueOf(),await Jv.updateJob(e.job),await Fee(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):vf.error(`There was an error running ${t.name} job with id ${e.job.id}`),vf.error(s),e.job.message=s,e.job.status=lr.JOB_STATUS_ENUM.ERROR;try{await Jv.updateJob(e.job)}catch(n){throw vf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(On,"runJob");async function Fee(e){vf.trace("launching job thread:",e),vee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Fee,"launchJobThread");Zv.exports={parseMessage:Hee,RunnerMessage:fR}});var r0=T((Vfe,t0)=>{"use strict";var ER=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};t0.exports=ER});var S0=T((Yfe,RR)=>{"use strict";var qf=Gr(),pR=Ef(),Bf=uR(),Nn=od(),Hf=yi(),Hu=Di(),qee=Wp(),Bu=kr(),Ff=rS(),Mt=yT(),mt=F(),Gee=iS(),xee=Nd(),kee=GS(),Vee=wd(),$ee=xS(),Yee=kS(),Kee=YS(),Wee=WS(),hR=JS(),s0=hf(),Qee=df(),SR=dR(),P=y(),{hdb_errors:qu,handleHDBError:Fu}=j(),{HTTP_STATUS_CODES:n0}=qu,mR=tT(),i0=Yd(),E0=require("util"),Ea=xr(),zee=kn(),Jee=zo(),o0=e0(),a0=Zc(),c0=(Jd(),Z(Su)),u0=Ar(),l0=cf(),_0=tf(),{setServerUtilities:Xee}=(F_(),Z(Ep)),{CONTEXT:jee}=(is(),Z(qE)),{_assignPackageExport:Zee}=require("../index"),{transformReq:ete}=$(),{server:tte}=(fr(),Z(fi)),rte=eR(),d0=qf.searchByHash,ste=qf.searchByValue,nte=E0.promisify(qf.search),ite=E0.promisify(pR.evaluateSQL),ote={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=r0();async function h0(e,t){try{if(e.body.operation!=="read_log"&&(mt.log_level===P.LOG_LEVELS.INFO||mt.log_level===P.LOG_LEVELS.DEBUG||mt.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;mt.info(o)}}catch(s){mt.error(s)}let r=await rte.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ote[e.body.operation]&&zee.setSchemaDataToGlobal(s=>{s&&mt.error(s)}),r}a(h0,"processLocalTransaction");var f0=cte();RR.exports={chooseOperation:m0,getOperationFunction:p0,operation:TR,processLocalTransaction:h0};Xee(RR.exports);tte.operation=TR;function m0(e){let t;try{t=p0(e)}catch(n){throw mt.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 mt.error(`${n0.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Fu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.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=Qee.verifyPerms(i,n);if(o)throw mt.error(`${n0.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Fu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Fu(n,"There was an error when trying to choose an operation path")}return r}a(m0,"chooseOperation");function p0(e){if(mt.trace(`getOperationFunction with operation: ${e.operation}`),f0.has(e.operation))return f0.get(e.operation);throw Fu(new Error,qu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(p0,"getOperationFunction");Zee("operation",TR);function TR(e,t){e.hdb_user=this[jee]?.user,e.bypass_auth=!t;let r=m0(e);return h0({body:e},r)}a(TR,"operation");async function ate(e){mt.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[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await Ea.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await Ea.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await Ea.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Hu.deleteRecord(i);break;default:mt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){mt.info("Invalid operation in transaction"),mt.error(o)}}a(ate,"catchup");async function zs(e){ete(e);let t,r;try{r=await SR.addJob(e),t=r.createdJob,mt.info("addJob result",r);let s=new o0.RunnerMessage(t,e);return await o0.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 mt.error(n),Fu(s,n)}}a(zs,"executeJob");function cte(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(Ea.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(Ea.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(Ea.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(qf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(d0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(d0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(ste)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(nte)),e.set(P.OPERATIONS_ENUM.SQL,new H(ite)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(zs,Bf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(zs,Bf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(zs,Bf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(zs,Bf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(Nn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(Nn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(Nn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(Nn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(Nn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(Nn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(Nn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(Nn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(Hf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(Hf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(Hf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(Hf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Hu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Bu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Bu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Bu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Bu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Ff.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Ff.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Ff.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Ff.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Bu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(Gee)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(xee)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(kee)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(Vee)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H($ee)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(Yee)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(u0.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(Kee.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Wee)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(hR.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(hR.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(hR.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(zs,s0.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(zs,Hu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(zs,Hu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(zs,s0.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(SR.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(SR.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(mR.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(mR.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(mR.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(i0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(i0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(ate)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(Jee.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(zs,Hu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(qee)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(a0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(a0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(c0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(c0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(u0.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(l0.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(zs,l0.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(_0.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(_0.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(Nn.getBackup)),e}a(cte,"initializeOperationFunctionMap")});var xf=T((Wfe,g0)=>{"use strict";var gR=y(),ute=$(),Gu=F(),{handleHDBError:AR,hdb_errors:Gf}=j(),{isMainThread:lte}=require("worker_threads"),{Readable:_te}=require("stream"),T0=require("os"),dte=require("util"),fte=mS(),Ete=dte.promisify(fte.authorize),R0=S0(),{createGzip:hte,constants:mte}=require("zlib");function pte(e){let t=`Found an uncaught exception with message: ${e.message}. ${T0.EOL}Stack: ${e.stack} ${T0.EOL}Terminating ${lte?"HDB":"thread"}.`;console.error(t),Gu.fatal(t),process.exit(1)}a(pte,"handleServerUncaughtException");function Ste(e,t,r){if(Gu[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:Gf.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(Ste,"serverErrorHandler");function Tte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=AR(new Error,"Invalid JSON.",Gf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(ute.isEmpty(e.body.operation)){let s=AR(new Error,"Request body must include an 'operation' property.",Gf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Tte,"reqBodyValidationHandler");function Rte(e,t,r){let s;e.body.operation!==gR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==gR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==gR.OPERATIONS_ENUM.LOGOUT?Ete(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Gu.warn(n),Gu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(AR(n,i,Gf.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(Rte,"authHandler");async function gte(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=R0.chooseOperation(e.body);let n=await R0.processLocalTransaction(e,s);if(n instanceof _te&&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(hte({level:mte.Z_BEST_SPEED})))}return n}catch(n){throw Gu.error(n),n}}a(gte,"handlePostRequest");g0.exports={authHandler:Rte,handlePostRequest:gte,handleServerUncaughtException:pte,serverErrorHandler:Ste,reqBodyValidationHandler:Tte}});var b0=T((zfe,N0)=>{"use strict";var Ate=require("fastify-plugin"),{handlePostRequest:A0,authHandler:Ote,reqBodyValidationHandler:Nte}=xf();async function bte(e){e.decorate("hdbCore",{preValidation:[Nte,Ote],request:t=>O0(A0(t,response)),requestWithoutAuthentication:(t,r)=>O0(A0(t,r,!0))})}a(bte,"hdbCore");async function O0(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(O0,"convertAsyncIterators");N0.exports=Ate(bte)});var I0=T((Xfe,y0)=>{"use strict";var OR=require("fs"),ha=X();ha.initSync();var{CONFIG_PARAMS:xu}=y(),yte=1024*1024*1024;function Ite(e){let t=ha.get(xu.HTTP_TIMEOUT),r=ha.get(xu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:yte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=ha.get(xu.TLS_PRIVATEKEY),i=ha.get(xu.TLS_CERTIFICATE),o=ha.get(xu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:OR.readFileSync(`${n}`),cert:OR.readFileSync(i)+(o?`
27
27
 
28
- `+NR.readFileSync(o):"")},s.http2=!0}return s}a(wte,"getServerOptions");I0.exports=wte});var D0=T((eEe,L0)=>{"use strict";var bR=X();bR.initSync();var{CONFIG_PARAMS:C0}=y();function Cte(){let e=bR.get(C0.HTTP_CORSACCESSLIST),t=bR.get(C0.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Cte,"getCORSOptions");L0.exports=Cte});var P0=T((rEe,M0)=>{"use strict";var U0=X();U0.initSync();var Lte=y();function Dte(){return U0.get(Lte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Dte,"getHeaderTimeoutConfig");M0.exports=Dte});var wR={};ve(wR,{customFunctionsServer:()=>Pte,handleFile:()=>Mte,ready:()=>Hte});async function Mte(e,t,r,s){if(!Nn){let c=yR.get(IR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Nn=W0(c),ct.http((await Nn).server)}let n=await Nn,i=(0,B0.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!v0.has(i)){v0.add(i);try{n.register(Bte(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Pte(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await vte();let e=yR.get(IR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Nn=await W0(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function vte(){try{De.info("Custom Functions starting configuration."),await k0.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function Bte(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,H0.existsSync)(e)&&r.register(x0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function W0(e){De.info("Custom Functions starting buildServer.");let t=(0,V0.default)(e),r=(0,q0.default)(t);r.server.headersTimeout=(0,Y0.default)(),r.setErrorHandler(K0.serverErrorHandler);let s=(0,$0.default)();return s&&r.register(F0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(G0.default),await r.register(Ute),await r.after(),WT(r),De.info("Custom Functions completed buildServer."),r}function Hte(){if(Nn)return Nn.then?Nn.then(e=>e.ready()):Nn.ready()}var B0,H0,q0,F0,G0,x0,yR,IR,De,Ute,k0,V0,$0,Y0,K0,Nn,v0,Q0=Te(()=>{B0=require("path"),H0=require("fs"),q0=D(require("fastify")),F0=D(require("@fastify/cors")),G0=D(JT()),x0=D(require("@fastify/autoload")),yR=D(X()),IR=D(y()),De=D(G()),Ute=D(y0()),k0=D(kr()),V0=D(w0()),$0=D(D0()),Y0=D(P0()),K0=D(Gf());ta();fr();v0=new Set;a(Mte,"handleFile");a(Pte,"customFunctionsServer");a(vte,"setUp");a(Bte,"buildRouteFolder");a(W0,"buildServer");a(Hte,"ready")});var CR={};ve(CR,{start:()=>qte});function qte(e){return{handleFile(t,r,s){J0||(J0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=z0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,X0.default)(n,(0,j0.realpathSync)(o))}}return i(n)},{runFirst:!0})),z0.set(r,s)}}}var X0,j0,z0,J0,Z0=Te(()=>{X0=D(require("send")),j0=require("fs"),z0=new Map;a(qte,"start")});var sB=T((_Ee,rB)=>{"use strict";var Fte=require("cluster"),Ns=X();Ns.initSync();var tB=y(),cEe=require("util"),bn=G(),LR=require("fs"),Gte=require("fastify"),uEe=kc(),xte=require("@fastify/cors"),kte=require("@fastify/compress"),Vte=require("@fastify/static"),$te=JT(),Yte=require("path"),{PACKAGE_ROOT:Kte}=y(),Wte=xn(),Qte=$(),zte=kr(),Jte=Ac(),{server:Xte}=(fr(),Z(di)),{authHandler:jte,handlePostRequest:Zte,serverErrorHandler:ere,reqBodyValidationHandler:tre}=Gf(),lEe=require("net"),{registerContentHandlers:rre}=(ta(),Z(av)),sre=6e4,nre=1024*1024*1024,ire="TRUE",{CONFIG_PARAMS:yn}=tB,eo;rB.exports={hdbServer:eB,start:eB};async function eB(e){try{bn.info("In Fastify server"+process.cwd()),bn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),bn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Fte.isMaster,await ore();let t=Ns.get(yn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;eo=are(t),await eo.ready(),e||(e={}),e.isOperationsServer=!0,eo.server.cantCleanupProperly=!0;try{Xte.http(eo.server,e),eo.server.closeIdleConnections||await eo.listen({port:0,host:"::"})}catch(r){throw eo.close(),bn.error(r),bn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),bn.fatal(t),process.exit(1)}}a(eB,"operationsServer");async function ore(){bn.trace("Configuring HarperDB process."),Wte.setSchemaDataToGlobal(),await zte.setUsersToGlobal(),await Jte.getLicense()}a(ore,"setUp");function are(e){bn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=cre(e),r=Gte(t);r.server.headersTimeout=lre(),r.setErrorHandler(ere);let s=ure();s&&r.register(xte,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register($te),r.register(kte),r.register(Vte,{root:Yte.join(Kte,"studio")}),rre(r);let n=Ns.get(tB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Qte.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[tre,jte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Zte(i,o)}),r.get("/health",()=>"HarperDB is running."),bn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(are,"buildServer");function cre(e){let t=Ns.get(yn.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ns.get(yn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:nre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Ns.get(yn.OPERATIONSAPI_TLS_PRIVATEKEY),i=Ns.get(yn.OPERATIONSAPI_TLS_CERTIFICATE),o=Ns.get(yn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:LR.readFileSync(n),cert:LR.readFileSync(i)+(o?`
28
+ `+OR.readFileSync(o):"")},s.http2=!0}return s}a(Ite,"getServerOptions");y0.exports=Ite});var L0=T((Zfe,C0)=>{"use strict";var NR=X();NR.initSync();var{CONFIG_PARAMS:w0}=y();function wte(){let e=NR.get(w0.HTTP_CORSACCESSLIST),t=NR.get(w0.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(wte,"getCORSOptions");C0.exports=wte});var M0=T((tEe,U0)=>{"use strict";var D0=X();D0.initSync();var Cte=y();function Lte(){return D0.get(Cte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Lte,"getHeaderTimeoutConfig");U0.exports=Lte});var IR={};ve(IR,{customFunctionsServer:()=>Mte,handleFile:()=>Ute,ready:()=>Bte});async function Ute(e,t,r,s){if(!bn){let c=bR.get(yR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);bn=K0(c),ct.http((await bn).server)}let n=await bn,i=(0,v0.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!P0.has(i)){P0.add(i);try{n.register(vte(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Mte(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await Pte();let e=bR.get(yR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=bn=await K0(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function Pte(){try{De.info("Custom Functions starting configuration."),await x0.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function vte(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,B0.existsSync)(e)&&r.register(G0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function K0(e){De.info("Custom Functions starting buildServer.");let t=(0,k0.default)(e),r=(0,H0.default)(t);r.server.headersTimeout=(0,$0.default)(),r.setErrorHandler(Y0.serverErrorHandler);let s=(0,V0.default)();return s&&r.register(F0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(q0.default),await r.register(Dte),await r.after(),KT(r),De.info("Custom Functions completed buildServer."),r}function Bte(){if(bn)return bn.then?bn.then(e=>e.ready()):bn.ready()}var v0,B0,H0,F0,q0,G0,bR,yR,De,Dte,x0,k0,V0,$0,Y0,bn,P0,W0=Te(()=>{v0=require("path"),B0=require("fs"),H0=D(require("fastify")),F0=D(require("@fastify/cors")),q0=D(zT()),G0=D(require("@fastify/autoload")),bR=D(X()),yR=D(y()),De=D(F()),Dte=D(b0()),x0=D(kr()),k0=D(I0()),V0=D(L0()),$0=D(M0()),Y0=D(xf());ra();fr();P0=new Set;a(Ute,"handleFile");a(Mte,"customFunctionsServer");a(Pte,"setUp");a(vte,"buildRouteFolder");a(K0,"buildServer");a(Bte,"ready")});var wR={};ve(wR,{start:()=>Hte});function Hte(e){return{handleFile(t,r,s){z0||(z0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Q0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,J0.default)(n,(0,X0.realpathSync)(o))}}return i(n)},{runFirst:!0})),Q0.set(r,s)}}}var J0,X0,Q0,z0,j0=Te(()=>{J0=D(require("send")),X0=require("fs"),Q0=new Map;a(Hte,"start")});var rB=T((lEe,tB)=>{"use strict";var Fte=require("cluster"),Ns=X();Ns.initSync();var eB=y(),aEe=require("util"),yn=F(),CR=require("fs"),qte=require("fastify"),cEe=Vc(),Gte=require("@fastify/cors"),xte=require("@fastify/compress"),kte=require("@fastify/static"),Vte=zT(),$te=require("path"),{PACKAGE_ROOT:Yte}=y(),Kte=kn(),Wte=$(),Qte=kr(),zte=Oc(),{server:Jte}=(fr(),Z(fi)),{authHandler:Xte,handlePostRequest:jte,serverErrorHandler:Zte,reqBodyValidationHandler:ere}=xf(),uEe=require("net"),{registerContentHandlers:tre}=(ra(),Z(ov)),rre=6e4,sre=1024*1024*1024,nre="TRUE",{CONFIG_PARAMS:In}=eB,to;tB.exports={hdbServer:Z0,start:Z0};async function Z0(e){try{yn.info("In Fastify server"+process.cwd()),yn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Fte.isMaster,await ire();let t=Ns.get(In.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;to=ore(t),await to.ready(),e||(e={}),e.isOperationsServer=!0,to.server.cantCleanupProperly=!0;try{Jte.http(to.server,e),to.server.closeIdleConnections||await to.listen({port:0,host:"::"})}catch(r){throw to.close(),yn.error(r),yn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),yn.fatal(t),process.exit(1)}}a(Z0,"operationsServer");async function ire(){yn.trace("Configuring HarperDB process."),Kte.setSchemaDataToGlobal(),await Qte.setUsersToGlobal(),await zte.getLicense()}a(ire,"setUp");function ore(e){yn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=are(e),r=qte(t);r.server.headersTimeout=ure(),r.setErrorHandler(Zte);let s=cre();s&&r.register(Gte,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Vte),r.register(xte),r.register(kte,{root:$te.join(Yte,"studio")}),tre(r);let n=Ns.get(eB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Wte.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ere,Xte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),jte(i,o)}),r.get("/health",()=>"HarperDB is running."),yn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ore,"buildServer");function are(e){let t=Ns.get(In.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ns.get(In.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:sre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Ns.get(In.OPERATIONSAPI_TLS_PRIVATEKEY),i=Ns.get(In.OPERATIONSAPI_TLS_CERTIFICATE),o=Ns.get(In.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:CR.readFileSync(n),cert:CR.readFileSync(i)+(o?`
29
29
 
30
- `+LR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(cre,"getServerOptions");function ure(){let e=Ns.get(yn.OPERATIONSAPI_NETWORK_CORS),t=Ns.get(yn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ire)&&(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(ure,"getCORSOpts");function lre(){return Ns.get(yn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??sre}a(lre,"getHeaderTimeoutConfig")});var hB=T((mEe,EB)=>{"use strict";var{decode:_re}=require("msgpackr"),{isMainThread:fEe,parentPort:dre,threadId:EEe}=require("worker_threads"),oB=dt(),In=ke(),fre=y(),xu=G(),nB=X(),aB=y();Je();var Ere=un(),{recordAction:hre,recordActionBinary:mre}=(_n(),Z(Cc)),{publishToStream:pre}=oB,hEe={durable:In.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:In.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Sre,Tre,Rre,cB,uB;EB.exports={initialize:lB,workQueueListener:fB,setSubscription:gre,setIgnoreOrigin:Ore,getDatabaseSubscriptions:Are};async function lB(){uB=!0,xu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await oB.getNATSReferences();Sre=e,Tre=e.info.server_name,Rre=t,cB=r}a(lB,"initialize");var kf=new Map;function gre(e,t,r){let s=kf.get(e);s||kf.set(e,s=new Map),s.set(t,r),uB||lB().then(fB)}a(gre,"setSubscription");function Are(){return kf}a(Are,"getDatabaseSubscriptions");var _B;function Ore(e){_B=e}a(Ore,"setIgnoreOrigin");var dB=100,iB=new Array(dB),xf=0;async function fB(){let t=await(await cB.consumers.get(In.WORK_QUEUE_CONSUMER_NAMES.stream_name,In.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();dre?.on("message",async r=>{let{type:s}=r;s===aB.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await iB[xf],iB[xf]=Nre(r).catch(s=>{xu.error(s)}),++xf>=dB&&(xf=0)}a(fB,"workQueueListener");async function Nre(e){let t=_re(e.data);hre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=nB.get(fre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(In.MSG_HEADERS.TRANSACTED_NODES)&&r.values(In.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(In.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!_B),mre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(In.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;xu.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),xu.trace(`messageProcessor nats msg id: ${e.headers.get(In.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:g}=f||{},b=kf.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,b.send(t);else if(l.length===1&&!u)b.send({type:DR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:g});else{let O=l.map((Y,Q)=>({type:DR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)O.push({type:DR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:g})}nB.get(aB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&pre(e.subject.split(".").slice(0,-1).join("."),Ere.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){xu.error(o)}e.ack()}a(Nre,"messageProcessor");function DR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(DR,"convertOperation")});var HR={};ve(HR,{disableNATS:()=>yre,publishToStream:()=>Wf,setNATSReplicator:()=>UR,setPublishToStream:()=>Ire,setSubscription:()=>BR,start:()=>bre});function bre(){$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Cre()}function yre(e=!0){RB=e}function Ire(e,t){Wf=e,BR=t}function Cre(){if(RB||process.env._DISABLE_NATS)return;let e=_s(),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];UR(n,r,i)}}Rp((r,s)=>{UR(r.tableName,r.databaseName,r),s&&AB(r)}),!mB&&(mB=!0)}function UR(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 Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){AB(i)}static subscribe(){let i=new ss;return BR(t,e,i),i}static subscribeOnThisThread(i){return i<wre}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 Vf(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 AB(e){let t=$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Wf(`${PR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,vR.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 pB,PR,vR,SB,TB,$f,Yf,Kf,RB,Wf,BR,wre,gB,mB,Vf,MR,OB=Te(()=>{fe();is();pB=D(dt()),PR=D(ke()),vR=D(un());qa();SB=D(hB()),TB=D(hr()),$f=D(X()),Yf=D(y()),Kf=D(G());a(bre,"start");a(yre,"disableNATS");Wf=pB.publishToStream,BR=SB.setSubscription;a(Ire,"setPublishToStream");wre=2;a(Cre,"assignReplicationSource");a(UR,"setNATSReplicator");a(AB,"publishSchema");Vf=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=$f.default.get(Yf.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||(Kf.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(Wf(`${PR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,vR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Kf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},MR=class extends Vf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,TB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};gB=new MR});async function bB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await qR.getResource(e,{});n=new GR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await qR.get(e);i&&i.delete()}n=new zf(e,t)}return n}function FR(){return Qf++,Qf>65500&&(Qf=1),Qf}var NB,ha,qR,Qf,zf,GR,yB=Te(()=>{fe();Ga();NB=D(hr()),ha=D(G());mi();qR=tt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(bB,"getSession");Qf=1;a(FR,"getNextMessageId");zf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(b=>b.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ha.trace)("Resuming subscription from",n,"from",o);let h=Bn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,g=await Ge(E,async()=>{let b=await S.subscribe(E);if(!b)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!b[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of b)try{let Y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,Y=this.needsAcknowledge(O)):(O.acknowledge?.(),Y=FR());let Q=O.id;Array.isArray(Q)&&(Q=oo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,O.value,Y,t)}catch(Y){(0,ha.warn)(Y)}})(),b});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=FR();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);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Bn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},GR=class extends zf{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=FR(),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,ha.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,NB.getNextMonotonicTime)()),(0,ha.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),qR.put(this.sessionRecord)),t.qos}}});var kR={};ve(kR,{start:()=>Dre});async function Dre({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=CB(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Zr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Lre&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,LB.getSuperUser)());let{onMessage:u,onClose:_}=CB(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Zr.info)("Socket error",l)})},{port:t,securePort:s})}function CB(e,t,r,s,n){wB||(wB=!0,wc(d=>{Jf>0&&d.push({metric:"mqtt-connections",connections:Jf,byThread:!0})}));let i;Jf++;let o,c={protocolVersion:4},u=(0,Xf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Jf--,i||(i=!0,o?.disconnect(),Vr(!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 ct.getUser(d.username,d.password.toString()),(0,xR.get)(wn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IB.notify({username:s.username,status:wn.AUTH_AUDIT_STATUS.SUCCESS,type:wn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,xR.get)(wn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IB.error({username:s.username,status:wn.AUTH_AUDIT_STATUS.FAILURE,type:wn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=bB({user:s,...d}),o=await o}catch(O){return(0,Zr.error)(O),Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}Vr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,Y,Q,F)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Zr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let Y;try{Y=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(Q){(0,Zr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",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=ca(r?.headers.get?.("content-type"))),g=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,g)}catch(O){(0,Zr.warn)(O),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(),Vr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Zr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Xf.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ii(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Xf,LB,xR,wn,Zr,IB,Lre,wB,Jf,DB=Te(()=>{Xf=require("mqtt-packet");yB();LB=D(kr());ta();_n();fr();xR=D(X()),wn=D(y()),Zr=D(G()),IB=(0,Zr.loggerWithTag)("auth-event"),Lre=!0;a(Dre,"start");Jf=0;a(CB,"onSocket")});var MB={};ve(MB,{Request:()=>VR,createReuseportFd:()=>jf});var UB,VR,$R,YR,jf,KR=Te(()=>{UB=require("os"),VR=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 YR(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 $R(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},$R=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},YR=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,UB.platform)()!="win32"&&(jf=require("node-unix-socket").createReuseportFd)});var sf={};ve(sf,{component_errors:()=>ma,loadComponent:()=>Zf,loadComponentDirectories:()=>kB,setErrorReporter:()=>vre});function kB(e,t){t&&(QR=t),e&&(zR=e);let r=[];if((0,bs.existsSync)(WR)){let n=(0,bs.readdirSync)(WR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(WR,o);r.push(Zf(c,QR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Zf(s,QR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{xB=!0})}function vre(e){$u=e}async function Zf(e,t,r,s,n,i){if(!vB.has(e)){vB.set(e,!0),n&&(zR=n);try{let o;s&&(ma=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,bs.existsSync)(c)?o=s?(0,GB.getConfigObj)():(0,BB.parseDocument)((0,bs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=JR;let u=[],_=s;for(let l in o){let d=o[l];if(ma.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,O;for(;!(0,bs.existsSync)(O=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,FB.getHdbBasePath)().length){O=null;break}if(O)f=await Zf(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Pre[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,tt(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,g=!p?.https&&p?.port;if(ku.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,s&&p))for(let b of[g,S])try{if(+b&&!PB.includes(b)){let O=XR.get(jR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&Vu.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!jf)&&(PB.push(b),ZR(b,O))}}catch(O){console.error("Error listening on socket",b,O,l)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),zR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,qB.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),O=b.indexOf("/*");if(O>-1&&d.files!==JR[l]?.files&&!(0,bs.existsSync)(b.slice(0,O)))throw new Error(`The path '${b.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,HB.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await Mre(Q);ku.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else ku.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${F.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,$u?.(x),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(x),t.set(d.path||"/",new Yu(x)),ma.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,$u?.(h),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(h),t.set(d.path||"/",new Yu(h),null,!0),ma.set(s?l:(0,gt.basename)(e),h.message)}}if(ku.isMainThread&&!xB&&i&&(0,pa.watchDir)(e,async()=>kB()),o.extensionModule)return await J_((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;$u?.(new Error(l)),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(l),ma.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}`,$u?.(o),t.set("",new Yu(o))}}}var bs,gt,ku,BB,XR,jR,HB,pa,Vu,qB,FB,Ure,GB,Mre,WR,zR,xB,QR,ma,Pre,JR,PB,vB,$u,Yu,nf=Te(()=>{bs=require("fs"),gt=require("path"),ku=require("worker_threads"),BB=require("yaml"),XR=D(X()),jR=D(y());DC();vC();BC();lv();Q0();Z0();HB=D(require("fast-glob")),pa=D(Je()),Vu=D(G());Ip();fr();qB=D(j());is();fe();eg();FB=D(X()),Ure=D(sB());zd();OB();DB();GB=D(Ar());KR();({readFile:Mre}=bs.promises),WR=XR.get(jR.CONFIG_PARAMS.COMPONENTSROOT),zR=new Map,ma=new Map;a(kB,"loadComponentDirectories");Pre={REST:Tf,rest:Tf,graphqlSchema:yp,jsResource:Cp,fastifyRoutes:wR,login:Dp,static:CR,operationsApi:Ure,customFunctions:{},http:{},clustering:HR,authentication:pu,mqtt:kR},JR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(JR,"static",{value:{files:"web/**"}});PB=[],vB=new Map;a(vre,"setErrorReporter");a(Zf,"loadComponent");Yu=class extends Nt{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 eE=T((KEe,$B)=>{var{isMainThread:VB}=require("worker_threads"),{getTables:Bre}=(fe(),Z(Ce)),{loadComponentDirectories:Hre,loadComponent:qre}=(nf(),Z(sf)),{resetResources:Fre}=(Ga(),Z(VA)),Gre=NT(),xre=Ar(),{dirname:kre}=require("path"),{getConnection:Vre}=dt(),$re=X(),Yre=y(),tg=new Map;async function Kre(e=!1){!VB&&$re.get(Yre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Vre();try{VB&&await Gre()}catch(s){console.error(s)}let t=Fre();Bre(),t.isWorker=e,await qre(kre(xre.getConfigFilePath()),t,"hdb",!0,tg),await Hre(tg,t);let r=[];for(let[s]of tg)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Kre,"loadRootComponents");$B.exports.loadRootComponents=Kre});var Je=T((QEe,ui)=>{"use strict";var{Worker:Wre,MessageChannel:Qre,parentPort:Js,isMainThread:og,threadId:zre,workerData:Cn}=require("worker_threads"),{PACKAGE_ROOT:Jre}=y(),{join:QB,isAbsolute:Xre,extname:jre}=require("path"),{server:zB}=(fr(),Z(di)),{watch:Zre,readdir:ese}=require("fs/promises"),{totalmem:YB}=require("os"),sE=y(),tse=X(),Ln=G(),{randomBytes:rse}=require("crypto"),{_assignPackageExport:sse}=require("../index"),nse=y(),KB=1024*1024,ci=[],es=[],ise=50,ag=1e4,ose="restart",JB="request_thread_info",XB="resource_report",jB="thread_info",ZB="added-port",ase="ack",rg;sse("threads",es);ui.exports={startWorker:sg,restartWorkers:ug,shutdownWorkers:dse,workers:ci,setMonitorListener:Rse,onMessageFromWorkers:fse,onMessageByType:iH,broadcast:hse,broadcastWithAcknowledgement:pse,setChildListenerByType:_se,getWorkerIndex:eH,getWorkerCount:tH,getTicketKeys:rH,setMainIsWorker:use,setTerminateTimeout:cse,restartNumber:Cn?.restartNumber||1};es.onMessageByType=iH;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 cg;function cse(e){ag=e}a(cse,"setTerminateTimeout");function eH(){return Cn?Cn.workerIndex:cg?0:void 0}a(eH,"getWorkerIndex");function tH(){return Cn?Cn.workerCount:cg?1:void 0}a(tH,"getWorkerCount");function use(e){cg=e}a(use,"setMainIsWorker");var tE;function rH(){return tE||(tE=og?rse(48):Cn.ticketKeys,tE)}a(rH,"getTicketKeys");Object.defineProperty(zB,"workerIndex",{get(){return eH()}});Object.defineProperty(zB,"workerCount",{get(){return tH()}});var sH={[JB](e,t){Sse(t)},[XB](e,t){Tse(t,e)}};function sg(e,t={}){let r=process.constrainedMemory?.()||YB();r=Math.min(r,YB(),2e4*KB);let s=Math.max(Math.floor(r/KB/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of es){let _=new Qre;_.existingPort=u,i.push(_),o.push(_.port2)}jre(e)||(e+=".js");let c=new Wre(Xre(e)?e:QB(Jre,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:ui.exports.restartNumber,ticketKeys:rH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:ZB,port:u,threadId:c.threadId},[u]);return nE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>sg(e,t),c.on("error",u=>{console.error("Worker error:",u),Ln.error("Worker error:",u)}),c.on("exit",u=>{ci.splice(ci.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ise?(t.unexpectedRestarts=c.unexpectedRestarts+1,sg(e,t)):Ln.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{sH[u.type]?.(u,c)}),ci.push(c),Ase(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(sg,"startWorker");var lse=[sE.THREAD_TYPES.HTTP];async function ug(e=null,t=2,r=!0){if(og){if(r){let{loadRootComponents:o}=eE();await o()}ui.exports.restartNumber++,t<1&&(t=t*ci.length);let s=[],n=[];for(let o of ci.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ln.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ui.exports.restartNumber,type:sE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lse.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),ag*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===nse.ITC_EVENT_TYPES.CHILD_STARTED&&(Ln.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Ln.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}=$d();r&&(e==="http"||!e)&&tse.get(sE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Js.postMessage({type:ose,workerType:e})}a(ug,"restartWorkers");function _se(e,t){sH[e]=t}a(_se,"setChildListenerByType");function dse(e){return ug(e,1/0,!1)}a(dse,"shutdownWorkers");var nH=[];function fse(e){nH.push(e)}a(fse,"onMessageFromWorkers");var ng=new Map;function iH(e,t){let r=ng.get(e);r||ng.set(e,r=[]),r.push(t)}a(iH,"onMessageByType");var Ese=10;async function hse(e){let t=0;for(let r of es)try{r.postMessage(e),t++>Ese&&(t=0,await new Promise(setImmediate))}catch(s){Ln.error("Unable to send message to worker",s)}}a(hse,"broadcast");var rE=new Map,mse=1;function pse(e){return new Promise(t=>{let r=0;for(let s of es)try{let n=mse++,i=a(()=>{rE.delete(n),--r===0&&t(),s!==Js&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,rE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of rE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ln.error("Unable to send message to worker",n)}r===0&&t()})}a(pse,"broadcastWithAcknowledgement");function Sse(e){e.postMessage({type:jB,workers:oH()})}a(Sse,"sendThreadInfo");function oH(){let e=Date.now();return ci.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(oH,"getChildWorkerInfo");function Tse(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tse,"recordResourceReport");var ig;function Rse(e){ig=e}a(Rse,"setMonitorListener");var gse=1e3,WB=!1;function Ase(){WB||(WB=!0,setInterval(()=>{for(let e of ci){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}ig&&ig()},gse).unref())}a(Ase,"startMonitoring");var Ose=1e3;if(Js){nE(Js);for(let e=0,t=Cn.addPorts.length;e<t;e++){let r=Cn.addPorts[e];r.threadId=Cn.addThreadIds[e],nE(r)}setInterval(()=>{let e=process.memoryUsage();Js.postMessage({type:XB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ose).unref(),rg=a(()=>new Promise((e,t)=>{Js.on("message",r),Js.postMessage({type:JB});function r(s){s.type===jB&&(Js.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else rg=oH;ui.exports.getThreadInfo=rg;function nE(e,t){es.push(e),e.on("message",r=>{if(r.type===ZB)r.port.threadId=r.threadId,nE(r.port);else if(r.type===ase){let s=rE.get(r.id);s&&s()}else{for(let n of nH)n(r,e);let s=ng.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ln.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(nE,"addPort");if(og){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await ese(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(QB(s,i.name));try{for await(let{filename:i}of Zre(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await ug(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ui.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Js.on("message",async e=>{let{type:t}=e;t===sE.ITC_EVENT_TYPES.SHUTDOWN&&(ui.exports.restartNumber=e.restartNumber,Js.unref(),setTimeout(()=>{Ln.warn("Thread did not voluntarily terminate",zre),process.exit(0)},ag).unref())})});var mH=T(zu=>{"use strict";var{isMainThread:Nse,parentPort:Qu,threadId:Ku}=require("worker_threads"),{Socket:bse,createServer:yse}=require("net"),{createServer:Ise,IncomingMessage:wse}=require("http"),{createServer:Cse}=require("https"),{readFileSync:Sa}=require("fs"),Xs=G(),At=X(),Dn=y(),{server:oE}=(fr(),Z(di)),{WebSocketServer:Lse}=require("ws"),{createServer:Dse}=require("tls"),{getTicketKeys:Use,restartNumber:Mse}=Je(),{Headers:lH}=(Yd(),Z(LM)),{recordAction:Wu,recordActionBinary:Pse}=(_n(),Z(Cc)),{Request:_H,node_request_key:JEe,createReuseportFd:aH}=(KR(),Z(MB));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Mse<=1&&Xs.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:XEe,CONFIG_PARAMS:vse}=Dn;At.initSync();var Bse=At.get(vse.HTTP_SESSIONAFFINITY),js={};zu.registerServer=hg;zu.httpServer=mg;zu.deliverSocket=Eg;zu.startServers=dH;oE.http=mg;oE.request=Gse;oE.socket=xse;oE.ws=kse;var lg=[],_g=[],Hse,to={},iE={},qse=[],dg=[];function dH(){return eE().loadRootComponents(!0).then(()=>{Qu?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)Eg(s,r,n);else if(t.requestId)Fse(t);else if(t.type===Dn.ITC_EVENT_TYPES.SHUTDOWN){Xs.trace("received shutdown request",Ku);for(let i in js){let o=js[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Xs.info("Closed all http connections",i,Ku)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ku),o.cantCleanupProperly||Xs.warn("Had to forcefully exit the thread",Ku),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(aH&&!Bse)for(let t in js){let r=js[t],s;try{s=aH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Xs.trace("Listening on port "+t,Ku)}).on("error",i)}))}Promise.all(e).then(()=>{Qu?.postMessage({type:Dn.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(dH,"startServers");Nse||dH();function Eg(e,t,r){let s=e?.read?e:new bse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=js[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=js[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Xs.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(Eg,"deliverSocket");var cH=new Map;function Fse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=cH.get(n),r){case"connection":i=Eg(void 0,t),cH.set(n,i),i.write=(c,u,_)=>(Qu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Qu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qu.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(Fse,"proxyRequest");function hg(e,t){+t||(t=parseInt(At.get(Dn.CONFIG_PARAMS.HTTP_PORT),10));let r=js[t];if(r){let s=r.lastServer||r;s.off("unhandled",uH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else js[t]=e;e.on("unhandled",uH)}a(hg,"registerServer");function fH(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=[],At.get(Dn.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(Dn.CONFIG_PARAMS.HTTP_PORT),secure:At.get(Dn.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(fH,"getPorts");function mg(e,t){for(let{port:r,secure:s}of fH(t))EH(r,s,t?.isOperationsServer),typeof e=="function"?dg[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):hg(e,r),iE[r]=fg(dg,r),Hse=fg(qse,r)}a(mg,"httpServer");function EH(e,t,r){if(!to[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:At.get(s+"_keepAliveTimeout"),headersTimeout:At.get(s+"_headersTimeout"),requestTimeout:At.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=At.get(s+"tls_privateKey"),o=At.get(s+"tls_certificate"),c=At.get(s+"tls_certificateAuthority");Object.assign(n,{key:Sa(i),cert:Sa(o)+(c?`
30
+ `+CR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(are,"getServerOptions");function cre(){let e=Ns.get(In.OPERATIONSAPI_NETWORK_CORS),t=Ns.get(In.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===nre)&&(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(cre,"getCORSOpts");function ure(){return Ns.get(In.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??rre}a(ure,"getHeaderTimeoutConfig")});var EB=T((hEe,fB)=>{"use strict";var{decode:lre}=require("msgpackr"),{isMainThread:dEe,parentPort:_re,threadId:fEe}=require("worker_threads"),iB=dt(),wn=ke(),dre=y(),ku=F(),sB=X(),oB=y();Je();var fre=ln(),{recordAction:Ere,recordActionBinary:hre}=(dn(),Z(Lc)),{publishToStream:mre}=iB,EEe={durable:wn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:wn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},pre,Sre,Tre,aB,cB;fB.exports={initialize:uB,workQueueListener:dB,setSubscription:Rre,setIgnoreOrigin:Are,getDatabaseSubscriptions:gre};async function uB(){cB=!0,ku.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iB.getNATSReferences();pre=e,Sre=e.info.server_name,Tre=t,aB=r}a(uB,"initialize");var Vf=new Map;function Rre(e,t,r){let s=Vf.get(e);s||Vf.set(e,s=new Map),s.set(t,r),cB||uB().then(dB)}a(Rre,"setSubscription");function gre(){return Vf}a(gre,"getDatabaseSubscriptions");var lB;function Are(e){lB=e}a(Are,"setIgnoreOrigin");var _B=100,nB=new Array(_B),kf=0;async function dB(){let t=await(await aB.consumers.get(wn.WORK_QUEUE_CONSUMER_NAMES.stream_name,wn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();_re?.on("message",async r=>{let{type:s}=r;s===oB.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await nB[kf],nB[kf]=Ore(r).catch(s=>{ku.error(s)}),++kf>=_B&&(kf=0)}a(dB,"workQueueListener");async function Ore(e){let t=lre(e.data);Ere(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=sB.get(dre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(wn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(wn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(wn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!lB),hre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(wn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;ku.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),ku.trace(`messageProcessor nats msg id: ${e.headers.get(wn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:g}=f||{},b=Vf.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,b.send(t);else if(l.length===1&&!u)b.send({type:LR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:g});else{let O=l.map((Y,Q)=>({type:LR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)O.push({type:LR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:g})}sB.get(oB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&mre(e.subject.split(".").slice(0,-1).join("."),fre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){ku.error(o)}e.ack()}a(Ore,"messageProcessor");function LR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(LR,"convertOperation")});var BR={};ve(BR,{disableNATS:()=>bre,publishToStream:()=>Qf,setNATSReplicator:()=>DR,setPublishToStream:()=>yre,setSubscription:()=>vR,start:()=>Nre});function Nre(){Yf.default.get(Kf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&wre()}function bre(e=!0){TB=e}function yre(e,t){Qf=e,vR=t}function wre(){if(TB||process.env._DISABLE_NATS)return;let e=_s(),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)}}Tp((r,s)=>{DR(r.tableName,r.databaseName,r),s&&gB(r)}),!hB&&(hB=!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 Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){gB(i)}static subscribe(){let i=new ss;return vR(t,e,i),i}static subscribeOnThisThread(i){return i<Ire}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 $f(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=RB;return i}a(s,"getNATSTransaction")}function gB(e){let t=Yf.default.get(Kf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Qf(`${MR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,PR.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 mB,MR,PR,pB,SB,Yf,Kf,Wf,TB,Qf,vR,Ire,RB,hB,$f,UR,AB=Te(()=>{fe();is();mB=D(dt()),MR=D(ke()),PR=D(ln());qa();pB=D(EB()),SB=D(hr()),Yf=D(X()),Kf=D(y()),Wf=D(F());a(Nre,"start");a(bre,"disableNATS");Qf=mB.publishToStream,vR=pB.setSubscription;a(yre,"setPublishToStream");Ire=2;a(wre,"assignReplicationSource");a(DR,"setNATSReplicator");a(gB,"publishSchema");$f=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=Yf.default.get(Kf.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||(Wf.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(Qf(`${MR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,PR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Wf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},UR=class extends $f{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,SB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};RB=new UR});async function NB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await HR.getResource(e,{});n=new qR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await HR.get(e);i&&i.delete()}n=new Jf(e,t)}return n}function FR(){return zf++,zf>65500&&(zf=1),zf}var OB,ma,HR,zf,Jf,qR,bB=Te(()=>{fe();xa();OB=D(hr()),ma=D(F());pi();HR=tt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(NB,"getSession");zf=1;a(FR,"getNextMessageId");Jf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(b=>b.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ma.trace)("Resuming subscription from",n,"from",o);let h=Hn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,g=await Ge(E,async()=>{let b=await S.subscribe(E);if(!b)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!b[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of b)try{let Y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,Y=this.needsAcknowledge(O)):(O.acknowledge?.(),Y=FR());let Q=O.id;Array.isArray(Q)&&(Q=ao(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,O.value,Y,t)}catch(Y){(0,ma.warn)(Y)}})(),b});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=FR();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);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Hn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},qR=class extends Jf{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=FR(),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,ma.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,OB.getNextMonotonicTime)()),(0,ma.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),HR.put(this.sessionRecord)),t.qos}}});var xR={};ve(xR,{start:()=>Lre});async function Lre({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=wB(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Zr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Cre&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,CB.getSuperUser)());let{onMessage:u,onClose:_}=wB(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Zr.info)("Socket error",l)})},{port:t,securePort:s})}function wB(e,t,r,s,n){IB||(IB=!0,Cc(d=>{Xf>0&&d.push({metric:"mqtt-connections",connections:Xf,byThread:!0})}));let i;Xf++;let o,c={protocolVersion:4},u=(0,jf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Xf--,i||(i=!0,o?.disconnect(),Vr(!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 ct.getUser(d.username,d.password.toString()),(0,GR.get)(Cn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&yB.notify({username:s.username,status:Cn.AUTH_AUDIT_STATUS.SUCCESS,type:Cn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,GR.get)(Cn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&yB.error({username:s.username,status:Cn.AUTH_AUDIT_STATUS.FAILURE,type:Cn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=NB({user:s,...d}),o=await o}catch(O){return(0,Zr.error)(O),Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}Vr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,Y,Q,G)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:G.qos},K)}catch(w){(0,Zr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let Y;try{Y=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(Q){(0,Zr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",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=ua(r?.headers.get?.("content-type"))),g=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,g)}catch(O){(0,Zr.warn)(O),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(),Vr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Zr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,jf.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return oi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var jf,CB,GR,Cn,Zr,yB,Cre,IB,Xf,LB=Te(()=>{jf=require("mqtt-packet");bB();CB=D(kr());ra();dn();fr();GR=D(X()),Cn=D(y()),Zr=D(F()),yB=(0,Zr.loggerWithTag)("auth-event"),Cre=!0;a(Lre,"start");Xf=0;a(wB,"onSocket")});var UB={};ve(UB,{Request:()=>kR,createReuseportFd:()=>Zf});var DB,kR,VR,$R,Zf,YR=Te(()=>{DB=require("os"),kR=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 $R(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 VR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},VR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},$R=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,DB.platform)()!="win32"&&(Zf=require("node-unix-socket").createReuseportFd)});var nf={};ve(nf,{component_errors:()=>pa,loadComponent:()=>eE,loadComponentDirectories:()=>xB,setErrorReporter:()=>Pre});function xB(e,t){t&&(WR=t),e&&(QR=e);let r=[];if((0,bs.existsSync)(KR)){let n=(0,bs.readdirSync)(KR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(KR,o);r.push(eE(c,WR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(eE(s,WR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{GB=!0})}function Pre(e){Yu=e}async function eE(e,t,r,s,n,i){if(!PB.has(e)){PB.set(e,!0),n&&(QR=n);try{let o;s&&(pa=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,bs.existsSync)(c)?o=s?(0,qB.getConfigObj)():(0,vB.parseDocument)((0,bs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=zR;let u=[],_=s;for(let l in o){let d=o[l];if(pa.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,O;for(;!(0,bs.existsSync)(O=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,FB.getHdbBasePath)().length){O=null;break}if(O)f=await eE(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Mre[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,tt(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,g=!p?.https&&p?.port;if(Vu.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,s&&p))for(let b of[g,S])try{if(+b&&!MB.includes(b)){let O=JR.get(XR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&$u.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!Zf)&&(MB.push(b),jR(b,O))}}catch(O){console.error("Error listening on socket",b,O,l)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),QR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,HB.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),O=b.indexOf("/*");if(O>-1&&d.files!==zR[l]?.files&&!(0,bs.existsSync)(b.slice(0,O)))throw new Error(`The path '${b.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,BB.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:G}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(G.isFile()){let x=await Ure(Q);Vu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Vu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${G.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Yu?.(x),((0,Sa.getWorkerIndex)()===0?console:$u.default).error(x),t.set(d.path||"/",new Ku(x)),pa.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Yu?.(h),((0,Sa.getWorkerIndex)()===0?console:$u.default).error(h),t.set(d.path||"/",new Ku(h),null,!0),pa.set(s?l:(0,gt.basename)(e),h.message)}}if(Vu.isMainThread&&!GB&&i&&(0,Sa.watchDir)(e,async()=>xB()),o.extensionModule)return await X_((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Yu?.(new Error(l)),((0,Sa.getWorkerIndex)()===0?console:$u.default).error(l),pa.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}`,Yu?.(o),t.set("",new Ku(o))}}}var bs,gt,Vu,vB,JR,XR,BB,Sa,$u,HB,FB,Dre,qB,Ure,KR,QR,GB,WR,pa,Mre,zR,MB,PB,Yu,Ku,of=Te(()=>{bs=require("fs"),gt=require("path"),Vu=require("worker_threads"),vB=require("yaml"),JR=D(X()),XR=D(y());LC();PC();vC();uv();W0();j0();BB=D(require("fast-glob")),Sa=D(Je()),$u=D(F());yp();fr();HB=D(j());is();fe();ZR();FB=D(X()),Dre=D(rB());Jd();AB();LB();qB=D(Ar());YR();({readFile:Ure}=bs.promises),KR=JR.get(XR.CONFIG_PARAMS.COMPONENTSROOT),QR=new Map,pa=new Map;a(xB,"loadComponentDirectories");Mre={REST:Rf,rest:Rf,graphqlSchema:bp,jsResource:wp,fastifyRoutes:IR,login:Lp,static:wR,operationsApi:Dre,customFunctions:{},http:{},clustering:BR,authentication:Su,mqtt:xR},zR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(zR,"static",{value:{files:"web/**"}});MB=[],PB=new Map;a(Pre,"setErrorReporter");a(eE,"loadComponent");Ku=class extends Nt{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 tE=T((YEe,VB)=>{var{isMainThread:kB}=require("worker_threads"),{getTables:vre}=(fe(),Z(Ce)),{loadComponentDirectories:Bre,loadComponent:Hre}=(of(),Z(nf)),{resetResources:Fre}=(xa(),Z(kA)),qre=OT(),Gre=Ar(),{dirname:xre}=require("path"),{getConnection:kre}=dt(),Vre=X(),$re=y(),eg=new Map;async function Yre(e=!1){!kB&&Vre.get($re.CONFIG_PARAMS.CLUSTERING_ENABLED)&&kre();try{kB&&await qre()}catch(s){console.error(s)}let t=Fre();vre(),t.isWorker=e,await Hre(xre(Gre.getConfigFilePath()),t,"hdb",!0,eg),await Bre(eg,t);let r=[];for(let[s]of eg)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Yre,"loadRootComponents");VB.exports.loadRootComponents=Yre});var Je=T((WEe,li)=>{"use strict";var{Worker:Kre,MessageChannel:Wre,parentPort:Js,isMainThread:ig,threadId:Qre,workerData:Ln}=require("worker_threads"),{PACKAGE_ROOT:zre}=y(),{join:WB,isAbsolute:Jre,extname:Xre}=require("path"),{server:QB}=(fr(),Z(fi)),{watch:jre,readdir:Zre}=require("fs/promises"),{totalmem:$B}=require("os"),nE=y(),ese=X(),Dn=F(),{randomBytes:tse}=require("crypto"),{_assignPackageExport:rse}=require("../index"),sse=y(),YB=1024*1024,ui=[],es=[],nse=50,og=1e4,ise="restart",zB="request_thread_info",JB="resource_report",XB="thread_info",jB="added-port",ose="ack",tg;rse("threads",es);li.exports={startWorker:rg,restartWorkers:cg,shutdownWorkers:_se,workers:ui,setMonitorListener:Tse,onMessageFromWorkers:dse,onMessageByType:nH,broadcast:Ese,broadcastWithAcknowledgement:mse,setChildListenerByType:lse,getWorkerIndex:ZB,getWorkerCount:eH,getTicketKeys:tH,setMainIsWorker:cse,setTerminateTimeout:ase,restartNumber:Ln?.restartNumber||1};es.onMessageByType=nH;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 ag;function ase(e){og=e}a(ase,"setTerminateTimeout");function ZB(){return Ln?Ln.workerIndex:ag?0:void 0}a(ZB,"getWorkerIndex");function eH(){return Ln?Ln.workerCount:ag?1:void 0}a(eH,"getWorkerCount");function cse(e){ag=e}a(cse,"setMainIsWorker");var rE;function tH(){return rE||(rE=ig?tse(48):Ln.ticketKeys,rE)}a(tH,"getTicketKeys");Object.defineProperty(QB,"workerIndex",{get(){return ZB()}});Object.defineProperty(QB,"workerCount",{get(){return eH()}});var rH={[zB](e,t){pse(t)},[JB](e,t){Sse(t,e)}};function rg(e,t={}){let r=process.constrainedMemory?.()||$B();r=Math.min(r,$B(),2e4*YB);let s=Math.max(Math.floor(r/YB/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of es){let _=new Wre;_.existingPort=u,i.push(_),o.push(_.port2)}Xre(e)||(e+=".js");let c=new Kre(Jre(e)?e:WB(zre,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:li.exports.restartNumber,ticketKeys:tH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:jB,port:u,threadId:c.threadId},[u]);return iE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>rg(e,t),c.on("error",u=>{console.error("Worker error:",u),Dn.error("Worker error:",u)}),c.on("exit",u=>{ui.splice(ui.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<nse?(t.unexpectedRestarts=c.unexpectedRestarts+1,rg(e,t)):Dn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{rH[u.type]?.(u,c)}),ui.push(c),gse(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(rg,"startWorker");var use=[nE.THREAD_TYPES.HTTP];async function cg(e=null,t=2,r=!0){if(ig){if(r){let{loadRootComponents:o}=tE();await o()}li.exports.restartNumber++,t<1&&(t=t*ui.length);let s=[],n=[];for(let o of ui.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Dn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:li.exports.restartNumber,type:nE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=use.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),og*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===sse.ITC_EVENT_TYPES.CHILD_STARTED&&(Dn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Dn.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}=Yd();r&&(e==="http"||!e)&&ese.get(nE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Js.postMessage({type:ise,workerType:e})}a(cg,"restartWorkers");function lse(e,t){rH[e]=t}a(lse,"setChildListenerByType");function _se(e){return cg(e,1/0,!1)}a(_se,"shutdownWorkers");var sH=[];function dse(e){sH.push(e)}a(dse,"onMessageFromWorkers");var sg=new Map;function nH(e,t){let r=sg.get(e);r||sg.set(e,r=[]),r.push(t)}a(nH,"onMessageByType");var fse=10;async function Ese(e){let t=0;for(let r of es)try{r.postMessage(e),t++>fse&&(t=0,await new Promise(setImmediate))}catch(s){Dn.error("Unable to send message to worker",s)}}a(Ese,"broadcast");var sE=new Map,hse=1;function mse(e){return new Promise(t=>{let r=0;for(let s of es)try{let n=hse++,i=a(()=>{sE.delete(n),--r===0&&t(),s!==Js&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,sE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of sE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Dn.error("Unable to send message to worker",n)}r===0&&t()})}a(mse,"broadcastWithAcknowledgement");function pse(e){e.postMessage({type:XB,workers:iH()})}a(pse,"sendThreadInfo");function iH(){let e=Date.now();return ui.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(iH,"getChildWorkerInfo");function Sse(e,t){e.resources=t,e.resources.updated=Date.now()}a(Sse,"recordResourceReport");var ng;function Tse(e){ng=e}a(Tse,"setMonitorListener");var Rse=1e3,KB=!1;function gse(){KB||(KB=!0,setInterval(()=>{for(let e of ui){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}ng&&ng()},Rse).unref())}a(gse,"startMonitoring");var Ase=1e3;if(Js){iE(Js);for(let e=0,t=Ln.addPorts.length;e<t;e++){let r=Ln.addPorts[e];r.threadId=Ln.addThreadIds[e],iE(r)}setInterval(()=>{let e=process.memoryUsage();Js.postMessage({type:JB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ase).unref(),tg=a(()=>new Promise((e,t)=>{Js.on("message",r),Js.postMessage({type:zB});function r(s){s.type===XB&&(Js.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else tg=iH;li.exports.getThreadInfo=tg;function iE(e,t){es.push(e),e.on("message",r=>{if(r.type===jB)r.port.threadId=r.threadId,iE(r.port);else if(r.type===ose){let s=sE.get(r.id);s&&s()}else{for(let n of sH)n(r,e);let s=sg.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Dn.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(iE,"addPort");if(ig){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Zre(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(WB(s,i.name));try{for await(let{filename:i}of jre(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await cg(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");li.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Js.on("message",async e=>{let{type:t}=e;t===nE.ITC_EVENT_TYPES.SHUTDOWN&&(li.exports.restartNumber=e.restartNumber,Js.unref(),setTimeout(()=>{Dn.warn("Thread did not voluntarily terminate",Qre),process.exit(0)},og).unref())})});var hH=T(Ju=>{"use strict";var{isMainThread:Ose,parentPort:zu,threadId:Wu}=require("worker_threads"),{Socket:Nse,createServer:bse}=require("net"),{createServer:yse,IncomingMessage:Ise}=require("http"),{createServer:wse}=require("https"),{readFileSync:Ta}=require("fs"),Xs=F(),At=X(),Un=y(),{server:aE}=(fr(),Z(fi)),{WebSocketServer:Cse}=require("ws"),{createServer:Lse}=require("tls"),{getTicketKeys:Dse,restartNumber:Use}=Je(),{Headers:uH}=(Kd(),Z(CM)),{recordAction:Qu,recordActionBinary:Mse}=(dn(),Z(Lc)),{Request:lH,node_request_key:zEe,createReuseportFd:oH}=(YR(),Z(UB));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Use<=1&&Xs.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:JEe,CONFIG_PARAMS:Pse}=Un;At.initSync();var vse=At.get(Pse.HTTP_SESSIONAFFINITY),js={};Ju.registerServer=Eg;Ju.httpServer=hg;Ju.deliverSocket=fg;Ju.startServers=_H;aE.http=hg;aE.request=qse;aE.socket=Gse;aE.ws=xse;var ug=[],lg=[],Bse,ro={},oE={},Hse=[],_g=[];function _H(){return tE().loadRootComponents(!0).then(()=>{zu?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)fg(s,r,n);else if(t.requestId)Fse(t);else if(t.type===Un.ITC_EVENT_TYPES.SHUTDOWN){Xs.trace("received shutdown request",Wu);for(let i in js){let o=js[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Xs.info("Closed all http connections",i,Wu)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Wu),o.cantCleanupProperly||Xs.warn("Had to forcefully exit the thread",Wu),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(oH&&!vse)for(let t in js){let r=js[t],s;try{s=oH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Xs.trace("Listening on port "+t,Wu)}).on("error",i)}))}Promise.all(e).then(()=>{zu?.postMessage({type:Un.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(_H,"startServers");Ose||_H();function fg(e,t,r){let s=e?.read?e:new Nse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=js[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=js[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Xs.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(fg,"deliverSocket");var aH=new Map;function Fse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=aH.get(n),r){case"connection":i=fg(void 0,t),aH.set(n,i),i.write=(c,u,_)=>(zu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(zu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),zu.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(Fse,"proxyRequest");function Eg(e,t){+t||(t=parseInt(At.get(Un.CONFIG_PARAMS.HTTP_PORT),10));let r=js[t];if(r){let s=r.lastServer||r;s.off("unhandled",cH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else js[t]=e;e.on("unhandled",cH)}a(Eg,"registerServer");function dH(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=[],At.get(Un.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(Un.CONFIG_PARAMS.HTTP_PORT),secure:At.get(Un.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(Un.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(Un.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(dH,"getPorts");function hg(e,t){for(let{port:r,secure:s}of dH(t))fH(r,s,t?.isOperationsServer),typeof e=="function"?_g[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):Eg(e,r),oE[r]=dg(_g,r),Bse=dg(Hse,r)}a(hg,"httpServer");function fH(e,t,r){if(!ro[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:At.get(s+"_keepAliveTimeout"),headersTimeout:At.get(s+"_headersTimeout"),requestTimeout:At.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=At.get(s+"tls_privateKey"),o=At.get(s+"tls_certificate"),c=At.get(s+"tls_certificateAuthority");Object.assign(n,{key:Ta(i),cert:Ta(o)+(c?`
31
31
 
32
- `+Sa(c):""),ticketKeys:Use()})}to[e]=(t?Cse:Ise)(n,async(i,o)=>{try{let u=performance.now(),_=new _H(i,o);r&&(_.isOperationsServer=!0);let l=await iE[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=hH(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let b of l.headers||[])o.setHeader(b[0],b[1]);return i.baseRequest=_,o.baseResponse=l,to[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let b=l.headers||new lH;if(h?h.length>=0&&(typeof h=="string"?b.set("Content-Length",Buffer.byteLength(h)):b.set("Content-Length",h.length),p=!0):(b.set("Content-Length","0"),p=!0),b.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),b.append("Server-Timing",O,!0)}o.writeHead(d,b&&(b[Symbol.iterator]?Array.from(b):b)),p&&o.end(h)}let S=_.handlerPath,g=_.method;if(Wu(E,"duration",S,g,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Pse(d<400,"success",S,g),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let b=0;h.on("data",O=>{b+=O.length}),h.on("end",()=>{Wu(performance.now()-f,"transfer",S,g),Wu(b,"bytes-sent",S,g)})}else h?.then?h.then(b=>{o.end(b)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?Xs.warn(u):Xs.info(u):Xs.error(u)}a(c,"onError")}),t&&(to[e].on("secureConnection",i=>{i._parent.startTime&&Wu(performance.now()-i._parent.startTime,"tls-handshake",e),Wu(i.isSessionReused(),"tls-reused",e)}),to[e].isSecure=!0),hg(to[e],e)}return to[e]}a(EH,"getHTTPServer");function fg(e,t){let r=hH;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(fg,"makeCallbackChain");function hH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new lH}}a(hH,"unhandled");function Gse(e,t){mg(e,{requestOnly:!0,...t})}a(Gse,"onRequest");function xse(e,t){if(t.securePort){let r=At.get("tls_privateKey"),s=At.get("tls_certificate"),n=At.get("tls_certificateAuthority"),i=Dse({key:Sa(r),cert:Sa(s)+(n?`
32
+ `+Ta(c):""),ticketKeys:Dse()})}ro[e]=(t?wse:yse)(n,async(i,o)=>{try{let u=performance.now(),_=new lH(i,o);r&&(_.isOperationsServer=!0);let l=await oE[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=EH(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let b of l.headers||[])o.setHeader(b[0],b[1]);return i.baseRequest=_,o.baseResponse=l,ro[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let b=l.headers||new uH;if(h?h.length>=0&&(typeof h=="string"?b.set("Content-Length",Buffer.byteLength(h)):b.set("Content-Length",h.length),p=!0):(b.set("Content-Length","0"),p=!0),b.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),b.append("Server-Timing",O,!0)}o.writeHead(d,b&&(b[Symbol.iterator]?Array.from(b):b)),p&&o.end(h)}let S=_.handlerPath,g=_.method;if(Qu(E,"duration",S,g,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Mse(d<400,"success",S,g),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let b=0;h.on("data",O=>{b+=O.length}),h.on("end",()=>{Qu(performance.now()-f,"transfer",S,g),Qu(b,"bytes-sent",S,g)})}else h?.then?h.then(b=>{o.end(b)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?Xs.warn(u):Xs.info(u):Xs.error(u)}a(c,"onError")}),t&&(ro[e].on("secureConnection",i=>{i._parent.startTime&&Qu(performance.now()-i._parent.startTime,"tls-handshake",e),Qu(i.isSessionReused(),"tls-reused",e)}),ro[e].isSecure=!0),Eg(ro[e],e)}return ro[e]}a(fH,"getHTTPServer");function dg(e,t){let r=EH;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(dg,"makeCallbackChain");function EH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new uH}}a(EH,"unhandled");function qse(e,t){hg(e,{requestOnly:!0,...t})}a(qse,"onRequest");function Gse(e,t){if(t.securePort){let r=At.get("tls_privateKey"),s=At.get("tls_certificate"),n=At.get("tls_certificateAuthority"),i=Lse({key:Ta(r),cert:Ta(s)+(n?`
33
33
 
34
- `+Sa(n):"")},e);js[t.securePort]=i}if(t.port){let r=yse(e);js[t.port]=r}}a(xse,"onSocket");Object.defineProperty(wse.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 kse(e,t){for(let{port:r,secure:s}of fH(t)){_g[r]||(_g[r]=new Lse({server:EH(r,s)}),_g[r].on("connection",async(i,o)=>{try{let c=new _H(o);c.isWebSocket=!0;let u=iE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<lg.length;l++){let d=lg[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){Xs.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";lg.push({listener:e,protocol:n}),iE[r]=fg(dg,r)}}a(kse,"onWebSocket");function uH(e,t){t.writeHead(404),t.end(`Not found
35
- `)}a(uH,"defaultNotFound")});var OH={};ve(OH,{startHTTPThreads:()=>$se,startSocketServer:()=>ZR,updateWorkerIdleness:()=>AH});async function $se(e=2,t){if(t)Sg(0,1,!0);else{let{loadRootComponents:r}=eE();if(e===0)return(0,li.setMainIsWorker)(!0),await mH().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)Sg(r,e);return Promise.all(gH)}function Sg(e,t=1,r){if(pg++,(0,li.startWorker)("server/threads/threadServer.js",{name:uE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===uE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});gH.push(n),await n,Ta.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=cE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ta.indexOf(s);o>-1&&Ta.splice(o,1)}if(a(i,"removeWorker"),Ra){let o=Ra;Ra=[];for(let c of o)RH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{Tg?Tg=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,li.shutdownWorkers)(),pg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function ZR(e=0,t){if(typeof e=="string")try{(0,lE.existsSync)(e)&&(0,lE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Yse:r=Kse(t):r=Rg;let s=(0,ga.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=RH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Tg=!0,r(o,(c,u)=>{if(!c){if(pH){let l=o._socket||new ga.Socket({handle:o,writable:!0,readable:!0});pH.deliverSocket(l,e,u),l.resume()}else pg>0?(Ra.length===0&&setTimeout(()=>{Ra.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,Ra.push(o)):(console.log("start up a dynamic thread to handle request"),Sg(0));br(!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});zse(l,c,e)}br(!0,"socket-routed")})};let n=kc();TH.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 Rg(e,t){let r,s=0;for(let n of Ta){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=aE)return aE=i,t(r);s=i}aE=0,t(r)}function Yse(e,t){let r={};e.getpeername(r);let s=r.address,n=Aa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);Rg(e,o=>{Aa.set(s,{worker:o,lastUsed:i}),t(o)})}function Kse(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],_=Aa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);Rg(s,d=>{Aa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function AH(){aE=0;for(let e of Ta)e.expectedIdle=e.recentELU.idle+Wse,e.requests=1;Ta.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function zse(e,t,r){let s=Qse++;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(),cE.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")),cE.delete(s)),n.event=="destroy"&&(e.destroy(),cE.delete(s))})}var li,ga,uE,TH,lE,Vse,Ta,Ra,RH,pH,pg,gH,Tg,aE,SH,Aa,Wse,cE,Qse,eg=Te(()=>{li=D(Je()),ga=require("net"),uE=D(y()),TH=D(G()),lE=require("fs");_n();({isMainThread:Vse}=require("worker_threads")),Ta=[],Ra=[],RH=[],pg=0,gH=[];Vse&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a($se,"startHTTPThreads");a(Sg,"startHTTPWorker");a(ZR,"startSocketServer");aE=0;a(Rg,"findMostIdleWorker");SH=36e5,Aa=new Map;a(Yse,"findByRemoteAddressAffinity");a(Kse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Aa)r.lastUsed+SH<e&&Aa.delete(t)},SH).unref();Wse=1e3;a(AH,"updateWorkerIdleness");(0,li.setMonitorListener)(AH);cE=new Map,Qse=1;a(zse,"proxySocket")});hE();var{startHTTPThreads:Jse,startSocketServer:NH}=(eg(),Z(OH));Jse(0,!0);NH(9925);NH(9926);
34
+ `+Ta(n):"")},e);js[t.securePort]=i}if(t.port){let r=bse(e);js[t.port]=r}}a(Gse,"onSocket");Object.defineProperty(Ise.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 xse(e,t){for(let{port:r,secure:s}of dH(t)){lg[r]||(lg[r]=new Cse({server:fH(r,s)}),lg[r].on("connection",async(i,o)=>{try{let c=new lH(o);c.isWebSocket=!0;let u=oE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<ug.length;l++){let d=ug[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){Xs.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";ug.push({listener:e,protocol:n}),oE[r]=dg(_g,r)}}a(xse,"onWebSocket");function cH(e,t){t.writeHead(404),t.end(`Not found
35
+ `)}a(cH,"defaultNotFound")});var AH={};ve(AH,{startHTTPThreads:()=>Vse,startSocketServer:()=>jR,updateWorkerIdleness:()=>gH});async function Vse(e=2,t){if(t)pg(0,1,!0);else{let{loadRootComponents:r}=tE();if(e===0)return(0,_i.setMainIsWorker)(!0),await hH().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)pg(r,e);return Promise.all(RH)}function pg(e,t=1,r){if(mg++,(0,_i.startWorker)("server/threads/threadServer.js",{name:lE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===lE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});RH.push(n),await n,Ra.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=uE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ra.indexOf(s);o>-1&&Ra.splice(o,1)}if(a(i,"removeWorker"),ga){let o=ga;ga=[];for(let c of o)TH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{Sg?Sg=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,_i.shutdownWorkers)(),mg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function jR(e=0,t){if(typeof e=="string")try{(0,_E.existsSync)(e)&&(0,_E.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=$se:r=Yse(t):r=Tg;let s=(0,Aa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=TH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Sg=!0,r(o,(c,u)=>{if(!c){if(mH){let l=o._socket||new Aa.Socket({handle:o,writable:!0,readable:!0});mH.deliverSocket(l,e,u),l.resume()}else mg>0?(ga.length===0&&setTimeout(()=>{ga.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,ga.push(o)):(console.log("start up a dynamic thread to handle request"),pg(0));br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Aa.Socket({handle:o,writable:!0,readable:!0});Qse(l,c,e)}br(!0,"socket-routed")})};let n=Vc();SH.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 Tg(e,t){let r,s=0;for(let n of Ra){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=cE)return cE=i,t(r);s=i}cE=0,t(r)}function $se(e,t){let r={};e.getpeername(r);let s=r.address,n=Oa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);Tg(e,o=>{Oa.set(s,{worker:o,lastUsed:i}),t(o)})}function Yse(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Aa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Oa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);Tg(s,d=>{Oa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function gH(){cE=0;for(let e of Ra)e.expectedIdle=e.recentELU.idle+Kse,e.requests=1;Ra.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Qse(e,t,r){let s=Wse++;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(),uE.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")),uE.delete(s)),n.event=="destroy"&&(e.destroy(),uE.delete(s))})}var _i,Aa,lE,SH,_E,kse,Ra,ga,TH,mH,mg,RH,Sg,cE,pH,Oa,Kse,uE,Wse,ZR=Te(()=>{_i=D(Je()),Aa=require("net"),lE=D(y()),SH=D(F()),_E=require("fs");dn();({isMainThread:kse}=require("worker_threads")),Ra=[],ga=[],TH=[],mg=0,RH=[];kse&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Vse,"startHTTPThreads");a(pg,"startHTTPWorker");a(jR,"startSocketServer");cE=0;a(Tg,"findMostIdleWorker");pH=36e5,Oa=new Map;a($se,"findByRemoteAddressAffinity");a(Yse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Oa)r.lastUsed+pH<e&&Oa.delete(t)},pH).unref();Kse=1e3;a(gH,"updateWorkerIdleness");(0,_i.setMonitorListener)(gH);uE=new Map,Wse=1;a(Qse,"proxySocket")});mE();var{startHTTPThreads:zse,startSocketServer:OH}=(ZR(),Z(AH));zse(0,!0);OH(9925);OH(9926);