harperdb 4.0.4 → 4.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +18 -18
- package/launchServiceScripts/launchCustomFunctions.js +11 -11
- package/launchServiceScripts/launchHarperDB.js +11 -11
- package/launchServiceScripts/launchInstallNATSServer.js +2 -2
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +6 -6
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +1 -1
- package/server/ipc/hdbIpcServer.js +5 -5
- package/server/jobs/jobProcess.js +11 -11
- package/utility/scripts/restartHdb.js +6 -6
package/bin/harperdb.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var ug=Object.defineProperty;var o=(e,t)=>ug(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=d((I0,ml)=>{"use strict";var be=require("path"),lg=require("fs");function Eg(){let e=__dirname;for(;!lg.existsSync(be.join(e,"package.json"));){let t=be.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(Eg,"getHDBPackageRoot");var Et=Eg(),_l="js",_n=_l,dg="harperdb-config.yaml",Sg="defaultConfig.yaml",hg="hdb",cl=`hdbServer.${_n}`,ul=`customFunctionsServer.${_n}`,ll=`hdbIpcServer.${_n}`,fg=`restartHdb.${_n}`,t_="HarperDB",di="Custom Functions",Si="Clustering Hub",hi="Clustering Leaf",r_="Clustering Ingest Service",s_="Clustering Reply Service",Tg="foreground.pid",e_={HDB:t_,IPC:"IPC",CLUSTERING_HUB:Si,CLUSTERING_LEAF:hi,CLUSTERING_INGEST_SERVICE:r_,CLUSTERING_REPLY_SERVICE:s_,CUSTOM_FUNCTIONS:di,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},Rg={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},Ag={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},mg={harperdb:t_,ipc:"IPC","clustering hub":Si,"clustering leaf":hi,"clustering ingest service":r_,"clustering reply service":s_,"custom functions":di,custom_functions:di,"pm2-logrotate":e_.PM2_LOGROTATE,logrotate:e_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},gg={CLUSTERING_HUB_PROC_DESCRIPTOR:Si,CLUSTERING_LEAF_PROC_DESCRIPTOR:hi,CLUSTERING_INGEST_PROC_DESCRIPTOR:r_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:s_},Ei={HDB:be.join(Et,"server/harperdb"),IPC:be.join(Et,"server/ipc"),CUSTOM_FUNCTIONS:be.join(Et,"server/customFunctions"),CLUSTERING_HUB:be.join(Et,"server/nats"),CLUSTERING_LEAF:be.join(Et,"server/nats")},pg={HDB:be.join(Ei.HDB,cl),IPC:be.join(Ei.IPC,ll),CUSTOM_FUNCTIONS:be.join(Ei.CUSTOM_FUNCTIONS,ul)},Ng={HDB:be.join(Et,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:be.join(Et,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:be.join(Et,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:be.join(Et,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:be.resolve(Et,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Og={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},El="support@harperdb.io",Ig="customer-success@harperdb.io",dl=1,Cg=4141,Sl="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",bg="https://www.harperdb.io/product",Lg=`For support, please submit a request at ${Sl} or contact ${El}`,hl=`For license support, please contact ${Ig}`,yg="None of the specified records were found.",wg="hash attribute not found",Dg=`Your current license only supports ${dl} role. ${hl}`,Mg="Your current license only supports 3 connections to a node.",Ug="127.0.0.1",Pg=1,Bg=/^\.$/,Hg=/^\.\.$/,vg="U+002E",Gg=/\//g,qg="U+002F",Fg=/U\+002F/g,Vg=/^U\+002E$/,xg=/^U\+002EU\+002E$/,kg="d",$g=999999,Yg="*",Kg="--max-old-space-size=",Wg="system",Qg="__hdb_hash",jg=".harperdb",Jg=".hdb",Zg="keys",Xg="hdb_boot_properties.file",zg=".updateConfig.json",ep="SIGTSTP",tp=24,rp=6e4,sp=448,np="blob",ip="trash",op="schema",ap="transactions",_p=".count",cp="id",up="install_log.log",lp="run_log.log",Ep="PROCESS_NAME",dp={SETTINGS_PATH_KEY:"settings_path"},fl=require("lodash"),Sp={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},hp={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},fp={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Tp={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"},Rp={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"},Ke="hdb_internal:",Ap={CREATE_SCHEMA:Ke+"create_schema",CREATE_TABLE:Ke+"create_table",CREATE_ATTRIBUTE:Ke+"create_attribute",ADD_USER:Ke+"add_user",ALTER_USER:Ke+"alter_user",DROP_USER:Ke+"drop_user",HDB_NODES:Ke+"hdb_nodes",HDB_USERS:Ke+"hdb_users",HDB_WORKERS:Ke+"hdb_workers",CATCHUP:Ke+"catchup",SCHEMA_CATCHUP:Ke+"schema_catchup",WORKER_ROOM:Ke+"cluster_workers"},mp={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"},gp="060493.ks",pp=".license",Np={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",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_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",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",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",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",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",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"},Op={CSV:".csv",JSON:".json"},Ip={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Cp={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ur={};ur[m.CREATE_SCHEMA]=m.CREATE_SCHEMA;ur[m.CREATE_TABLE]=m.CREATE_TABLE;ur[m.CREATE_ATTRIBUTE]=m.CREATE_ATTRIBUTE;ur[m.INSERT]=m.INSERT;ur[m.UPDATE]=m.UPDATE;ur[m.UPSERT]=m.UPSERT;ur[m.DELETE]=m.DELETE;var x=Object.create(null);x[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;x[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;x[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;x[m.READ_LOG]=m.READ_LOG;x[m.ADD_NODE]=m.ADD_NODE;x[m.LIST_USERS]=m.LIST_USERS;x[m.LIST_ROLES]=m.LIST_ROLES;x[m.USER_INFO]=m.USER_INFO;x[m.SQL]=m.SQL;x[m.GET_JOB]=m.GET_JOB;x[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;x[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;x[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;x[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;x[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;x[m.REMOVE_NODE]=m.REMOVE_NODE;x[m.RESTART]=m.RESTART;x[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;x[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;x[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;x[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;x[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;x[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;x[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;x[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;x[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var bp={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},Lp={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Tl={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",IPC_SERVER_PORT:"IPC_SERVER_PORT",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"},yp=fl.invert(Tl),f={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_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",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",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",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",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},wp={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},Dp={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.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"},Mp={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"},Up={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Pp={FILE_SYSTEM:"fs",LMDB:"lmdb"},Bp={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Hp={DEVELOPMENT:8192,DEFAULT:512},vp={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"},Gp={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"},qp={ENOENT:"ENOENT",EACCES:"EACCES"},Rl={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Fp="__clustering__",Vp=Object.values(Rl),xp=15984864e5,Al={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},kp=fl.invert(Al),$p={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"},Yp=111,Kp=`\r
|
|
3
|
-
`,
|
|
4
|
-
`}o(xr,"createLogRecord");function Ll(e){Ss===void 0&&(a_=_e.PROCESS_DESCRIPTORS.INSTALL,Fr.ensureDirSync(fi),Ss=Vr.join(fi,_e.PROCESS_LOG_NAMES.INSTALL),Fr.ensureFileSync(Ss)),Fr.appendFileSync(Ss,e)}o(Ll,"writeToLogFile");function Ti(e){Ot&&Ll(e),xt&&process.stdout.write(e)}o(Ti,"nonPm2LogStdOut");function __(e){Ot&&Ll(e),xt&&process.stderr.write(e)}o(__,"nonPm2LogStdErr");function uN(...e){if(Be[Pe]<=Be.info){let t=xr("info",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(uN,"info");function yl(...e){if(Be[Pe]<=Be.trace){let t=xr("trace",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(yl,"trace");function i_(...e){if(Be[Pe]<=Be.error){let t=xr("error",e);if(lr){__(t);return}process.stderr.write(t)}}o(i_,"error");function lN(...e){if(Be[Pe]<=Be.debug){let t=xr("debug",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(lN,"debug");function EN(...e){if(Be[Pe]<=Be.notify){let t=xr("notify",e);if(lr){Ti(t);return}process.stdout.write(t)}}o(EN,"notify");function dN(...e){if(Be[Pe]<=Be.fatal){let t=xr("fatal",e);if(lr){__(t);return}process.stderr.write(t)}}o(dN,"fatal");function SN(...e){if(Be[Pe]<=Be.warn){let t=xr("warn",e);if(lr){__(t);return}process.stderr.write(t)}}o(SN,"warn");function hN(){let e;try{e=aN.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Vr.join(e,_e.HDB_HOME_DIR_NAME,_e.BOOT_PROPS_FILE_NAME);return Fr.existsSync(t)||(t=Vr.join(o_,"utility/hdb_boot_properties.file")),t}o(hN,"getPropsFilePath");function fN(e){Pe=e}o(fN,"setLogLevel");function Ol(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Ol,"autoCastBoolean");function TN(e){try{if(e.includes("config/settings.js")){let a=Cl(e);return{level:a.get(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Vr.dirname(a.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Il.parseDocument(Fr.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===_e.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(TN,"getLogConfig");function RN(){try{let e=Il.parseDocument(Fr.readFileSync(_N,"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)}}o(RN,"getDefaultConfig")});var cn=d((L0,AN)=>{AN.exports={name:"harperdb",version:"4.0.4",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.0","@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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var kr=d((D0,Dl)=>{"use strict";var y0=require("fs-extra"),w0=O();Dl.exports={version:mN,printVersion:pN,nodeVersion:gN};var Er=cn();function mN(){if(Er)return Er.version}o(mN,"version");function gN(){if(Er&&Er.engines&&Er.engines["preferred-node"])return Er.engines["preferred-node"]}o(gN,"nodeVersion");function pN(){Er&&console.log(`HarperDB Version ${Er.version}`)}o(pN,"printVersion")});var Bl=d((M0,Pl)=>{"use strict";var Ml=require("semver/functions/major"),NN=require("semver/functions/satisfies"),Ul=cn(),un=process.versions&&process.versions.node?process.versions.node:void 0;Pl.exports=ON;function ON(){let e=Ul.engines.node,t=Ul.engines["preferred-node"];if(un){if(e&&!NN(un,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${un}. Please install a version of Node.js that is withing the defined range.`};if(t&&Ml(un)!==Ml(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${un}. Some issues may occur with untested versions of Node.js.`}}}o(ON,"checkNodeVersion")});var c_=d((U0,Hl)=>{"use strict";var IN=require("util"),CN=require("path"),bN=require("child_process"),LN=IN.promisify(bN.execFile),yN=1e3*1e3*10;Hl.exports={findPs:wN};async function wN(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await LN("ps",["wwxo",`pid,${r}`],{maxBuffer:yN});for(let n of s.trim().split(`
|
|
5
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}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:CN.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"])}))}o(wN,"findPs")});var Te=d((P0,Gl)=>{"use strict";var DN="__dbis__",MN="__environment_name__",UN="__dbi_defintion__",PN={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"},BN=["__createdtime__","__updatedtime__"],HN="\uFFFF",vl={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},vN=Object.values(vl);Gl.exports={INTERNAL_DBIS_NAME:DN,DBI_DEFINITION_NAME:UN,SEARCH_TYPES:PN,TIMESTAMP_NAMES:BN,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:MN,TRANSACTIONS_DBI_NAMES_ENUM:vl,TRANSACTIONS_DBIS:vN,OVERFLOW_MARKER:HN}});var et=d((B0,Wl)=>{"use strict";var ql=T(),Fl=Te(),Vl={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},xl=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),kl={500:xl("There was an error processing your request."),400:"Invalid request"},GN=kl[Vl.INTERNAL_SERVER_ERROR],qN={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.`},FN={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VN={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"},xN={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_ARRAY:"ids must be an array",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 ${Fl.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Fl.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"},kN={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ql.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 ${ql.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"},$l={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"},$N={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema 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' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},YN={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 schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.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`},KN={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=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},WN={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},QN={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`},Yl={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.`},Kl={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},jN={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 customFunctions enabled to true in hdb/harperdb-config.yaml file."},JN={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZN={...$l,...VN,...qN,...$N,...YN,...KN,...WN,...QN,...kN,...Yl,...Kl,...jN,...JN,...FN};Wl.exports={CHECK_LOGS_WRAPPER:xl,HDB_ERROR_MSGS:ZN,DEFAULT_ERROR_MSGS:kl,DEFAULT_ERROR_RESP:GN,HTTP_STATUS_CODES:Vl,LMDB_ERRORS_ENUM:xN,AUTHENTICATION_ERROR_MSGS:$l,VALIDATION_ERROR_MSGS:Yl,IPC_ERRORS:Kl}});var J=d((H0,Jl)=>{"use strict";var fs=et(),XN=O(),zN=T(),ln=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Ql),this.http_resp_code=s||fs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(fs.DEFAULT_ERROR_MSGS[s]?fs.DEFAULT_ERROR_MSGS[s]:fs.DEFAULT_ERROR_MSGS[fs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&XN[n](i)}};o(ln,"HdbError");function Ql(e,t,r,s=zN.LOG_LEVELS.ERROR,n=null,i=!1){if(jl(e))return e;let a=new ln(e,t,r,s,n);return i&&delete a.stack,a}o(Ql,"handleHDBError");function jl(e){return e.__proto__.constructor.name===ln.name}o(jl,"isHDBError");Jl.exports={isHDBError:jl,handleHDBError:Ql,hdb_errors:fs}});var I=d((G0,lE)=>{"use strict";var u_=require("path"),eO=require("fs-extra"),Se=O(),Zl=require("fs-extra"),tO=require("truncate-utf8-bytes"),En=require("os"),rO=require("net"),sO=require("recursive-iterator"),Re=T(),rE=c_(),Xl=require("papaparse"),Ri=require("moment"),{inspect:nO}=require("util"),zl=require("is-number"),v0=require("lodash"),{hdb_errors:Ai}=J(),sE=require("util").promisify(setTimeout),iO=100,oO=5,aO="",_O=4,eE=255,tE={true:!0,false:!1,undefined:null,null:null,NaN:NaN};lE.exports={isEmpty:We,isEmptyOrZeroLength:It,arrayHasEmptyValues:lO,arrayHasEmptyOrZeroLengthValues:EO,buildFolderPath:dO,isBoolean:nE,errorizeMessage:cO,stripFileExtension:hO,autoCast:fO,autoCastJSONDeep:l_,removeDir:RO,compareVersions:AO,isCompatibleDataVersion:mO,escapeRawValue:oE,unescapeValue:gO,stringifyProps:pO,valueConverter:NO,timeoutPromise:IO,isClusterOperation:bO,getClusterUser:wO,sendTransactionToSocketCluster:LO,checkGlobalSchemaTable:yO,getHomeDir:aE,getPropsFilePath:OO,promisifyPapaParse:DO,removeBOM:_E,createEventPromise:MO,checkProcessRunning:UO,checkSchemaTableExist:PO,checkSchemaExists:cE,checkTableExists:uE,getStartOfTomorrowInSeconds:BO,getLimitKey:HO,isObject:SO,isNotEmptyAndHasValue:uO,autoCasterIsNumberCheck:iE,backtickASTSchemaItems:vO,isPortTaken:CO,stopProcess:GO,createForkArgs:qO,autoCastBoolean:FO,async_set_timeout:sE,getTableHashAttribute:VO,doesSchemaExist:xO,doesTableExist:kO,stringifyObj:$O,ms_to_time:YO,PACKAGE_ROOT:Re.PACKAGE_ROOT};function cO(e){return e instanceof Error?e:new Error(e)}o(cO,"errorizeMessage");function We(e){return e==null}o(We,"isEmpty");function uO(e){return!We(e)&&(e||e===0||e===""||nE(e))}o(uO,"isNotEmptyAndHasValue");function It(e){return We(e)||e.length===0||e.size===0}o(It,"isEmptyOrZeroLength");function lO(e){if(We(e))return!0;for(let t=0;t<e.length;t++)if(We(e[t]))return!0;return!1}o(lO,"arrayHasEmptyValues");function EO(e){if(It(e))return!0;for(let t=0;t<e.length;t++)if(It(e[t]))return!0;return!1}o(EO,"arrayHasEmptyOrZeroLengthValues");function dO(...e){try{return e.join(u_.sep)}catch{console.error(e)}}o(dO,"buildFolderPath");function nE(e){return We(e)?!1:e===!0||e===!1}o(nE,"isBoolean");function SO(e){return We(e)?!1:typeof e=="object"}o(SO,"isObject");function hO(e){return It(e)?aO:e.slice(0,-_O)}o(hO,"stripFileExtension");function fO(e){return We(e)||e===""||typeof e!="string"?e:tE[e]!==void 0?tE[e]:iE(e)===!0?Number(e):e}o(fO,"autoCast");function TO(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(TO,"autoCastJSON");function l_(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=l_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=l_(r);s!==r&&(e[t]=s)}return e}else return TO(e)}o(l_,"autoCastJSONDeep");function iE(e){if(e.startsWith("0.")&&zl(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zl(e))}o(iE,"autoCasterIsNumberCheck");async function RO(e){if(It(e))throw new Error(`Directory path: ${e} does not exist`);try{await Zl.emptyDir(e),await Zl.remove(e)}catch(t){throw Se.error(`Error removing files in ${e} -- ${t}`),t}}o(RO,"removeDir");function AO(e,t){if(It(e)){Se.info("Invalid current version sent as parameter.");return}if(It(t)){Se.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(a.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(a[u],10)-parseInt(_[u],10),r)return r;return a.length-_.length}o(AO,"compareVersions");function mO(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(mO,"isCompatibleDataVersion");function oE(e){if(We(e))return e;let t=String(e);return t==="."?Re.UNICODE_PERIOD:t===".."?Re.UNICODE_PERIOD+Re.UNICODE_PERIOD:t.replace(Re.FORWARD_SLASH_REGEX,Re.UNICODE_FORWARD_SLASH)}o(oE,"escapeRawValue");function gO(e){if(We(e))return e;let t=String(e);return t===Re.UNICODE_PERIOD?".":t===Re.UNICODE_PERIOD+Re.UNICODE_PERIOD?"..":String(e).replace(Re.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(gO,"unescapeValue");function pO(e,t){if(We(e))return Se.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+En.EOL}!It(s)&&s[0]===";"?r+=" "+s+n+En.EOL:It(s)||(r+=s+"="+n+En.EOL)}catch{Se.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(pO,"stringifyProps");function NO(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Se.error(n),t=e}let r=String(oE(t)),s=Buffer.byteLength(r)>eE?tO(r,eE)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}o(NO,"valueConverter");function aE(){let e;try{e=En.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(aE,"getHomeDir");function OO(){let e=u_.join(aE(),Re.HDB_HOME_DIR_NAME,Re.BOOT_PROPS_FILE_NAME);return eO.existsSync(e)||(e=u_.join(__dirname,"../","hdb_boot_properties.file")),e}o(OO,"getPropsFilePath");function IO(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(IO,"timeoutPromise");async function CO(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=rO.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(CO,"isPortTaken");function bO(e){try{return Re.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Se.error(`Error checking operation against cluster ops ${t}`)}return!1}o(bO,"isClusterOperation");function LO(e,t,r){if(global.hdb_socket_client!==void 0){Se.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Re.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}o(LO,"sendTransactionToSocketCluster");function yO(e,t){if(!global.hdb_schema[e])return Ai.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ai.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(yO,"checkGlobalSchemaTable");function wO(e,t){if(We(t)){Se.warn("No CLUSTERING_USER defined, clustering disabled");return}if(We(e)||It(e)){Se.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){Se.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Se.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(wO,"getClusterUser");function DO(){Xl.parsePromise=function(e,t){return new Promise(function(r,s){Xl.parse(e,{header:!0,transformHeader:_E,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(DO,"promisifyPapaParse");function _E(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(_E,"removeBOM");function MO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Se.info(`Got cluster status event response: ${nO(n)}`);try{i.cancel()}catch{Se.error("Error trying to cancel timeout.")}s(n)})})}o(MO,"createEventPromise");async function UO(e){let t=!0,r=0;do await sE(iO*r++),(await rE.findPs(e)).length>0&&(t=!1);while(t&&r<oO);if(t)throw new Error(`process ${e} was not started`)}o(UO,"checkProcessRunning");function PO(e,t){let r=cE(e);if(r)return r;let s=uE(e,t);if(s)return s}o(PO,"checkSchemaTableExist");function cE(e){if(!global.hdb_schema[e])return Ai.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(cE,"checkSchemaExists");function uE(e,t){if(!global.hdb_schema[e][t])return Ai.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(uE,"checkTableExists");function BO(){let e=Ri().utc().add(1,Re.MOMENT_DAYS_TAG).startOf(Re.MOMENT_DAYS_TAG).unix(),t=Ri().utc().unix();return e-t}o(BO,"getStartOfTomorrowInSeconds");function HO(){return Ri().utc().format("DD-MM-YYYY")}o(HO,"getLimitKey");function vO(e){try{let t=new sO(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){Se.error("Got an error back ticking items."),Se.error(t)}}o(vO,"backtickASTSchemaItems");async function GO(e){let t=En.userInfo();(await rE.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Se.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(GO,"stopProcess");function qO(e){return[e]}o(qO,"createForkArgs");function FO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(FO,"autoCastBoolean");function VO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(VO,"getTableHashAttribute");function xO(e){return global?.hdb_schema?.[e]!==void 0}o(xO,"doesSchemaExist");function kO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(kO,"doesTableExist");function $O(e){try{return JSON.stringify(e)}catch{return e}}o($O,"stringifyObj");function YO(e){let t=Ri.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}o(YO,"ms_to_time")});var E_=d((q0,EE)=>{"use strict";var KO={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},WO="certificate.pem",QO="privateKey.pem",jO="ca.pem";EE.exports={CERTIFICATE_VALUES:KO,CERTIFICATE_PEM_NAME:WO,PRIVATEKEY_PEM_NAME:QO,CA_PEM_NAME:jO}});var tt=d((F0,dE)=>{"use strict";var He=require("validate.js");He.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||He.validators.type.checks[t](e)?null:` must be a '${t}' value`};He.validators.type.checks={Object:function(e){return He.isObject(e)&&!He.isArray(e)},Array:He.isArray,Integer:He.isInteger,Number:He.isNumber,String:He.isString,Date:He.isDate,Boolean:function(e){return typeof e=="boolean"}};He.validators.hasValidFileExt=function(e,t){return!He.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};dE.exports={validateObject:JO,validateObjectAsync:ZO,validateBySchema:XO};function JO(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=He(e,t,{format:"flat"});return r?new Error(r):null}o(JO,"validateObject");async function ZO(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await He.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(ZO,"validateObjectAsync");function XO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(XO,"validateBySchema")});var S_=d((V0,hE)=>{"use strict";var zO=require("fs-extra"),H=require("joi"),eI=require("os"),{boolean:Ae,string:$t,number:Ct,array:d_}=H.types(),dt=require("path"),tI=O(),mi=I(),Yt=E_(),rI=tt(),kt="keys",sI=Yt.CERTIFICATE_PEM_NAME,nI=Yt.PRIVATEKEY_PEM_NAME,iI=Yt.CA_PEM_NAME,oI=Yt.CERTIFICATE_PEM_NAME,aI=Yt.PRIVATEKEY_PEM_NAME,_I=Yt.CA_PEM_NAME,cI=Yt.CERTIFICATE_PEM_NAME,uI=Yt.PRIVATEKEY_PEM_NAME,lI=Yt.CA_PEM_NAME,EI="log",dI="custom_functions",SI="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hI="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",fI="rootPath config parameter is undefined",TI="clustering.enabled config parameter is undefined",dr=Ct.min(0).required(),gi=d_.items({host:$t.required(),port:dr}).empty(null),ve;hE.exports={configValidator:RI,routesValidator:NI,route_constraints:gi};function RI(e){if(ve=e.rootPath,mi.isEmpty(ve))throw fI;let t=Ae.required(),r=H.valid("production","development").required(),s=Ct.min(1).max(1e3).empty(null).default(pI),n=$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(SE),i=H.custom(mI).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(SE),a=$t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(mi.isEmpty(_))throw TI;let c;return _===!0?c=H.object({enabled:t,hubServer:H.object({cluster:H.object({name:H.required().empty(null),network:H.object({port:dr,routes:gi}).required()}).required(),leafNodes:H.object({network:H.object({port:dr}).required()}).required(),network:H.object({port:dr}).required()}).required(),leafServer:H.object({network:H.object({port:dr,routes:gi}).required()}).required(),nodeName:a,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()}),user:H.string().required()}).required():c=H.object({enabled:t,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()})}).required(),H.object({clustering:c,customFunctions:H.object({enabled:t,network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:Ct.min(1).required(),https:Ae.required(),keepAliveTimeout:Ct.min(1).required(),port:dr,timeout:Ct.min(1).required()}),nodeEnv:r,root:n,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:H.object({network:H.object({port:dr})}).required(),localStudio:H.object({enabled:t}).required(),logging:H.object({file:Ae.required(),level:H.valid("notify","fatal","error","warn","info","debug","trace"),rotation:H.object({compress:Ae.required(),dateFormat:$t.required(),maxSize:$t.custom(gI).required(),retain:Ct.min(0).required(),rotate:Ae.required(),rotateInterval:$t.required(),rotateModule:Ae.required(),timezone:$t.required(),workerInterval:Ct.min(1).required()}).required(),root:n,stdStreams:Ae.required(),auditLog:Ae.required()}).required(),operationsApi:H.object({authentication:H.object({operationTokenTimeout:H.required(),refreshTokenTimeout:H.required()}).required(),foreground:Ae.required(),network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:Ct.min(1).required(),https:Ae.required(),keepAliveTimeout:Ct.min(1).required(),port:dr,timeout:Ct.min(1).required()}).required(),nodeEnv:r,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:H.object({threads:s}).required(),storage:H.object({writeAsync:Ae.required(),overlappingSync:Ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(RI,"configValidator");function AI(e){return zO.existsSync(e)?null:`Specified path ${e} does not exist.`}o(AI,"doesPathExist");function mI(e,t){H.assert(e,$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=AI(e);if(r)return t.message(r)}o(mI,"validatePemFile");function gI(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(SI);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(hI)}o(gI,"validateRotationMaxSize");function pI(e,t){let r=t.state.path.join("."),s=eI.cpus().length,n=s-1;return n<=2&&(n=2),tI.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}o(pI,"setDefaultThreads");function SE(e,t){if(!mi.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(mi.isEmpty(ve))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return dt.join(ve,dI);case"logging.root":return dt.join(ve,EI);case"operationsApi.tls.certificate":return dt.join(ve,kt,sI);case"operationsApi.tls.privateKey":return dt.join(ve,kt,nI);case"operationsApi.tls.certificateAuthority":return dt.join(ve,kt,iI);case"customFunctions.tls.certificate":return dt.join(ve,kt,oI);case"customFunctions.tls.privateKey":return dt.join(ve,kt,aI);case"customFunctions.tls.certificateAuthority":return dt.join(ve,kt,_I);case"clustering.tls.certificate":return dt.join(ve,kt,cI);case"clustering.tls.privateKey":return dt.join(ve,kt,uI);case"clustering.tls.certificateAuthority":return dt.join(ve,kt,lI);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(SE,"setDefaultRoot");function NI(e){let t=H.object({routes:gi});return rI.validateBySchema({routes:e},t)}o(NI,"routesValidator")});var st=d((x0,pE)=>{"use strict";var X=T(),rt=I(),Le=O(),{configValidator:OI,routesValidator:fE}=S_(),St=require("fs-extra"),II=require("yaml"),Ts=require("path"),CI=require("is-number"),Oi=require("properties-reader"),bI=require("lodash"),{handleHDBError:LI}=J(),{HTTP_STATUS_CODES:yI,HDB_ERROR_MSGS:pi}=et(),{PACKAGE_ROOT:wI}=T(),DI="Unable to get config value because config is uninitialized",MI="Config successfully initialized",UI="Error backing up config file",PI="Empty parameter sent to getConfigValue",TE=Ts.join(wI,"config","yaml",X.HDB_DEFAULT_CONFIG_FILE),BI="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ni,Ge;pE.exports={createConfigFile:HI,getDefaultConfig:vI,getConfigValue:RE,initConfig:AE,flattenConfig:$r,updateConfigValue:mE,updateConfigObject:GI,getConfiguration:qI,setConfiguration:FI,readConfigFile:T_,getClusteringRoutes:VI,initOldConfig:gE,getConfigFromFile:xI};function HI(e){let t=Rs(TE);Ni=$r(t.toJSON());for(let i in e){let a=X.CONFIG_PARAM_MAP[i.toLowerCase()];if(a!==void 0){let _=a.split("_"),c=h_(a,e[i]);try{t.setIn([..._],c)}catch(u){Le.error(u)}}}f_(t);let r=t.toJSON();Ge=$r(r);let s=t.getIn(["rootPath"]),n=Ts.join(s,X.HDB_CONFIG_FILE);St.createFileSync(n),St.writeFileSync(n,String(t)),Le.trace(`Config file written to ${n}`)}o(HI,"createConfigFile");function vI(e){if(Ni===void 0){let r=Rs(TE);Ni=$r(r.toJSON())}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ni[t.toLowerCase()]}o(vI,"getDefaultConfig");function RE(e){if(rt.isEmpty(e)){Le.error(PI);return}if(Ge===void 0){Le.trace(DI);return}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ge[t.toLowerCase()]}o(RE,"getConfigValue");function AE(e=!1){if(Ge===void 0||e){let t=rt.getPropsFilePath();try{St.accessSync(t,St.constants.F_OK|St.constants.R_OK)}catch(a){throw Le.error(a),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Oi(t).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{gE(s);return}catch(a){if(a.code!==X.NODE_ERROR_CODES.ENOENT)throw a}try{n=Rs(s)}catch(a){if(a.code===X.NODE_ERROR_CODES.ENOENT){Le.trace(`HarperDB config file not found at ${s}.
|
|
6
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Le.error(a),new Error(`Error reading HarperDB config file at ${s}`)}f_(n);let i=n.toJSON();Ge=$r(i),Le.trace(MI)}}o(AE,"initConfig");function f_(e){let t=e.toJSON(),r=OI(t);if(r.error)throw pi.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}o(f_,"validateConfig");function GI(e,t){Ge===void 0&&(Ge={});let r=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Le.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ge[r.toLowerCase()]=t}o(GI,"updateConfigObject");function mE(e,t,r=void 0,s=!1,n=!1){Ge===void 0&&AE();let i=RE(X.CONFIG_PARAM_MAP.hdb_root),a=Ts.join(i,X.HDB_CONFIG_FILE),_=Rs(a);if(r===void 0){let l=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),h=h_(l,t);_.setIn([...E],h)}else for(let l in r){let E=X.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let h=E.split("_"),S=h_(E,r[l]);try{_.setIn([...h],S)}catch(A){Le.error(A)}}}f_(_);let c=_.getIn(["rootPath"]),u=Ts.join(c,X.HDB_CONFIG_FILE);if(s===!0)try{let l=Ts.join(c,"backup",`${X.HDB_CONFIG_FILE}.bak`);St.copySync(a,l),Le.trace(`Config file: ${a} backed up to: ${l}`)}catch(l){Le.error(UI),Le.error(l)}St.writeFileSync(u,String(_)),n&&(Ge=$r(_.toJSON())),Le.trace(`Config parameter: ${e} updated with value: ${t}`)}o(mE,"updateConfigValue");function $r(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=$r(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o($r,"flattenConfig");function h_(e,t){if(e===X.CONFIG_PARAMS.CLUSTERING_NODENAME||e===X.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(CI(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||rt.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 rt.autoCast(t)}o(h_,"castConfigValue");function qI(){let e=rt.getPropsFilePath(),r=Oi(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Rs(r).toJSON()}o(qI,"getConfiguration");async function FI(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return mE(void 0,void 0,n,!0),BI}catch(i){throw typeof i=="string"||i instanceof String?LI(i,i,yI.BAD_REQUEST,void 0,void 0,!0):i}}o(FI,"setConfiguration");function T_(){let e=rt.getPropsFilePath();try{St.accessSync(e,St.constants.F_OK|St.constants.R_OK)}catch(n){throw Le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Oi(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Rs(r).toJSON()}o(T_,"readConfigFile");function Rs(e){return II.parseDocument(St.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Rs,"parseYamlDoc");function VI(){let e=T_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=rt.isEmptyOrZeroLength(t)?[]:t;let r=fE(t);if(r)throw pi.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=rt.isEmptyOrZeroLength(s)?[]:s;let n=fE(s);if(n)throw pi.CONFIG_VALIDATION(n.message);if(!rt.isEmptyOrZeroLength(s)&&!rt.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!rt.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw pi.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(VI,"getClusteringRoutes");function gE(e){let t=Oi(e);Ge={};for(let r in X.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(rt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=X.CONFIG_PARAM_MAP[r].toLowerCase();n===X.CONFIG_PARAMS.LOGGING_ROOT?Ge[n]=Ts.dirname(s):Ge[n]=s}return Ge}o(gE,"initOldConfig");function xI(e){let t=T_();return bI.get(t,e.replaceAll("_","."))}o(xI,"getConfigFromFile")});var Y=d((k0,OE)=>{"use strict";var R_=require("fs-extra"),bt=require("path"),kI=require("os"),$I=require("properties-reader"),dn=O(),As=I(),w=T(),Ii=st(),YI="Error initializing environment manager",Ci="BOOT_PROPS_FILE_PATH",NE=!1,KI={[w.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Kt={};OE.exports={BOOT_PROPS_FILE_PATH:Ci,getHdbBasePath:WI,setHdbBasePath:QI,get:jI,initSync:ZI,setProperty:q,initTestEnvironment:XI};function WI(){return Kt[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(WI,"getHdbBasePath");function QI(e){Kt[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(QI,"setHdbBasePath");function jI(e){let t=Ii.getConfigValue(e);return t===void 0?Kt[e]:t}o(jI,"get");function q(e,t){KI[e]&&(Kt[e]=t),Ii.updateConfigObject(e,t)}o(q,"setProperty");function JI(){let e;try{e=As.getPropsFilePath(),R_.accessSync(e,R_.constants.F_OK|R_.constants.R_OK),NE=!0;let t=$I(e);return Kt[w.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(w.HDB_SETTINGS_NAMES.INSTALL_USER),Kt[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Kt[Ci]=e,!0}catch{return dn.trace(`Environment manager found no properties file at ${e}`),!1}}o(JI,"doesPropFileExist");function ZI(e=!1){try{(NE||JI())&&(Ii.initConfig(e),Kt[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ii.getConfigValue(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){dn.error(YI),dn.error(t),console.error(t),process.exit(1)}}o(ZI,"initSync");function XI(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:_}=e,c=bt.join(__dirname,"../../","unitTests");Kt[Ci]=bt.join(c,"hdb_boot_properties.file"),q(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,bt.join(c,"settings.test")),q(w.HDB_SETTINGS_NAMES.INSTALL_USER,kI.userInfo().username),q(w.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,bt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.HDB_SETTINGS_NAMES.CERT_KEY,bt.join(c,"envDir","utility","keys","certificate.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,bt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,bt.join(c,"envDir","utility","keys","certificate.pem")),q(w.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),q(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY,bt.join(c,"envDir","log")),q(w.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),q(w.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),q(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,bt.join(c,"envDir")),q(w.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,As.isEmpty(n)?!0:n),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,As.isEmpty(n)?!0:n),q(w.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),q(w.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,As.isEmpty(i)?!1:i),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,As.isEmpty(i)?!1:i),q(w.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),q(w.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),q(w.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,bt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),q(w.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,As.isEmpty(_)?!1:_),a&&(q("CORS_ACCESSLIST",a),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(q(w.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(q(w.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(q(w.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ci}. Please check your boot props and settings files`;dn.fatal(r),dn.error(t)}}o(XI,"initTestEnvironment")});var m_=d(($0,IE)=>{"use strict";var Sn=Y();Sn.initSync();var ms=require("fs-extra"),A_=require("path"),gs=T(),zI=require("crypto"),eC=require("uuid").v4;IE.exports=tC;function tC(){if(Sn.getHdbBasePath()!==void 0){let e=A_.join(Sn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME,gs.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=A_.join(Sn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME,gs.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=A_.join(Sn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME,gs.JWT_ENUM.JWT_PASSPHRASE_NAME);try{ms.accessSync(r),ms.accessSync(e),ms.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=eC(),i=zI.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});ms.writeFileSync(r,n),ms.writeFileSync(e,i.privateKey),ms.writeFileSync(t,i.publicKey)}else throw s}}}o(tC,"checkJWTTokenExist")});var ps=d((Y0,LE)=>{"use strict";var bE=I(),CE=T(),Li=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,g_=require("joi"),bi={schema_format:{pattern:Li,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},rC=g_.alternatives(g_.string().min(1).max(bi.schema_length.maximum).pattern(Li).messages({"string.pattern.base":"{:#label} "+bi.schema_format.message}),g_.number()).required();function sC(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>bi.schema_length.maximum?`'${e}' maximum of 250 characters`:Li.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(sC,"checkValidTable");function nC(e,t){return bE.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(nC,"validateSchemaExists");function iC(e,t){let r=t.state.ancestors[0].schema;return bE.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(iC,"validateTableExists");function oC(e,t){return e.toLowerCase()===CE.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${CE.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(oC,"validateSchemaName");LE.exports={common_validators:bi,schema_regex:Li,hdb_schema_table:rC,validateSchemaExists:nC,validateTableExists:iC,validateSchemaName:oC,checkValidTable:sC}});var N_=d((K0,wE)=>{var{hdb_schema_table:yE}=ps(),aC=tt(),p_=require("joi"),_C={undefined:"undefined",null:"null"},cC=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||_C[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),uC=p_.object({schema:yE,table:yE,records:p_.array().items(p_.object().custom(cC)).required()});wE.exports=function(e){return aC.validateBySchema(e,uC)}});var O_=d((W0,DE)=>{"use strict";var yi=class{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")}};o(yi,"BridgeMethods");DE.exports=yi});var Sr=d((J0,BE)=>{"use strict";var ME=et().LMDB_ERRORS_ENUM,Q0=require("lmdb"),lC=Te(),j0=require("buffer").Buffer,EC=require("microtime"),{OVERFLOW_MARKER:UE,MAX_SEARCH_KEY_LENGTH:wi}=lC,PE=["number","string","symbol","boolean","bigint"];function dC(e){if(!e)throw new Error(ME.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(ME.INVALID_ENVIRONMENT)}o(dC,"validateEnv");function SC(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(SC,"stringifyData");function hC(e){return e instanceof Date?e.valueOf():e}o(hC,"convertKeyValueToWrite");function fC(e){if(e==null)return;if(PE.includes(typeof e))return e.length>wi?[e.slice(0,wi)+UE]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];PE.includes(typeof n)&&(n.length>wi?t.push(n.slice(0,wi)+UE):t.push(n))}}return t}o(fC,"getIndexedValues");function TC(){let e=EC.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}o(TC,"getMicroTime");BE.exports={validateEnv:dC,stringifyData:SC,convertKeyValueToWrite:hC,getMicroTime:TC,getIndexedValues:fC}});var vE=d((Z0,HE)=>{"use strict";var Di=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Di,"DBIDefinition");HE.exports=Di});var qE=d((X0,GE)=>{"use strict";var Mi=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Mi,"OpenDBIObject");GE.exports=Mi});var VE=d((z0,FE)=>{"use strict";var Ui=class{constructor(t,r,s,n,i=!1,a=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=a,_!==void 0&&(this.overlappingSync=_)}};o(Ui,"OpenEnvironmentObject");FE.exports=Ui});var $=d((tV,zE)=>{"use strict";var I_=require("lmdb"),nt=require("fs-extra"),ht=require("path"),Bi=Sr(),xE=O(),me=et().LMDB_ERRORS_ENUM,Hi=vE(),C_=qE(),kE=VE(),hr=Te(),eV=T(),hn=Y();hn.initSync();var $E=hn.get("STORAGE_WRITEASYNC")===!0||hn.get("STORAGE_WRITEASYNC")==="true"||hn.get("STORAGE_WRITEASYNC")==="TRUE",YE=hn.get("STORAGE_OVERLAPPINGSYNC"),KE=1024*1024*1024,WE=1e4,QE=1e3,ft=hr.INTERNAL_DBIS_NAME,jE=hr.DBI_DEFINITION_NAME,RC="data.mdb",AC="lock.mdb",fn=".mdb",mC="-lock",Pi=class{constructor(t,r,s=!1){this.dbi=it(t,r),this.key_type=this.dbi[hr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[hr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new I_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(Pi,"TransactionCursor");function b_(e,t){if(e===void 0)throw new Error(me.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(me.ENV_NAME_REQUIRED)}o(b_,"pathEnvNameValidation");async function L_(e,t,r=!0){try{await nt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(me.INVALID_BASE_PATH):s}try{let s=ht.join(e,t+fn);return await nt.access(s,nt.constants.R_OK|nt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await nt.access(ht.join(e,t,RC),nt.constants.R_OK|nt.constants.F_OK),ht.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(me.INVALID_ENVIRONMENT)}else throw new Error(me.INVALID_ENVIRONMENT);throw s}}o(L_,"validateEnvironmentPath");function vi(e,t){if(Bi.validateEnv(e),t===void 0)throw new Error(me.DBI_NAME_REQUIRED)}o(vi,"validateEnvDBIName");async function gC(e,t,r=!1,s=!1){b_(e,t),t=t.toString();try{return await L_(e,t,s),y_(e,t,r)}catch(n){if(n.message===me.INVALID_ENVIRONMENT){let i=ht.join(e,t);await nt.mkdirp(s?i:e);let a=new kE(s?i:i+fn,KE,WE,QE,!1,$E,YE),_=I_.open(a);_.dbis=Object.create(null);let c=new C_(!1);_.openDB(ft,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=w_(e,t,r);return _[hr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(gC,"createEnvironment");async function pC(e,t,r,s=!0){let n=await y_(e,t);if(r===void 0)throw new Error(me.DESTINATION_PATH_REQUIRED);try{await nt.access(ht.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(me.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(pC,"copyEnvironment");async function y_(e,t,r=!1){b_(e,t),t=t.toString();let s=w_(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 L_(e,t),i=ht.join(e,t+fn),a=n!=i,_=new kE(n,KE,WE,QE,a,$E,YE),c=I_.open(_);c.dbis=Object.create(null);let u=ZE(c);for(let l=0;l<u.length;l++)it(c,u[l]);return c[hr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(y_,"openEnvironment");async function NC(e,t,r=!1){b_(e,t),t=t.toString();let s=ht.join(e,t+fn),n=await L_(e,t);if(global.lmdb_map!==void 0){let i=w_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await JE(a),delete global.lmdb_map[i]}}await nt.remove(n),await nt.remove(n===s?n+mC:ht.join(ht.dirname(n),AC))}o(NC,"deleteEnvironment");async function JE(e){Bi.validateEnv(e);let t=e[hr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(JE,"closeEnvironment");function w_(e,t,r=!1){let n=`${ht.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(w_,"getCachedEnvironmentName");function OC(e){Bi.validateEnv(e);let t=Object.create(null),r=it(e,ft);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ft)try{t[s]=Object.assign(new Hi,n)}catch{xE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(OC,"listDBIDefinitions");function ZE(e){Bi.validateEnv(e);let t=[],r=it(e,ft);for(let{key:s}of r.getRange({start:!1}))s!==ft&&t.push(s);return t}o(ZE,"listDBIs");function IC(e,t){let s=it(e,ft).getEntry(t),n=new Hi;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{xE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(IC,"getDBIDefinition");function XE(e,t,r,s=!1){if(vi(e,t),t=t.toString(),t===ft)throw new Error(me.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return it(e,t)}catch(n){if(n.message===me.DBI_DOES_NOT_EXIST){let i=new C_(r,s===!0),a=e.openDB(t,i),_=new Hi(r===!0,s);return a[jE]=_,it(e,ft).putSync(t,_),e.dbis[t]=a,a}throw n}}o(XE,"createDBI");function it(e,t){if(vi(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ft?r=IC(e,t):r=new Hi,r===void 0)throw new Error(me.DBI_DOES_NOT_EXIST);let s;try{let n=new C_(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(me.DBI_DOES_NOT_EXIST):n}return s[jE]=r,e.dbis[t]=s,s}o(it,"openDBI");function CC(e,t){vi(e,t),t=t.toString();let r=it(e,t),s=r.getStats();return r[hr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(CC,"statDBI");async function bC(e,t){try{let r=ht.join(e,t+fn);return(await nt.stat(r)).size}catch{throw new Error(me.INVALID_ENVIRONMENT)}}o(bC,"environmentDataSize");function LC(e,t){if(vi(e,t),t=t.toString(),t===ft)throw new Error(me.CANNOT_DROP_INTERNAL_DBIS_NAME);it(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],it(e,ft).removeSync(t)}o(LC,"dropDBI");function yC(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{it(e,n)}catch(i){if(i.message===me.DBI_DOES_NOT_EXIST)XE(e,n,n!==t,n===t);else throw i}}}o(yC,"initializeDBIs");zE.exports={openDBI:it,openEnvironment:y_,createEnvironment:gC,listDBIs:ZE,listDBIDefinitions:OC,createDBI:XE,dropDBI:LC,statDBI:CC,deleteEnvironment:NC,initializeDBIs:yC,TransactionCursor:Pi,environmentDataSize:bC,copyEnvironment:pC,closeEnvironment:JE}});var td=d((rV,ed)=>{"use strict";var Gi=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Gi,"InsertRecordsResponseObject");ed.exports=Gi});var sd=d((sV,rd)=>{"use strict";var qi=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(qi,"UpdateRecordsResponseObject");rd.exports=qi});var id=d((nV,nd)=>{"use strict";var Fi=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Fi,"UpsertRecordsResponseObject");nd.exports=Fi});var Kr=d((_V,ad)=>{"use strict";var wC=$(),DC=td(),MC=sd(),UC=id(),Rn=Sr(),Tn=et().LMDB_ERRORS_ENUM,PC=Te(),fr=T(),BC=I(),HC=require("uuid"),iV=require("lmdb"),{handleHDBError:vC,hdb_errors:GC}=J(),{OVERFLOW_MARKER:oV,MAX_SEARCH_KEY_LENGTH:aV}=PC,D_=fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yr=fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function qC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new DC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];od(u,!0,n);let l=FC(e,t,r,u),E=u[t];a.push(l),_.push(E)}return U_(a,_,s,i)}o(qC,"insertRecords");function FC(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let _=s[a];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][fr.FUNC_VAL],s[a]=_)}let c=Rn.getIndexedValues(_);if(c)for(let u=0,l=c.length;u<l;u++)e.dbis[a].put(c[u],n)}e.dbis[t].put(n,s,s[Yr])})}o(FC,"insertRecord");function VC(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(VC,"removeSkippedRecords");function od(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Yr]))&&(e[Yr]=s),t===!0?(r===!0||!Number.isInteger(e[D_]))&&(e[D_]=s):delete e[D_]}o(od,"setTimestamps");function M_(e,t,r){r.indexOf(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),wC.initializeDBIs(e,t,r)}o(M_,"initializeTransaction");async function xC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new MC,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],h;try{h=P_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(h),c.push(E)}return U_(_,c,s,i,a)}o(xC,"updateRecords");async function kC(e,t,r,s,n=!0){try{B_(e,t,r,s)}catch(c){throw vC(c,c.message,GC.HTTP_STATUS_CODES.BAD_REQUEST)}M_(e,t,r);let i=new UC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;BC.isEmpty(u[t])?(l=HC.v4(),u[t]=l):l=u[t];let E=P_(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return U_(a,_,s,i)}o(kC,"upsertRecords");async function U_(e,t,r,s,n=[]){let i=await Promise.all(e);for(let a=0,_=i.length;a<_;a++)i[a]===!0?s.written_hashes.push(t[a]):(s.skipped_hashes.push(t[a]),n.push(a));return s.txn_time=Rn.getMicroTime(),VC(r,n),s}o(U_,"finalizeWrite");function P_(e,t,r,s,n,i=!1,a=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(od(r,!l,a),Number.isInteger(r[Yr])&&u[Yr]>r[Yr])return!1;l&&n.original_records.push(u);let E,h=o(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],L=e.dbis[A];if(L===void 0)continue;let de=u[A];if(typeof R=="function"){let k=R([[u]]);Array.isArray(k)&&(R=k[0][fr.FUNC_VAL],r[A]=R)}if(R===de)continue;let p=Rn.getIndexedValues(de);if(p)for(let k=0,Ie=p.length;k<Ie;k++)L.remove(p[k],s);if(p=Rn.getIndexedValues(R),p)for(let k=0,Ie=p.length;k<Ie;k++)L.put(p[k],s)}let S=Object.assign({},u,r);_.put(s,S,S[Yr])},"do_put");return c?E=_.ifVersion(s,c.version,h):E=_.ifNoExists(s,h),E.then(S=>S?!0:P_(e,t,r,s,n,i,a))}o(P_,"updateUpsertRecord");function $C(e,t,r){if(Rn.validateEnv(e),t===void 0)throw new Error(Tn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tn.WRITE_ATTRIBUTES_REQUIRED):new Error(Tn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o($C,"validateBasic");function B_(e,t,r,s){if($C(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Tn.RECORDS_REQUIRED):new Error(Tn.RECORDS_MUST_BE_ARRAY)}o(B_,"validateWrite");ad.exports={insertRecords:qC,updateRecords:xC,upsertRecords:kC}});var Z=d((cV,cd)=>{"use strict";var H_=T(),Ns=Y(),v_=require("path");Ns.initSync();var Vi,xi,ki;function _d(){if(Vi!==void 0)return Vi;if(Ns.getHdbBasePath()!==void 0)return Vi=v_.join(Ns.getHdbBasePath(),H_.SCHEMA_DIR_NAME),Vi}o(_d,"getBaseSchemaPath");function YC(){if(xi!==void 0)return xi;if(Ns.getHdbBasePath()!==void 0)return xi=v_.join(_d(),H_.SYSTEM_SCHEMA_NAME),xi}o(YC,"getSystemSchemaPath");function KC(){if(ki!==void 0)return ki;if(Ns.getHdbBasePath()!==void 0)return ki=v_.join(Ns.getHdbBasePath(),H_.TRANSACTIONS_DIR_NAME),ki}o(KC,"getTransactionAuditStorePath");cd.exports={getBaseSchemaPath:_d,getSystemSchemaPath:YC,getTransactionAuditStorePath:KC}});var Wt=d((uV,WC)=>{WC.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_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var G_=d((lV,ud)=>{var{common_validators:Tr}=ps(),An=tt(),Tt="is required",K={schema:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},table:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},hash_attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length}};function mn(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}o(mn,"makeAttributesStrings");function QC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence=!1,K.attribute.presence=!1,K.hash_attribute.presence=!1,An.validateObject(e,K)}o(QC,"schema_object");function jC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence=!1,K.hash_attribute.presence=!1,An.validateObject(e,K)}o(jC,"table_object");function JC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence=!1,K.hash_attribute.presence={message:Tt},An.validateObject(e,K)}o(JC,"create_table_object");function ZC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence={message:Tt},K.hash_attribute.presence=!1,An.validateObject(e,K)}o(ZC,"attribute_object");function XC(e){return e=mn(e),K.schema.presence={message:Tt},K.table.presence={message:Tt},K.attribute.presence=!1,K.hash_attribute.presence=!1,An.validateObject(e,K)}o(XC,"describe_table");function zC(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`)}}o(zC,"validateTableResidence");ud.exports={schema_object:QC,create_table_object:JC,table_object:jC,attribute_object:ZC,describe_table:XC,validateTableResidence:zC}});var Ed=d((EV,ld)=>{"use strict";var eb=require("uuid"),$i=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||eb.v4(),this.schema_table=`${this.schema}.${this.table}`}};o($i,"CreateAttributeObject");ld.exports=$i});var Ki=d((dV,dd)=>{"use strict";var tb=Ed(),Yi=class extends tb{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Yi,"LMDBCreateAttributeObject");dd.exports=Yi});var hd=d((SV,Sd)=>{"use strict";Sd.exports=sb;var rb="inserted";function sb(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===rb?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(sb,"returnObject")});var Wi=d((hV,Td)=>{"use strict";var nb=T(),q_=$(),ib=Kr(),{getSystemSchemaPath:ob,getBaseSchemaPath:ab}=Z(),_b=require("path"),cb=Wt(),ub=G_(),lb=Ki(),Eb=hd(),{handleHDBError:db,hdb_errors:Sb}=J(),hb=I(),F_=cb.hdb_attribute,fd=[];for(let e=0;e<F_.attributes.length;e++)fd.push(F_.attributes[e].attribute);var fb="inserted";Td.exports=Tb;async function Tb(e){let t=ub.attribute_object(e);if(t)throw db(new Error,t.message,Sb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=hb.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new lb(e.schema,e.table,e.attribute,e.id);try{let n=await q_.openEnvironment(_b.join(ab(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);q_.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await q_.openEnvironment(ob(),nb.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:a,skipped_hashes:_}=await ib.insertRecords(i,F_.hash_attribute,fd,[s]);return Eb(fb,a,{records:[s]},_)}catch(n){throw n}}o(Tb,"lmdbCreateAttribute")});var Qi=d((TV,Ad)=>{"use strict";var Qt=I(),Rd=O(),fV=N_();Ad.exports=Rb;function Rb(e){if(Qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(Qt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Qt.isEmptyOrZeroLength(a[r]))throw Rd.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Qt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Rd.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Qt.isEmpty(a[r])&&a[r]!==""&&s.has(Qt.autoCast(a[r]))&&(a.skip=!0),s.add(Qt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(Rb,"insertUpdateValidate")});var Ji=d((RV,md)=>{"use strict";var Ab=T().OPERATIONS_ENUM,ji=class{constructor(t,r,s,n,i=void 0){this.operation=Ab.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(ji,"InsertObject");md.exports=ji});var Xi=d((mV,gd)=>{"use strict";var AV=Ji(),Zi=T(),x_=I(),V_=O(),mb=require("uuid"),{handleHDBError:gn,hdb_errors:gb}=J(),{HDB_ERROR_MSGS:pn,HTTP_STATUS_CODES:Nn}=gb;gd.exports=pb;function pb(e,t,r){for(let n=0;n<t.length;n++)Nb(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Ob(i,r,e.operation)}}o(pb,"processRows");function Nb(e){if(Buffer.byteLength(String(e))>Zi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gn(new Error,pn.ATTR_NAME_LENGTH_ERR(e),Nn.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmptyOrZeroLength(e)||x_.isEmpty(e.trim()))throw gn(new Error,pn.ATTR_NAME_NULLISH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0)}o(Nb,"validateAttribute");function Ob(e,t,r){if(!e.hasOwnProperty(t)||x_.isEmptyOrZeroLength(e[t])){if(r===Zi.OPERATIONS_ENUM.INSERT||r===Zi.OPERATIONS_ENUM.UPSERT){e[t]=mb.v4();return}throw V_.error("Update transaction aborted due to record with no hash value:",e),gn(new Error,pn.RECORD_MISSING_HASH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Zi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw V_.error(e),gn(new Error,pn.HASH_VAL_LENGTH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw V_.error(e),gn(new Error,pn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Nn.BAD_REQUEST,void 0,void 0,!0)}o(Ob,"validateHash")});var Nd=d((gV,pd)=>{"use strict";var zi=class{constructor(t,r){this.type=t,this.message=r}};o(zi,"IPCEventObject");pd.exports=zi});var Os=d((pV,Od)=>{"use strict";var Ib=O(),k_=I(),Cb=T(),{IPC_ERRORS:On}=et();Od.exports={sendIpcEvent:bb,validateEvent:Lb,SchemaEventMsg:yb,UserEventMsg:wb};function bb(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):Ib.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}o(bb,"sendIpcEvent");function Lb(e){if(typeof e!="object")return On.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||k_.isEmpty(e.type))return On.MISSING_TYPE;if(!e.hasOwnProperty("message")||k_.isEmpty(e.message))return On.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||k_.isEmpty(e.message.originator))return On.MISSING_ORIGIN;if(Cb.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return On.INVALID_EVENT(e.type)}o(Lb,"validateEvent");function yb(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(yb,"SchemaEventMsg");function wb(e){this.originator=e}o(wb,"UserEventMsg")});var In=d((OV,Ld)=>{"use strict";var Id=T(),NV=I(),eo=O(),Cd=Nd(),{sendIpcEvent:bd}=Os();function Db(e){try{eo.trace("signalSchemaChange called with message:",e);let t=new Cd(Id.IPC_EVENT_TYPES.SCHEMA,e);bd(t)}catch(t){eo.error(t)}}o(Db,"signalSchemaChange");function Mb(e){try{eo.trace("signalUserChange called with message:",e);let t=new Cd(Id.IPC_EVENT_TYPES.USER,e);bd(t)}catch(t){eo.error(t)}}o(Mb,"signalUserChange");Ld.exports={signalSchemaChange:Db,signalUserChange:Mb}});var to=d((IV,wd)=>{"use strict";var yd=I(),Ub=T(),Pb=O(),Bb=Wi(),Hb=Ki(),vb=In(),{SchemaEventMsg:Gb}=Os(),qb="already exists in";wd.exports=Fb;async function Fb(e,t,r){try{if(yd.isEmptyOrZeroLength(r))return r;let s=[];yd.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 Vb(e,t.schema,t.name,i)})),n}catch(s){throw s}}o(Fb,"lmdbCheckForNewAttributes");async function Vb(e,t,r,s){let n=new Hb(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await xb(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(qb))Pb.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(Vb,"createNewAttribute");async function xb(e){let t;try{return t=await Bb(e),vb.signalSchemaChange(new Gb(process.pid,Ub.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}o(xb,"createAttribute")});var Is=d((CV,Dd)=>{"use strict";var ro=class{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}};o(ro,"LMDBTransactionObject");Dd.exports=ro});var Ud=d((bV,Md)=>{"use strict";var kb=Is(),$b=T().OPERATIONS_ENUM,so=class extends kb{constructor(t,r,s,n,i=void 0){super($b.INSERT,r,s,n,i),this.records=t}};o(so,"LMDBInsertTransactionObject");Md.exports=so});var Bd=d((LV,Pd)=>{"use strict";var Yb=Is(),Kb=T().OPERATIONS_ENUM,no=class extends Yb{constructor(t,r,s,n,i,a=void 0){super(Kb.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(no,"LMDBUpdateTransactionObject");Pd.exports=no});var vd=d((yV,Hd)=>{"use strict";var Wb=Is(),Qb=T().OPERATIONS_ENUM,io=class extends Wb{constructor(t,r,s,n,i,a=void 0){super(Qb.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(io,"LMDBUpsertTransactionObject");Hd.exports=io});var qd=d((wV,Gd)=>{"use strict";var jb=Is(),Jb=T().OPERATIONS_ENUM,oo=class extends jb{constructor(t,r,s,n,i=void 0){super(Jb.DELETE,s,n,t,i),this.original_records=r}};o(oo,"LMDBDeleteTransactionObject");Gd.exports=oo});var Cn=d((DV,kd)=>{"use strict";var Zb=require("path"),Fd=$(),Xb=Ud(),zb=Bd(),eL=vd(),tL=qd(),Cs=Te(),Vd=I(),{CONFIG_PARAMS:rL}=T(),xd=Y();xd.initSync();var ao=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:sL}=Z();kd.exports=nL;async function nL(e,t){if(xd.get(rL.LOGGING_AUDITLOG)===!1)return;let r=Zb.join(sL(),e.schema.toString()),s=await Fd.openEnvironment(r,e.table,!0),n=iL(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fd.initializeDBIs(s,Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cs.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Vd.isEmpty(n.user_name)||s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Cs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}catch(i){throw i}}}o(nL,"writeTransaction");function iL(e,t){let r=Vd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ao.INSERT)return new Xb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ao.UPDATE)return new zb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ao.UPSERT)return new eL(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ao.DELETE)return new tL(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(iL,"createTransactionObject")});var $_=d((UV,$d)=>{"use strict";var oL=Qi(),MV=Ji(),bs=T(),aL=Xi(),_L=Kr().insertRecords,cL=$(),uL=require("path"),lL=O(),EL=to(),{getBaseSchemaPath:dL}=Z(),SL=Cn();$d.exports=hL;async function hL(e){try{let{schema_table:t,attributes:r}=oL(e);aL(e,r,t.hash_attribute),e.schema!==bs.SYSTEM_SCHEMA_NAME&&(r.includes(bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await EL(e.hdb_auth_header,t,r),n=uL.join(dL(),e.schema.toString()),i=await cL.openEnvironment(n,e.table),a=await _L(i,t.hash_attribute,r,e.records,e[bs.CLUSTERING_FLAG]!==!0);try{await SL(e,a)}catch(_){lL.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(hL,"lmdbCreateRecords")});var Wd=d((PV,Kd)=>{"use strict";var Yd=T(),fL=$_(),TL=Ji(),RL=require("fs-extra"),AL=require("path"),{getBaseSchemaPath:mL}=Z();Kd.exports=gL;async function gL(e){let t=[{name:e.schema,createddate:Date.now()}],r=new TL(Yd.SYSTEM_SCHEMA_NAME,Yd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await fL(r),await RL.mkdirp(AL.join(mL(),e.schema.toString()))}o(gL,"lmdbCreateSchema")});var jd=d((BV,Qd)=>{"use strict";var _o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(_o,"DeleteRecordsResponseObject");Qd.exports=_o});var W_=d((qV,Xd)=>{"use strict";var Jd=$(),Y_=Sr(),K_=et().LMDB_ERRORS_ENUM,pL=Te(),Zd=O(),HV=I(),NL=require("lmdb"),OL=jd(),{OVERFLOW_MARKER:vV,MAX_SEARCH_KEY_LENGTH:GV}=pL;async function IL(e,t,r){if(Y_.validateEnv(e),t===void 0)throw new Error(K_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(K_.IDS_REQUIRED):new Error(K_.IDS_MUST_BE_ARRAY);try{let s=Jd.listDBIs(e);Jd.initializeDBIs(e,t,s);let n=new OL,i,a=[],_=[];for(let E=0,h=r.length;E<h;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,NL.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let L=s[R];if(!S.hasOwnProperty(L)||L===t)continue;let de=e.dbis[L],p=S[L];if(p!=null)try{let k=Y_.getIndexedValues(p);if(k)for(let Ie=0,Ce=k.length;Ie<Ce;Ie++)de.remove(k[Ie],i)}catch{Zd.warn(`cannot delete from attribute: ${L}, ${p}:${i}`)}}});a.push(A),_.push(i),n.original_records.push(S)}catch(S){Zd.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(a);for(let E=0,h=u.length;E<h;E++)u[E]===!0?n.deleted.push(_[E]):(n.skipped.push(_[E]),c.push(E));let l=0;for(let E=0;E<c.length;E++){let h=c[E];n.original_records.splice(h-l,1),l++}return n.txn_time=Y_.getMicroTime(),n}catch(s){throw s}}o(IL,"deleteRecords");Xd.exports={deleteRecords:IL}});var bn=d((FV,eS)=>{"use strict";var Ls=I(),CL=W_(),bL=$(),LL=require("path"),{getBaseSchemaPath:yL}=Z(),wL=Cn(),DL=O();eS.exports=ML;async function ML(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ls.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ls.isEmptyOrZeroLength(e.hash_values)&&!Ls.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ls.isEmpty(c)||e.hash_values.push(c)}}if(Ls.isEmptyOrZeroLength(e.hash_values))return zd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ls.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=LL.join(yL(),e.schema.toString()),i=await bL.openEnvironment(n,e.table),a=await CL.deleteRecords(i,s,e.hash_values);try{t===!0&&await wL(e,a)}catch(_){DL.error(`unable to write transaction due to ${_.message}`)}return zd(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(ML,"lmdbDeleteRecords");function zd(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}}o(zd,"createDeleteResponse")});var j_=d((xV,tS)=>{"use strict";var UL=T(),VV=Sr();function Q_(e,t){let r=Object.create(null);if(t.length===1&&UL.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}o(Q_,"parseRow");function PL(e,t,r,s){let n=Q_(r,e);s.push(n)}o(PL,"searchAll");function BL(e,t,r,s){let n=Q_(r,e);s[t]=n}o(BL,"searchAllToMap");function HL(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(HL,"iterateDBI");function Wr(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(Wr,"pushResults");function vL(e,t,r,s,n,i){t.toString().endsWith(e)&&Wr(t,r,s,n,i)}o(vL,"endsWith");function GL(e,t,r,s,n,i){t.toString().includes(e)&&Wr(t,r,s,n,i)}o(GL,"contains");function qL(e,t,r,s,n,i){t>e&&Wr(t,r,s,n,i)}o(qL,"greaterThanCompare");function FL(e,t,r,s,n,i){t>=e&&Wr(t,r,s,n,i)}o(FL,"greaterThanEqualCompare");function VL(e,t,r,s,n,i){t<e&&Wr(t,r,s,n,i)}o(VL,"lessThanCompare");function xL(e,t,r,s,n,i){t<=e&&Wr(t,r,s,n,i)}o(xL,"lessThanEqualCompare");tS.exports={parseRow:Q_,searchAll:PL,searchAllToMap:BL,iterateDBI:HL,endsWith:vL,contains:GL,greaterThanCompare:qL,greaterThanEqualCompare:FL,lessThanCompare:VL,lessThanEqualCompare:xL,pushResults:Wr}});var ys=d((YV,aS)=>{"use strict";var ot=$(),kL=O(),Qe=Sr(),Rr=Te(),re=et().LMDB_ERRORS_ENUM,kV=I(),$L=T(),Rt=j_(),$V=require("lmdb"),{OVERFLOW_MARKER:rS,MAX_SEARCH_KEY_LENGTH:YL}=Rr,Ln={lazy:!0};function sS(e,t,r,s,n=!1,i=void 0,a=void 0){let _=Object.create(null),c=ot.openDBI(e,r);c[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=J_(e,t,r);for(let{key:l,value:E}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:a,reverse:n}))s(u(l,E),E,_,t,r);return _}o(sS,"iterateFullIndex");function yn(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){let l=[[],[]],E=ot.openDBI(e,r),h=J_(e,t,r);E[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,R=i===!0?!c:!u,L=i===!0?u:c;for(let{key:de,value:p}of E.getRange({start:A,end:S,reverse:i,limit:a,offset:_,inclusiveEnd:R,exclusiveStart:L}))Rt.pushResults(h(de,p),p,l,t,r);return l}o(yn,"iterateRangeBetween");function J_(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(rS)){if(!s)if(t)s=ot.openDBI(e,t);else{let _=ot.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=ot.openDBI(e,_[c]),!s[Rr.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Ln)[r]}return n}}o(J_,"getOverflowCheck");function KL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);co(r),r=wn(e,r);let a=[],_=ot.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Rt.searchAll(r,c,u,a);return a}o(KL,"searchAll");function WL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return co(r),r=wn(e,r),sS(e,t,t,Rt.searchAllToMap.bind(null,r),s,n,i)}o(WL,"searchAllToMap");function QL(e,t,r=!1,s=void 0,n=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);return sS(e,void 0,t,Rt.iterateDBI,r,s,n)}o(QL,"iterateDBI");function jL(e,t){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return ot.statDBI(e,t).entryCount}o(jL,"countAll");function JL(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=ot.openDBI(e,r);s=Qe.convertKeyValueToWrite(s);let c=[[],[]];if(_[Rr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Ln);u!==void 0&&Rt.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:a}))Rt.pushResults(s,u,c,t,r);return c}o(JL,"equals");function ZL(e,t,r){return Ar(e,t,r),ot.openDBI(e,t).getValuesCount(r)}o(ZL,"count");function XL(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=[[],[]],c=ot.openDBI(e,r);c[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Qe.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of c.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(a)?a++:i++);for(let{key:E,value:h}of c.getRange({start:l,end:void 0,reverse:n,limit:i,offset:a}))if(E!==l){if(E.toString().startsWith(s))Rt.pushResults(E,h,_,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of c.getRange({start:s,reverse:n,limit:i,offset:a}))if(l.toString().startsWith(s))Rt.pushResults(l,E,_,t,r);else if(u===!0)break;return _}o(XL,"startsWith");function zL(e,t,r,s,n=!1,i=void 0,a=void 0){return nS(e,t,r,s,n,i,a,!0)}o(zL,"endsWith");function nS(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){Ar(e,r,s);let c=[[],[]],u=ot.openDBI(e,r);u[Rr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=J_(e,t,r);a=Number.isInteger(a)?a:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(rS))for(let A of u.getValues(h)){let R=l(h,A);(_?R.endsWith(s):R.includes(s))&&E(R,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Rr.DBI_DEFINITION_NAME].is_hash_attribute)E(h,h);else for(let A of u.getValues(h))E(h,A)}function E(h,S){if(a>0){a--;return}i!==0&&(Rt.pushResults(h,S,c,t,r),i--)}return o(E,"found_match"),c}o(nS,"contains");function ey(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),yn(e,t,r,s,c,n,i,a,!0,!1)}o(ey,"greaterThan");function ty(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),yn(e,t,r,s,c,n,i,a,!1,!1)}o(ty,"greaterThanEqual");function ry(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),yn(e,t,r,c,s,n,i,a,!1,!0)}o(ry,"lessThan");function sy(e,t,r,s,n=!1,i=void 0,a=void 0){Ar(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),yn(e,t,r,c,s,n,i,a,!1,!1)}o(sy,"lessThanEqual");function ny(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(Qe.validateEnv(e),r===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(re.START_VALUE_REQUIRED);if(n===void 0)throw new Error(re.END_VALUE_REQUIRED);if(s=Qe.convertKeyValueToWrite(s),n=Qe.convertKeyValueToWrite(n),s>n)throw new Error(re.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return yn(e,t,r,s,n,i,a,_)}o(ny,"between");function iy(e,t,r,s){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(co(r),r=wn(e,r),s===void 0)throw new Error(re.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Ln:void 0);return i&&(n=Rt.parseRow(i,r)),n}o(iy,"searchByHash");function oy(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Ln)===void 0&&(s=!1),s}o(oy,"checkHashExists");function ay(e,t,r,s,n=[]){oS(e,t,r,s,n);let i=iS(e,t,r,s,n);return Object.values(i)}o(ay,"batchSearchByHash");function _y(e,t,r,s,n=[]){return oS(e,t,r,s,n),iS(e,t,r,s,n)}o(_y,"batchSearchByHashToMap");function iS(e,t,r,s,n=[]){r=wn(e,r);let i=Object.create(null),a=r.length<3?Ln:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,a);if(u){let l=Rt.parseRow(u,r);i[c]=l}else n.push(c)}catch(u){throw kL.warn(u),u}}return i}o(iS,"batchHashSearch");function oS(e,t,r,s,n){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(co(r),!Array.isArray(s))throw s===void 0?new Error(re.IDS_REQUIRED):new Error(re.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}o(oS,"initializeBatchSearchByHash");function co(e){if(!Array.isArray(e))throw e===void 0?new Error(re.FETCH_ATTRIBUTES_REQUIRED):new Error(re.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(co,"validateFetchAttributes");function Ar(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.SEARCH_VALUE_REQUIRED);if(r?.length>YL)throw new Error(re.SEARCH_VALUE_TOO_LARGE)}o(Ar,"validateComparisonFunctions");function wn(e,t){return t.length===1&&$L.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ot.listDBIs(e)),t}o(wn,"setGetWholeRowAttributes");aS.exports={searchAll:KL,searchAllToMap:WL,count:ZL,countAll:jL,equals:JL,startsWith:XL,endsWith:zL,contains:nS,searchByHash:iy,setGetWholeRowAttributes:wn,batchSearchByHash:ay,batchSearchByHashToMap:_y,checkHashExists:oy,iterateDBI:QL,greaterThan:ey,greaterThanEqual:ty,lessThan:ry,lessThanEqual:sy,between:ny}});var Dn=d((WV,lS)=>{var _S=require("lodash"),cS=tt(),V=require("joi"),cy=I(),{hdb_schema_table:At,checkValidTable:uS}=ps(),{handleHDBError:uy,hdb_errors:ly}=J(),{HTTP_STATUS_CODES:Ey}=ly,KV=V.object({schema:At,table:At,hash_values:V.array().min(1).items(V.alternatives(V.string(),V.number())).required(),get_attributes:V.array().min(1).items(At).required()}),dy=V.object({schema:At,table:At,search_attribute:At,search_value:V.any().required(),get_attributes:V.array().min(1).items(At).required(),desc:V.bool(),limit:V.number().integer().min(1),offset:V.number().integer().min(0)}),Sy=V.object({schema:At,table:At,operator:V.string().valid("and","or").default("and").lowercase(),offset:V.number().integer().min(0),limit:V.number().integer().min(1),get_attributes:V.array().min(1).items(At).required(),conditions:V.array().min(1).items(V.object({search_attribute:At,search_type:V.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:V.when("search_type",{switch:[{is:"equals",then:V.any()},{is:"between",then:V.array().items(V.alternatives([V.string(),V.number()])).length(2)}],otherwise:V.alternatives(V.string(),V.number())}).required()})).required()});lS.exports=function(e,t){let r=null;switch(t){case"value":r=cS.validateBySchema(e,dy);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(uS("schema",e.schema)),i(uS("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=cS.validateBySchema(e,Sy);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=cy.checkGlobalSchemaTable(e.schema,e.table);if(n)return uy(new Error,n,Ey.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=_S.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!_S.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Z_=d((QV,ES)=>{"use strict";var hy=$(),fy=Dn(),Ty=require("path"),{getBaseSchemaPath:Ry}=Z();ES.exports=Ay;function Ay(e){let t=fy(e,"hashes");if(t)throw t;let r=Ty.join(Ry(),e.schema.toString());return hy.openEnvironment(r,e.table)}o(Ay,"initialize")});var X_=d((jV,dS)=>{"use strict";var my=ys(),gy=Z_();dS.exports=py;async function py(e){try{let t=await gy(e),r=global.hdb_schema[e.schema][e.table];return my.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(py,"lmdbGetDataByHash")});var ws=d((JV,SS)=>{"use strict";var uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(uo,"SearchByHashObject");SS.exports=uo});var fS=d((XV,hS)=>{"use strict";var ZV=ws(),Ny=ys(),Oy=Z_();hS.exports=Iy;async function Iy(e){try{let t=await Oy(e),r=global.hdb_schema[e.schema][e.table];return Ny.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(Iy,"lmdbSearchByHash")});var mt=d((zV,TS)=>{"use strict";var lo=class{constructor(t,r,s,n,i,a,_,c=!1,u=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=a,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};o(lo,"SearchObject");TS.exports=lo});var Eo=d((ex,pS)=>{"use strict";var ye=ys(),Cy=$(),by=require("path"),Ly=I(),C=Te(),Qr=T(),{getBaseSchemaPath:yy}=Z(),wy=Wt(),RS=et().LMDB_ERRORS_ENUM,{compareKeys:Ds}=require("ordered-binary"),jt=Qr.SEARCH_WILDCARDS;async function Dy(e,t,r){let s;e.schema===Qr.SYSTEM_SCHEMA_NAME?s=wy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=gS(e,s.hash_attribute,r,t);return AS(e,n,s.hash_attribute,r)}o(Dy,"prepSearch");async function AS(e,t,r,s){let n=by.join(yy(),e.schema.toString()),i=await Cy.openEnvironment(n,e.table),a=mS(i,e,t,r);if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Py(e,r)===!1)return s===!0?Uy(a):a[1];let c=a[0];return s===!0?ye.batchSearchByHashToMap(i,r,e.get_attributes,c):ye.batchSearchByHash(i,r,e.get_attributes,c)}o(AS,"executeSearch");function mS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:_,offset:c}=t;switch(a=typeof a=="boolean"?a:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ye.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.CONTAINS:n=ye.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ye.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ye.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ye.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ye.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ye.searchAll(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ye.searchAllToMap(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.BETWEEN:n=ye.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ye.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ye.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ye.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ye.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(mS,"searchByType");function My(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Ds(i,s[0])>=0&&Ds(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>Ds(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Ds(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>Ds(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Ds(n[r],s)<=0;default:return Object.create(null)}}o(My,"filterByType");function Uy(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}o(Uy,"createMapFromArrays");function Py(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}o(Py,"checkToFetchMore");function gS(e,t,r,s){if(Ly.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),jt.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(jt[0])<0&&n.indexOf(jt[1])<0)return _===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(jt.indexOf(i)>=0&&jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(jt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(jt[0])||n.includes(jt[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(RS.UNKNOWN_SEARCH_TYPE)}else switch(s){case Qr.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Qr.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Qr.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qr.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Qr.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RS.UNKNOWN_SEARCH_TYPE)}}o(gS,"createSearchTypeFromSearchObject");pS.exports={executeSearch:AS,createSearchTypeFromSearchObject:gS,prepSearch:Dy,searchByType:mS,filterByType:My}});var OS=d((rx,NS)=>{"use strict";var tx=mt(),By=Dn(),Hy=I(),vy=T(),Gy=Eo();NS.exports=qy;async function qy(e,t){if(!Hy.isEmpty(t)&&vy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=By(e,"value");if(s)throw s;let n=!0;try{return await Gy.prepSearch(e,t,n)}catch(i){throw i}}o(qy,"lmdbGetDataByValue")});var Ms=d((nx,IS)=>{"use strict";var sx=mt(),Fy=Dn(),Vy=I(),xy=T(),ky=Eo();IS.exports=$y;async function $y(e,t){if(!Vy.isEmpty(t)&&xy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Fy(e,"value");if(s)throw s;let n=!1;try{return await ky.prepSearch(e,t,n)}catch(i){throw i}}o($y,"lmdbSearchByValue")});var bS=d((ox,CS)=>{"use strict";var ix=Te(),So=class{constructor(t,r,s,n,i=void 0,a=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=_}};o(So,"SearchByConditionsObject");var ho=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(ho,"SearchCondition");var fo=class{constructor(t,r){this.attribute=t,this.desc=r}};o(fo,"SortAttribute");CS.exports={SearchByConditionsObject:So,SearchCondition:ho,SortAttribute:fo}});var US=d((_x,MS)=>{"use strict";var ax=bS().SearchByConditionsObject,Yy=mt(),Ky=Dn(),z_=ys(),To=Te(),DS=Eo(),Wy=j_(),LS=require("lodash"),{getBaseSchemaPath:Qy}=Z(),jy=require("path"),Jy=$(),{handleHDBError:yS,hdb_errors:Zy}=J(),{HTTP_STATUS_CODES:Xy}=Zy,zy=1e8,ew={lazy:!0};MS.exports=tw;async function tw(e){try{let t=Ky(e,"conditions");if(t)throw yS(t,t.message,Xy.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=jy.join(Qy(),e.schema.toString()),s=await Jy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=LS.sortBy(e.conditions,a=>{if(a.estimated_count===void 0){let _=a.search_type;_===To.SEARCH_TYPES.EQUALS?a.estimated_count=z_.count(s,a.search_attribute,a.search_value):_===To.SEARCH_TYPES.CONTAINS||_===To.SEARCH_TYPES.ENDS_WITH?a.estimated_count=1/0:a.estimated_count=zy}return a.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[a]=await wS(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(DS.filterByType),u=c.length,l=[],E=z_.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of a){let R=_.get(A,ew);for(let L=0;L<u;L++)if(!c[L](R))continue e;if(h>0){h--;continue}if(S<=0)break;S--,l.push(Wy.parseRow(R,E))}return l}else{let a=[],_=[];for(let c of i){let[u]=await wS(s,e,c,n.hash_attribute);_.push(u)}if(a=LS.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:a.length;a=a.splice(e.offset,c)}return z_.batchSearchByHash(s,n.hash_attribute,e.get_attributes,a)}}catch(t){throw yS(t)}}o(tw,"lmdbSearchByConditions");async function wS(e,t,r,s){let n=new Yy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===To.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,DS.searchByType(e,n,i,s)}o(wS,"executeConditionSearch")});var Ao=d((cx,PS)=>{"use strict";var rw=T().OPERATIONS_ENUM,Ro=class{constructor(t,r,s,n=void 0){this.operation=rw.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ro,"DeleteObject");PS.exports=Ro});var ec=d((ux,BS)=>{"use strict";var mo=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(mo,"DropAttributeObject");BS.exports=mo});var rc=d((Ex,HS)=>{"use strict";var sw=mt(),nw=Ao(),lx=ec(),Lt=T(),iw=I(),tc=$(),ow=Wt(),aw=Ms(),_w=bn(),{getBaseSchemaPath:cw}=Z(),uw=require("path");HS.exports=lw;async function lw(e,t=!0){let r;e.schema===Lt.SYSTEM_SCHEMA_NAME?r=ow[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await dw(e),n=uw.join(cw(),e.schema.toString()),i=await tc.openEnvironment(n,e.table);return t===!0&&await Ew(e,i,r.hash_attribute),tc.dropDBI(i,e.attribute),s}o(lw,"lmdbDropAttribute");async function Ew(e,t,r){let s=tc.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(a,u,c)}await n}o(Ew,"removeAttributeFromAllObjects");async function dw(e){let t=new sw(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await aw(t)).filter(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(iw.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new nw(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return _w(i)}o(dw,"dropAttributeFromSystem")});var FS=d((dx,qS)=>{"use strict";var Sw=rc(),hw=ec(),vS=I(),GS=O(),fw=et().LMDB_ERRORS_ENUM;qS.exports=Tw;async function Tw(e){if(vS.isEmpty(global.hdb_schema[e.schema])||vS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new hw(e.schema,e.table,r);try{await Sw(n,!1)}catch(i){i.message!==fw.DBI_DOES_NOT_EXIST&&GS.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw GS.error(`Error dropping attribute ${r}`),s}}o(Tw,"lmdbDropAllAttributes")});var sc=d((hx,jS)=>{"use strict";var YS=mt(),KS=Ao(),WS=Ms(),QS=bn(),Sx=FS(),qe=T(),VS=I(),xS=$(),{getBaseSchemaPath:Rw,getTransactionAuditStorePath:Aw}=Z(),kS=require("path"),$S=O();jS.exports=mw;async function mw(e){try{if(VS.isEmpty(global.hdb_schema[e.schema])||VS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gw(e),await pw(e);let t=kS.join(Rw(),e.schema.toString());try{await xS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$S.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=kS.join(Aw(),e.schema.toString());await xS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$S.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(mw,"lmdbDropTable");async function gw(e){let t=new YS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await WS(t),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new KS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await QS(n)}o(gw,"deleteAttributesFromSystem");async function pw(e){let t=new YS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await WS(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new KS(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await QS(n)}catch(i){throw i}}o(pw,"dropTableFromSystem")});var ZS=d((Tx,JS)=>{"use strict";var Nw=require("fs-extra"),Ow=mt(),Iw=ws(),Cw=Ao(),bw=sc(),Lw=bn(),yw=X_(),ww=Ms(),Jt=T(),fx=I(),Dw=require("path"),{getBaseSchemaPath:Mw}=Z(),{handleHDBError:Uw,hdb_errors:Pw}=J(),{HDB_ERROR_MSGS:Bw,HTTP_STATUS_CODES:Hw}=Pw;JS.exports=vw;async function vw(e){let t;try{t=await Gw(e.schema);let r=new Ow(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await ww(r);for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await bw(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new Cw(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Lw(n);let i=Dw.join(Mw(),t.toString());await Nw.remove(i)}catch(r){throw r}}o(vw,"lmdbDropSchema");async function Gw(e){let t=new Iw(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await yw(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Uw(new Error,Bw.SCHEMA_NOT_FOUND(e),Hw.NOT_FOUND,void 0,void 0,!0);return s}o(Gw,"validateDropSchema")});var po=d((Rx,XS)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(go,"CreateTableObject");XS.exports=go});var ic=d((mx,zS)=>{"use strict";var qw=require("path"),Fw=require("fs-extra"),No=$(),{getTransactionAuditStorePath:Vw}=Z(),nc=Te(),Ax=po();zS.exports=xw;async function xw(e){let t;try{let r=qw.join(Vw(),e.schema.toString());await Fw.mkdirp(r),t=await No.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{No.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),No.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),No.createDBI(t,nc.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}o(xw,"createTransactionsAuditEnvironment")});var uc=d((gx,rh)=>{"use strict";var oc=T(),eh=$(),kw=Kr(),$w=require("path"),{getSystemSchemaPath:Yw,getBaseSchemaPath:Kw}=Z(),Ww=Wt(),Qw=Wi(),ac=Ki(),jw=O(),Jw=ic(),cc=Ww.hdb_table,th=[];for(let e=0;e<cc.attributes.length;e++)th.push(cc.attributes[e].attribute);rh.exports=Zw;async function Zw(e,t){let r=$w.join(Kw(),t.schema.toString()),s=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ac(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await eh.createEnvironment(r,t.table),e!==void 0){let a=await eh.openEnvironment(Yw(),oc.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await kw.insertRecords(a,cc.hash_attribute,th,[e]),await _c(s),await _c(n),await _c(i)}await Jw(t)}catch(a){throw a}}o(Zw,"lmdbCreateTable");async function _c(e){try{await Qw(e)}catch(t){jw.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(_c,"createAttribute")});var nh=d((px,sh)=>{"use strict";var Xw=Qi(),zw=Xi(),eD=to(),Us=T(),tD=Kr().updateRecords,rD=$(),sD=require("path"),{getBaseSchemaPath:nD}=Z(),iD=Cn(),oD=O();sh.exports=aD;async function aD(e){try{let{schema_table:t,attributes:r}=Xw(e);zw(e,r,t.hash_attribute),e.schema!==Us.SYSTEM_SCHEMA_NAME&&(r.includes(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await eD(e.hdb_auth_header,t,r),n=sD.join(nD(),e.schema.toString()),i=await rD.openEnvironment(n,e.table),a=await tD(i,t.hash_attribute,r,e.records,e[Us.CLUSTERING_FLAG]!==!0);try{await iD(e,a)}catch(_){oD.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(aD,"lmdbUpdateRecords")});var oh=d((Nx,ih)=>{"use strict";var _D=T().OPERATIONS_ENUM,Oo=class{constructor(t,r,s,n=void 0){this.operation=_D.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Oo,"UpsertObject");ih.exports=Oo});var _h=d((Ix,ah)=>{"use strict";var Ox=oh(),cD=Qi(),uD=Xi(),lD=to(),Ps=T(),ED=Kr().upsertRecords,dD=$(),SD=require("path"),{getBaseSchemaPath:hD}=Z(),fD=Cn(),TD=O(),{handleHDBError:RD,hdb_errors:AD}=J();ah.exports=mD;async function mD(e){let t;try{t=cD(e)}catch(c){throw RD(c,c.message,AD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;uD(e,s,r.hash_attribute),e.schema!==Ps.SYSTEM_SCHEMA_NAME&&(s.includes(Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await lD(e.hdb_auth_header,r,s),i=SD.join(hD(),e.schema.toString()),a=await dD.openEnvironment(i,e.table),_=await ED(a,r.hash_attribute,s,e.records,e[Ps.CLUSTERING_FLAG]!==!0);try{await fD(e,_)}catch(c){TD.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}o(mD,"lmdbUpsertRecords")});var Sh=d((Cx,dh)=>{"use strict";var gD=mt(),ch=I(),uh=O(),pD=Ms(),lh=T(),ND=W_().deleteRecords,OD=$(),ID=require("path"),{getBaseSchemaPath:CD}=Z(),{promisify:bD}=require("util"),LD=bD(setTimeout),Eh=1e4,yD=10;dh.exports=wD;async function wD(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(ch.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new gD(e.schema,e.table,lh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await pD(n,lh.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw uh.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return ch.isEmptyOrZeroLength(s)?(uh.trace("No records found to delete"),{message:"No records found to delete"}):await DD(e,s,t)}o(wD,"lmdbDeleteRecordsBefore");async function DD(e,t,r){let s=ID.join(CD(),e.schema.toString()),n=await OD.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=Eh){let c=t.slice(a,a+Eh),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await ND(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await LD(yD)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(DD,"chunkDeletes")});var fh=d((bx,hh)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Io,"DeleteBeforeObject");hh.exports=Io});var Rh=d((Lx,Th)=>{"use strict";var Co=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Co,"DeleteAuditLogsBeforeResults");Th.exports=Co});var gh=d((wx,mh)=>{"use strict";var lc=$(),{getTransactionAuditStorePath:MD}=Z(),yx=fh(),UD=require("path"),Mn=Te(),PD=I(),Ah=Rh(),BD=require("util").promisify,HD=BD(setTimeout),vD=1e4,GD=100;mh.exports=qD;async function qD(e){let t=UD.join(MD(),e.schema),r=await lc.openEnvironment(t,e.table,!0),s=lc.listDBIs(r);lc.initializeDBIs(r,Mn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Ah;do n=await FD(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 HD(GD);while(n.transactions_deleted>0);return i}o(qD,"deleteAuditLogsBefore");async function FD(e,t){let r=new Ah;try{let s=e.dbis[Mn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=a[Mn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];PD.isEmpty(_)||(n=e.dbis[Mn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[Mn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>vD)break}return await n,r}catch(s){throw s}}o(FD,"deleteTransactions")});var Lh=d((Dx,bh)=>{"use strict";var Ec=$(),Bs=Te(),ph=Sr(),dc=T(),Nh=I(),{getTransactionAuditStorePath:VD}=Z(),xD=require("path"),kD=ys(),bo=Is(),$D=O();bh.exports=YD;async function YD(e){let t=xD.join(VD(),e.schema),r=await Ec.openEnvironment(t,e.table,!0),s=Ec.listDBIs(r);Ec.initializeDBIs(r,Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Oh(r,e.search_values);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,WD(r,e.search_values,n);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return KD(r,e.search_values);default:return Oh(r)}}o(YD,"readAuditLog");function Oh(e,t=[0,ph.getMicroTime()]){Nh.isEmpty(t[0])&&(t[0]=0),Nh.isEmpty(t[1])&&(t[1]=ph.getMicroTime());let r=[];try{let s=e.dbis[Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let a=Object.assign(new bo,i);r.push(a)}return r}catch(s){throw s}}o(Oh,"searchTransactionsByTimestamp");function KD(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Bs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,Ch(e,i))}return Object.fromEntries(r)}o(KD,"searchTransactionsByUsername");function WD(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=kD.equals(e,Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Bs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,h=l[0].length;E<h;E++){let S=l[0][E],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=Ch(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);Ih(c,"records",r,l,a),Ih(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(WD,"searchTransactionsByHashValues");function Ih(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let _=e[t][a],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new bo(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new bo(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(Ih,"loopRecords");function Ch(e,t){let r=[];try{let s=e.dbis[Bs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new bo,i);r.push(a)}}catch(i){$D.warn(i)}return r}catch(s){throw s}}o(Ch,"batchSearchTransactions")});var wh=d((Mx,yh)=>{"use strict";var QD=require("path"),{getBaseSchemaPath:jD}=Z(),JD=$();yh.exports={writeTransaction:ZD};async function ZD(e,t,r){let s=QD.join(jD(),e);return(await JD.openEnvironment(s,t)).transaction(r)}o(ZD,"writeTransaction")});var Mh=d((Ux,Dh)=>{"use strict";var XD=require("path"),{getBaseSchemaPath:zD}=Z(),eM=$();Dh.exports={flush:tM};async function tM(e,t){let r=XD.join(zD(),e.toString());return(await eM.openEnvironment(r,t.toString())).flushed}o(tM,"flush")});var Ph=d((Px,Uh)=>{"use strict";var ce=O(),{handleHDBError:rM}=J(),sM=O_(),nM=Wi(),iM=$_(),oM=Wd(),aM=bn(),_M=X_(),cM=fS(),uM=OS(),lM=Ms(),EM=US(),dM=ZS(),SM=uc(),hM=nh(),fM=_h(),TM=Sh(),RM=gh(),AM=sc(),mM=rc(),gM=Lh(),pM=wh(),NM=Mh(),Lo=class extends sM{async searchByConditions(t){try{return EM(t)}catch(r){throw ce.error(r),r}}async getDataByHash(t){try{return await _M(t)}catch(r){throw ce.error(r),r}}async searchByHash(t){try{return await cM(t)}catch(r){throw ce.error(r),r}}async getDataByValue(t,r){try{return await uM(t,r)}catch(s){throw ce.error(s),s}}async searchByValue(t){try{return await lM(t)}catch(r){throw ce.error(r),r}}async createSchema(t){try{return await oM(t)}catch(r){throw ce.error(r),r}}async dropSchema(t){try{return await dM(t)}catch(r){throw ce.error(r),r}}async createTable(t,r){try{return await SM(t,r)}catch(s){throw ce.error(s),s}}async dropTable(t){try{return await AM(t)}catch(r){throw ce.error(r),r}}async createAttribute(t){try{return await nM(t)}catch(r){throw ce.error(r),r}}async createRecords(t){try{return await iM(t)}catch(r){throw ce.error(r),r}}async updateRecords(t){try{return await hM(t)}catch(r){throw ce.error(r),r}}async upsertRecords(t){try{return await fM(t)}catch(r){throw rM(r,null,null,ce.ERR,r)}}async deleteRecords(t){try{return await aM(t)}catch(r){throw ce.error(r),r}}async deleteRecordsBefore(t){try{return await TM(t)}catch(r){throw ce.error(r),r}}async dropAttribute(t){try{return await mM(t)}catch(r){throw ce.error(r),r}}async deleteAuditLogsBefore(t){try{return await RM(t)}catch(r){throw ce.error(r),r}}async readAuditLog(t){try{return await gM(t)}catch(r){throw ce.error(r),r}}writeTransaction(t,r,s){return pM.writeTransaction(t,r,s)}flush(t,r){return NM.flush(t,r)}};o(Lo,"LMDBBridge");Uh.exports=Lo});var Hs=d((Bx,Hh)=>{"use strict";var OM=Ph(),IM=O_(),CM=Y();CM.initSync();var Bh;function bM(){return Bh instanceof IM?Bh:new OM}o(bM,"getBridge");Hh.exports=bM()});var jh=d((vx,Qh)=>{"use strict";var Sc=require("recursive-iterator"),LM=require("alasql"),hc=require("clone"),vh=I(),{handleHDBError:Gh,hdb_errors:yM}=J(),{HDB_ERROR_MSGS:qh,HTTP_STATUS_CODES:Fh}=yM,wM=["DISTINCT_ARRAY"],Vh=Symbol("validateTables"),fc=Symbol("validateTable"),Hx=Symbol("getAllColumns"),xh=Symbol("validateAllColumns"),yo=Symbol("findColumn"),kh=Symbol("validateOrderBy"),Un=Symbol("validateSegment"),Tc=Symbol("validateColumn"),$h=Symbol("setColumnsForTable"),Yh=Symbol("checkColumnsForAsterisk"),Kh=Symbol("validateGroupBy"),Wh=Symbol("hasColumns"),wo=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Vh](),this[Yh](),this[xh]()}[Vh](){if(this[Wh]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fc](t.table)})}}[Wh](){let t=!1,r=new Sc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Gh(new Error,qh.SCHEMA_NOT_FOUND(t.databaseid),Fh.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Gh(new Error,qh.TABLE_NOT_FOUND(t.databaseid,t.tableid),Fh.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=hc(s);n.table=hc(t),this.attributes.push(n)})}[yo](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)}[Yh](){let t=new Sc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[$h](r.tableid)}[$h](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new LM.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[xh](){this[Un](this.statement.columns,!1),this[Un](this.statement.joins,!1),this[Un](this.statement.where,!1),this[Kh](this.statement.group,!1),this[Un](this.statement.order,!0)}[Un](t,r){if(!t)return;let s=new Sc(t),n=[];for(let{node:i,path:a}of s)!vh.isEmpty(i)&&!vh.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[kh](i):n.push(this[Tc](i)));return n}[Kh](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&wM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=hc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[yo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[yo](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((a,_)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(_,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`}[kh](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[Tc](t)}[Tc](t){let r=this[yo](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(wo,"SelectValidator");Qh.exports=wo});var zh=d((Gx,Xh)=>{"use strict";var Jh=require("lodash"),Pn=require("mathjs"),DM=require("jsonata"),Zh=I();Xh.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jh.uniqWith(e,Jh.isEqual):e,searchJSON:MM,mad:Bn.bind(null,Pn.mad),mean:Bn.bind(null,Pn.mean),mode:Bn.bind(null,Pn.mode),prod:Bn.bind(null,Pn.prod),median:Bn.bind(null,Pn.median)};function Bn(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}o(Bn,"aggregateFunction");function MM(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(Zh.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Zh.isEmpty(this.__ala__.res[r])){let s=DM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(MM,"searchJSON")});var tf=d((qx,ef)=>{"use strict";var ie=require("moment"),Rc="YYYY-MM-DDTHH:mm:ss.SSSZZ";ie.suppressDeprecationWarnings=!0;ef.exports={current_date:()=>ie().utc().format("YYYY-MM-DD"),current_time:()=>ie().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ie(e).utc().format("YYYY");case"month":return ie(e).utc().format("MM");case"day":return ie(e).utc().format("DD");case"hour":return ie(e).utc().format("HH");case"minute":return ie(e).utc().format("mm");case"second":return ie(e).utc().format("ss");case"millisecond":return ie(e).utc().format("SSS");default:break}},date:e=>ie(e).utc().format(Rc),date_format:(e,t)=>ie(e).utc().format(t),date_add:(e,t,r)=>ie(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ie(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ie(e).utc(),n=ie(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ie().utc().valueOf(),get_server_time:()=>ie().format(Rc),offset_utc:(e,t)=>ie(e).utc().utcOffset(t).format(Rc)}});var of=d((Fx,nf)=>{"use strict";var UM=require("@turf/area"),PM=require("@turf/length"),BM=require("@turf/circle"),HM=require("@turf/difference"),vM=require("@turf/distance"),GM=require("@turf/boolean-contains"),qM=require("@turf/boolean-equal"),FM=require("@turf/boolean-disjoint"),VM=require("@turf/helpers"),rf=T(),v=I();nf.exports={geoArea:xM,geoLength:kM,geoCircle:$M,geoDifference:YM,geoDistance:sf,geoNear:KM,geoContains:WM,geoEqual:QM,geoCrosses:jM,geoConvert:JM};var Ac="geo1 is required",mc="geo2 is required";function xM(e){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),UM.default(e)}o(xM,"geoArea");function kM(e,t){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),PM.default(e,{units:t||"kilometers"})}o(kM,"geoLength");function $M(e,t,r){if(v.isEmpty(e))throw new Error("point is required");if(v.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=v.autoCast(e)),BM.default(e,t,{units:r||"kilometers"})}o($M,"geoCircle");function YM(e,t){if(v.isEmpty(e))throw new Error("poly1 is required");if(v.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),HM(e,t)}o(YM,"geoDifference");function sf(e,t,r){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),vM.default(e,t,{units:r||"kilometers"})}o(sf,"geoDistance");function KM(e,t,r,s){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");if(v.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return sf(e,t,s)<=r}o(KM,"geoNear");function WM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),GM.default(e,t)}o(WM,"geoContains");function QM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),qM.default(e,t)}o(QM,"geoEqual");function jM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),!FM.default(e,t)}o(jM,"geoCrosses");function JM(e,t,r){if(v.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(v.isEmpty(t))throw new Error("geo_type is required");if(v.isEmpty(rf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rf.GEO_CONVERSION_ENUM).join(",")}`);return VM[t](e,r)}o(JM,"geoConvert")});var _f=d((Vx,af)=>{var jr=zh(),je=tf(),yt=of();af.exports=e=>{e.aggr.mad=e.aggr.MAD=jr.mad,e.aggr.mean=e.aggr.MEAN=jr.mean,e.aggr.mode=e.aggr.MODE=jr.mode,e.aggr.prod=e.aggr.PROD=jr.prod,e.aggr.median=e.aggr.MEDIAN=jr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=je.current_date,e.fn.current_time=e.fn.CURRENT_TIME=je.current_time,e.fn.extract=e.fn.EXTRACT=je.extract,e.fn.date=e.fn.DATE=je.date,e.fn.date_format=e.fn.DATE_FORMAT=je.date_format,e.fn.date_add=e.fn.DATE_ADD=je.date_add,e.fn.date_sub=e.fn.DATE_SUB=je.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=je.date_diff,e.fn.now=e.fn.NOW=je.now,e.fn.offset_utc=e.fn.OFFSET_UTC=je.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=je.get_server_time,e.fn.getdate=e.fn.GETDATE=je.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=je.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=yt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=yt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=yt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=yt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=yt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=yt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=yt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=yt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=yt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=yt.geoNear}});var lf=d((xx,uf)=>{"use strict";var Hn=require("lodash"),ge=require("alasql");ge.options.cache=!1;var ZM=_f(),cf=require("clone"),Do=require("recursive-iterator"),M=O(),P=I(),vs=Hs(),XM=T(),{hdb_errors:zM}=J(),eU="IS NULL",vn="There was a problem performing this search. Please check the logs and try again.";ZM(ge);var Mo=class{constructor(t,r){if(P.isEmpty(t))throw M.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(),P.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!P.isEmptyOrZeroLength(s))return M.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw M.error("Error thrown from checkEmptySQL in SQLSearch class method search."),M.error(s),new Error(vn)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw M.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),M.error(s),new Error(vn)}if(Object.keys(this.data).length===0)return M.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw M.error("Error thrown from processJoins in SQLSearch class method search."),M.error(s),new Error(vn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw M.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),M.error(s),new Error(vn)}try{return t=await this._finalSQL(),t}catch(s){throw M.error("Error thrown from finalSQL in SQLSearch class method search."),M.error(s),new Error(vn)}}_getColumns(){let t=new Do(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(cf(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Hn.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=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(P.isEmpty(this.statement.where)){M.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Do(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!P.isEmpty(r)&&r.right)if(P.isNotEmptyAndHasValue(r.right.value)){let s=P.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ge.yy.LogicValue({value:s}):r.right instanceof ge.yy.StringValue&&!P.isEmpty(s)&&P.autoCasterIsNumberCheck(s.toString())&&(r.right=new ge.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=P.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ge.yy.LogicValue({value:i}):s instanceof ge.yy.StringValue&&P.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ge.yy.NumValue({value:i}))});if(t){M.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Do(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!P.isEmpty(XM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(P.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(P.isEmptyOrZeroLength(r.left.columnid)||P.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(P.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let _=!1;switch(r.op){case"=":!P.isEmpty(r.right.value)||!P.isEmpty(r.left.value)?s.add(P.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[a].ignore=_,_?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from)&&P.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&&Hn.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(P.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);P.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(P.isEmptyOrZeroLength(this.all_table_attributes)&&!P.isEmptyOrZeroLength(this.columns.columns))return t;if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ge.promise(r)}catch(r){throw M.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),M.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(cf(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(P.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(eU)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Hn.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,_)),i.attribute!==_&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(c=!0),!P.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await vs.getDataByHash(_);for(let E of _.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){M.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let h=await vs.getDataByValue(E);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(S)))}))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else if(!P.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,h=l.length;E<h;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await vs.getDataByValue(_,S.operation);if(c)for(let R in A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(R)));else for(let R in A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(R)))}}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),M.error(l)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await vs.getDataByValue(_);if(c)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(E)))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),M.error(l)}}}_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 ge.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,a=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===a});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 ge.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ge.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 ge.yy.FuncValue:new ge.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(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${R}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${R}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(S,n);h=await ge.promise(A,t),t=null}catch(S){throw M.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),M.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,A=h.length;S<A;S++){let R=h[S];a.forEach(L=>{R[L.key]!==null&&R[L.key]!==void 0&&L.keys.add(R[L.key])})}a.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Hn.difference(A,[...S.keys].map(L=>L.toString()));for(let L=0,de=R.length;L<de;L++){let p=R[L];delete this.data[`${S.schema}_${S.table}`].__merged_data[p]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Do(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let _=a.table.as?a.table.as:a.table.tableid;(!t[_]||t[_].indexOf(a.attribute)<0)&&s.push(a)}}s=Hn.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){M.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),M.error(i)}}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,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},c=await vs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let h=a[l],S=c[h];for(let A=0;A<u;A++){let R=n.columns[A],L=S[R]===void 0?null:S[R];this.data[s].__merged_data[h].push(L)}}}}catch(r){throw M.error("Error thrown from getDataByHash function in SQLSearch class method getData."),M.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(a=>{let _=a.aggregatorid?a.expression:a,c=a.aggregatorid?a.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).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();M.trace(`Final SQL: ${n}`),s=await ge.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),M.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw M.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),M.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 M.error(zM.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),M.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((a,_)=>{let c=n[i],u=new RegExp(`${c}.\`${a}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=new RegExp(`\`${a}\``,"g"),u=`[${_}]`;s=s.replace(c,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 a=await vs.getDataByValue(i);for(let _ in a)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=a[_][s.attribute]}catch(a){M.error("There was an error when processing this SQL operation. Check your logs"),M.error(a)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Mo,"SQLSearch");uf.exports=Mo});var mr=d((kx,df)=>{"use strict";var tU=jh();df.exports={searchByConditions:iU,searchByHash:oU,searchByValue:aU,search:_U};var gc=Hs(),Ef=require("util"),rU=Ef.callbackify(gc.searchByHash),sU=Ef.callbackify(gc.searchByValue),nU=lf();async function iU(e){return gc.searchByConditions(e)}o(iU,"searchByConditions");function oU(e,t){try{rU(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(oU,"searchByHash");function aU(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),sU(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(aU,"searchByValue");function _U(e,t){try{let r=new tU(e);r.validate(),new nU(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(_U,"search")});var qn=d(($x,Tf)=>{"use strict";var Gn=require("crypto"),hf="aes-256-cbc",cU=32,uU=16,pc=64,ff=32,lU=pc+ff,Sf=new Map;Tf.exports={encrypt:EU,decrypt:dU,createNatsTableStreamName:SU};function EU(e){let t=Gn.randomBytes(cU),r=Gn.randomBytes(uU),s=Gn.createCipheriv(hf,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),_=n.toString("hex");return i+a+_}o(EU,"encrypt");function dU(e){let t=e.substr(0,pc),r=e.substr(pc,ff),s=e.substr(lU,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Gn.createDecipheriv(hf,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(dU,"decrypt");function SU(e,t){let r=`${e}.${t}`,s=Sf.get(r);return s||(s=Gn.createHash("md5").update(`${e}.${t}`).digest("hex"),Sf.set(r,s)),s}o(SU,"createNatsTableStreamName")});var Ho=d((Yx,Of)=>{"use strict";var Af=mr(),gr=O(),mf=G_(),hU=require("lodash"),fU=require("path"),TU=qn(),Nc=I(),{promisify:gf}=require("util"),Q=T(),{handleHDBError:Uo,hdb_errors:RU}=J(),{HDB_ERROR_MSGS:Po,HTTP_STATUS_CODES:pf}=RU,AU=Y();AU.initSync();var Rf=$(),mU=Z(),Fn=gf(Af.searchByValue),gU=gf(Af.searchByHash),Gs="name",Nf="hash_attribute",Oc="schema",pU="schema_table",NU="attribute";Of.exports={describeAll:OU,describeTable:Bo,describeSchema:CU};async function OU(e){try{let t=Nc.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Gs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Gs]},i=await Fn(n);if(Nc.isEmptyOrZeroLength(i))return{};let a={},_={};for(let h in i)a[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Nf,Q.ID_ATTRIBUTE_STRING,Gs,Oc]},u=await Fn(c),l=[];for(let h of u)try{let S;if(t||s)S=await Bo({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let A=r[h.schema].tables[h.name].attribute_permissions;S=await Bo({schema:h.schema,table:h.name},A)}S&&l.push(S)}catch(S){gr.error(S)}let E={};for(let h in l)t||s?(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],a[l[h].schema]&&delete a[l[h].schema]):_[l[h].schema]&&(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],a[l[h].schema]&&delete a[l[h].schema]);for(let h in a)t||s?E[h]={}:_[h]&&(E[h]={});return E}catch(t){return gr.error("Got an error in describeAll"),gr.error(t),Uo(new Error,Po.DESCRIBE_ALL_ERR)}}o(OU,"describeAll");async function Bo(e,t){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={},a=mf.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Gs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=await Fn(_);if(!c||c.length===0)throw Uo(new Error,Po.TABLE_NOT_FOUND(e.schema,e.table),pf.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Uo(new Error,Po.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:pU,search_value:r+"."+s,get_attributes:[NU]},E=await Fn(l);E=hU.uniqBy(E,h=>h.attribute),n&&n.length>0&&(E=IU(n)),i.attributes=E,i.clustering_stream_name=TU.createNatsTableStreamName(u.schema,u.name);try{let h=fU.join(mU.getBaseSchemaPath(),i.schema.toString()),S=await Rf.openEnvironment(h,i.name),A=Rf.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(h){gr.warn(`unable to stat table dbi due to ${h}`)}}catch(l){gr.error(`There was an error getting attributes for table '${u.name}'`),gr.error(l)}return i}o(Bo,"descTable");function IU(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(IU,"getAttrsByPerms");async function CU(e){let t=mf.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(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Oc,search_value:s,hash_values:[],get_attributes:[Nf,Q.ID_ATTRIBUTE_STRING,Gs,Oc]},i=await Fn(n);if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Gs]},_=await gU(a);if(_&&_.length<1)throw Uo(new Error,Po.SCHEMA_NOT_FOUND(e.schema),pf.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Nc.isEmpty(c)||c.describe){let u=await Bo({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){gr.error(`Error describing schema table '${e.schema}.${_}'`),gr.error(c)}})),a}}o(CU,"describeSchema")});var Fs=d((Qx,yf)=>{var Kx=require("async"),qs=Wt(),Wx=O(),{callbackify:bf,promisify:bU}=require("util");yf.exports={setSchemaDataToGlobal:If,getTableSchema:wU,getSystemSchema:MU,setSchemaDataToGlobalAsync:bU(If)};var Lf=Ho(),LU=bf(Lf.describeAll),yU=bf(Lf.describeTable);function If(e){LU(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=qs),global.hdb_schema=r,e(null,null)})}o(If,"setSchemaDataToGlobal");function Cf(e,t){return e==="system"?qs[t]:global.hdb_schema[e][t]}o(Cf,"returnSchema");function wU(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?DU(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Cf(e,t))}):r(null,Cf(e,t))}o(wU,"getTableSchema");function DU(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=qs:global.hdb_schema={system:qs},r();return}yU(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:qs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(DU,"setTableDataToGlobal");function MU(){return qs}o(MU,"getSystemSchema")});var Zr=d((jx,Mf)=>{"use strict";var Go=N_(),at=I(),UU=require("util"),qo=Hs(),PU=Fs(),Ic=O(),{handleHDBError:pr,hdb_errors:BU}=J(),{HTTP_STATUS_CODES:Jr}=BU,HU=UU.promisify(PU.getTableSchema),vU="updated",wf="inserted",Df="upserted";Mf.exports={insert:qU,update:FU,upsert:VU,validation:GU,flush:xU};async function GU(e){if(at.isEmpty(e))throw new Error("invalid update parameters defined.");if(at.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(at.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await HU(e.schema,e.table),r=Go(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(_=>{if(a&&at.isEmptyOrZeroLength(_[s]))throw Ic.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!at.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ic.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!at.isEmpty(_[s])&&_[s]!==""&&n.has(at.autoCast(_[s]))&&(_.skip=!0),n.add(at.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(GU,"validation");async function qU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Go(e);if(t)throw pr(new Error,t.message,Jr.BAD_REQUEST);let r=at.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Jr.BAD_REQUEST);try{let s=await qo.createRecords(e);return vo(wf,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}o(qU,"insertData");async function FU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Go(e);if(t)throw pr(new Error,t.message,Jr.BAD_REQUEST);let r=at.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Jr.BAD_REQUEST);try{let s=await qo.updateRecords(e);return at.isEmpty(s.existing_rows)?vo(vU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):vo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}o(FU,"updateData");async function VU(e){if(e.operation!=="upsert")throw pr(new Error,"invalid operation, must be upsert",Jr.INTERNAL_SERVER_ERROR);let t=Go(e);if(t)throw pr(new Error,t.message,Jr.BAD_REQUEST);let r=at.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Jr.BAD_REQUEST);try{let s=await qo.upsertRecords(e);return vo(Df,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw pr(s,null,null,Ic.ERR,n)}}o(VU,"upsertData");function vo(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===wf?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===Df?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(vo,"returnObject");function xU(e){return qo.flush(e.schema,e.table)}o(xU,"flush")});var Pf=d((Jx,Uf)=>{"use strict";var Fo=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Fo,"HdbInfoInsertObject");Uf.exports={HdbInfoInsertObject:Fo}});var Cc=d((Zx,Bf)=>{"use strict";var Vo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(Vo,"InsertObject");var xo=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(xo,"NoSQLSeachObject");var ko=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(ko,"DeleteResponseObject");Bf.exports={InsertObject:Vo,NoSQLSeachObject:xo,DeleteResponseObject:ko}});var Gf=d((Xx,vf)=>{"use strict";var Hf=T(),$o=class{constructor(t,r){this[Hf.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Hf.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o($o,"UpgradeObject");vf.exports={UpgradeObject:$o}});var bc=d((zx,xf)=>{"use strict";var Nr=require("prompt"),Yo=require("chalk"),qf=O(),Zt=require("os"),Ff=ds(),Vf=["yes","y"];async function kU(e){let t=`${Zt.EOL}`+Yo.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Zt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Zt.EOL}${Zt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Zt.EOL}`;Nr.override=Ff(["CONFIRM_UPGRADE"]),Nr.start(),Nr.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Yo.magenta(`${Zt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await Nr.get([r])}catch(n){return qf.error("There was an error when prompting user about an upgrade."),qf.error(n),!1}return Vf.includes(s.CONFIRM_UPGRADE)}o(kU,"forceUpdatePrompt");async function $U(e){let t=`${Zt.EOL}`+Yo.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Zt.EOL}`);Nr.override=Ff(["CONFIRM_DOWNGRADE"]),Nr.start(),Nr.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Yo.magenta(`${Zt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await Nr.get([r]);return Vf.includes(s.CONFIRM_DOWNGRADE)}o($U,"forceDowngradePrompt");xf.exports={forceUpdatePrompt:kU,forceDowngradePrompt:$U}});var Lc=d((ek,kf)=>{"use strict";var Ko=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Ko,"UpgradeDirective");kf.exports=Ko});var Yf=d((ik,$f)=>{"use strict";var YU=I(),KU=st(),tk=O(),rk=require("path"),sk=require("fs"),nk=T();$f.exports={getOldPropsValue:WU};function WU(e,t,r=!1){let s=t.getRaw(e);return YU.isNotEmptyAndHasValue(s)?s:r?KU.getDefaultConfig(e):""}o(WU,"getOldPropsValue")});var jf=d((ok,Qf)=>{"use strict";var Or=require("path"),Ir=require("fs-extra"),QU=require("properties-reader"),jU=Lc(),oe=O(),{getOldPropsValue:W}=Yf(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:Xr}=T(),zr=st(),Wo=Y(),Kf=I(),wt=T(),yc=new jU("3.1.0"),Wf=[];function JU(){let e=QU(Wo.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),oe.info(t);let r=` ;Settings for the HarperDB process.
|
|
2
|
+
"use strict";var Eg=Object.defineProperty;var o=(e,t)=>Eg(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var h=d((pV,pl)=>{"use strict";var be=require("path"),dg=require("fs");function Sg(){let e=__dirname;for(;!dg.existsSync(be.join(e,"package.json"));){let t=be.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(Sg,"getHDBPackageRoot");var Et=Sg(),ul="js",on=ul,Tg="harperdb-config.yaml",fg="defaultConfig.yaml",hg="hdb",ll=`hdbServer.${on}`,El=`customFunctionsServer.${on}`,dl=`hdbIpcServer.${on}`,Rg=`restartHdb.${on}`,s_="HarperDB",Si="Custom Functions",Ti="Clustering Hub",fi="Clustering Leaf",n_="Clustering Ingest Service",i_="Clustering Reply Service",Ag="foreground.pid",r_={HDB:s_,IPC:"IPC",CLUSTERING_HUB:Ti,CLUSTERING_LEAF:fi,CLUSTERING_INGEST_SERVICE:n_,CLUSTERING_REPLY_SERVICE:i_,CUSTOM_FUNCTIONS:Si,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},mg={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},gg={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},pg={harperdb:s_,ipc:"IPC","clustering hub":Ti,"clustering leaf":fi,"clustering ingest service":n_,"clustering reply service":i_,"custom functions":Si,custom_functions:Si,"pm2-logrotate":r_.PM2_LOGROTATE,logrotate:r_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Ng={CLUSTERING_HUB_PROC_DESCRIPTOR:Ti,CLUSTERING_LEAF_PROC_DESCRIPTOR:fi,CLUSTERING_INGEST_PROC_DESCRIPTOR:n_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:i_},di={HDB:be.join(Et,"server/harperdb"),IPC:be.join(Et,"server/ipc"),CUSTOM_FUNCTIONS:be.join(Et,"server/customFunctions"),CLUSTERING_HUB:be.join(Et,"server/nats"),CLUSTERING_LEAF:be.join(Et,"server/nats")},Og={HDB:be.join(di.HDB,ll),IPC:be.join(di.IPC,dl),CUSTOM_FUNCTIONS:be.join(di.CUSTOM_FUNCTIONS,El)},Ig={HDB:be.join(Et,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:be.join(Et,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:be.join(Et,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:be.join(Et,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:be.resolve(Et,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Cg={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Sl="support@harperdb.io",bg="customer-success@harperdb.io",Tl=1,Lg=4141,fl="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",yg="https://www.harperdb.io/product",wg=`For support, please submit a request at ${fl} or contact ${Sl}`,hl=`For license support, please contact ${bg}`,Dg="None of the specified records were found.",Mg="hash attribute not found",Ug=`Your current license only supports ${Tl} role. ${hl}`,Pg="Your current license only supports 3 connections to a node.",Bg="127.0.0.1",Hg=1,vg=/^\.$/,Gg=/^\.\.$/,qg="U+002E",Fg=/\//g,Vg="U+002F",xg=/U\+002F/g,kg=/^U\+002E$/,$g=/^U\+002EU\+002E$/,Yg="d",Kg=999999,Wg="*",Qg="--max-old-space-size=",jg="system",Jg="__hdb_hash",Zg=".harperdb",Xg=".hdb",zg="keys",ep="hdb_boot_properties.file",tp=".updateConfig.json",rp="SIGTSTP",sp=24,np=6e4,ip=448,op="blob",ap="trash",_p="schema",cp="transactions",up=".count",lp="id",Ep="install_log.log",dp="run_log.log",Sp="PROCESS_NAME",Tp={SETTINGS_PATH_KEY:"settings_path"},Rl=require("lodash"),fp={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},hp={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},Rp={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ap={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"},mp={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"},Ye="hdb_internal:",gp={CREATE_SCHEMA:Ye+"create_schema",CREATE_TABLE:Ye+"create_table",CREATE_ATTRIBUTE:Ye+"create_attribute",ADD_USER:Ye+"add_user",ALTER_USER:Ye+"alter_user",DROP_USER:Ye+"drop_user",HDB_NODES:Ye+"hdb_nodes",HDB_USERS:Ye+"hdb_users",HDB_WORKERS:Ye+"hdb_workers",CATCHUP:Ye+"catchup",SCHEMA_CATCHUP:Ye+"schema_catchup",WORKER_ROOM:Ye+"cluster_workers"},pp={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"},Np="060493.ks",Op=".license",Ip={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",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_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",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",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",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",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",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"},Cp={CSV:".csv",JSON:".json"},bp={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Lp={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ar={};ar[m.CREATE_SCHEMA]=m.CREATE_SCHEMA;ar[m.CREATE_TABLE]=m.CREATE_TABLE;ar[m.CREATE_ATTRIBUTE]=m.CREATE_ATTRIBUTE;ar[m.INSERT]=m.INSERT;ar[m.UPDATE]=m.UPDATE;ar[m.UPSERT]=m.UPSERT;ar[m.DELETE]=m.DELETE;var x=Object.create(null);x[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;x[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;x[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;x[m.READ_LOG]=m.READ_LOG;x[m.ADD_NODE]=m.ADD_NODE;x[m.LIST_USERS]=m.LIST_USERS;x[m.LIST_ROLES]=m.LIST_ROLES;x[m.USER_INFO]=m.USER_INFO;x[m.SQL]=m.SQL;x[m.GET_JOB]=m.GET_JOB;x[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;x[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;x[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;x[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;x[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;x[m.REMOVE_NODE]=m.REMOVE_NODE;x[m.RESTART]=m.RESTART;x[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;x[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;x[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;x[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;x[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;x[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;x[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;x[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;x[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var yp={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},wp={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Al={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",IPC_SERVER_PORT:"IPC_SERVER_PORT",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"},Dp=Rl.invert(Al),f={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_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",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",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",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",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},Mp={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:f.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},Up={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.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"},Pp={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"},Bp={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Hp={FILE_SYSTEM:"fs",LMDB:"lmdb"},vp={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Gp={DEVELOPMENT:8192,DEFAULT:512},qp={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"},Fp={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"},Vp={ENOENT:"ENOENT",EACCES:"EACCES"},ml={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},xp="__clustering__",kp=Object.values(ml),$p=15984864e5,gl={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Yp=Rl.invert(gl),Kp={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"},Wp=111,Qp=`\r
|
|
3
|
+
`,jp={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jp=["*","%"],Zp="unauthorized_access",Xp="func_val",zp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eN={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tN="hdb_ipc_server",rN="hdb_ipc_client_",sN={RESTART:"restart",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request"},nN={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iN={STOPPED:"stopped",ONLINE:"online"},oN="3.x.x";pl.exports={LOCAL_HARPERDB_OPERATIONS:x,HDB_SUPPORT_ADDRESS:Sl,HDB_SUPPORT_URL:fl,HDB_PRICING_URL:yg,SUPPORT_HELP_MSG:wg,LICENSE_HELP_MSG:hl,HDB_PROC_NAME:ll,HDB_PROC_DESCRIPTOR:s_,CLUSTERING_LEAF_PROC_DESCRIPTOR:fi,CLUSTERING_HUB_PROC_DESCRIPTOR:Ti,SYSTEM_SCHEMA_NAME:jg,HASH_FOLDER_NAME:Jg,HDB_HOME_DIR_NAME:Zg,UPDATE_FILE_NAME:tp,LICENSE_KEY_DIR_NAME:zg,BOOT_PROPS_FILE_NAME:ep,JOB_TYPE_ENUM:Up,JOB_STATUS_ENUM:Ip,SYSTEM_TABLE_NAMES:Ap,SYSTEM_TABLE_HASH_ATTRIBUTES:mp,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:Cp,S3_BUCKET_AUTH_KEYS:bp,VALID_SQL_OPS_ENUM:Lp,GEO_CONVERSION_ENUM:wp,HDB_SETTINGS_NAMES:Al,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Dp,SERVICE_ACTIONS_ENUM:yp,CLUSTER_MESSAGE_TYPE_ENUM:Pp,CLUSTER_CONNECTION_DIRECTION_ENUM:Bp,CLUSTER_EVENTS_DEFS_ENUM:qp,PERIOD_REGEX:vg,DOUBLE_PERIOD_REGEX:Gg,UNICODE_PERIOD:qg,FORWARD_SLASH_REGEX:Fg,UNICODE_FORWARD_SLASH:Vg,ESCAPED_FORWARD_SLASH_REGEX:xg,ESCAPED_PERIOD_REGEX:kg,ESCAPED_DOUBLE_PERIOD_REGEX:$g,REG_KEY_FILE_NAME:Np,RESTART_TIMEOUT_MS:np,HDB_FILE_PERMISSIONS:ip,SCHEMA_DIR_NAME:_p,TRANSACTIONS_DIR_NAME:cp,LIMIT_COUNT_NAME:up,ID_ATTRIBUTE_STRING:lp,INSERT_MODULE_ENUM:hp,UPGRADE_JSON_FIELD_NAMES_ENUM:Rp,RESTART_CODE:rp,RESTART_CODE_NUM:sp,CLUSTER_OPERATIONS:ar,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:pp,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ye,INTERNAL_SC_CHANNELS:gp,CLUSTERING_MESSAGE_TYPES:Kp,HDB_FILE_SUFFIX:Xg,BLOB_FOLDER_NAME:op,HDB_TRASH_DIR:ap,ORIGINATOR_SET_VALUE:Wp,LICENSE_VALUES:vp,RAM_ALLOCATION_ENUM:Gp,STORAGE_TYPES_ENUM:Hp,TIME_STAMP_NAMES_ENUM:ml,TIME_STAMP_NAMES:kp,PERMS_UPDATE_RELEASE_TIMESTAMP:$p,SEARCH_NOT_FOUND_MESSAGE:Dg,SEARCH_ATTRIBUTE_NOT_FOUND:Mg,LICENSE_ROLE_DENIED_RESPONSE:Ug,LICENSE_MAX_CONNS_REACHED:Pg,BASIC_LICENSE_MAX_NON_CU_ROLES:Tl,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Lg,VALUE_SEARCH_COMPARATORS:gl,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Yp,LICENSE_FILE_NAME:Op,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Fp,NEW_LINE:Qp,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Hg,MOMENT_DAYS_TAG:Yg,API_TURNOVER_SEC:Kg,LOOPBACK:Bg,CODE_EXTENSION:on,WILDCARD_SEARCH_VALUE:Wg,NODE_ERROR_CODES:Vp,JAVASCRIPT_EXTENSION:ul,PERMS_CRUD_ENUM:jp,UNAUTHORIZED_PERMISSION_NAME:Zp,SEARCH_WILDCARDS:Jp,FUNC_VAL:Xp,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:zp,JWT_ENUM:eN,CLUSTERING_FLAG:xp,RUN_LOG:dp,INSTALL_LOG:Ep,IPC_SERVER_MODULE:dl,HDB_IPC_SERVER:tN,IPC_EVENT_TYPES:sN,HDB_IPC_CLIENT_PREFIX:rN,CUSTOM_FUNCTION_PROC_NAME:El,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Si,SERVICES:nN,MEM_SETTING_KEY:Qg,HDB_RESTART_SCRIPT:Rg,PROCESS_DESCRIPTORS:r_,SERVICE_SERVERS:Og,SERVICE_SERVERS_CWD:di,PROCESS_DESCRIPTORS_VALIDATE:pg,LAUNCH_SERVICE_SCRIPTS:Ig,LOG_LEVELS:gg,PROCESS_NAME_ENV_PROP:Sp,PROCESS_LOG_NAMES:mg,PM2_PROCESS_STATUSES:iN,CONFIG_PARAM_MAP:Mp,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Tg,HDB_DEFAULT_CONFIG_FILE:fg,ROLE_TYPES_ENUM:Cg,BOOT_PROP_PARAMS:Tp,INSTALL_PROMPTS:fp,HDB_ROOT_DIR_NAME:hg,CLUSTERING_PROCESSES:Ng,FOREGROUND_PID_FILE:Ag,PACKAGE_ROOT:Et,PRE_4_0_0_VERSION:oN}});var vr=d((NV,Il)=>{"use strict";var Nl=require("minimist");Il.exports=aN;function aN(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Ol(process.env),s=Ol(Nl(process.argv))):(r=process.env,s=Nl(process.argv));let n={};for(let i=0,a=e.length;i<a;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}o(aN,"assignCMDENVVariables");function Ol(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(Ol,"objKeysToLowerCase")});var O=d((OV,Ml)=>{"use strict";var Gr=require("fs-extra"),qr=require("path"),bl=require("yaml"),Ll=require("properties-reader"),_e=h(),_N=vr(),cN=require("os"),{PACKAGE_ROOT:__}=h(),Be={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},hi=qr.join(__,"logs"),_r=process.env.pm_id===void 0,uN=qr.join(__,"config/yaml/",_e.HDB_DEFAULT_CONFIG_FILE),c_=process.env.PROCESS_NAME===void 0?_e.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Es,It,xt,Pe,o_,ds;ds===void 0&&yl();Ml.exports={createLogFile:lN,notify:SN,fatal:TN,error:a_,warn:fN,info:EN,debug:dN,trace:Dl,setLogLevel:RN,log_level:Pe};function yl(){try{if(ds===void 0){let e=hN();ds=Ll(e),{level:Pe,config_log_path:o_,to_file:It,to_stream:xt}=AN(ds.get("settings_path"))}}catch(e){if(ds=void 0,e.code===_e.NODE_ERROR_CODES.ENOENT){let t=_N(Object.keys(_e.CONFIG_PARAM_MAP),!0);for(let i in t){let a=_e.CONFIG_PARAM_MAP[i];a&&a.toLowerCase();let _=t[i];if(a===_e.CONFIG_PARAMS.LOGGING_LEVEL){Pe=_;continue}if(a===_e.CONFIG_PARAMS.LOGGING_STDSTREAMS){xt=_;continue}a===_e.CONFIG_PARAMS.LOGGING_FILE&&(It=a)}let{default_level:r,default_to_file:s,default_to_stream:n}=mN();It=It===void 0?s:It,It=Cl(It),xt=xt===void 0?n:xt,xt=Cl(xt),Pe=Pe===void 0?r:Pe,o_=hi;return}throw a_("Error initializing log settings"),a_(e),e}}o(yl,"initLogSettings");function lN(e,t){if(!_r){Dl("createLogFile should only be used if the process is not being managed by pm2");return}ds===void 0&&yl(),c_=t;let r;e===_e.PROCESS_LOG_NAMES.INSTALL?r=hi:r=o_,It&&(Es=qr.join(r,e),Gr.ensureFileSync(Es))}o(lN,"createLogFile");function Fr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let a=0;a<n;a++){let _=t[a];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,a<i&&(s+=" ")}return`{"process_name": "${c_}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
4
|
+
`}o(Fr,"createLogRecord");function wl(e){Es===void 0&&(c_=_e.PROCESS_DESCRIPTORS.INSTALL,Gr.ensureDirSync(hi),Es=qr.join(hi,_e.PROCESS_LOG_NAMES.INSTALL),Gr.ensureFileSync(Es)),Gr.appendFileSync(Es,e)}o(wl,"writeToLogFile");function Ri(e){It&&wl(e),xt&&process.stdout.write(e)}o(Ri,"nonPm2LogStdOut");function u_(e){It&&wl(e),xt&&process.stderr.write(e)}o(u_,"nonPm2LogStdErr");function EN(...e){if(Be[Pe]<=Be.info){let t=Fr("info",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(EN,"info");function Dl(...e){if(Be[Pe]<=Be.trace){let t=Fr("trace",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(Dl,"trace");function a_(...e){if(Be[Pe]<=Be.error){let t=Fr("error",e);if(_r){u_(t);return}process.stderr.write(t)}}o(a_,"error");function dN(...e){if(Be[Pe]<=Be.debug){let t=Fr("debug",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(dN,"debug");function SN(...e){if(Be[Pe]<=Be.notify){let t=Fr("notify",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(SN,"notify");function TN(...e){if(Be[Pe]<=Be.fatal){let t=Fr("fatal",e);if(_r){u_(t);return}process.stderr.write(t)}}o(TN,"fatal");function fN(...e){if(Be[Pe]<=Be.warn){let t=Fr("warn",e);if(_r){u_(t);return}process.stderr.write(t)}}o(fN,"warn");function hN(){let e;try{e=cN.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qr.join(e,_e.HDB_HOME_DIR_NAME,_e.BOOT_PROPS_FILE_NAME);return Gr.existsSync(t)||(t=qr.join(__,"utility/hdb_boot_properties.file")),t}o(hN,"getPropsFilePath");function RN(e){Pe=e}o(RN,"setLogLevel");function Cl(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Cl,"autoCastBoolean");function AN(e){try{if(e.includes("config/settings.js")){let a=Ll(e);return{level:a.get(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qr.dirname(a.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=bl.parseDocument(Gr.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===_e.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(AN,"getLogConfig");function mN(){try{let e=bl.parseDocument(Gr.readFileSync(uN,"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)}}o(mN,"getDefaultConfig")});var an=d((IV,gN)=>{gN.exports={name:"harperdb",version:"4.0.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:{node:">=14.0.0","preferred-node":"18.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.0","@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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.2.3"}}}});var Vr=d((LV,Ul)=>{"use strict";var CV=require("fs-extra"),bV=O();Ul.exports={version:pN,printVersion:ON,nodeVersion:NN};var cr=an();function pN(){if(cr)return cr.version}o(pN,"version");function NN(){if(cr&&cr.engines&&cr.engines["preferred-node"])return cr.engines["preferred-node"]}o(NN,"nodeVersion");function ON(){cr&&console.log(`HarperDB Version ${cr.version}`)}o(ON,"printVersion")});var vl=d((yV,Hl)=>{"use strict";var Pl=require("semver/functions/major"),IN=require("semver/functions/satisfies"),Bl=an(),_n=process.versions&&process.versions.node?process.versions.node:void 0;Hl.exports=CN;function CN(){let e=Bl.engines.node,t=Bl.engines["preferred-node"];if(_n){if(e&&!IN(_n,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${_n}. Please install a version of Node.js that is withing the defined range.`};if(t&&Pl(_n)!==Pl(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${_n}. Some issues may occur with untested versions of Node.js.`}}}o(CN,"checkNodeVersion")});var l_=d((wV,Gl)=>{"use strict";var bN=require("util"),LN=require("path"),yN=require("child_process"),wN=bN.promisify(yN.execFile),DN=1e3*1e3*10;Gl.exports={findPs:MN};async function MN(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await wN("ps",["wwxo",`pid,${r}`],{maxBuffer:DN});for(let n of s.trim().split(`
|
|
5
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}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:LN.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"])}))}o(MN,"findPs")});var he=d((DV,Fl)=>{"use strict";var UN="__dbis__",PN="__environment_name__",BN="__dbi_defintion__",HN={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"},vN=["__createdtime__","__updatedtime__"],GN="\uFFFF",ql={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},qN=Object.values(ql);Fl.exports={INTERNAL_DBIS_NAME:UN,DBI_DEFINITION_NAME:BN,SEARCH_TYPES:HN,TIMESTAMP_NAMES:vN,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PN,TRANSACTIONS_DBI_NAMES_ENUM:ql,TRANSACTIONS_DBIS:qN,OVERFLOW_MARKER:GN}});var et=d((MV,jl)=>{"use strict";var Vl=h(),xl=he(),kl={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},$l=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Yl={500:$l("There was an error processing your request."),400:"Invalid request"},FN=Yl[kl.INTERNAL_SERVER_ERROR],VN={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.`},xN={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},kN={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"},$N={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_ARRAY:"ids must be an array",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 ${xl.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${xl.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"},YN={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Vl.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 ${Vl.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"},Kl={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"},KN={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema 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' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},WN={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 schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.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`},QN={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=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},jN={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JN={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`},Wl={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.`},Ql={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},ZN={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 customFunctions enabled to true in hdb/harperdb-config.yaml file."},XN={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},zN={...Kl,...kN,...VN,...KN,...WN,...QN,...jN,...JN,...YN,...Wl,...Ql,...ZN,...XN,...xN};jl.exports={CHECK_LOGS_WRAPPER:$l,HDB_ERROR_MSGS:zN,DEFAULT_ERROR_MSGS:Yl,DEFAULT_ERROR_RESP:FN,HTTP_STATUS_CODES:kl,LMDB_ERRORS_ENUM:$N,AUTHENTICATION_ERROR_MSGS:Kl,VALIDATION_ERROR_MSGS:Wl,IPC_ERRORS:Ql}});var J=d((UV,Xl)=>{"use strict";var Ss=et(),eO=O(),tO=h(),cn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Jl),this.http_resp_code=s||Ss.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ss.DEFAULT_ERROR_MSGS[s]?Ss.DEFAULT_ERROR_MSGS[s]:Ss.DEFAULT_ERROR_MSGS[Ss.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&eO[n](i)}};o(cn,"HdbError");function Jl(e,t,r,s=tO.LOG_LEVELS.ERROR,n=null,i=!1){if(Zl(e))return e;let a=new cn(e,t,r,s,n);return i&&delete a.stack,a}o(Jl,"handleHDBError");function Zl(e){return e.__proto__.constructor.name===cn.name}o(Zl,"isHDBError");Xl.exports={isHDBError:Zl,handleHDBError:Jl,hdb_errors:Ss}});var I=d((BV,dE)=>{"use strict";var xr=require("path"),rO=require("fs-extra"),Se=O(),zl=require("fs-extra"),sO=require("truncate-utf8-bytes"),un=require("os"),nO=require("net"),iO=require("recursive-iterator"),Re=h(),nE=l_(),eE=require("papaparse"),Ai=require("moment"),{inspect:oO}=require("util"),tE=require("is-number"),PV=require("lodash"),{hdb_errors:mi}=J(),iE=require("util").promisify(setTimeout),aO=100,_O=5,cO="",uO=4,rE=255,sE={true:!0,false:!1,undefined:null,null:null,NaN:NaN};dE.exports={isEmpty:Ke,isEmptyOrZeroLength:Ct,arrayHasEmptyValues:dO,arrayHasEmptyOrZeroLengthValues:SO,buildFolderPath:TO,isBoolean:oE,errorizeMessage:lO,stripFileExtension:hO,autoCast:RO,autoCastJSONDeep:E_,removeDir:mO,compareVersions:gO,isCompatibleDataVersion:pO,escapeRawValue:_E,unescapeValue:NO,stringifyProps:OO,valueConverter:IO,timeoutPromise:bO,isClusterOperation:yO,getClusterUser:MO,sendTransactionToSocketCluster:wO,checkGlobalSchemaTable:DO,getHomeDir:cE,getPropsFilePath:CO,promisifyPapaParse:UO,removeBOM:uE,createEventPromise:PO,checkProcessRunning:BO,checkSchemaTableExist:HO,checkSchemaExists:lE,checkTableExists:EE,getStartOfTomorrowInSeconds:vO,getLimitKey:GO,isObject:fO,isNotEmptyAndHasValue:EO,autoCasterIsNumberCheck:aE,backtickASTSchemaItems:qO,isPortTaken:LO,stopProcess:FO,createForkArgs:VO,autoCastBoolean:xO,async_set_timeout:iE,getTableHashAttribute:kO,doesSchemaExist:$O,doesTableExist:YO,stringifyObj:KO,ms_to_time:WO,changeExtension:QO,PACKAGE_ROOT:Re.PACKAGE_ROOT};function lO(e){return e instanceof Error?e:new Error(e)}o(lO,"errorizeMessage");function Ke(e){return e==null}o(Ke,"isEmpty");function EO(e){return!Ke(e)&&(e||e===0||e===""||oE(e))}o(EO,"isNotEmptyAndHasValue");function Ct(e){return Ke(e)||e.length===0||e.size===0}o(Ct,"isEmptyOrZeroLength");function dO(e){if(Ke(e))return!0;for(let t=0;t<e.length;t++)if(Ke(e[t]))return!0;return!1}o(dO,"arrayHasEmptyValues");function SO(e){if(Ct(e))return!0;for(let t=0;t<e.length;t++)if(Ct(e[t]))return!0;return!1}o(SO,"arrayHasEmptyOrZeroLengthValues");function TO(...e){try{return e.join(xr.sep)}catch{console.error(e)}}o(TO,"buildFolderPath");function oE(e){return Ke(e)?!1:e===!0||e===!1}o(oE,"isBoolean");function fO(e){return Ke(e)?!1:typeof e=="object"}o(fO,"isObject");function hO(e){return Ct(e)?cO:e.slice(0,-uO)}o(hO,"stripFileExtension");function RO(e){return Ke(e)||e===""||typeof e!="string"?e:sE[e]!==void 0?sE[e]:aE(e)===!0?Number(e):e}o(RO,"autoCast");function AO(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(AO,"autoCastJSON");function E_(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=E_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=E_(r);s!==r&&(e[t]=s)}return e}else return AO(e)}o(E_,"autoCastJSONDeep");function aE(e){if(e.startsWith("0.")&&tE(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tE(e))}o(aE,"autoCasterIsNumberCheck");async function mO(e){if(Ct(e))throw new Error(`Directory path: ${e} does not exist`);try{await zl.emptyDir(e),await zl.remove(e)}catch(t){throw Se.error(`Error removing files in ${e} -- ${t}`),t}}o(mO,"removeDir");function gO(e,t){if(Ct(e)){Se.info("Invalid current version sent as parameter.");return}if(Ct(t)){Se.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(a.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(a[u],10)-parseInt(_[u],10),r)return r;return a.length-_.length}o(gO,"compareVersions");function pO(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(pO,"isCompatibleDataVersion");function _E(e){if(Ke(e))return e;let t=String(e);return t==="."?Re.UNICODE_PERIOD:t===".."?Re.UNICODE_PERIOD+Re.UNICODE_PERIOD:t.replace(Re.FORWARD_SLASH_REGEX,Re.UNICODE_FORWARD_SLASH)}o(_E,"escapeRawValue");function NO(e){if(Ke(e))return e;let t=String(e);return t===Re.UNICODE_PERIOD?".":t===Re.UNICODE_PERIOD+Re.UNICODE_PERIOD?"..":String(e).replace(Re.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(NO,"unescapeValue");function OO(e,t){if(Ke(e))return Se.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+un.EOL}!Ct(s)&&s[0]===";"?r+=" "+s+n+un.EOL:Ct(s)||(r+=s+"="+n+un.EOL)}catch{Se.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(OO,"stringifyProps");function IO(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Se.error(n),t=e}let r=String(_E(t)),s=Buffer.byteLength(r)>rE?sO(r,rE)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}o(IO,"valueConverter");function cE(){let e;try{e=un.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(cE,"getHomeDir");function CO(){let e=xr.join(cE(),Re.HDB_HOME_DIR_NAME,Re.BOOT_PROPS_FILE_NAME);return rO.existsSync(e)||(e=xr.join(__dirname,"../","hdb_boot_properties.file")),e}o(CO,"getPropsFilePath");function bO(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(bO,"timeoutPromise");async function LO(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=nO.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(LO,"isPortTaken");function yO(e){try{return Re.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Se.error(`Error checking operation against cluster ops ${t}`)}return!1}o(yO,"isClusterOperation");function wO(e,t,r){if(global.hdb_socket_client!==void 0){Se.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Re.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}o(wO,"sendTransactionToSocketCluster");function DO(e,t){if(!global.hdb_schema[e])return mi.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return mi.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(DO,"checkGlobalSchemaTable");function MO(e,t){if(Ke(t)){Se.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ke(e)||Ct(e)){Se.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){Se.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Se.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(MO,"getClusterUser");function UO(){eE.parsePromise=function(e,t){return new Promise(function(r,s){eE.parse(e,{header:!0,transformHeader:uE,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(UO,"promisifyPapaParse");function uE(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(uE,"removeBOM");function PO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Se.info(`Got cluster status event response: ${oO(n)}`);try{i.cancel()}catch{Se.error("Error trying to cancel timeout.")}s(n)})})}o(PO,"createEventPromise");async function BO(e){let t=!0,r=0;do await iE(aO*r++),(await nE.findPs(e)).length>0&&(t=!1);while(t&&r<_O);if(t)throw new Error(`process ${e} was not started`)}o(BO,"checkProcessRunning");function HO(e,t){let r=lE(e);if(r)return r;let s=EE(e,t);if(s)return s}o(HO,"checkSchemaTableExist");function lE(e){if(!global.hdb_schema[e])return mi.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(lE,"checkSchemaExists");function EE(e,t){if(!global.hdb_schema[e][t])return mi.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(EE,"checkTableExists");function vO(){let e=Ai().utc().add(1,Re.MOMENT_DAYS_TAG).startOf(Re.MOMENT_DAYS_TAG).unix(),t=Ai().utc().unix();return e-t}o(vO,"getStartOfTomorrowInSeconds");function GO(){return Ai().utc().format("DD-MM-YYYY")}o(GO,"getLimitKey");function qO(e){try{let t=new iO(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){Se.error("Got an error back ticking items."),Se.error(t)}}o(qO,"backtickASTSchemaItems");async function FO(e){let t=un.userInfo();(await nE.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Se.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(FO,"stopProcess");function VO(e){return[e]}o(VO,"createForkArgs");function xO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(xO,"autoCastBoolean");function kO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(kO,"getTableHashAttribute");function $O(e){return global?.hdb_schema?.[e]!==void 0}o($O,"doesSchemaExist");function YO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(YO,"doesTableExist");function KO(e){try{return JSON.stringify(e)}catch{return e}}o(KO,"stringifyObj");function WO(e){let t=Ai.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}o(WO,"ms_to_time");function QO(e,t){let r=xr.basename(e,xr.extname(e));return xr.join(xr.dirname(e),r+t)}o(QO,"changeExtension")});var tt=d((HV,SE)=>{"use strict";var He=require("validate.js");He.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||He.validators.type.checks[t](e)?null:` must be a '${t}' value`};He.validators.type.checks={Object:function(e){return He.isObject(e)&&!He.isArray(e)},Array:He.isArray,Integer:He.isInteger,Number:He.isNumber,String:He.isString,Date:He.isDate,Boolean:function(e){return typeof e=="boolean"}};He.validators.hasValidFileExt=function(e,t){return!He.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};SE.exports={validateObject:jO,validateObjectAsync:JO,validateBySchema:ZO};function jO(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=He(e,t,{format:"flat"});return r?new Error(r):null}o(jO,"validateObject");async function JO(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await He.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(JO,"validateObjectAsync");function ZO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(ZO,"validateBySchema")});var S_=d((vV,fE)=>{"use strict";var XO=require("fs-extra"),H=require("joi"),zO=require("os"),{boolean:Ae,string:kt,number:bt,array:d_}=H.types(),TE=require("path"),eI=O(),gi=I(),tI=tt(),rI="log",sI="custom_functions",nI="Invalid logging.rotation.maxSize unit. Available units are G, M or K",iI="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",oI="rootPath config parameter is undefined",aI="clustering.enabled config parameter is undefined",ur=bt.min(0).required(),pi=d_.items({host:kt.required(),port:ur}).empty(null),ln;fE.exports={configValidator:_I,routesValidator:SI,route_constraints:pi};function _I(e){if(ln=e.rootPath,gi.isEmpty(ln))throw oI;let t=Ae.required(),r=H.valid("production","development").required(),s=bt.min(1).max(1e3).empty(null).default(EI),n=kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(dI),i=H.custom(uI).messages({"any.custom":"{:#label} {:#error}"}),a=kt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(gi.isEmpty(_))throw aI;let c;return _===!0?c=H.object({enabled:t,hubServer:H.object({cluster:H.object({name:H.required().empty(null),network:H.object({port:ur,routes:pi}).required()}).required(),leafNodes:H.object({network:H.object({port:ur}).required()}).required(),network:H.object({port:ur}).required()}).required(),leafServer:H.object({network:H.object({port:ur,routes:pi}).required()}).required(),nodeName:a,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()}),user:H.string().required()}).required():c=H.object({enabled:t,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()})}).required(),H.object({clustering:c,customFunctions:H.object({enabled:t,network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:bt.min(1).required(),https:Ae.required(),keepAliveTimeout:bt.min(1).required(),port:ur,timeout:bt.min(1).required()}),nodeEnv:r,root:n,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:H.object({network:H.object({port:ur})}).required(),localStudio:H.object({enabled:t}).required(),logging:H.object({file:Ae.required(),level:H.valid("notify","fatal","error","warn","info","debug","trace"),rotation:H.object({compress:Ae.required(),dateFormat:kt.required(),maxSize:kt.custom(lI).required(),retain:bt.min(0).required(),rotate:Ae.required(),rotateInterval:kt.required(),rotateModule:Ae.required(),timezone:kt.required(),workerInterval:bt.min(1).required()}).required(),root:n,stdStreams:Ae.required(),auditLog:Ae.required()}).required(),operationsApi:H.object({authentication:H.object({operationTokenTimeout:H.required(),refreshTokenTimeout:H.required()}).required(),foreground:Ae.required(),network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:bt.min(1).required(),https:Ae.required(),keepAliveTimeout:bt.min(1).required(),port:ur,timeout:bt.min(1).required()}).required(),nodeEnv:r,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:H.object({threads:s}).required(),storage:H.object({writeAsync:Ae.required(),overlappingSync:Ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(_I,"configValidator");function cI(e){return XO.existsSync(e)?null:`Specified path ${e} does not exist.`}o(cI,"doesPathExist");function uI(e,t){if(e===null)return;H.assert(e,kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=cI(e);return r?t.message(r):e}o(uI,"validatePemFile");function lI(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nI);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(iI)}o(lI,"validateRotationMaxSize");function EI(e,t){let r=t.state.path.join("."),s=zO.cpus().length,n=s-1;return n<=2&&(n=2),eI.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}o(EI,"setDefaultThreads");function dI(e,t){if(!gi.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(gi.isEmpty(ln))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return TE.join(ln,sI);case"logging.root":return TE.join(ln,rI);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(dI,"setDefaultRoot");function SI(e){let t=H.object({routes:pi});return tI.validateBySchema({routes:e},t)}o(SI,"routesValidator")});var We=d((GV,NE)=>{"use strict";var X=h(),rt=I(),Le=O(),{configValidator:TI,routesValidator:hE}=S_(),dt=require("fs-extra"),fI=require("yaml"),Ts=require("path"),hI=require("is-number"),Ii=require("properties-reader"),RI=require("lodash"),{handleHDBError:AI}=J(),{HTTP_STATUS_CODES:mI,HDB_ERROR_MSGS:Ni}=et(),{PACKAGE_ROOT:gI}=h(),pI="Unable to get config value because config is uninitialized",NI="Config successfully initialized",OI="Error backing up config file",II="Empty parameter sent to getConfigValue",RE=Ts.join(gI,"config","yaml",X.HDB_DEFAULT_CONFIG_FILE),CI="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Oi,ve;NE.exports={createConfigFile:bI,getDefaultConfig:LI,getConfigValue:AE,initConfig:mE,flattenConfig:kr,updateConfigValue:gE,updateConfigObject:yI,getConfiguration:wI,setConfiguration:DI,readConfigFile:h_,getClusteringRoutes:MI,initOldConfig:pE,getConfigFromFile:UI};function bI(e){let t=fs(RE);Oi=kr(t.toJSON());for(let i in e){let a=X.CONFIG_PARAM_MAP[i.toLowerCase()];if(a!==void 0){let _=a.split("_"),c=T_(a,e[i]);try{t.setIn([..._],c)}catch(u){Le.error(u)}}}f_(t);let r=t.toJSON();ve=kr(r);let s=t.getIn(["rootPath"]),n=Ts.join(s,X.HDB_CONFIG_FILE);dt.createFileSync(n),dt.writeFileSync(n,String(t)),Le.trace(`Config file written to ${n}`)}o(bI,"createConfigFile");function LI(e){if(Oi===void 0){let r=fs(RE);Oi=kr(r.toJSON())}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Oi[t.toLowerCase()]}o(LI,"getDefaultConfig");function AE(e){if(rt.isEmpty(e)){Le.error(II);return}if(ve===void 0){Le.trace(pI);return}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ve[t.toLowerCase()]}o(AE,"getConfigValue");function mE(e=!1){if(ve===void 0||e){let t=rt.getPropsFilePath();try{dt.accessSync(t,dt.constants.F_OK|dt.constants.R_OK)}catch(a){throw Le.error(a),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ii(t).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{pE(s);return}catch(a){if(a.code!==X.NODE_ERROR_CODES.ENOENT)throw a}try{n=fs(s)}catch(a){if(a.code===X.NODE_ERROR_CODES.ENOENT){Le.trace(`HarperDB config file not found at ${s}.
|
|
6
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Le.error(a),new Error(`Error reading HarperDB config file at ${s}`)}f_(n);let i=n.toJSON();ve=kr(i),Le.trace(NI)}}o(mE,"initConfig");function f_(e){let t=e.toJSON(),r=TI(t);if(r.error)throw Ni.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}o(f_,"validateConfig");function yI(e,t){ve===void 0&&(ve={});let r=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Le.trace(`Unable to update config object because config param '${e}' does not exist`);return}ve[r.toLowerCase()]=t}o(yI,"updateConfigObject");function gE(e,t,r=void 0,s=!1,n=!1){ve===void 0&&mE();let i=AE(X.CONFIG_PARAM_MAP.hdb_root),a=Ts.join(i,X.HDB_CONFIG_FILE),_=fs(a);if(r===void 0){let l=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),T=T_(l,t);_.setIn([...E],T)}else for(let l in r){let E=X.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let T=E.split("_"),S=T_(E,r[l]);try{_.setIn([...T],S)}catch(A){Le.error(A)}}}f_(_);let c=_.getIn(["rootPath"]),u=Ts.join(c,X.HDB_CONFIG_FILE);if(s===!0)try{let l=Ts.join(c,"backup",`${X.HDB_CONFIG_FILE}.bak`);dt.copySync(a,l),Le.trace(`Config file: ${a} backed up to: ${l}`)}catch(l){Le.error(OI),Le.error(l)}dt.writeFileSync(u,String(_)),n&&(ve=kr(_.toJSON())),Le.trace(`Config parameter: ${e} updated with value: ${t}`)}o(gE,"updateConfigValue");function kr(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=kr(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(kr,"flattenConfig");function T_(e,t){if(e===X.CONFIG_PARAMS.CLUSTERING_NODENAME||e===X.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(hI(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||rt.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 rt.autoCast(t)}o(T_,"castConfigValue");function wI(){let e=rt.getPropsFilePath(),r=Ii(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fs(r).toJSON()}o(wI,"getConfiguration");async function DI(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return gE(void 0,void 0,n,!0),CI}catch(i){throw typeof i=="string"||i instanceof String?AI(i,i,mI.BAD_REQUEST,void 0,void 0,!0):i}}o(DI,"setConfiguration");function h_(){let e=rt.getPropsFilePath();try{dt.accessSync(e,dt.constants.F_OK|dt.constants.R_OK)}catch(n){throw Le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ii(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fs(r).toJSON()}o(h_,"readConfigFile");function fs(e){return fI.parseDocument(dt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(fs,"parseYamlDoc");function MI(){let e=h_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=rt.isEmptyOrZeroLength(t)?[]:t;let r=hE(t);if(r)throw Ni.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=rt.isEmptyOrZeroLength(s)?[]:s;let n=hE(s);if(n)throw Ni.CONFIG_VALIDATION(n.message);if(!rt.isEmptyOrZeroLength(s)&&!rt.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!rt.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ni.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(MI,"getClusteringRoutes");function pE(e){let t=Ii(e);ve={};for(let r in X.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(rt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=X.CONFIG_PARAM_MAP[r].toLowerCase();n===X.CONFIG_PARAMS.LOGGING_ROOT?ve[n]=Ts.dirname(s):ve[n]=s}return ve}o(pE,"initOldConfig");function UI(e){let t=h_();return RI.get(t,e.replaceAll("_","."))}o(UI,"getConfigFromFile")});var Y=d((qV,IE)=>{"use strict";var R_=require("fs-extra"),Lt=require("path"),PI=require("os"),BI=require("properties-reader"),En=O(),hs=I(),w=h(),Ci=We(),HI="Error initializing environment manager",bi="BOOT_PROPS_FILE_PATH",OE=!1,vI={[w.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},$t={};IE.exports={BOOT_PROPS_FILE_PATH:bi,getHdbBasePath:GI,setHdbBasePath:qI,get:FI,initSync:xI,setProperty:q,initTestEnvironment:kI};function GI(){return $t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(GI,"getHdbBasePath");function qI(e){$t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(qI,"setHdbBasePath");function FI(e){let t=Ci.getConfigValue(e);return t===void 0?$t[e]:t}o(FI,"get");function q(e,t){vI[e]&&($t[e]=t),Ci.updateConfigObject(e,t)}o(q,"setProperty");function VI(){let e;try{e=hs.getPropsFilePath(),R_.accessSync(e,R_.constants.F_OK|R_.constants.R_OK),OE=!0;let t=BI(e);return $t[w.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(w.HDB_SETTINGS_NAMES.INSTALL_USER),$t[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),$t[bi]=e,!0}catch{return En.trace(`Environment manager found no properties file at ${e}`),!1}}o(VI,"doesPropFileExist");function xI(e=!1){try{(OE||VI())&&(Ci.initConfig(e),$t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ci.getConfigValue(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){En.error(HI),En.error(t),console.error(t),process.exit(1)}}o(xI,"initSync");function kI(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:_}=e,c=Lt.join(__dirname,"../../","unitTests");$t[bi]=Lt.join(c,"hdb_boot_properties.file"),q(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Lt.join(c,"settings.test")),q(w.HDB_SETTINGS_NAMES.INSTALL_USER,PI.userInfo().username),q(w.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Lt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.HDB_SETTINGS_NAMES.CERT_KEY,Lt.join(c,"envDir","utility","keys","certificate.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Lt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Lt.join(c,"envDir","utility","keys","certificate.pem")),q(w.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),q(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Lt.join(c,"envDir","log")),q(w.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),q(w.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),q(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Lt.join(c,"envDir")),q(w.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,hs.isEmpty(n)?!0:n),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,hs.isEmpty(n)?!0:n),q(w.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),q(w.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,hs.isEmpty(i)?!1:i),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,hs.isEmpty(i)?!1:i),q(w.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),q(w.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),q(w.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Lt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),q(w.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,hs.isEmpty(_)?!1:_),a&&(q("CORS_ACCESSLIST",a),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(q(w.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(q(w.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(q(w.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bi}. Please check your boot props and settings files`;En.fatal(r),En.error(t)}}o(kI,"initTestEnvironment")});var m_=d((FV,CE)=>{"use strict";var dn=Y();dn.initSync();var Rs=require("fs-extra"),A_=require("path"),As=h(),$I=require("crypto"),YI=require("uuid").v4;CE.exports=KI;function KI(){if(dn.getHdbBasePath()!==void 0){let e=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Rs.accessSync(r),Rs.accessSync(e),Rs.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=YI(),i=$I.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Rs.writeFileSync(r,n),Rs.writeFileSync(e,i.privateKey),Rs.writeFileSync(t,i.publicKey)}else throw s}}}o(KI,"checkJWTTokenExist")});var ms=d((VV,yE)=>{"use strict";var LE=I(),bE=h(),yi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,g_=require("joi"),Li={schema_format:{pattern:yi,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},WI=g_.alternatives(g_.string().min(1).max(Li.schema_length.maximum).pattern(yi).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),g_.number()).required();function QI(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Li.schema_length.maximum?`'${e}' maximum of 250 characters`:yi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(QI,"checkValidTable");function jI(e,t){return LE.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(jI,"validateSchemaExists");function JI(e,t){let r=t.state.ancestors[0].schema;return LE.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(JI,"validateTableExists");function ZI(e,t){return e.toLowerCase()===bE.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${bE.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(ZI,"validateSchemaName");yE.exports={common_validators:Li,schema_regex:yi,hdb_schema_table:WI,validateSchemaExists:jI,validateTableExists:JI,validateSchemaName:ZI,checkValidTable:QI}});var N_=d((xV,DE)=>{var{hdb_schema_table:wE}=ms(),XI=tt(),p_=require("joi"),zI={undefined:"undefined",null:"null"},eC=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||zI[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),tC=p_.object({schema:wE,table:wE,records:p_.array().items(p_.object().custom(eC)).required()});DE.exports=function(e){return XI.validateBySchema(e,tC)}});var O_=d((kV,ME)=>{"use strict";var wi=class{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")}};o(wi,"BridgeMethods");ME.exports=wi});var lr=d((KV,HE)=>{"use strict";var UE=et().LMDB_ERRORS_ENUM,$V=require("lmdb"),rC=he(),YV=require("buffer").Buffer,sC=require("microtime"),{OVERFLOW_MARKER:PE,MAX_SEARCH_KEY_LENGTH:Di}=rC,BE=["number","string","symbol","boolean","bigint"];function nC(e){if(!e)throw new Error(UE.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(UE.INVALID_ENVIRONMENT)}o(nC,"validateEnv");function iC(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(iC,"stringifyData");function oC(e){return e instanceof Date?e.valueOf():e}o(oC,"convertKeyValueToWrite");function aC(e){if(e==null)return;if(BE.includes(typeof e))return e.length>Di?[e.slice(0,Di)+PE]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];BE.includes(typeof n)&&(n.length>Di?t.push(n.slice(0,Di)+PE):t.push(n))}}return t}o(aC,"getIndexedValues");function _C(){let e=sC.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}o(_C,"getMicroTime");HE.exports={validateEnv:nC,stringifyData:iC,convertKeyValueToWrite:oC,getMicroTime:_C,getIndexedValues:aC}});var GE=d((WV,vE)=>{"use strict";var Mi=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Mi,"DBIDefinition");vE.exports=Mi});var FE=d((QV,qE)=>{"use strict";var Ui=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Ui,"OpenDBIObject");qE.exports=Ui});var xE=d((jV,VE)=>{"use strict";var Pi=class{constructor(t,r,s,n,i=!1,a=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=a,_!==void 0&&(this.overlappingSync=_)}};o(Pi,"OpenEnvironmentObject");VE.exports=Pi});var $=d((ZV,ed)=>{"use strict";var I_=require("lmdb"),st=require("fs-extra"),St=require("path"),Hi=lr(),kE=O(),me=et().LMDB_ERRORS_ENUM,vi=GE(),C_=FE(),$E=xE(),Er=he(),JV=h(),Sn=Y();Sn.initSync();var YE=Sn.get("STORAGE_WRITEASYNC")===!0||Sn.get("STORAGE_WRITEASYNC")==="true"||Sn.get("STORAGE_WRITEASYNC")==="TRUE",KE=Sn.get("STORAGE_OVERLAPPINGSYNC"),WE=1024*1024*1024,QE=1e4,jE=1e3,Tt=Er.INTERNAL_DBIS_NAME,JE=Er.DBI_DEFINITION_NAME,cC="data.mdb",uC="lock.mdb",Tn=".mdb",lC="-lock",Bi=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[Er.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Er.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new I_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(Bi,"TransactionCursor");function b_(e,t){if(e===void 0)throw new Error(me.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(me.ENV_NAME_REQUIRED)}o(b_,"pathEnvNameValidation");async function L_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(me.INVALID_BASE_PATH):s}try{let s=St.join(e,t+Tn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(St.join(e,t,cC),st.constants.R_OK|st.constants.F_OK),St.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(me.INVALID_ENVIRONMENT)}else throw new Error(me.INVALID_ENVIRONMENT);throw s}}o(L_,"validateEnvironmentPath");function Gi(e,t){if(Hi.validateEnv(e),t===void 0)throw new Error(me.DBI_NAME_REQUIRED)}o(Gi,"validateEnvDBIName");async function EC(e,t,r=!1,s=!1){b_(e,t),t=t.toString();try{return await L_(e,t,s),y_(e,t,r)}catch(n){if(n.message===me.INVALID_ENVIRONMENT){let i=St.join(e,t);await st.mkdirp(s?i:e);let a=new $E(s?i:i+Tn,WE,QE,jE,!1,YE,KE),_=I_.open(a);_.dbis=Object.create(null);let c=new C_(!1);_.openDB(Tt,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=w_(e,t,r);return _[Er.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(EC,"createEnvironment");async function dC(e,t,r,s=!0){let n=await y_(e,t);if(r===void 0)throw new Error(me.DESTINATION_PATH_REQUIRED);try{await st.access(St.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(me.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(dC,"copyEnvironment");async function y_(e,t,r=!1){b_(e,t),t=t.toString();let s=w_(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 L_(e,t),i=St.join(e,t+Tn),a=n!=i,_=new $E(n,WE,QE,jE,a,YE,KE),c=I_.open(_);c.dbis=Object.create(null);let u=XE(c);for(let l=0;l<u.length;l++)nt(c,u[l]);return c[Er.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(y_,"openEnvironment");async function SC(e,t,r=!1){b_(e,t),t=t.toString();let s=St.join(e,t+Tn),n=await L_(e,t);if(global.lmdb_map!==void 0){let i=w_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await ZE(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+lC:St.join(St.dirname(n),uC))}o(SC,"deleteEnvironment");async function ZE(e){Hi.validateEnv(e);let t=e[Er.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(ZE,"closeEnvironment");function w_(e,t,r=!1){let n=`${St.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(w_,"getCachedEnvironmentName");function TC(e){Hi.validateEnv(e);let t=Object.create(null),r=nt(e,Tt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Tt)try{t[s]=Object.assign(new vi,n)}catch{kE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(TC,"listDBIDefinitions");function XE(e){Hi.validateEnv(e);let t=[],r=nt(e,Tt);for(let{key:s}of r.getRange({start:!1}))s!==Tt&&t.push(s);return t}o(XE,"listDBIs");function fC(e,t){let s=nt(e,Tt).getEntry(t),n=new vi;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{kE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(fC,"getDBIDefinition");function zE(e,t,r,s=!1){if(Gi(e,t),t=t.toString(),t===Tt)throw new Error(me.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===me.DBI_DOES_NOT_EXIST){let i=new C_(r,s===!0),a=e.openDB(t,i),_=new vi(r===!0,s);return a[JE]=_,nt(e,Tt).putSync(t,_),e.dbis[t]=a,a}throw n}}o(zE,"createDBI");function nt(e,t){if(Gi(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Tt?r=fC(e,t):r=new vi,r===void 0)throw new Error(me.DBI_DOES_NOT_EXIST);let s;try{let n=new C_(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(me.DBI_DOES_NOT_EXIST):n}return s[JE]=r,e.dbis[t]=s,s}o(nt,"openDBI");function hC(e,t){Gi(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[Er.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(hC,"statDBI");async function RC(e,t){try{let r=St.join(e,t+Tn);return(await st.stat(r)).size}catch{throw new Error(me.INVALID_ENVIRONMENT)}}o(RC,"environmentDataSize");function AC(e,t){if(Gi(e,t),t=t.toString(),t===Tt)throw new Error(me.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Tt).removeSync(t)}o(AC,"dropDBI");function mC(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===me.DBI_DOES_NOT_EXIST)zE(e,n,n!==t,n===t);else throw i}}}o(mC,"initializeDBIs");ed.exports={openDBI:nt,openEnvironment:y_,createEnvironment:EC,listDBIs:XE,listDBIDefinitions:TC,createDBI:zE,dropDBI:AC,statDBI:hC,deleteEnvironment:SC,initializeDBIs:mC,TransactionCursor:Bi,environmentDataSize:RC,copyEnvironment:dC,closeEnvironment:ZE}});var rd=d((XV,td)=>{"use strict";var qi=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(qi,"InsertRecordsResponseObject");td.exports=qi});var nd=d((zV,sd)=>{"use strict";var Fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Fi,"UpdateRecordsResponseObject");sd.exports=Fi});var od=d((e0,id)=>{"use strict";var Vi=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Vi,"UpsertRecordsResponseObject");id.exports=Vi});var Yr=d((n0,_d)=>{"use strict";var gC=$(),pC=rd(),NC=nd(),OC=od(),hn=lr(),fn=et().LMDB_ERRORS_ENUM,IC=he(),dr=h(),CC=I(),bC=require("uuid"),t0=require("lmdb"),{handleHDBError:LC,hdb_errors:yC}=J(),{OVERFLOW_MARKER:r0,MAX_SEARCH_KEY_LENGTH:s0}=IC,D_=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$r=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new pC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];ad(u,!0,n);let l=DC(e,t,r,u),E=u[t];a.push(l),_.push(E)}return U_(a,_,s,i)}o(wC,"insertRecords");function DC(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let _=s[a];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][dr.FUNC_VAL],s[a]=_)}let c=hn.getIndexedValues(_);if(c)for(let u=0,l=c.length;u<l;u++)e.dbis[a].put(c[u],n)}e.dbis[t].put(n,s,s[$r])})}o(DC,"insertRecord");function MC(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(MC,"removeSkippedRecords");function ad(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[$r]))&&(e[$r]=s),t===!0?(r===!0||!Number.isInteger(e[D_]))&&(e[D_]=s):delete e[D_]}o(ad,"setTimestamps");function M_(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gC.initializeDBIs(e,t,r)}o(M_,"initializeTransaction");async function UC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new NC,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],T;try{T=P_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(T),c.push(E)}return U_(_,c,s,i,a)}o(UC,"updateRecords");async function PC(e,t,r,s,n=!0){try{B_(e,t,r,s)}catch(c){throw LC(c,c.message,yC.HTTP_STATUS_CODES.BAD_REQUEST)}M_(e,t,r);let i=new OC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;CC.isEmpty(u[t])?(l=bC.v4(),u[t]=l):l=u[t];let E=P_(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return U_(a,_,s,i)}o(PC,"upsertRecords");async function U_(e,t,r,s,n=[]){let i=await Promise.all(e);for(let a=0,_=i.length;a<_;a++)i[a]===!0?s.written_hashes.push(t[a]):(s.skipped_hashes.push(t[a]),n.push(a));return s.txn_time=hn.getMicroTime(),MC(r,n),s}o(U_,"finalizeWrite");function P_(e,t,r,s,n,i=!1,a=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(ad(r,!l,a),Number.isInteger(r[$r])&&u[$r]>r[$r])return!1;l&&n.original_records.push(u);let E,T=o(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],L=e.dbis[A];if(L===void 0)continue;let de=u[A];if(typeof R=="function"){let k=R([[u]]);Array.isArray(k)&&(R=k[0][dr.FUNC_VAL],r[A]=R)}if(R===de)continue;let p=hn.getIndexedValues(de);if(p)for(let k=0,Ie=p.length;k<Ie;k++)L.remove(p[k],s);if(p=hn.getIndexedValues(R),p)for(let k=0,Ie=p.length;k<Ie;k++)L.put(p[k],s)}let S=Object.assign({},u,r);_.put(s,S,S[$r])},"do_put");return c?E=_.ifVersion(s,c.version,T):E=_.ifNoExists(s,T),E.then(S=>S?!0:P_(e,t,r,s,n,i,a))}o(P_,"updateUpsertRecord");function BC(e,t,r){if(hn.validateEnv(e),t===void 0)throw new Error(fn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fn.WRITE_ATTRIBUTES_REQUIRED):new Error(fn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(BC,"validateBasic");function B_(e,t,r,s){if(BC(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fn.RECORDS_REQUIRED):new Error(fn.RECORDS_MUST_BE_ARRAY)}o(B_,"validateWrite");_d.exports={insertRecords:wC,updateRecords:UC,upsertRecords:PC}});var Z=d((i0,ud)=>{"use strict";var H_=h(),gs=Y(),v_=require("path");gs.initSync();var xi,ki,$i;function cd(){if(xi!==void 0)return xi;if(gs.getHdbBasePath()!==void 0)return xi=v_.join(gs.getHdbBasePath(),H_.SCHEMA_DIR_NAME),xi}o(cd,"getBaseSchemaPath");function HC(){if(ki!==void 0)return ki;if(gs.getHdbBasePath()!==void 0)return ki=v_.join(cd(),H_.SYSTEM_SCHEMA_NAME),ki}o(HC,"getSystemSchemaPath");function vC(){if($i!==void 0)return $i;if(gs.getHdbBasePath()!==void 0)return $i=v_.join(gs.getHdbBasePath(),H_.TRANSACTIONS_DIR_NAME),$i}o(vC,"getTransactionAuditStorePath");ud.exports={getBaseSchemaPath:cd,getSystemSchemaPath:HC,getTransactionAuditStorePath:vC}});var Yt=d((o0,GC)=>{GC.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_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var G_=d((a0,ld)=>{var{common_validators:Sr}=ms(),Rn=tt(),ft="is required",K={schema:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},table:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},attribute:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},hash_attribute:{presence:!0,format:Sr.schema_format,length:Sr.schema_length}};function An(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}o(An,"makeAttributesStrings");function qC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence=!1,K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(qC,"schema_object");function FC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(FC,"table_object");function VC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence={message:ft},Rn.validateObject(e,K)}o(VC,"create_table_object");function xC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence={message:ft},K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(xC,"attribute_object");function kC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(kC,"describe_table");function $C(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`)}}o($C,"validateTableResidence");ld.exports={schema_object:qC,create_table_object:VC,table_object:FC,attribute_object:xC,describe_table:kC,validateTableResidence:$C}});var dd=d((_0,Ed)=>{"use strict";var YC=require("uuid"),Yi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||YC.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(Yi,"CreateAttributeObject");Ed.exports=Yi});var Wi=d((c0,Sd)=>{"use strict";var KC=dd(),Ki=class extends KC{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Ki,"LMDBCreateAttributeObject");Sd.exports=Ki});var fd=d((u0,Td)=>{"use strict";Td.exports=QC;var WC="inserted";function QC(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===WC?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(QC,"returnObject")});var Qi=d((l0,Rd)=>{"use strict";var jC=h(),q_=$(),JC=Yr(),{getSystemSchemaPath:ZC,getBaseSchemaPath:XC}=Z(),zC=require("path"),eb=Yt(),tb=G_(),rb=Wi(),sb=fd(),{handleHDBError:nb,hdb_errors:ib}=J(),ob=I(),F_=eb.hdb_attribute,hd=[];for(let e=0;e<F_.attributes.length;e++)hd.push(F_.attributes[e].attribute);var ab="inserted";Rd.exports=_b;async function _b(e){let t=tb.attribute_object(e);if(t)throw nb(new Error,t.message,ib.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ob.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new rb(e.schema,e.table,e.attribute,e.id);try{let n=await q_.openEnvironment(zC.join(XC(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);q_.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await q_.openEnvironment(ZC(),jC.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:a,skipped_hashes:_}=await JC.insertRecords(i,F_.hash_attribute,hd,[s]);return sb(ab,a,{records:[s]},_)}catch(n){throw n}}o(_b,"lmdbCreateAttribute")});var ji=d((d0,md)=>{"use strict";var Kt=I(),Ad=O(),E0=N_();md.exports=cb;function cb(e){if(Kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Kt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(Kt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Kt.isEmptyOrZeroLength(a[r]))throw Ad.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Kt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Ad.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Kt.isEmpty(a[r])&&a[r]!==""&&s.has(Kt.autoCast(a[r]))&&(a.skip=!0),s.add(Kt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(cb,"insertUpdateValidate")});var Zi=d((S0,gd)=>{"use strict";var ub=h().OPERATIONS_ENUM,Ji=class{constructor(t,r,s,n,i=void 0){this.operation=ub.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Ji,"InsertObject");gd.exports=Ji});var zi=d((f0,pd)=>{"use strict";var T0=Zi(),Xi=h(),x_=I(),V_=O(),lb=require("uuid"),{handleHDBError:mn,hdb_errors:Eb}=J(),{HDB_ERROR_MSGS:gn,HTTP_STATUS_CODES:pn}=Eb;pd.exports=db;function db(e,t,r){for(let n=0;n<t.length;n++)Sb(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Tb(i,r,e.operation)}}o(db,"processRows");function Sb(e){if(Buffer.byteLength(String(e))>Xi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mn(new Error,gn.ATTR_NAME_LENGTH_ERR(e),pn.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmptyOrZeroLength(e)||x_.isEmpty(e.trim()))throw mn(new Error,gn.ATTR_NAME_NULLISH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}o(Sb,"validateAttribute");function Tb(e,t,r){if(!e.hasOwnProperty(t)||x_.isEmptyOrZeroLength(e[t])){if(r===Xi.OPERATIONS_ENUM.INSERT||r===Xi.OPERATIONS_ENUM.UPSERT){e[t]=lb.v4();return}throw V_.error("Update transaction aborted due to record with no hash value:",e),mn(new Error,gn.RECORD_MISSING_HASH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Xi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw V_.error(e),mn(new Error,gn.HASH_VAL_LENGTH_ERR,pn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw V_.error(e),mn(new Error,gn.INVALID_FORWARD_SLASH_IN_HASH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}o(Tb,"validateHash")});var Od=d((h0,Nd)=>{"use strict";var eo=class{constructor(t,r){this.type=t,this.message=r}};o(eo,"IPCEventObject");Nd.exports=eo});var ps=d((R0,Id)=>{"use strict";var fb=O(),k_=I(),hb=h(),{IPC_ERRORS:Nn}=et();Id.exports={sendIpcEvent:Rb,validateEvent:Ab,SchemaEventMsg:mb,UserEventMsg:gb};function Rb(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):fb.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}o(Rb,"sendIpcEvent");function Ab(e){if(typeof e!="object")return Nn.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||k_.isEmpty(e.type))return Nn.MISSING_TYPE;if(!e.hasOwnProperty("message")||k_.isEmpty(e.message))return Nn.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||k_.isEmpty(e.message.originator))return Nn.MISSING_ORIGIN;if(hb.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nn.INVALID_EVENT(e.type)}o(Ab,"validateEvent");function mb(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(mb,"SchemaEventMsg");function gb(e){this.originator=e}o(gb,"UserEventMsg")});var On=d((m0,yd)=>{"use strict";var Cd=h(),A0=I(),to=O(),bd=Od(),{sendIpcEvent:Ld}=ps();function pb(e){try{to.trace("signalSchemaChange called with message:",e);let t=new bd(Cd.IPC_EVENT_TYPES.SCHEMA,e);Ld(t)}catch(t){to.error(t)}}o(pb,"signalSchemaChange");function Nb(e){try{to.trace("signalUserChange called with message:",e);let t=new bd(Cd.IPC_EVENT_TYPES.USER,e);Ld(t)}catch(t){to.error(t)}}o(Nb,"signalUserChange");yd.exports={signalSchemaChange:pb,signalUserChange:Nb}});var ro=d((g0,Dd)=>{"use strict";var wd=I(),Ob=h(),Ib=O(),Cb=Qi(),bb=Wi(),Lb=On(),{SchemaEventMsg:yb}=ps(),wb="already exists in";Dd.exports=Db;async function Db(e,t,r){try{if(wd.isEmptyOrZeroLength(r))return r;let s=[];wd.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 Mb(e,t.schema,t.name,i)})),n}catch(s){throw s}}o(Db,"lmdbCheckForNewAttributes");async function Mb(e,t,r,s){let n=new bb(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await Ub(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wb))Ib.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(Mb,"createNewAttribute");async function Ub(e){let t;try{return t=await Cb(e),Lb.signalSchemaChange(new yb(process.pid,Ob.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}o(Ub,"createAttribute")});var Ns=d((p0,Md)=>{"use strict";var so=class{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}};o(so,"LMDBTransactionObject");Md.exports=so});var Pd=d((N0,Ud)=>{"use strict";var Pb=Ns(),Bb=h().OPERATIONS_ENUM,no=class extends Pb{constructor(t,r,s,n,i=void 0){super(Bb.INSERT,r,s,n,i),this.records=t}};o(no,"LMDBInsertTransactionObject");Ud.exports=no});var Hd=d((O0,Bd)=>{"use strict";var Hb=Ns(),vb=h().OPERATIONS_ENUM,io=class extends Hb{constructor(t,r,s,n,i,a=void 0){super(vb.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(io,"LMDBUpdateTransactionObject");Bd.exports=io});var Gd=d((I0,vd)=>{"use strict";var Gb=Ns(),qb=h().OPERATIONS_ENUM,oo=class extends Gb{constructor(t,r,s,n,i,a=void 0){super(qb.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(oo,"LMDBUpsertTransactionObject");vd.exports=oo});var Fd=d((C0,qd)=>{"use strict";var Fb=Ns(),Vb=h().OPERATIONS_ENUM,ao=class extends Fb{constructor(t,r,s,n,i=void 0){super(Vb.DELETE,s,n,t,i),this.original_records=r}};o(ao,"LMDBDeleteTransactionObject");qd.exports=ao});var In=d((b0,$d)=>{"use strict";var xb=require("path"),Vd=$(),kb=Pd(),$b=Hd(),Yb=Gd(),Kb=Fd(),Os=he(),xd=I(),{CONFIG_PARAMS:Wb}=h(),kd=Y();kd.initSync();var _o=h().OPERATIONS_ENUM,{getTransactionAuditStorePath:Qb}=Z();$d.exports=jb;async function jb(e,t){if(kd.get(Wb.LOGGING_AUDITLOG)===!1)return;let r=xb.join(Qb(),e.schema.toString()),s=await Vd.openEnvironment(r,e.table,!0),n=Jb(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Vd.initializeDBIs(s,Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Os.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xd.isEmpty(n.user_name)||s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}catch(i){throw i}}}o(jb,"writeTransaction");function Jb(e,t){let r=xd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===_o.INSERT)return new kb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPDATE)return new $b(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPSERT)return new Yb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.DELETE)return new Kb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(Jb,"createTransactionObject")});var $_=d((y0,Yd)=>{"use strict";var Zb=ji(),L0=Zi(),Is=h(),Xb=zi(),zb=Yr().insertRecords,eL=$(),tL=require("path"),rL=O(),sL=ro(),{getBaseSchemaPath:nL}=Z(),iL=In();Yd.exports=oL;async function oL(e){try{let{schema_table:t,attributes:r}=Zb(e);Xb(e,r,t.hash_attribute),e.schema!==Is.SYSTEM_SCHEMA_NAME&&(r.includes(Is.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Is.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Is.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Is.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await sL(e.hdb_auth_header,t,r),n=tL.join(nL(),e.schema.toString()),i=await eL.openEnvironment(n,e.table),a=await zb(i,t.hash_attribute,r,e.records,e[Is.CLUSTERING_FLAG]!==!0);try{await iL(e,a)}catch(_){rL.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(oL,"lmdbCreateRecords")});var Qd=d((w0,Wd)=>{"use strict";var Kd=h(),aL=$_(),_L=Zi(),cL=require("fs-extra"),uL=require("path"),{getBaseSchemaPath:lL}=Z();Wd.exports=EL;async function EL(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _L(Kd.SYSTEM_SCHEMA_NAME,Kd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await aL(r),await cL.mkdirp(uL.join(lL(),e.schema.toString()))}o(EL,"lmdbCreateSchema")});var Jd=d((D0,jd)=>{"use strict";var co=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(co,"DeleteRecordsResponseObject");jd.exports=co});var W_=d((B0,zd)=>{"use strict";var Zd=$(),Y_=lr(),K_=et().LMDB_ERRORS_ENUM,dL=he(),Xd=O(),M0=I(),SL=require("lmdb"),TL=Jd(),{OVERFLOW_MARKER:U0,MAX_SEARCH_KEY_LENGTH:P0}=dL;async function fL(e,t,r){if(Y_.validateEnv(e),t===void 0)throw new Error(K_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(K_.IDS_REQUIRED):new Error(K_.IDS_MUST_BE_ARRAY);try{let s=Zd.listDBIs(e);Zd.initializeDBIs(e,t,s);let n=new TL,i,a=[],_=[];for(let E=0,T=r.length;E<T;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,SL.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let L=s[R];if(!S.hasOwnProperty(L)||L===t)continue;let de=e.dbis[L],p=S[L];if(p!=null)try{let k=Y_.getIndexedValues(p);if(k)for(let Ie=0,Ce=k.length;Ie<Ce;Ie++)de.remove(k[Ie],i)}catch{Xd.warn(`cannot delete from attribute: ${L}, ${p}:${i}`)}}});a.push(A),_.push(i),n.original_records.push(S)}catch(S){Xd.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(a);for(let E=0,T=u.length;E<T;E++)u[E]===!0?n.deleted.push(_[E]):(n.skipped.push(_[E]),c.push(E));let l=0;for(let E=0;E<c.length;E++){let T=c[E];n.original_records.splice(T-l,1),l++}return n.txn_time=Y_.getMicroTime(),n}catch(s){throw s}}o(fL,"deleteRecords");zd.exports={deleteRecords:fL}});var Cn=d((H0,tS)=>{"use strict";var Cs=I(),hL=W_(),RL=$(),AL=require("path"),{getBaseSchemaPath:mL}=Z(),gL=In(),pL=O();tS.exports=NL;async function NL(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cs.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cs.isEmptyOrZeroLength(e.hash_values)&&!Cs.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cs.isEmpty(c)||e.hash_values.push(c)}}if(Cs.isEmptyOrZeroLength(e.hash_values))return eS([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cs.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=AL.join(mL(),e.schema.toString()),i=await RL.openEnvironment(n,e.table),a=await hL.deleteRecords(i,s,e.hash_values);try{t===!0&&await gL(e,a)}catch(_){pL.error(`unable to write transaction due to ${_.message}`)}return eS(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(NL,"lmdbDeleteRecords");function eS(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}}o(eS,"createDeleteResponse")});var j_=d((G0,rS)=>{"use strict";var OL=h(),v0=lr();function Q_(e,t){let r=Object.create(null);if(t.length===1&&OL.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}o(Q_,"parseRow");function IL(e,t,r,s){let n=Q_(r,e);s.push(n)}o(IL,"searchAll");function CL(e,t,r,s){let n=Q_(r,e);s[t]=n}o(CL,"searchAllToMap");function bL(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(bL,"iterateDBI");function Kr(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(Kr,"pushResults");function LL(e,t,r,s,n,i){t.toString().endsWith(e)&&Kr(t,r,s,n,i)}o(LL,"endsWith");function yL(e,t,r,s,n,i){t.toString().includes(e)&&Kr(t,r,s,n,i)}o(yL,"contains");function wL(e,t,r,s,n,i){t>e&&Kr(t,r,s,n,i)}o(wL,"greaterThanCompare");function DL(e,t,r,s,n,i){t>=e&&Kr(t,r,s,n,i)}o(DL,"greaterThanEqualCompare");function ML(e,t,r,s,n,i){t<e&&Kr(t,r,s,n,i)}o(ML,"lessThanCompare");function UL(e,t,r,s,n,i){t<=e&&Kr(t,r,s,n,i)}o(UL,"lessThanEqualCompare");rS.exports={parseRow:Q_,searchAll:IL,searchAllToMap:CL,iterateDBI:bL,endsWith:LL,contains:yL,greaterThanCompare:wL,greaterThanEqualCompare:DL,lessThanCompare:ML,lessThanEqualCompare:UL,pushResults:Kr}});var bs=d((V0,_S)=>{"use strict";var it=$(),PL=O(),Qe=lr(),Tr=he(),re=et().LMDB_ERRORS_ENUM,q0=I(),BL=h(),ht=j_(),F0=require("lmdb"),{OVERFLOW_MARKER:sS,MAX_SEARCH_KEY_LENGTH:HL}=Tr,bn={lazy:!0};function nS(e,t,r,s,n=!1,i=void 0,a=void 0){let _=Object.create(null),c=it.openDBI(e,r);c[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=J_(e,t,r);for(let{key:l,value:E}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:a,reverse:n}))s(u(l,E),E,_,t,r);return _}o(nS,"iterateFullIndex");function Ln(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){let l=[[],[]],E=it.openDBI(e,r),T=J_(e,t,r);E[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,R=i===!0?!c:!u,L=i===!0?u:c;for(let{key:de,value:p}of E.getRange({start:A,end:S,reverse:i,limit:a,offset:_,inclusiveEnd:R,exclusiveStart:L}))ht.pushResults(T(de,p),p,l,t,r);return l}o(Ln,"iterateRangeBetween");function J_(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(sS)){if(!s)if(t)s=it.openDBI(e,t);else{let _=it.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=it.openDBI(e,_[c]),!s[Tr.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,bn)[r]}return n}}o(J_,"getOverflowCheck");function vL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);uo(r),r=yn(e,r);let a=[],_=it.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))ht.searchAll(r,c,u,a);return a}o(vL,"searchAll");function GL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return uo(r),r=yn(e,r),nS(e,t,t,ht.searchAllToMap.bind(null,r),s,n,i)}o(GL,"searchAllToMap");function qL(e,t,r=!1,s=void 0,n=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);return nS(e,void 0,t,ht.iterateDBI,r,s,n)}o(qL,"iterateDBI");function FL(e,t){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return it.statDBI(e,t).entryCount}o(FL,"countAll");function VL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=it.openDBI(e,r);s=Qe.convertKeyValueToWrite(s);let c=[[],[]];if(_[Tr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,bn);u!==void 0&&ht.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:a}))ht.pushResults(s,u,c,t,r);return c}o(VL,"equals");function xL(e,t,r){return fr(e,t,r),it.openDBI(e,t).getValuesCount(r)}o(xL,"count");function kL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=[[],[]],c=it.openDBI(e,r);c[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Qe.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of c.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(a)?a++:i++);for(let{key:E,value:T}of c.getRange({start:l,end:void 0,reverse:n,limit:i,offset:a}))if(E!==l){if(E.toString().startsWith(s))ht.pushResults(E,T,_,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of c.getRange({start:s,reverse:n,limit:i,offset:a}))if(l.toString().startsWith(s))ht.pushResults(l,E,_,t,r);else if(u===!0)break;return _}o(kL,"startsWith");function $L(e,t,r,s,n=!1,i=void 0,a=void 0){return iS(e,t,r,s,n,i,a,!0)}o($L,"endsWith");function iS(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){fr(e,r,s);let c=[[],[]],u=it.openDBI(e,r);u[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=J_(e,t,r);a=Number.isInteger(a)?a:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=T.toString();if(S.endsWith(sS))for(let A of u.getValues(T)){let R=l(T,A);(_?R.endsWith(s):R.includes(s))&&E(R,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Tr.DBI_DEFINITION_NAME].is_hash_attribute)E(T,T);else for(let A of u.getValues(T))E(T,A)}function E(T,S){if(a>0){a--;return}i!==0&&(ht.pushResults(T,S,c,t,r),i--)}return o(E,"found_match"),c}o(iS,"contains");function YL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ln(e,t,r,s,c,n,i,a,!0,!1)}o(YL,"greaterThan");function KL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ln(e,t,r,s,c,n,i,a,!1,!1)}o(KL,"greaterThanEqual");function WL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ln(e,t,r,c,s,n,i,a,!1,!0)}o(WL,"lessThan");function QL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ln(e,t,r,c,s,n,i,a,!1,!1)}o(QL,"lessThanEqual");function jL(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(Qe.validateEnv(e),r===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(re.START_VALUE_REQUIRED);if(n===void 0)throw new Error(re.END_VALUE_REQUIRED);if(s=Qe.convertKeyValueToWrite(s),n=Qe.convertKeyValueToWrite(n),s>n)throw new Error(re.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ln(e,t,r,s,n,i,a,_)}o(jL,"between");function JL(e,t,r,s){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(uo(r),r=yn(e,r),s===void 0)throw new Error(re.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?bn:void 0);return i&&(n=ht.parseRow(i,r)),n}o(JL,"searchByHash");function ZL(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,bn)===void 0&&(s=!1),s}o(ZL,"checkHashExists");function XL(e,t,r,s,n=[]){aS(e,t,r,s,n);let i=oS(e,t,r,s,n);return Object.values(i)}o(XL,"batchSearchByHash");function zL(e,t,r,s,n=[]){return aS(e,t,r,s,n),oS(e,t,r,s,n)}o(zL,"batchSearchByHashToMap");function oS(e,t,r,s,n=[]){r=yn(e,r);let i=Object.create(null),a=r.length<3?bn:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,a);if(u){let l=ht.parseRow(u,r);i[c]=l}else n.push(c)}catch(u){throw PL.warn(u),u}}return i}o(oS,"batchHashSearch");function aS(e,t,r,s,n){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(uo(r),!Array.isArray(s))throw s===void 0?new Error(re.IDS_REQUIRED):new Error(re.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}o(aS,"initializeBatchSearchByHash");function uo(e){if(!Array.isArray(e))throw e===void 0?new Error(re.FETCH_ATTRIBUTES_REQUIRED):new Error(re.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(uo,"validateFetchAttributes");function fr(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.SEARCH_VALUE_REQUIRED);if(r?.length>HL)throw new Error(re.SEARCH_VALUE_TOO_LARGE)}o(fr,"validateComparisonFunctions");function yn(e,t){return t.length===1&&BL.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=it.listDBIs(e)),t}o(yn,"setGetWholeRowAttributes");_S.exports={searchAll:vL,searchAllToMap:GL,count:xL,countAll:FL,equals:VL,startsWith:kL,endsWith:$L,contains:iS,searchByHash:JL,setGetWholeRowAttributes:yn,batchSearchByHash:XL,batchSearchByHashToMap:zL,checkHashExists:ZL,iterateDBI:qL,greaterThan:YL,greaterThanEqual:KL,lessThan:WL,lessThanEqual:QL,between:jL}});var wn=d((k0,ES)=>{var cS=require("lodash"),uS=tt(),V=require("joi"),ey=I(),{hdb_schema_table:Rt,checkValidTable:lS}=ms(),{handleHDBError:ty,hdb_errors:ry}=J(),{HTTP_STATUS_CODES:sy}=ry,x0=V.object({schema:Rt,table:Rt,hash_values:V.array().min(1).items(V.alternatives(V.string(),V.number())).required(),get_attributes:V.array().min(1).items(Rt).required()}),ny=V.object({schema:Rt,table:Rt,search_attribute:Rt,search_value:V.any().required(),get_attributes:V.array().min(1).items(Rt).required(),desc:V.bool(),limit:V.number().integer().min(1),offset:V.number().integer().min(0)}),iy=V.object({schema:Rt,table:Rt,operator:V.string().valid("and","or").default("and").lowercase(),offset:V.number().integer().min(0),limit:V.number().integer().min(1),get_attributes:V.array().min(1).items(Rt).required(),conditions:V.array().min(1).items(V.object({search_attribute:Rt,search_type:V.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:V.when("search_type",{switch:[{is:"equals",then:V.any()},{is:"between",then:V.array().items(V.alternatives([V.string(),V.number()])).length(2)}],otherwise:V.alternatives(V.string(),V.number())}).required()})).required()});ES.exports=function(e,t){let r=null;switch(t){case"value":r=uS.validateBySchema(e,ny);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(lS("schema",e.schema)),i(lS("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=uS.validateBySchema(e,iy);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=ey.checkGlobalSchemaTable(e.schema,e.table);if(n)return ty(new Error,n,sy.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=cS.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!cS.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Z_=d(($0,dS)=>{"use strict";var oy=$(),ay=wn(),_y=require("path"),{getBaseSchemaPath:cy}=Z();dS.exports=uy;function uy(e){let t=ay(e,"hashes");if(t)throw t;let r=_y.join(cy(),e.schema.toString());return oy.openEnvironment(r,e.table)}o(uy,"initialize")});var X_=d((Y0,SS)=>{"use strict";var ly=bs(),Ey=Z_();SS.exports=dy;async function dy(e){try{let t=await Ey(e),r=global.hdb_schema[e.schema][e.table];return ly.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(dy,"lmdbGetDataByHash")});var Ls=d((K0,TS)=>{"use strict";var lo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(lo,"SearchByHashObject");TS.exports=lo});var hS=d((Q0,fS)=>{"use strict";var W0=Ls(),Sy=bs(),Ty=Z_();fS.exports=fy;async function fy(e){try{let t=await Ty(e),r=global.hdb_schema[e.schema][e.table];return Sy.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(fy,"lmdbSearchByHash")});var At=d((j0,RS)=>{"use strict";var Eo=class{constructor(t,r,s,n,i,a,_,c=!1,u=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=a,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};o(Eo,"SearchObject");RS.exports=Eo});var So=d((J0,NS)=>{"use strict";var ye=bs(),hy=$(),Ry=require("path"),Ay=I(),C=he(),Wr=h(),{getBaseSchemaPath:my}=Z(),gy=Yt(),AS=et().LMDB_ERRORS_ENUM,{compareKeys:ys}=require("ordered-binary"),Wt=Wr.SEARCH_WILDCARDS;async function py(e,t,r){let s;e.schema===Wr.SYSTEM_SCHEMA_NAME?s=gy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=pS(e,s.hash_attribute,r,t);return mS(e,n,s.hash_attribute,r)}o(py,"prepSearch");async function mS(e,t,r,s){let n=Ry.join(my(),e.schema.toString()),i=await hy.openEnvironment(n,e.table),a=gS(i,e,t,r);if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Iy(e,r)===!1)return s===!0?Oy(a):a[1];let c=a[0];return s===!0?ye.batchSearchByHashToMap(i,r,e.get_attributes,c):ye.batchSearchByHash(i,r,e.get_attributes,c)}o(mS,"executeSearch");function gS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:_,offset:c}=t;switch(a=typeof a=="boolean"?a:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ye.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.CONTAINS:n=ye.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ye.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ye.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ye.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ye.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ye.searchAll(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ye.searchAllToMap(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.BETWEEN:n=ye.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ye.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ye.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ye.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ye.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(gS,"searchByType");function Ny(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ys(i,s[0])>=0&&ys(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ys(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ys(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ys(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ys(n[r],s)<=0;default:return Object.create(null)}}o(Ny,"filterByType");function Oy(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}o(Oy,"createMapFromArrays");function Iy(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}o(Iy,"checkToFetchMore");function pS(e,t,r,s){if(Ay.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Wt.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Wt[0])<0&&n.indexOf(Wt[1])<0)return _===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Wt.indexOf(i)>=0&&Wt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Wt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Wt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Wt[0])||n.includes(Wt[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(AS.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wr.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Wr.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Wr.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wr.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Wr.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AS.UNKNOWN_SEARCH_TYPE)}}o(pS,"createSearchTypeFromSearchObject");NS.exports={executeSearch:mS,createSearchTypeFromSearchObject:pS,prepSearch:py,searchByType:gS,filterByType:Ny}});var IS=d((X0,OS)=>{"use strict";var Z0=At(),Cy=wn(),by=I(),Ly=h(),yy=So();OS.exports=wy;async function wy(e,t){if(!by.isEmpty(t)&&Ly.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Cy(e,"value");if(s)throw s;let n=!0;try{return await yy.prepSearch(e,t,n)}catch(i){throw i}}o(wy,"lmdbGetDataByValue")});var ws=d((ex,CS)=>{"use strict";var z0=At(),Dy=wn(),My=I(),Uy=h(),Py=So();CS.exports=By;async function By(e,t){if(!My.isEmpty(t)&&Uy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Dy(e,"value");if(s)throw s;let n=!1;try{return await Py.prepSearch(e,t,n)}catch(i){throw i}}o(By,"lmdbSearchByValue")});var LS=d((rx,bS)=>{"use strict";var tx=he(),To=class{constructor(t,r,s,n,i=void 0,a=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=_}};o(To,"SearchByConditionsObject");var fo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(fo,"SearchCondition");var ho=class{constructor(t,r){this.attribute=t,this.desc=r}};o(ho,"SortAttribute");bS.exports={SearchByConditionsObject:To,SearchCondition:fo,SortAttribute:ho}});var PS=d((nx,US)=>{"use strict";var sx=LS().SearchByConditionsObject,Hy=At(),vy=wn(),z_=bs(),Ro=he(),MS=So(),Gy=j_(),yS=require("lodash"),{getBaseSchemaPath:qy}=Z(),Fy=require("path"),Vy=$(),{handleHDBError:wS,hdb_errors:xy}=J(),{HTTP_STATUS_CODES:ky}=xy,$y=1e8,Yy={lazy:!0};US.exports=Ky;async function Ky(e){try{let t=vy(e,"conditions");if(t)throw wS(t,t.message,ky.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=Fy.join(qy(),e.schema.toString()),s=await Vy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=yS.sortBy(e.conditions,a=>{if(a.estimated_count===void 0){let _=a.search_type;_===Ro.SEARCH_TYPES.EQUALS?a.estimated_count=z_.count(s,a.search_attribute,a.search_value):_===Ro.SEARCH_TYPES.CONTAINS||_===Ro.SEARCH_TYPES.ENDS_WITH?a.estimated_count=1/0:a.estimated_count=$y}return a.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[a]=await DS(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(MS.filterByType),u=c.length,l=[],E=z_.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of a){let R=_.get(A,Yy);for(let L=0;L<u;L++)if(!c[L](R))continue e;if(T>0){T--;continue}if(S<=0)break;S--,l.push(Gy.parseRow(R,E))}return l}else{let a=[],_=[];for(let c of i){let[u]=await DS(s,e,c,n.hash_attribute);_.push(u)}if(a=yS.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:a.length;a=a.splice(e.offset,c)}return z_.batchSearchByHash(s,n.hash_attribute,e.get_attributes,a)}}catch(t){throw wS(t)}}o(Ky,"lmdbSearchByConditions");async function DS(e,t,r,s){let n=new Hy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ro.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MS.searchByType(e,n,i,s)}o(DS,"executeConditionSearch")});var mo=d((ix,BS)=>{"use strict";var Wy=h().OPERATIONS_ENUM,Ao=class{constructor(t,r,s,n=void 0){this.operation=Wy.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ao,"DeleteObject");BS.exports=Ao});var ec=d((ox,HS)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(go,"DropAttributeObject");HS.exports=go});var rc=d((_x,vS)=>{"use strict";var Qy=At(),jy=mo(),ax=ec(),yt=h(),Jy=I(),tc=$(),Zy=Yt(),Xy=ws(),zy=Cn(),{getBaseSchemaPath:ew}=Z(),tw=require("path");vS.exports=rw;async function rw(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=Zy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nw(e),n=tw.join(ew(),e.schema.toString()),i=await tc.openEnvironment(n,e.table);return t===!0&&await sw(e,i,r.hash_attribute),tc.dropDBI(i,e.attribute),s}o(rw,"lmdbDropAttribute");async function sw(e,t,r){let s=tc.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(a,u,c)}await n}o(sw,"removeAttributeFromAllObjects");async function nw(e){let t=new Qy(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await Xy(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Jy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jy(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return zy(i)}o(nw,"dropAttributeFromSystem")});var VS=d((cx,FS)=>{"use strict";var iw=rc(),ow=ec(),GS=I(),qS=O(),aw=et().LMDB_ERRORS_ENUM;FS.exports=_w;async function _w(e){if(GS.isEmpty(global.hdb_schema[e.schema])||GS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new ow(e.schema,e.table,r);try{await iw(n,!1)}catch(i){i.message!==aw.DBI_DOES_NOT_EXIST&&qS.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw qS.error(`Error dropping attribute ${r}`),s}}o(_w,"lmdbDropAllAttributes")});var sc=d((lx,JS)=>{"use strict";var KS=At(),WS=mo(),QS=ws(),jS=Cn(),ux=VS(),Ge=h(),xS=I(),kS=$(),{getBaseSchemaPath:cw,getTransactionAuditStorePath:uw}=Z(),$S=require("path"),YS=O();JS.exports=lw;async function lw(e){try{if(xS.isEmpty(global.hdb_schema[e.schema])||xS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Ew(e),await dw(e);let t=$S.join(cw(),e.schema.toString());try{await kS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")YS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$S.join(uw(),e.schema.toString());await kS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")YS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(lw,"lmdbDropTable");async function Ew(e){let t=new KS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await QS(t),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new WS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jS(n)}o(Ew,"deleteAttributesFromSystem");async function dw(e){let t=new KS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await QS(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new WS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jS(n)}catch(i){throw i}}o(dw,"dropTableFromSystem")});var XS=d((dx,ZS)=>{"use strict";var Sw=require("fs-extra"),Tw=At(),fw=Ls(),hw=mo(),Rw=sc(),Aw=Cn(),mw=X_(),gw=ws(),Qt=h(),Ex=I(),pw=require("path"),{getBaseSchemaPath:Nw}=Z(),{handleHDBError:Ow,hdb_errors:Iw}=J(),{HDB_ERROR_MSGS:Cw,HTTP_STATUS_CODES:bw}=Iw;ZS.exports=Lw;async function Lw(e){let t;try{t=await yw(e.schema);let r=new Tw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await gw(r);for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await Rw(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new hw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Aw(n);let i=pw.join(Nw(),t.toString());await Sw.remove(i)}catch(r){throw r}}o(Lw,"lmdbDropSchema");async function yw(e){let t=new fw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await mw(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Ow(new Error,Cw.SCHEMA_NOT_FOUND(e),bw.NOT_FOUND,void 0,void 0,!0);return s}o(yw,"validateDropSchema")});var No=d((Sx,zS)=>{"use strict";var po=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(po,"CreateTableObject");zS.exports=po});var ic=d((fx,eT)=>{"use strict";var ww=require("path"),Dw=require("fs-extra"),Oo=$(),{getTransactionAuditStorePath:Mw}=Z(),nc=he(),Tx=No();eT.exports=Uw;async function Uw(e){let t;try{let r=ww.join(Mw(),e.schema.toString());await Dw.mkdirp(r),t=await Oo.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{Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Oo.createDBI(t,nc.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}o(Uw,"createTransactionsAuditEnvironment")});var uc=d((hx,sT)=>{"use strict";var oc=h(),tT=$(),Pw=Yr(),Bw=require("path"),{getSystemSchemaPath:Hw,getBaseSchemaPath:vw}=Z(),Gw=Yt(),qw=Qi(),ac=Wi(),Fw=O(),Vw=ic(),cc=Gw.hdb_table,rT=[];for(let e=0;e<cc.attributes.length;e++)rT.push(cc.attributes[e].attribute);sT.exports=xw;async function xw(e,t){let r=Bw.join(vw(),t.schema.toString()),s=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ac(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tT.createEnvironment(r,t.table),e!==void 0){let a=await tT.openEnvironment(Hw(),oc.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Pw.insertRecords(a,cc.hash_attribute,rT,[e]),await _c(s),await _c(n),await _c(i)}await Vw(t)}catch(a){throw a}}o(xw,"lmdbCreateTable");async function _c(e){try{await qw(e)}catch(t){Fw.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(_c,"createAttribute")});var iT=d((Rx,nT)=>{"use strict";var kw=ji(),$w=zi(),Yw=ro(),Ds=h(),Kw=Yr().updateRecords,Ww=$(),Qw=require("path"),{getBaseSchemaPath:jw}=Z(),Jw=In(),Zw=O();nT.exports=Xw;async function Xw(e){try{let{schema_table:t,attributes:r}=kw(e);$w(e,r,t.hash_attribute),e.schema!==Ds.SYSTEM_SCHEMA_NAME&&(r.includes(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Yw(e.hdb_auth_header,t,r),n=Qw.join(jw(),e.schema.toString()),i=await Ww.openEnvironment(n,e.table),a=await Kw(i,t.hash_attribute,r,e.records,e[Ds.CLUSTERING_FLAG]!==!0);try{await Jw(e,a)}catch(_){Zw.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(Xw,"lmdbUpdateRecords")});var aT=d((Ax,oT)=>{"use strict";var zw=h().OPERATIONS_ENUM,Io=class{constructor(t,r,s,n=void 0){this.operation=zw.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Io,"UpsertObject");oT.exports=Io});var cT=d((gx,_T)=>{"use strict";var mx=aT(),eD=ji(),tD=zi(),rD=ro(),Ms=h(),sD=Yr().upsertRecords,nD=$(),iD=require("path"),{getBaseSchemaPath:oD}=Z(),aD=In(),_D=O(),{handleHDBError:cD,hdb_errors:uD}=J();_T.exports=lD;async function lD(e){let t;try{t=eD(e)}catch(c){throw cD(c,c.message,uD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;tD(e,s,r.hash_attribute),e.schema!==Ms.SYSTEM_SCHEMA_NAME&&(s.includes(Ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await rD(e.hdb_auth_header,r,s),i=iD.join(oD(),e.schema.toString()),a=await nD.openEnvironment(i,e.table),_=await sD(a,r.hash_attribute,s,e.records,e[Ms.CLUSTERING_FLAG]!==!0);try{await aD(e,_)}catch(c){_D.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}o(lD,"lmdbUpsertRecords")});var TT=d((px,ST)=>{"use strict";var ED=At(),uT=I(),lT=O(),dD=ws(),ET=h(),SD=W_().deleteRecords,TD=$(),fD=require("path"),{getBaseSchemaPath:hD}=Z(),{promisify:RD}=require("util"),AD=RD(setTimeout),dT=1e4,mD=10;ST.exports=gD;async function gD(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(uT.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new ED(e.schema,e.table,ET.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await dD(n,ET.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw lT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return uT.isEmptyOrZeroLength(s)?(lT.trace("No records found to delete"),{message:"No records found to delete"}):await pD(e,s,t)}o(gD,"lmdbDeleteRecordsBefore");async function pD(e,t,r){let s=fD.join(hD(),e.schema.toString()),n=await TD.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=dT){let c=t.slice(a,a+dT),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await SD(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await AD(mD)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(pD,"chunkDeletes")});var hT=d((Nx,fT)=>{"use strict";var Co=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Co,"DeleteBeforeObject");fT.exports=Co});var AT=d((Ox,RT)=>{"use strict";var bo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(bo,"DeleteAuditLogsBeforeResults");RT.exports=bo});var pT=d((Cx,gT)=>{"use strict";var lc=$(),{getTransactionAuditStorePath:ND}=Z(),Ix=hT(),OD=require("path"),Dn=he(),ID=I(),mT=AT(),CD=require("util").promisify,bD=CD(setTimeout),LD=1e4,yD=100;gT.exports=wD;async function wD(e){let t=OD.join(ND(),e.schema),r=await lc.openEnvironment(t,e.table,!0),s=lc.listDBIs(r);lc.initializeDBIs(r,Dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new mT;do n=await DD(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 bD(yD);while(n.transactions_deleted>0);return i}o(wD,"deleteAuditLogsBefore");async function DD(e,t){let r=new mT;try{let s=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=a[Dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ID.isEmpty(_)||(n=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LD)break}return await n,r}catch(s){throw s}}o(DD,"deleteTransactions")});var yT=d((bx,LT)=>{"use strict";var Ec=$(),Us=he(),NT=lr(),dc=h(),OT=I(),{getTransactionAuditStorePath:MD}=Z(),UD=require("path"),PD=bs(),Lo=Ns(),BD=O();LT.exports=HD;async function HD(e){let t=UD.join(MD(),e.schema),r=await Ec.openEnvironment(t,e.table,!0),s=Ec.listDBIs(r);Ec.initializeDBIs(r,Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return IT(r,e.search_values);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,GD(r,e.search_values,n);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vD(r,e.search_values);default:return IT(r)}}o(HD,"readAuditLog");function IT(e,t=[0,NT.getMicroTime()]){OT.isEmpty(t[0])&&(t[0]=0),OT.isEmpty(t[1])&&(t[1]=NT.getMicroTime());let r=[];try{let s=e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let a=Object.assign(new Lo,i);r.push(a)}return r}catch(s){throw s}}o(IT,"searchTransactionsByTimestamp");function vD(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,bT(e,i))}return Object.fromEntries(r)}o(vD,"searchTransactionsByUsername");function GD(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=PD.equals(e,Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Us.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,T=l[0].length;E<T;E++){let S=l[0][E],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=bT(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);CT(c,"records",r,l,a),CT(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(GD,"searchTransactionsByHashValues");function CT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let _=e[t][a],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new Lo(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new Lo(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(CT,"loopRecords");function bT(e,t){let r=[];try{let s=e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Lo,i);r.push(a)}}catch(i){BD.warn(i)}return r}catch(s){throw s}}o(bT,"batchSearchTransactions")});var DT=d((Lx,wT)=>{"use strict";var qD=require("path"),{getBaseSchemaPath:FD}=Z(),VD=$();wT.exports={writeTransaction:xD};async function xD(e,t,r){let s=qD.join(FD(),e);return(await VD.openEnvironment(s,t)).transaction(r)}o(xD,"writeTransaction")});var UT=d((yx,MT)=>{"use strict";var kD=require("path"),{getBaseSchemaPath:$D}=Z(),YD=$();MT.exports={flush:KD};async function KD(e,t){let r=kD.join($D(),e.toString());return(await YD.openEnvironment(r,t.toString())).flushed}o(KD,"flush")});var BT=d((wx,PT)=>{"use strict";var ce=O(),{handleHDBError:WD}=J(),QD=O_(),jD=Qi(),JD=$_(),ZD=Qd(),XD=Cn(),zD=X_(),eM=hS(),tM=IS(),rM=ws(),sM=PS(),nM=XS(),iM=uc(),oM=iT(),aM=cT(),_M=TT(),cM=pT(),uM=sc(),lM=rc(),EM=yT(),dM=DT(),SM=UT(),yo=class extends QD{async searchByConditions(t){try{return sM(t)}catch(r){throw ce.error(r),r}}async getDataByHash(t){try{return await zD(t)}catch(r){throw ce.error(r),r}}async searchByHash(t){try{return await eM(t)}catch(r){throw ce.error(r),r}}async getDataByValue(t,r){try{return await tM(t,r)}catch(s){throw ce.error(s),s}}async searchByValue(t){try{return await rM(t)}catch(r){throw ce.error(r),r}}async createSchema(t){try{return await ZD(t)}catch(r){throw ce.error(r),r}}async dropSchema(t){try{return await nM(t)}catch(r){throw ce.error(r),r}}async createTable(t,r){try{return await iM(t,r)}catch(s){throw ce.error(s),s}}async dropTable(t){try{return await uM(t)}catch(r){throw ce.error(r),r}}async createAttribute(t){try{return await jD(t)}catch(r){throw ce.error(r),r}}async createRecords(t){try{return await JD(t)}catch(r){throw ce.error(r),r}}async updateRecords(t){try{return await oM(t)}catch(r){throw ce.error(r),r}}async upsertRecords(t){try{return await aM(t)}catch(r){throw WD(r,null,null,ce.ERR,r)}}async deleteRecords(t){try{return await XD(t)}catch(r){throw ce.error(r),r}}async deleteRecordsBefore(t){try{return await _M(t)}catch(r){throw ce.error(r),r}}async dropAttribute(t){try{return await lM(t)}catch(r){throw ce.error(r),r}}async deleteAuditLogsBefore(t){try{return await cM(t)}catch(r){throw ce.error(r),r}}async readAuditLog(t){try{return await EM(t)}catch(r){throw ce.error(r),r}}writeTransaction(t,r,s){return dM.writeTransaction(t,r,s)}flush(t,r){return SM.flush(t,r)}};o(yo,"LMDBBridge");PT.exports=yo});var Ps=d((Dx,vT)=>{"use strict";var TM=BT(),fM=O_(),hM=Y();hM.initSync();var HT;function RM(){return HT instanceof fM?HT:new TM}o(RM,"getBridge");vT.exports=RM()});var JT=d((Ux,jT)=>{"use strict";var Sc=require("recursive-iterator"),AM=require("alasql"),Tc=require("clone"),GT=I(),{handleHDBError:qT,hdb_errors:mM}=J(),{HDB_ERROR_MSGS:FT,HTTP_STATUS_CODES:VT}=mM,gM=["DISTINCT_ARRAY"],xT=Symbol("validateTables"),fc=Symbol("validateTable"),Mx=Symbol("getAllColumns"),kT=Symbol("validateAllColumns"),wo=Symbol("findColumn"),$T=Symbol("validateOrderBy"),Mn=Symbol("validateSegment"),hc=Symbol("validateColumn"),YT=Symbol("setColumnsForTable"),KT=Symbol("checkColumnsForAsterisk"),WT=Symbol("validateGroupBy"),QT=Symbol("hasColumns"),Do=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xT](),this[KT](),this[kT]()}[xT](){if(this[QT]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fc](t.table)})}}[QT](){let t=!1,r=new Sc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw qT(new Error,FT.SCHEMA_NOT_FOUND(t.databaseid),VT.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw qT(new Error,FT.TABLE_NOT_FOUND(t.databaseid,t.tableid),VT.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Tc(s);n.table=Tc(t),this.attributes.push(n)})}[wo](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)}[KT](){let t=new Sc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[YT](r.tableid)}[YT](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new AM.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kT](){this[Mn](this.statement.columns,!1),this[Mn](this.statement.joins,!1),this[Mn](this.statement.where,!1),this[WT](this.statement.group,!1),this[Mn](this.statement.order,!0)}[Mn](t,r){if(!t)return;let s=new Sc(t),n=[];for(let{node:i,path:a}of s)!GT.isEmpty(i)&&!GT.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$T](i):n.push(this[hc](i)));return n}[WT](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&gM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Tc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[wo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[wo](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((a,_)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(_,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`}[$T](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[hc](t)}[hc](t){let r=this[wo](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(Do,"SelectValidator");jT.exports=Do});var ef=d((Px,zT)=>{"use strict";var ZT=require("lodash"),Un=require("mathjs"),pM=require("jsonata"),XT=I();zT.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?ZT.uniqWith(e,ZT.isEqual):e,searchJSON:NM,mad:Pn.bind(null,Un.mad),mean:Pn.bind(null,Un.mean),mode:Pn.bind(null,Un.mode),prod:Pn.bind(null,Un.prod),median:Pn.bind(null,Un.median)};function Pn(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}o(Pn,"aggregateFunction");function NM(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(XT.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),XT.isEmpty(this.__ala__.res[r])){let s=pM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(NM,"searchJSON")});var rf=d((Bx,tf)=>{"use strict";var ie=require("moment"),Rc="YYYY-MM-DDTHH:mm:ss.SSSZZ";ie.suppressDeprecationWarnings=!0;tf.exports={current_date:()=>ie().utc().format("YYYY-MM-DD"),current_time:()=>ie().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ie(e).utc().format("YYYY");case"month":return ie(e).utc().format("MM");case"day":return ie(e).utc().format("DD");case"hour":return ie(e).utc().format("HH");case"minute":return ie(e).utc().format("mm");case"second":return ie(e).utc().format("ss");case"millisecond":return ie(e).utc().format("SSS");default:break}},date:e=>ie(e).utc().format(Rc),date_format:(e,t)=>ie(e).utc().format(t),date_add:(e,t,r)=>ie(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ie(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ie(e).utc(),n=ie(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ie().utc().valueOf(),get_server_time:()=>ie().format(Rc),offset_utc:(e,t)=>ie(e).utc().utcOffset(t).format(Rc)}});var af=d((Hx,of)=>{"use strict";var OM=require("@turf/area"),IM=require("@turf/length"),CM=require("@turf/circle"),bM=require("@turf/difference"),LM=require("@turf/distance"),yM=require("@turf/boolean-contains"),wM=require("@turf/boolean-equal"),DM=require("@turf/boolean-disjoint"),MM=require("@turf/helpers"),sf=h(),v=I();of.exports={geoArea:UM,geoLength:PM,geoCircle:BM,geoDifference:HM,geoDistance:nf,geoNear:vM,geoContains:GM,geoEqual:qM,geoCrosses:FM,geoConvert:VM};var Ac="geo1 is required",mc="geo2 is required";function UM(e){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),OM.default(e)}o(UM,"geoArea");function PM(e,t){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),IM.default(e,{units:t||"kilometers"})}o(PM,"geoLength");function BM(e,t,r){if(v.isEmpty(e))throw new Error("point is required");if(v.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=v.autoCast(e)),CM.default(e,t,{units:r||"kilometers"})}o(BM,"geoCircle");function HM(e,t){if(v.isEmpty(e))throw new Error("poly1 is required");if(v.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),bM(e,t)}o(HM,"geoDifference");function nf(e,t,r){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),LM.default(e,t,{units:r||"kilometers"})}o(nf,"geoDistance");function vM(e,t,r,s){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");if(v.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return nf(e,t,s)<=r}o(vM,"geoNear");function GM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),yM.default(e,t)}o(GM,"geoContains");function qM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),wM.default(e,t)}o(qM,"geoEqual");function FM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),!DM.default(e,t)}o(FM,"geoCrosses");function VM(e,t,r){if(v.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(v.isEmpty(t))throw new Error("geo_type is required");if(v.isEmpty(sf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sf.GEO_CONVERSION_ENUM).join(",")}`);return MM[t](e,r)}o(VM,"geoConvert")});var cf=d((vx,_f)=>{var Qr=ef(),je=rf(),wt=af();_f.exports=e=>{e.aggr.mad=e.aggr.MAD=Qr.mad,e.aggr.mean=e.aggr.MEAN=Qr.mean,e.aggr.mode=e.aggr.MODE=Qr.mode,e.aggr.prod=e.aggr.PROD=Qr.prod,e.aggr.median=e.aggr.MEDIAN=Qr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=je.current_date,e.fn.current_time=e.fn.CURRENT_TIME=je.current_time,e.fn.extract=e.fn.EXTRACT=je.extract,e.fn.date=e.fn.DATE=je.date,e.fn.date_format=e.fn.DATE_FORMAT=je.date_format,e.fn.date_add=e.fn.DATE_ADD=je.date_add,e.fn.date_sub=e.fn.DATE_SUB=je.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=je.date_diff,e.fn.now=e.fn.NOW=je.now,e.fn.offset_utc=e.fn.OFFSET_UTC=je.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=je.get_server_time,e.fn.getdate=e.fn.GETDATE=je.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=je.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wt.geoNear}});var Ef=d((Gx,lf)=>{"use strict";var Bn=require("lodash"),ge=require("alasql");ge.options.cache=!1;var xM=cf(),uf=require("clone"),Mo=require("recursive-iterator"),M=O(),P=I(),Bs=Ps(),kM=h(),{hdb_errors:$M}=J(),YM="IS NULL",Hn="There was a problem performing this search. Please check the logs and try again.";xM(ge);var Uo=class{constructor(t,r){if(P.isEmpty(t))throw M.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(),P.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!P.isEmptyOrZeroLength(s))return M.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw M.error("Error thrown from checkEmptySQL in SQLSearch class method search."),M.error(s),new Error(Hn)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw M.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),M.error(s),new Error(Hn)}if(Object.keys(this.data).length===0)return M.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw M.error("Error thrown from processJoins in SQLSearch class method search."),M.error(s),new Error(Hn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw M.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),M.error(s),new Error(Hn)}try{return t=await this._finalSQL(),t}catch(s){throw M.error("Error thrown from finalSQL in SQLSearch class method search."),M.error(s),new Error(Hn)}}_getColumns(){let t=new Mo(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(uf(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bn.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=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(P.isEmpty(this.statement.where)){M.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!P.isEmpty(r)&&r.right)if(P.isNotEmptyAndHasValue(r.right.value)){let s=P.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ge.yy.LogicValue({value:s}):r.right instanceof ge.yy.StringValue&&!P.isEmpty(s)&&P.autoCasterIsNumberCheck(s.toString())&&(r.right=new ge.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=P.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ge.yy.LogicValue({value:i}):s instanceof ge.yy.StringValue&&P.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ge.yy.NumValue({value:i}))});if(t){M.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mo(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!P.isEmpty(kM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(P.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(P.isEmptyOrZeroLength(r.left.columnid)||P.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(P.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let _=!1;switch(r.op){case"=":!P.isEmpty(r.right.value)||!P.isEmpty(r.left.value)?s.add(P.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[a].ignore=_,_?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from)&&P.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&&Bn.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(P.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);P.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(P.isEmptyOrZeroLength(this.all_table_attributes)&&!P.isEmptyOrZeroLength(this.columns.columns))return t;if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ge.promise(r)}catch(r){throw M.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),M.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(uf(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(P.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(YM)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bn.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,_)),i.attribute!==_&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(c=!0),!P.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await Bs.getDataByHash(_);for(let E of _.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){M.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let T=await Bs.getDataByValue(E);for(let S in T)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,T[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,T[S][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(S)))}))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else if(!P.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,T=l.length;E<T;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await Bs.getDataByValue(_,S.operation);if(c)for(let R in A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(R)));else for(let R in A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(R)))}}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),M.error(l)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await Bs.getDataByValue(_);if(c)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(E)))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),M.error(l)}}}_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 ge.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,a=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===a});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 ge.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ge.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 ge.yy.FuncValue:new ge.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(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${R}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${R}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(S,n);T=await ge.promise(A,t),t=null}catch(S){throw M.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),M.error(S),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let S=0,A=T.length;S<A;S++){let R=T[S];a.forEach(L=>{R[L.key]!==null&&R[L.key]!==void 0&&L.keys.add(R[L.key])})}a.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Bn.difference(A,[...S.keys].map(L=>L.toString()));for(let L=0,de=R.length;L<de;L++){let p=R[L];delete this.data[`${S.schema}_${S.table}`].__merged_data[p]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Mo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let _=a.table.as?a.table.as:a.table.tableid;(!t[_]||t[_].indexOf(a.attribute)<0)&&s.push(a)}}s=Bn.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){M.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),M.error(i)}}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,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},c=await Bs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let T=a[l],S=c[T];for(let A=0;A<u;A++){let R=n.columns[A],L=S[R]===void 0?null:S[R];this.data[s].__merged_data[T].push(L)}}}}catch(r){throw M.error("Error thrown from getDataByHash function in SQLSearch class method getData."),M.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(a=>{let _=a.aggregatorid?a.expression:a,c=a.aggregatorid?a.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).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();M.trace(`Final SQL: ${n}`),s=await ge.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),M.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw M.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),M.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 M.error($M.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),M.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((a,_)=>{let c=n[i],u=new RegExp(`${c}.\`${a}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=new RegExp(`\`${a}\``,"g"),u=`[${_}]`;s=s.replace(c,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 a=await Bs.getDataByValue(i);for(let _ in a)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=a[_][s.attribute]}catch(a){M.error("There was an error when processing this SQL operation. Check your logs"),M.error(a)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Uo,"SQLSearch");lf.exports=Uo});var hr=d((qx,Sf)=>{"use strict";var KM=JT();Sf.exports={searchByConditions:JM,searchByHash:ZM,searchByValue:XM,search:zM};var gc=Ps(),df=require("util"),WM=df.callbackify(gc.searchByHash),QM=df.callbackify(gc.searchByValue),jM=Ef();async function JM(e){return gc.searchByConditions(e)}o(JM,"searchByConditions");function ZM(e,t){try{WM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(ZM,"searchByHash");function XM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),QM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(XM,"searchByValue");function zM(e,t){try{let r=new KM(e);r.validate(),new jM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(zM,"search")});var Gn=d((Fx,Rf)=>{"use strict";var vn=require("crypto"),ff="aes-256-cbc",eU=32,tU=16,pc=64,hf=32,rU=pc+hf,Tf=new Map;Rf.exports={encrypt:sU,decrypt:nU,createNatsTableStreamName:iU};function sU(e){let t=vn.randomBytes(eU),r=vn.randomBytes(tU),s=vn.createCipheriv(ff,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),_=n.toString("hex");return i+a+_}o(sU,"encrypt");function nU(e){let t=e.substr(0,pc),r=e.substr(pc,hf),s=e.substr(rU,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=vn.createDecipheriv(ff,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(nU,"decrypt");function iU(e,t){let r=`${e}.${t}`,s=Tf.get(r);return s||(s=vn.createHash("md5").update(`${e}.${t}`).digest("hex"),Tf.set(r,s)),s}o(iU,"createNatsTableStreamName")});var vo=d((Vx,If)=>{"use strict";var mf=hr(),Rr=O(),gf=G_(),oU=require("lodash"),aU=require("path"),_U=Gn(),Nc=I(),{promisify:pf}=require("util"),Q=h(),{handleHDBError:Po,hdb_errors:cU}=J(),{HDB_ERROR_MSGS:Bo,HTTP_STATUS_CODES:Nf}=cU,uU=Y();uU.initSync();var Af=$(),lU=Z(),qn=pf(mf.searchByValue),EU=pf(mf.searchByHash),Hs="name",Of="hash_attribute",Oc="schema",dU="schema_table",SU="attribute";If.exports={describeAll:TU,describeTable:Ho,describeSchema:hU};async function TU(e){try{let t=Nc.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Hs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Hs]},i=await qn(n);if(Nc.isEmptyOrZeroLength(i))return{};let a={},_={};for(let T in i)a[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Of,Q.ID_ATTRIBUTE_STRING,Hs,Oc]},u=await qn(c),l=[];for(let T of u)try{let S;if(t||s)S=await Ho({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;S=await Ho({schema:T.schema,table:T.name},A)}S&&l.push(S)}catch(S){Rr.error(S)}let E={};for(let T in l)t||s?(E[l[T].schema]==null&&(E[l[T].schema]={}),E[l[T].schema][l[T].name]=l[T],a[l[T].schema]&&delete a[l[T].schema]):_[l[T].schema]&&(E[l[T].schema]==null&&(E[l[T].schema]={}),E[l[T].schema][l[T].name]=l[T],a[l[T].schema]&&delete a[l[T].schema]);for(let T in a)t||s?E[T]={}:_[T]&&(E[T]={});return E}catch(t){return Rr.error("Got an error in describeAll"),Rr.error(t),Po(new Error,Bo.DESCRIBE_ALL_ERR)}}o(TU,"describeAll");async function Ho(e,t){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={},a=gf.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Hs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=await qn(_);if(!c||c.length===0)throw Po(new Error,Bo.TABLE_NOT_FOUND(e.schema,e.table),Nf.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Po(new Error,Bo.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dU,search_value:r+"."+s,get_attributes:[SU]},E=await qn(l);E=oU.uniqBy(E,T=>T.attribute),n&&n.length>0&&(E=fU(n)),i.attributes=E,i.clustering_stream_name=_U.createNatsTableStreamName(u.schema,u.name);try{let T=aU.join(lU.getBaseSchemaPath(),i.schema.toString()),S=await Af.openEnvironment(T,i.name),A=Af.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(T){Rr.warn(`unable to stat table dbi due to ${T}`)}}catch(l){Rr.error(`There was an error getting attributes for table '${u.name}'`),Rr.error(l)}return i}o(Ho,"descTable");function fU(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(fU,"getAttrsByPerms");async function hU(e){let t=gf.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(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Oc,search_value:s,hash_values:[],get_attributes:[Of,Q.ID_ATTRIBUTE_STRING,Hs,Oc]},i=await qn(n);if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Hs]},_=await EU(a);if(_&&_.length<1)throw Po(new Error,Bo.SCHEMA_NOT_FOUND(e.schema),Nf.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Nc.isEmpty(c)||c.describe){let u=await Ho({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){Rr.error(`Error describing schema table '${e.schema}.${_}'`),Rr.error(c)}})),a}}o(hU,"describeSchema")});var Gs=d(($x,wf)=>{var xx=require("async"),vs=Yt(),kx=O(),{callbackify:Lf,promisify:RU}=require("util");wf.exports={setSchemaDataToGlobal:Cf,getTableSchema:gU,getSystemSchema:NU,setSchemaDataToGlobalAsync:RU(Cf)};var yf=vo(),AU=Lf(yf.describeAll),mU=Lf(yf.describeTable);function Cf(e){AU(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=vs),global.hdb_schema=r,e(null,null)})}o(Cf,"setSchemaDataToGlobal");function bf(e,t){return e==="system"?vs[t]:global.hdb_schema[e][t]}o(bf,"returnSchema");function gU(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?pU(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,bf(e,t))}):r(null,bf(e,t))}o(gU,"getTableSchema");function pU(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=vs:global.hdb_schema={system:vs},r();return}mU(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:vs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(pU,"setTableDataToGlobal");function NU(){return vs}o(NU,"getSystemSchema")});var Jr=d((Yx,Uf)=>{"use strict";var qo=N_(),ot=I(),OU=require("util"),Fo=Ps(),IU=Gs(),Ic=O(),{handleHDBError:Ar,hdb_errors:CU}=J(),{HTTP_STATUS_CODES:jr}=CU,bU=OU.promisify(IU.getTableSchema),LU="updated",Df="inserted",Mf="upserted";Uf.exports={insert:wU,update:DU,upsert:MU,validation:yU,flush:UU};async function yU(e){if(ot.isEmpty(e))throw new Error("invalid update parameters defined.");if(ot.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ot.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bU(e.schema,e.table),r=qo(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(_=>{if(a&&ot.isEmptyOrZeroLength(_[s]))throw Ic.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ot.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ic.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ot.isEmpty(_[s])&&_[s]!==""&&n.has(ot.autoCast(_[s]))&&(_.skip=!0),n.add(ot.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(yU,"validation");async function wU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.createRecords(e);return Go(Df,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}o(wU,"insertData");async function DU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.updateRecords(e);return ot.isEmpty(s.existing_rows)?Go(LU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Go(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}o(DU,"updateData");async function MU(e){if(e.operation!=="upsert")throw Ar(new Error,"invalid operation, must be upsert",jr.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Go(Mf,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Ar(s,null,null,Ic.ERR,n)}}o(MU,"upsertData");function Go(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===Df?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===Mf?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Go,"returnObject");function UU(e){return Fo.flush(e.schema,e.table)}o(UU,"flush")});var Bf=d((Kx,Pf)=>{"use strict";var Vo=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Vo,"HdbInfoInsertObject");Pf.exports={HdbInfoInsertObject:Vo}});var Cc=d((Wx,Hf)=>{"use strict";var xo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(xo,"InsertObject");var ko=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(ko,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o($o,"DeleteResponseObject");Hf.exports={InsertObject:xo,NoSQLSeachObject:ko,DeleteResponseObject:$o}});var qf=d((Qx,Gf)=>{"use strict";var vf=h(),Yo=class{constructor(t,r){this[vf.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[vf.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(Yo,"UpgradeObject");Gf.exports={UpgradeObject:Yo}});var Ko=d((jx,Vf)=>{"use strict";var at=require("prompt"),qs=require("chalk"),Ff=O(),mt=require("os"),bc=vr(),Lc=["yes","y"];async function PU(e){let t=`${mt.EOL}`+qs.bold.green("Your current HarperDB version requires that we complete an update process.")+`${mt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}${mt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${mt.EOL}`;at.override=bc(["CONFIRM_UPGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_UPGRADE:{description:qs.magenta(`${mt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await at.get([r])}catch(n){return Ff.error("There was an error when prompting user about an upgrade."),Ff.error(n),!1}return Lc.includes(s.CONFIRM_UPGRADE)}o(PU,"forceUpdatePrompt");async function BU(e){let t=`${mt.EOL}`+qs.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}`);at.override=bc(["CONFIRM_DOWNGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:qs.magenta(`${mt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await at.get([r]);return Lc.includes(s.CONFIRM_DOWNGRADE)}o(BU,"forceDowngradePrompt");async function HU(){let e=`${mt.EOL}`+qs.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");at.override=bc(["GENERATE_CERTS"]),at.start(),at.message=e;let t={properties:{GENERATE_CERTS:{description:qs.magenta(`${mt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await at.get([t]);return Lc.includes(r.GENERATE_CERTS)}o(HU,"upgradeCertsPrompt");Vf.exports={forceUpdatePrompt:PU,forceDowngradePrompt:BU,upgradeCertsPrompt:HU}});var yc=d((Jx,xf)=>{"use strict";var Wo=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Wo,"UpgradeDirective");xf.exports=Wo});var $f=d((tk,kf)=>{"use strict";var vU=I(),GU=We(),Zx=O(),Xx=require("path"),zx=require("fs"),ek=h();kf.exports={getOldPropsValue:qU};function qU(e,t,r=!1){let s=t.getRaw(e);return vU.isNotEmptyAndHasValue(s)?s:r?GU.getDefaultConfig(e):""}o(qU,"getOldPropsValue")});var Qf=d((rk,Wf)=>{"use strict";var mr=require("path"),gr=require("fs-extra"),FU=require("properties-reader"),VU=yc(),oe=O(),{getOldPropsValue:W}=$f(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:Zr}=h(),Xr=We(),Qo=Y(),Yf=I(),Dt=h(),wc=new VU("3.1.0"),Kf=[];function xU(){let e=FU(Qo.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),oe.info(t);let r=` ;Settings for the HarperDB process.
|
|
7
7
|
|
|
8
8
|
;The directory selected during install where the database files reside.
|
|
9
9
|
${N.HDB_ROOT_KEY} = ${W(N.HDB_ROOT_KEY,e)}
|
|
@@ -26,9 +26,9 @@ ${N.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${W(N.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
|
|
|
26
26
|
;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
|
|
27
27
|
${N.SERVER_HEADERS_TIMEOUT_KEY} = ${W(N.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
|
|
28
28
|
;Define whether to log to file or not.
|
|
29
|
-
${N.LOG_TO_FILE} = ${
|
|
29
|
+
${N.LOG_TO_FILE} = ${Xr.getDefaultConfig(Zr.LOGGING_FILE)}
|
|
30
30
|
;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
|
|
31
|
-
${N.LOG_TO_STDSTREAMS} = ${
|
|
31
|
+
${N.LOG_TO_STDSTREAMS} = ${Xr.getDefaultConfig(Zr.LOGGING_STDSTREAMS)}
|
|
32
32
|
;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
|
|
33
33
|
${N.LOG_LEVEL_KEY} = ${W(N.LOG_LEVEL_KEY,e)}
|
|
34
34
|
;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
|
|
@@ -61,21 +61,21 @@ ${N.OPERATION_TOKEN_TIMEOUT_KEY} = ${W(N.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
|
61
61
|
;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
62
62
|
${N.REFRESH_TOKEN_TIMEOUT_KEY} = ${W(N.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
63
63
|
;The port the IPC server will run on.
|
|
64
|
-
${N.IPC_SERVER_PORT} = ${
|
|
64
|
+
${N.IPC_SERVER_PORT} = ${Xr.getDefaultConfig(Zr.IPC_NETWORK_PORT)}
|
|
65
65
|
;Run HDB in the foreground.
|
|
66
|
-
${N.RUN_IN_FOREGROUND} = ${
|
|
66
|
+
${N.RUN_IN_FOREGROUND} = ${Xr.getDefaultConfig(Zr.OPERATIONSAPI_FOREGROUND)}
|
|
67
67
|
;Set to true to enable custom API endpoints. Requires a valid enterprise license.
|
|
68
|
-
${N.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${
|
|
68
|
+
${N.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Xr.getDefaultConfig(Zr.CUSTOMFUNCTIONS_ENABLED)}
|
|
69
69
|
;The port used to access the custom functions server.
|
|
70
|
-
${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${
|
|
70
|
+
${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${Xr.getDefaultConfig(Zr.CUSTOMFUNCTIONS_NETWORK_PORT)}
|
|
71
71
|
;The path to the folder containing HarperDB custom function files.
|
|
72
|
-
${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${
|
|
72
|
+
${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${mr.join(W(N.HDB_ROOT_KEY,e),"custom_functions")}
|
|
73
73
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
74
|
-
${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${
|
|
75
|
-
`,s=
|
|
74
|
+
${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Xr.getDefaultConfig(Zr.HTTP_THREADS)}
|
|
75
|
+
`,s=Qo.get("settings_path"),n=mr.dirname(s),i=mr.join(n,"3_1_0_upgrade_settings.bak");try{oe.info(`Backing up old settings file to: ${i}`),gr.copySync(s,i)}catch(_){throw oe.error(_),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),_}try{oe.info("New settings file values for 3.1.0 upgrade:",r),oe.info(`Creating new/upgraded settings file at '${s}'`),gr.writeFileSync(s,r),oe.info("Updating env variables with new settings values")}catch(_){throw console.error("There was a problem writing the new settings file. Please check the log for details."),oe.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),oe.error(_),gr.copySync(i,s),_}Qo.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),oe.info(a),a}o(xU,"updateSettingsFile_3_1_0");function kU(){let e=mr.join(Yf.getHomeDir(),Dt.HDB_HOME_DIR_NAME,Dt.LICENSE_KEY_DIR_NAME,Dt.LICENSE_FILE_NAME),t=mr.join(Yf.getHomeDir(),Dt.HDB_HOME_DIR_NAME,Dt.LICENSE_KEY_DIR_NAME,Dt.REG_KEY_FILE_NAME),r=mr.join(Qo.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.LICENSE_FILE_NAME),s=mr.join(r,Dt.LICENSE_FILE_NAME),n=mr.join(r,Dt.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),oe.info(i);let a="Creating .license directory";console.log(a),oe.info(a),gr.mkdirpSync(r);try{gr.accessSync(e);try{let _="Moving licence file";console.log(_),oe.info(_),gr.moveSync(e,s);let c="License file successfully moved.";console.log(c),oe.info(c)}catch{let c="moving license file failed";console.error(c),oe.error(c)}}catch{let c=`license file '${e}' does not exist.`;console.warn(c),oe.warn(c)}try{gr.accessSync(t);try{let _="Moving registration file";console.log(_),oe.info(_),gr.moveSync(t,n);let c="Registration file successfully moved.";console.log(c),oe.info(c)}catch{let c="moving registration file failed";console.error(c),oe.error(c)}}catch{let c=`registration file '${t}' does not exist.`;console.warn(c),oe.warn(c)}}o(kU,"moveLicenseFiles");wc.sync_functions.push(xU);wc.sync_functions.push(kU);Kf.push(wc);Wf.exports=Kf});var Dc=d((sk,jf)=>{"use strict";var $U=h().OPERATIONS_ENUM,jo=class{constructor(t,r,s,n=void 0){this.operation=$U.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(jo,"UpdateObject");jf.exports=jo});var zf=d((nk,Xf)=>{"use strict";var Mc=require("joi"),Jf=tt(),{route_constraints:Zf}=S_();Xf.exports={setRoutesValidator:YU,deleteRoutesValidator:KU};function YU(e){let t=Mc.object({server:Mc.valid("hub","leaf").required(),routes:Zf.required()});return Jf.validateBySchema(e,t)}o(YU,"setRoutesValidator");function KU(e){let t=Mc.object({routes:Zf.required()});return Jf.validateBySchema(e,t)}o(KU,"deleteRoutesValidator")});var nh=d((ik,sh)=>{"use strict";var zr=We(),Uc=I(),Jo=h(),eh=zf(),{handleHDBError:th,hdb_errors:WU}=J(),{HTTP_STATUS_CODES:rh}=WU,QU="cluster routes successfully set",jU="cluster routes successfully deleted";sh.exports={setRoutes:JU,getRoutes:ZU,deleteRoutes:XU};function JU(e){let t=eh.setRoutesValidator(e);if(t)throw th(t,t.message,rh.BAD_REQUEST,void 0,void 0,!0);let r=zr.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],a=[];for(let _=0,c=e.routes.length;_<c;_++){let u=e.routes[_];u.port=Uc.autoCast(u.port);let l=s.some(T=>T.host===u.host&&T.port===u.port),E=n.some(T=>T.host===u.host&&T.port===u.port);l||E?i.push(u):(s.push(u),a.push(u))}return e.server==="hub"?zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:QU,set:a,skipped:i}}o(JU,"setRoutes");function ZU(){let e=zr.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}o(ZU,"getRoutes");function XU(e){let t=eh.deleteRoutesValidator(e);if(t)throw th(t,t.message,rh.BAD_REQUEST,void 0,void 0,!0);let r=zr.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],a=[],_=!1,c=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],T=!1;for(let S=0,A=s.length;S<A;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),T=!0,_=!0,i.push(E);break}}if(!T){let S=!0;for(let A=0,R=n.length;A<R;A++){let L=n[A];if(E.host===L.host&&E.port===L.port){n.splice(A,1),c=!0,S=!1,i.push(E);break}}S&&a.push(E)}}return _&&(s=Uc.isEmptyOrZeroLength(s)?null:s,zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),c&&(n=Uc.isEmptyOrZeroLength(n)?null:n,zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:jU,deleted:i,skipped:a}}o(XU,"deleteRoutes")});var gt=d((ak,oh)=>{"use strict";var{platform:ok}=require("os"),zU="nats-server.zip",Pc="nats-server",eP=process.platform==="win32"?`${Pc}.exe`:Pc,Bc="HDB",tP=/^[^\s.,*>]+$/,ih="__request__",rP=o(e=>`${e}.${ih}`,"REQUEST_SUBJECT"),sP={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},nP={HUB:"hub.pid",LEAF:"leaf.pid"},iP={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},oP={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Bc,deliver_subject:"__HDB__.WORKQUEUE"},aP={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Bc,deliver_subject:"HDB.SCHEMAQUEUE"},_P={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Bc,deliver_subject:"HDB.USERQUEUE"},cP={SUCCESS:"success",ERROR:"error"},uP={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},lP={TXN:"txn",MSGID:"msgid"};oh.exports={NATS_SERVER_ZIP:zU,NATS_SERVER_NAME:Pc,NATS_BINARY_NAME:eP,PID_FILES:nP,NATS_CONFIG_FILES:sP,SERVER_SUFFIX:iP,WORK_QUEUE_CONSUMER_NAMES:oP,SCHEMA_QUEUE_CONSUMER_NAMES:aP,USER_QUEUE_CONSUMER_NAMES:_P,NATS_TERM_CONSTRAINTS_RX:tP,REQUEST_SUFFIX:ih,UPDATE_REMOTE_RESPONSE_STATUSES:cP,CLUSTER_STATUS_STATUSES:uP,REQUEST_SUBJECT:rP,SUBJECT_PREFIXES:lP}});var lh=d((ck,uh)=>{"use strict";var Je=$(),{insertRecords:EP}=Yr(),dP=lr(),pr=he(),SP=I(),{STORAGE_TYPES_ENUM:_k}=h(),jt=O(),TP=I(),Mt=require("fs-extra"),Jt=require("path"),fP=require("cli-progress"),Fn=require("assert"),hP=require("pino"),RP=Y();uh.exports=AP;var Zo,ah,Xo,Hc,we,Vn=!1;async function AP(e=!0){return Zo=RP.getHdbBasePath(),ah=Jt.join(Zo,"schema"),Xo=Jt.join(Zo,"4_0_0_upgrade_tmp"),Hc=Jt.join(Zo,"transactions"),console.info("Reindexing upgrade started for schemas"),jt.notify("Reindexing upgrade started for schemas"),await _h(ah,!1,e),await Mt.pathExists(Hc)&&(console.info(`
|
|
76
76
|
|
|
77
|
-
Reindexing upgrade started for transaction logs`),Xt.notify("Reindexing upgrade started for transaction logs"),await cT(Bc,!0,e)),Xt.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(xn?", but errors occurred":"")}o(bP,"reindexUpgrade");async function cT(e,t,r){let s=await Dt.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],_=zt.join(e,a.toString());if(a===".DS_Store")continue;let c=await Dt.readdir(_),u=c.length;for(let l=0;l<u;l++){let E=c[l];if(E!==".DS_Store"&&!!Dt.statSync(zt.join(_,E)).isDirectory())try{await LP(a,E,t),we.info(`Reindexing started for ${a}.${E}`),Xt.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await wP(a,E,_,t,r),we.info(`Reindexing completed for ${a}.${E}`),Xt.notify(`Reindexing completed for ${a}.${E}`)}catch(h){xn=!0,h.schema_path=_,h.table_name=E,Xt.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Xt.error(h),we.error(h),console.error(h)}}}if(!xn)try{await Dt.rm(Zo,{recursive:!0})}catch{}}o(cT,"processTables");async function LP(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=zt.join(Zo,n);await Dt.ensureDir(Zo),await Dt.writeFile(i,""),we=IP({level:"debug",formatters:{bindings(){}}},i)}o(LP,"initPinoLogger");var yP=20;async function wP(e,t,r,s,n){let i;try{i=await Je.openEnvironment(r,t,s)}catch(p){if(p.message==="MDB_INVALID: File is not an LMDB file"){Xt.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),we.error(p);return}throw p}let a=UP(i.dbis),_=Je.openDBI(i,a),c=Object.keys(i.dbis),u=Je.statDBI(i,a);we.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new OP.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Je.createEnvironment(r,t,!1);Je.createDBI(E,a,!1,!0);let h=[];try{for(let p of _.getRange({start:!1}))p.value=Object.assign({},p.value),h.push(p),s||e==="system"&&(t==="hdb_schema"&&(p.key=p.key.toString(),p.value.name=p.value.name.toString()),t==="hdb_table"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.name=p.value.name.toString()),t==="hdb_attribute"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.table=p.value.table.toString(),p.value.attribute=p.value.attribute.toString())),h.length>yP&&await S();await S()}catch(p){throw xn=!0,we.error(p),p}async function S(){let p,k=h.map(({value:Ce})=>Ce);s?p=await Promise.all(k.map(Ce=>DP(E,Ce))):p=await mP(E,a,c.filter(Ce=>Ce!=="__blob__"),k,!1);for(let Ce=0,ui=h.length;Ce<ui;Ce++){let{key:an,value:li}=h[Ce];we.info(`Record hash value: ${an} hash: ${a}`);let _r;s?_r=p[Ce]:_r=p.written_hashes.indexOf(an)>-1,Vn(_r,!0),MP(E,a,li[a],s),we.info(`Insert success, written hashes: ${p.written_hashes}`),l.increment()}h=[],l.value/l.total*100%10===0&&Xt.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),we.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let A=Je.statDBI(i,a),R=Je.statDBI(E,a);if(we.info(`Old stats entry count: ${A.entryCount}. New stats entry count: ${R.entryCount}`),Vn.deepStrictEqual(A.entryCount,R.entryCount),await Je.closeEnvironment(i),await Je.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let p=zt.join(r,t),k=zt.join(p,"data.mdb"),Ie=zt.join(p,"lock.mdb");await Dt.unlink(k),await Dt.unlink(Ie),await Dt.rmdir(p),we.info(`Deleted old environment files from schema folder: ${k}, ${Ie}`)}let L=await Je.openEnvironment(r,t),de=Je.statDBI(L,a);we.info(`New stats: ${JSON.stringify(R)}. New stats after move: ${JSON.stringify(de)}`),Vn.deepStrictEqual(de.entryCount,R.entryCount),await Je.closeEnvironment(L),delete global.lmdb_map[`${e}.${t}`]}o(wP,"processTable");async function DP(e,t){Je.initializeDBIs(e,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cr.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),NP.isEmpty(t.user_name)||e.dbis[Cr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Cr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(DP,"insertTransaction");function MP(e,t,r,s){let i=e.dbis[t].get(r);Vn.deepStrictEqual(typeof i,"object");let a;if(s){let _={[Cr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Cr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(_)}else a=Object.entries(i);for(let[_,c]of a)if(_!==t&&e.dbis[_]!==void 0&&!pP.isEmptyOrZeroLength(c))if(s&&_==="hash_value")for(let u=0,l=c.length;u<l;u++){let E=c[u];uT(e,_,E,r)}else uT(e,_,c,r)}o(MP,"validateIndices");function uT(e,t,r,s){try{let n=!1,i=gP.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||we.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),Vn.deepStrictEqual(n,!0)}catch(n){xn=!0,we.error(n),console.error(n)}}o(uT,"validateIndex");function UP(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(UP,"getHashDBI")});var Gc=d((Sk,dT)=>{"use strict";var PP=require("mkcert"),Xo=require("path"),Hc=require("fs-extra"),vc=O(),BP=Y(),HP=T(),Vs=E_();dT.exports=vP;async function vP(){let e=BP.getHdbBasePath(),t=Xo.join(e,HP.LICENSE_KEY_DIR_NAME),r=await PP.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Vs.CERTIFICATE_VALUES.key,caCert:Vs.CERTIFICATE_VALUES.cert});try{await Hc.writeFile(Xo.join(t,Vs.CERTIFICATE_PEM_NAME),r.cert)}catch(s){throw vc.error(s),console.error("There was a problem creating the certificate file. Please check the install log for details."),s}try{await Hc.writeFile(Xo.join(t,Vs.PRIVATEKEY_PEM_NAME),r.key)}catch(s){throw vc.error(s),console.error("There was a problem creating the private key file. Please check the install log for details."),s}try{await Hc.writeFile(Xo.join(t,Vs.CA_PEM_NAME),Vs.CERTIFICATE_VALUES.cert)}catch(s){throw vc.error(s),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),s}}o(vP,"generateKeys")});var RT=d((hk,TT)=>{"use strict";var zo=require("path"),xs=require("fs-extra"),GP=Lc(),ts=O(),ST=st(),qc=Y(),er=T(),hT=I(),qP=require("properties-reader"),FP=mt(),VP=wc(),xP=mr(),kP=require("util"),$P=kP.promisify(xP.searchByValue),YP=Zr(),KP=iT(),WP=gt(),QP=ET(),jP=Gc(),kn=new GP("4.0.0"),fT=[];async function JP(){console.log("Generating new keys.");try{await jP()}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(JP,"generateNewKeys");async function ZP(){console.log("Updating HarperDB nodes."),ts.info("Updating HarperDB nodes.");let e=[];try{let t=new FP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=await $P(t),s=[];for(let i=0,a=r.length;i<a;i++){let _=r[i];if(!WP.NATS_TERM_CONSTRAINTS_RX.test(_.name)){let l=`Node name '${_.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let c={host:_.host,port:_.port};e.push(c);let u=[];for(let l=0,E=_.subscriptions.length;l<E;l++){let h=_.subscriptions[l],S=h.channel.split(":");u.push({schema:S[0],table:S[1],publish:h.publish,subscribe:h.subscribe})}s.push({name:_.name,subscriptions:u,system_info:{hdb_version:er.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(hT.isEmptyOrZeroLength(s))return;let n=new VP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await YP.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{KP.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(ZP,"updateNodes");async function XP(){let e=qc.get(er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(zo.join("config","settings.js"))){ts.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ts.info(t);let r=zo.dirname(e),s=qc.get(er.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=zo.join(s,"backup","4_0_0_upgrade_settings.bak"),i=zo.join(s,er.HDB_CONFIG_FILE);try{ts.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),xs.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{ts.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ts.info("Updating env variables with new settings values");let E=ST.initOldConfig(e);ST.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=hT.getPropsFilePath();xs.accessSync(a,xs.constants.F_OK|xs.constants.R_OK);let c=qP(a).get(er.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
78
|
-
install_user = ${c}`;try{xs.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{qc.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{xs.removeSync(r),console.log(l),ts.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(XP,"updateSettingsFile_4_0_0");kn.async_functions.push(JP);kn.async_functions.push(XP);kn.async_functions.push(QP);kn.async_functions.push(ZP);fT.push(kn);TT.exports=fT});var Fc=d((fk,pT)=>{"use strict";var rs=I(),zP=T(),AT=O(),{DATA_VERSION:eB,UPGRADE_VERSION:tB}=zP.UPGRADE_JSON_FIELD_NAMES_ENUM,mT=jf(),ea=RT(),ss=new Map;mT&&mT.forEach(e=>{ss.set(e.version,e)});ea&&ea.forEach(e=>{ss.set(e.version,e)});ea&&ea.forEach(e=>{ss.set(e.version,e)});function rB(){return[...ss.keys()].sort(rs.compareVersions)}o(rB,"getSortedVersions");function gT(e){let t=e[eB],r=e[tB];return rs.isEmptyOrZeroLength(t)||rs.isEmptyOrZeroLength(r)?(AT.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),AT.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...ss.keys()].sort(rs.compareVersions).filter(function(s){return rs.compareVersions(s,t)>0&&rs.compareVersions(s,r)<=0})}o(gT,"getVersionsForUpgrade");function sB(e){return gT(e).length>0}o(sB,"hasUpgradesRequired");function nB(e){return rs.isEmptyOrZeroLength(e)?null:ss.has(e)?ss.get(e):null}o(nB,"getDirectiveByVersion");pT.exports={getSortedVersions:rB,getDirectiveByVersion:nB,getVersionsForUpgrade:gT,hasUpgradesRequired:sB}});var ra=d((Tk,yT)=>{"use strict";var OT=require("util"),Vc=require("chalk"),iB=require("os"),IT=Zr(),oB=mr(),Ze=T(),CT=Pf(),xc=Cc(),{UpgradeObject:NT}=Gf(),{forceDowngradePrompt:aB}=bc(),_B=kr(),ta=O(),$n=I(),cB=Fs(),uB=Fc(),lB=OT.promisify(oB.searchByValue),kc=OT.promisify(cB.setSchemaDataToGlobal),EB="info_id",dB="2.9.9",SB="3.0.0";async function hB(e){let t=new CT.HdbInfoInsertObject(1,e,e),r=new xc.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await kc(),IT.insert(r)}o(hB,"insertHdbInstallInfo");async function bT(e){let t,r=await LT(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new CT.HdbInfoInsertObject(i,e,e);let a=new xc.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await kc(),IT.insert(a)}o(bT,"insertHdbUpgradeInfo");async function LT(){let e=new xc.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,EB,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=await lB(e)}catch(r){ta.info(r)}return t}o(LT,"getAllHdbInfoRecords");async function fB(){let e=await LT();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(fB,"getLatestHdbInfoRecord");async function TB(){ta.info("Checking if HDB software has been updated");try{let e=_B.version(),t=await fB(),r;if($n.isEmpty(t))r=dB;else if(r=t.data_version_num,$n.compareVersions(r.toString(),e.toString())>0){if(!$n.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(Vc.yellow(`This instance's data was last run on version ${r}`)),console.error(Vc.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${iB.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");$n.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(Vc.yellow(`This instance's data was last run on version ${r}`)),await aB(new NT(r,e))?await bT(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await kc(),RB(r),e.toString()===r.toString())return;let s=new NT(r,e);return uB.hasUpgradesRequired(s)?s:void 0}catch(e){throw ta.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),ta.fatal(e),e}}o(TB,"getVersionUpdateInfo");function RB(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Ze.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!$n.isEmpty(e)&&e<SB)throw console.log(t),new Error(t)}o(RB,"checkIfInstallIsSupported");yT.exports={insertHdbInstallInfo:hB,insertHdbUpgradeInfo:bT,getVersionUpdateInfo:TB}});var PT=d((Rk,UT)=>{"use strict";var $c=require("joi"),{boolean:AB,string:wT,number:mB}=$c.types(),DT=require("fs-extra"),Yn=T(),MT=require("path"),gB=tt();UT.exports=pB;function pB(e){let t=wT.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=$c.object({[Yn.INSTALL_PROMPTS.ROOTPATH]:$c.custom(NB),[Yn.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:mB.min(0),[Yn.INSTALL_PROMPTS.TC_AGREEMENT]:wT.valid("yes","YES","Yes"),[Yn.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Yn.INSTALL_PROMPTS.CLUSTERING_ENABLED]:AB});return gB.validateBySchema(e,r)}o(pB,"installValidator");function NB(e,t){if(DT.existsSync(MT.join(e,"system/hdb_user/data.mdb"))||DT.existsSync(MT.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(NB,"validateRootAvailable")});var HT=d((Ak,BT)=>{"use strict";var OB=require("fs"),Fe=require("path"),tr=T(),na=O(),sa=$(),Yc=Wt();BT.exports=IB;async function IB(e){na.trace("Mounting HarperDB");let t=Fe.join(e,tr.SCHEMA_DIR_NAME,tr.SYSTEM_SCHEMA_NAME);_t(e),_t(Fe.join(e,"backup")),_t(Fe.join(e,"trash")),_t(Fe.join(e,"keys")),_t(Fe.join(e,"keys",tr.LICENSE_FILE_NAME)),_t(Fe.join(e,"log")),_t(Fe.join(e,"doc")),_t(Fe.join(e,"schema")),_t(t),_t(Fe.join(e,tr.TRANSACTIONS_DIR_NAME)),_t(Fe.join(e,"clustering")),_t(Fe.join(e,"custom_functions")),await CB(t)}o(IB,"mountHdb");async function CB(e){let t=uc(),r=po(),s=Object.keys(Yc);for(let n=0;n<s.length;n++){let i=s[n],a,_=Yc[i].hash_attribute;try{let u=new r(tr.SYSTEM_SCHEMA_NAME,i,_);await t(void 0,u),a=await sa.openEnvironment(e,i)}catch(u){throw na.error(`issue creating environment for ${tr.SYSTEM_SCHEMA_NAME}.${i}: ${u}`),u}let c=Yc[i].attributes;for(let u=0;u<c.length;u++){let l=c[u].attribute;try{tr.TIME_STAMP_NAMES.indexOf(l)>=0?await sa.createDBI(a,l,!0):l===_?await sa.createDBI(a,l,!1,!0):await sa.createDBI(a,l,!0,!1)}catch(E){throw na.error(`issue creating dbi for ${tr.SYSTEM_SCHEMA_NAME}.${i}.${l}: ${E}`),E}}}}o(CB,"createLMDBTables");function _t(e,{isRelativeToScript:t=!1}={}){let r=Fe.sep,s=Fe.isAbsolute(e)?r:"",n=t?__dirname:".";e.split("/").reduce((i,a)=>{let _=Fe.resolve(n,i,a);try{_&&_!=="/"&&(OB.mkdirSync(_,{mode:tr.HDB_FILE_PERMISSIONS}),na.info(`Directory ${_} created`))}catch(c){if(c.code!=="EEXIST")throw c}return _},s)}o(_t,"makeDirectory")});var FT=d((mk,qT)=>{var bB=tt(),Kc=require("joi"),{hdb_schema_table:vT}=ps(),GT={schema:vT,table:vT},LB={date:Kc.date().iso().required()},yB={timestamp:Kc.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qT.exports=function(e,t){let r=t==="timestamp"?{...GT,...yB}:{...GT,...LB},s=Kc.object(r);return bB.validateBySchema(e,s)}});var $T=d((gk,kT)=>{var wB=tt(),VT=require("joi"),{hdb_schema_table:xT}=ps(),DB=VT.object({schema:xT,table:xT,hash_values:VT.array().required()});kT.exports=function(e){return wB.validateBySchema(e,DB)}});var jc=d((pk,jT)=>{"use strict";var KT=FT(),MB=$T(),ia=I(),YT=require("moment"),WT=O(),{promisify:UB,callbackify:PB}=require("util"),ns=T(),BB=Fs(),Wc=UB(BB.getTableSchema),Qc=Hs(),{DeleteResponseObject:HB}=Cc(),{handleHDBError:br,hdb_errors:vB}=J(),{HDB_ERROR_MSGS:oa,HTTP_STATUS_CODES:Lr}=vB,GB="records successfully deleted",qB=PB(QT);jT.exports={delete:qB,deleteRecord:QT,deleteFilesBefore:FB,deleteAuditLogsBefore:VB};async function FB(e){let t=KT(e,"date");if(t)throw br(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(!YT(e.date,YT.ISO_8601).isValid())throw br(new Error,oa.INVALID_DATE,Lr.BAD_REQUEST,ns.LOG_LEVELS.ERROR,oa.INVALID_DATE,!0);let s=ia.checkSchemaTableExist(e.schema,e.table);if(s)throw br(new Error,s,Lr.NOT_FOUND,ns.LOG_LEVELS.ERROR,s,!0);try{let n=await Qc.deleteRecordsBefore(e);if(await Wc(e.schema,e.table),WT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}o(FB,"deleteFilesBefore");async function VB(e){let t=KT(e,"timestamp");if(t)throw br(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw br(new Error,oa.INVALID_VALUE("Timestamp"),Lr.BAD_REQUEST,ns.LOG_LEVELS.ERROR,oa.INVALID_VALUE("Timestamp"),!0);let r=ia.checkSchemaTableExist(e.schema,e.table);if(r)throw br(new Error,r,Lr.NOT_FOUND,ns.LOG_LEVELS.ERROR,r,!0);try{let s=await Qc.deleteAuditLogsBefore(e);return await Wc(e.schema,e.table),WT.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}o(VB,"deleteAuditLogsBefore");async function QT(e){let t=MB(e);if(t)throw br(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=ia.checkSchemaTableExist(e.schema,e.table);if(r)throw br(new Error,r,Lr.NOT_FOUND,ns.LOG_LEVELS.ERROR,r,!0);try{await Wc(e.schema,e.table);let s=await Qc.deleteRecords(e);return ia.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${GB}`),s}catch(s){if(s.message===ns.SEARCH_NOT_FOUND_MESSAGE){let n=new HB;return n.message=ns.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(QT,"deleteRecord")});var aa=d((Nk,XT)=>{var xB=require("crypto"),JT=9;function kB(e){let t=YB(JT),r=ZT(e+t);return t+r}o(kB,"createHash");function $B(e,t){let r=e.substr(0,JT),s=r+ZT(t+r);return e===s}o($B,"validateHash");function YB(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}o(YB,"generateSalt");function ZT(e){return xB.createHash("md5").update(e).digest("hex")}o(ZT,"md5");XT.exports={hash:kB,validate:$B}});var eR=d((Ok,zT)=>{var Jc=tt(),De={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 KB(e){return De.password.presence=!0,De.username.presence=!0,De.role.presence=!0,De.active.presence=!0,Jc.validateObject(e,De)}o(KB,"addUserValidation");function WB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Jc.validateObject(e,De)}o(WB,"alterUserValidation");function QB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Jc.validateObject(e,De)}o(QB,"dropUserValidation");zT.exports={addUserValidation:KB,alterUserValidation:WB,dropUserValidation:QB}});var rR=d((Ik,tR)=>{"use strict";var yr=T(),Kn=class{constructor(t=0,r=yr.STORAGE_TYPES_ENUM.LMDB,s=yr.LICENSE_VALUES.API_CALL_DEFAULT,n=yr.RAM_ALLOCATION_ENUM.DEFAULT,i=yr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o(Kn,"BaseLicense");var _a=class extends Kn{constructor(t=0,r=yr.STORAGE_TYPES_ENUM.LMDB,s=yr.LICENSE_VALUES.API_CALL_DEFAULT,n=yr.RAM_ALLOCATION_ENUM.DEFAULT,i=yr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(_a,"ExtendedLicense");tR.exports={BaseLicense:Kn,ExtendedLicense:_a}});var Wn=d((Ck,_R)=>{"use strict";var $s=require("fs-extra"),sR=aa(),nR=require("crypto"),jB=require("moment"),JB=require("uuid").v4,Me=O(),Xc=require("path"),ZB=I(),Xe=T(),XB=rR().ExtendedLicense,ks="invalid license key format",zB="061183",eH="mofi25",tH="aes-256-cbc",rH=16,sH=32,iR=Y();iR.initSync();var Zc;_R.exports={validateLicense:oR,generateFingerPrint:iH,licenseSearch:aR,getLicense:_H};function zc(){return Xc.join(iR.getHdbBasePath(),Xe.LICENSE_KEY_DIR_NAME,Xe.LICENSE_FILE_NAME)}o(zc,"getLicenseDirPath");function nH(){let e=zc();return Xc.join(e,Xe.LICENSE_FILE_NAME)}o(nH,"getLicenseFilePath");function eu(){let e=zc();return Xc.join(e,Xe.REG_KEY_FILE_NAME)}o(eu,"getFingerPrintFilePath");async function iH(){let e=eu();try{return await $s.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await oH();throw Me.error(`Error writing fingerprint file to ${e}`),Me.error(t),new Error("There was an error generating the fingerprint")}}o(iH,"generateFingerPrint");async function oH(){let e=JB(),t=sR.hash(e),r=eu();try{await $s.mkdirp(zc()),await $s.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Me.error(`Error writing fingerprint file to ${r}`),Me.error(s),new Error("There was an error generating the fingerprint")}return t}o(oH,"writeFingerprint");function oR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Xe.STORAGE_TYPES_ENUM.LMDB,api_call:Xe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Xe.RAM_ALLOCATION_ENUM.DEFAULT,version:Xe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Me.error("empty license key passed to validate."),r;let s=eu(),n=!1;try{n=$s.statSync(s)}catch(i){Me.error(i)}if(n){let i;try{i=$s.readFileSync(s,"utf8")}catch{Me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(eH),_=a[1];_=Buffer.concat([Buffer.from(_)],rH);let c=Buffer.concat([Buffer.from(i)],sH),u=nR.createDecipheriv(tH,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=aH(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ks),Me.error(ks),new Error(ks)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(ks),Me.error(ks),new Error(ks)}else r.exp_date=l;r.exp_date<jB().valueOf()&&(r.valid_date=!1),sR.validate(a[1],`${zB}${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||Me.error("Invalid licence"),r}o(oR,"validateLicense");function aH(e,t){try{let r=nR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Me.warn("Check old license failed")}}o(aH,"checkOldLicense");function aR(){let e=new XB;e.api_call=0;let t=[];try{t=$s.readFileSync(nH(),"utf-8").split(Xe.NEW_LINE)}catch(r){r.code==="ENOENT"?Me.info("no license file found"):Me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(ZB.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=oR(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.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Me.error("There was an error parsing the license string."),Me.error(n),e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Xe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Xe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT),Zc=e,e}o(aR,"licenseSearch");async function _H(){return Zc||await aR(),Zc}o(_H,"getLicense")});var Ks=d((bk,pR)=>{"use strict";var ER="username is required",dR="nothing to update, must supply active, role or password to update",SR="password cannot be an empty string",hR="If role is specified, it cannot be empty.",fR="active must be true or false";pR.exports={addUser:fH,alterUser:TH,dropUser:AH,userInfo:mH,listUsers:ua,listUsersExternal:gH,setUsersToGlobal:Qn,findAndValidateUser:OH,getClusterUser:IH,USERNAME_REQUIRED:ER,ALTERUSER_NOTHING_TO_UPDATE:dR,EMPTY_PASSWORD:SR,EMPTY_ROLE:hR,ACTIVE_BOOLEAN:fR};var TR=Zr(),cH=jc(),ru=aa(),RR=eR(),AR=mr(),su=In(),he=I(),mR=require("validate.js"),U=O(),{promisify:nu}=require("util"),iu=qn(),is=T(),cR=gt(),uH=st(),ou=Y(),lH=Wn(),EH=Wt(),{handleHDBError:Mt,hdb_errors:dH}=J(),{HTTP_STATUS_CODES:Ut,AUTHENTICATION_ERROR_MSGS:tu,HDB_ERROR_MSGS:Ys}=dH,{UserEventMsg:au}=Os(),uR=require("lodash"),gR={username:!0,active:!0,role:!0,password:!0},lR=new Map,ca=nu(AR.searchByValue),SH=nu(AR.searchByHash),hH=nu(cH.delete);async function fH(e){let t=mR.cleanAttributes(e,gR),r=RR.addUserValidation(t);if(r)throw Mt(new Error,r.message,Ut.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 ca(s)}catch(u){throw U.error("There was an error searching for a role in add user"),U.error(u),u}if(!n||n.length<1)throw Mt(new Error,Ys.ROLE_NAME_NOT_FOUND(t.role),Ut.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Mt(new Error,Ys.DUP_ROLES_FOUND(t.role),Ut.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=iu.encrypt(t.password)),t.password=ru.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await TR.insert(i)}catch(u){throw U.error("There was an error searching for a user."),U.error(u),u}U.debug(a);try{await Qn()}catch(u){throw U.error("Got an error setting users to global"),U.error(u),u}if(a.skipped_hashes.length===1)throw Mt(new Error,Ys.USER_ALREADY_EXISTS(t.username),Ut.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,he.sendTransactionToSocketCluster(is.INTERNAL_SC_CHANNELS.ADD_USER,c,ou.get(is.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),su.signalUserChange(new au(process.pid)),`${_.username} successfully added`}o(fH,"addUser");async function TH(e){let t=mR.cleanAttributes(e,gR);if(he.isEmptyOrZeroLength(t.username))throw new Error(ER);if(he.isEmptyOrZeroLength(t.password)&&he.isEmptyOrZeroLength(t.role)&&he.isEmptyOrZeroLength(t.active))throw new Error(dR);if(!he.isEmpty(t.password)&&he.isEmptyOrZeroLength(t.password.trim()))throw new Error(SR);if(!he.isEmpty(t.active)&&!he.isBoolean(t.active))throw new Error(fR);let r=RH(t.username);if(!he.isEmpty(t.password)&&!he.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=iu.encrypt(t.password)),t.password=ru.hash(t.password)),t.role==="")throw new Error(hR);if(t.role){let a={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await ca(a)}catch(c){throw U.error("Got an error searching for a role."),U.error(c),c}if(!_||_.length===0){let c=Ys.ALTER_USER_ROLE_NOT_FOUND(t.role);throw U.error(c),Mt(new Error,c,Ut.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Ys.ALTER_USER_DUP_ROLES(t.role);throw U.error(c),Mt(new Error,c,Ut.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await TR.update(s)}catch(a){throw U.error("Error during update."),U.error(a),a}try{await Qn()}catch(a){throw U.error("Got an error setting users to global"),U.error(a),a}let i={user:null};return i.user=t,he.sendTransactionToSocketCluster(is.INTERNAL_SC_CHANNELS.ALTER_USER,i,ou.get(is.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),su.signalUserChange(new au(process.pid)),n}o(TH,"alterUser");function RH(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(RH,"isClusterUser");async function AH(e){try{let t=RR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(he.isEmpty(global.hdb_users.get(e.username)))throw Mt(new Error,Ys.USER_NOT_EXIST(e.username),Ut.NOT_FOUND,void 0,void 0,!0);let s;try{s=await hH(r)}catch(i){throw U.error("Got an error deleting a user."),U.error(i),i}U.debug(s);try{await Qn()}catch(i){throw U.error("Got an error setting users to global."),U.error(i),i}let n={user:null};return n.user=e,he.sendTransactionToSocketCluster(is.INTERNAL_SC_CHANNELS.DROP_USER,n,ou.get(is.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),su.signalUserChange(new au(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(AH,"dropUser");async function mH(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await SH(r)}catch(n){throw U.error("Got an error searching for a role."),U.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw U.error(r),r}return t}o(mH,"userInfo");async function gH(){let e;try{e=await ua()}catch(t){throw U.error("Got an error listing users."),U.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()]}o(gH,"listUsersExternal");async function ua(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=uR.cloneDeep(await ca(e))}catch(r){throw U.error("Got an error searching for roles."),U.error(r),r}if(!he.isEmptyOrZeroLength(t)){let r={};for(let a in t)r[t[a].id]=t[a];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=uR.cloneDeep(await ca(s))}catch(a){throw U.error("Got an error searching for users."),U.error(a),a}let i=new Map;for(let a in n){let _=n[a];_.role=r[n[a].role],pH(_.role),i.set(_.username,_)}return(await lH.getLicense()).enterprise?i:NH(i)}}catch(e){throw U.error("got an error listing users"),U.error(e),he.errorizeMessage(e)}return null}o(ua,"listUsers");function pH(e){try{if(!e){U.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(EH)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){U.error("Got an error trying to set system permissions."),U.error(t)}}o(pH,"appendSystemTablesToRole");function NH(e){try{if(U.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(U.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return U.error("error filtering users."),U.error(t),new Map}}o(NH,"nonEnterpriseFilter");async function Qn(){try{let e=await ua();global.hdb_users=e}catch(e){throw U.error(e),e}}o(Qn,"setUsersToGlobal");async function OH(e,t,r=!0){global.hdb_users||await Qn();let s=global.hdb_users.get(e);if(!s)throw Mt(new Error,tu.GENERIC_AUTH_FAIL,Ut.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Mt(new Error,tu.USER_INACTIVE,Ut.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(lR.get(t)===s.password)return n;if(ru.validate(s.password,t))lR.set(t,s.password);else throw Mt(new Error,tu.GENERIC_AUTH_FAIL,Ut.UNAUTHORIZED,void 0,void 0,!0)}return n}o(OH,"findAndValidateUser");async function IH(){let e=await ua(),t=uH.getConfigFromFile(is.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!he.isEmpty(r))return r.decrypt_hash=iu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+cR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+cR.SERVER_SUFFIX.ADMIN,r}o(IH,"getClusterUser")});var LR=d((Lk,bR)=>{var wr=require("validate.js"),OR=tt(),Ws=T(),{handleHDBError:CH,hdb_errors:bH}=J(),{HDB_ERROR_MSGS:se,HTTP_STATUS_CODES:LH}=bH,_u=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yH={STRUCTURE_USER:"structure_user"},NR=Object.values(Ws.ROLE_TYPES_ENUM),wH="attribute_permissions",DH="attribute_name",{PERMS_CRUD_ENUM:Qs}=Ws,MH=[wH,...Object.values(Qs)],IR=[Qs.READ,Qs.INSERT,Qs.UPDATE],UH=[DH,...IR];function PH(e){let t=_u();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,CR(e,t)}o(PH,"addRoleValidation");function BH(e){let t=_u();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,CR(e,t)}o(BH,"alterRoleValidation");function HH(e){let t=_u();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,OR.validateObject(e,t)}o(HH,"dropRoleValidation");var vH=["operation","role","id","permission","hdb_user","hdb_auth_header"];function CR(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)vH.includes(s[a])||n.push(s[a]);n.length>0&&ae(se.INVALID_ROLE_JSON_KEYS(n),r);let i=OR.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ae(a,r)}),e.permission){let a=GH(e);a&&ae(a,r),NR.forEach(_=>{e.permission[_]&&!wr.isBoolean(e.permission[_])&&ae(se.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(NR.indexOf(a)<0){if(a===yH.STRUCTURE_USER){let c=e.permission[a];if(typeof c=="boolean")continue;if(Array.isArray(c)){for(let u=0,l=c.length;u<l;u++){let E=c[u];global.hdb_schema[E]||ae(se.SCHEMA_NOT_FOUND(E),r)}continue}ae(se.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ae(se.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ae(se.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{MH.includes(l)||ae(se.INVALID_PERM_KEY(l),r,a,c)}),Object.values(Qs).forEach(l=>{wr.isDefined(u[l])?wr.isBoolean(u[l])||ae(se.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ae(se.TABLE_PERM_MISSING(l),r,a,c)}),wr.isDefined(u.attribute_permissions)){if(!wr.isArray(u.attribute_permissions)){ae(se.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ae(se.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:h})=>h),E={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let S=u.attribute_permissions[h];if(Object.keys(S).forEach(R=>{!UH.includes(R)&&R!==Qs.DELETE&&ae(se.INVALID_ATTR_PERM_KEY(R),r,a,c)}),!wr.isDefined(S.attribute_name)){ae(se.ATTR_PERM_MISSING_NAME,r,a,c);continue}let A=S.attribute_name;if(!l.includes(A)){ae(se.INVALID_ATTRIBUTE_IN_PERMS(A),r,a,c);continue}IR.forEach(R=>{wr.isDefined(S[R])?wr.isBoolean(S[R])||ae(se.ATTR_PERM_NOT_BOOLEAN(R,A),r,a,c):ae(se.ATTR_PERM_MISSING(R,A),r,a,c)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let h=`${a}.${c}`;ae(se.MISMATCHED_TABLE_ATTR_PERMS(h),r,a,c)}}}}return qH(r)}o(CR,"customValidate");bR.exports={addRoleValidation:PH,alterRoleValidation:BH,dropRoleValidation:HH};function GH(e){let{operation:t,permission:r}=e;if(t===Ws.OPERATIONS_ENUM.ADD_ROLE||t===Ws.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 se.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ws.ROLE_TYPES_ENUM.SUPER_USER:Ws.ROLE_TYPES_ENUM.CLUSTER_USER;return se.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(GH,"validateNoSUPerms");function qH(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:se.ROLE_PERMS_ERROR,...e};return CH(new Error,s,LH.BAD_REQUEST)}else return null}o(qH,"generateRolePermResponse");function ae(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]}}o(ae,"addPermError")});var BR=d((yk,PR)=>{"use strict";var yR=Zr(),wR=mr(),FH=jc(),lu=LR(),Eu=In(),VH=require("uuid").v4,du=require("util"),xH=Wn(),rr=T(),DR=I(),Su=du.promisify(wR.searchByValue),kH=du.promisify(wR.searchByHash),$H=du.promisify(FH.delete),YH=mt(),KH=ws(),{hdb_errors:WH,handleHDBError:jn}=J(),{HDB_ERROR_MSGS:MR,HTTP_STATUS_CODES:cu}=WH,{UserEventMsg:hu}=Os();PR.exports={addRole:QH,alterRole:JH,dropRole:ZH,listRoles:UR};function uu(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}o(uu,"scrubRoleDetails");async function QH(e){let t=lu.addRoleValidation(e);if(t)throw t;if(!(await xH.getLicense()).enterprise){let a=await UR();if(jH(e,a))throw new Error(`Your current license only supports ${rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${rr.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${rr.BASIC_LICENSE_MAX_NON_CU_ROLES+rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${rr.SUPPORT_HELP_MSG}`)}e=uu(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await Su(s)}catch(a){throw jn(a)}if(n&&n.length>0)throw jn(new Error,MR.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=VH());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yR.insert(i),Eu.signalUserChange(new hu(process.pid)),e=uu(e),e}o(QH,"addRole");function jH(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!DR.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(jH,"checkClusterUserRole");async function JH(e){let t=lu.alterRoleValidation(e);if(t)throw t;e=uu(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await yR.update(r)}catch(s){throw jn(s)}return Eu.signalUserChange(new hu(process.pid)),e}o(JH,"alterRole");async function ZH(e){let t=lu.dropRoleValidation(e);if(t)throw jn(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new KH(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await kH(r);if(s.length===0)throw jn(new Error,MR.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let n=new YH(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await Su(n),a=!1;if(DR.isEmptyOrZeroLength(i)===!1){for(let c=0;c<i.length;c++)if(i[c].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let _={table:"hdb_role",schema:"system",hash_values:[e.id]};return await $H(_),Eu.signalUserChange(new hu(process.pid)),`${s[0].role} successfully deleted`}o(ZH,"dropRole");async function UR(){return Su({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(UR,"listRoles")});var Tu=d((wk,$R)=>{"use strict";var Jn=require("os"),FR=require("inquirer"),vr=require("fs-extra"),XH=require("properties-reader"),os=require("chalk"),Pr=require("path"),zH=require("human-readable-ids").hri,ev=require("ora"),ue=O(),Br=Y(),Zn=I(),fu=ds(),VR=ra(),xR=kr(),y=T(),tv=PT(),rv=HT(),sv=st(),nv=Ks(),iv=BR(),ov=m_(),av=Fs(),_v=require("util").promisify,cv=_v(av.setSchemaDataToGlobal),uv=Gc(),js=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Ue=o(e=>os.magenta.bold(e),"HDB_PROMPT_MSG"),lv="https://harperdb.io/legal/end-user-license-agreement",Hr=Jn.EOL,Dr="",Ev="yes",HR="Starting HarperDB install...",vR="HarperDB installation was successful.",GR="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",dv="An out of date version of HarperDB is already installed.",qR="It appears HarperDB is already installed. Exiting install...",Sv="Aborting install",hv=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),fv=new RegExp(/^[^\s.,*>]+$/),Tv=Jn.homedir(),Rv=Pr.join(Tv,y.HDB_ROOT_DIR_NAME),Av=9925,mv="HDB_ADMIN",gv="CLUSTER_USER",Ve={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ur;$R.exports=pv;async function pv(){if(console.log(Ue(Hr+HR+Hr)),ue.notify(HR),Zn.isEmptyOrZeroLength(Jn.userInfo().uid))throw`Installing user: ${Jn.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=Ov(),t=tv(e);if(t)throw t.message;await Iv(),await Cv(e);let r=await Nv(e),s=ev({prefixText:Ue("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Ur=r[y.INSTALL_PROMPTS.ROOTPATH],Zn.isEmpty(Ur))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Br.setHdbBasePath(Ur),process.env.PM2_LOG_FILE_PATH=Pr.join(Ur,"log","pm2.log"),await rv(Ur),await bv(),await Lv(r),await wv(r),await Dv(r),await uv(),await Mv(),ov(),s.stop(),console.log(Ue(Hr+vR+Hr)),ue.notify(vR)}o(pv,"install");async function Nv(e){ue.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.ROOTPATH],Ve.DESTINATION),name:y.INSTALL_PROMPTS.ROOTPATH,prefix:Dr,default:Rv,validate:async n=>Pt(n)?Pt(n):await vr.pathExists(Pr.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Ue(Ve.DESTINATION)},{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Ve.HDB_PORT),name:y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Dr,default:Av,validate:n=>hv.test(n)?!0:"Invalid port.",message:Ue(Ve.HDB_PORT)},{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Ve.HDB_USERNAME),name:y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Dr,default:mv,validate:n=>Pt(n)?Pt(n):(t=n,!0),message:Ue(Ve.HDB_USERNAME)},{type:"password",when:Mr(e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Ve.HDB_PASS),name:y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Dr,validate:n=>Pt(n)?Pt(n):!0,message:Ue(Ve.HDB_PASS)}];if(Zn.autoCastBoolean(e[y.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.CLUSTERING_NODENAME],Ve.NODE_NAME),name:y.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Dr,default:zH.random(),validate:i=>fv.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Ue(Ve.NODE_NAME)},{type:"input",transformer:js,when:Mr(e[y.INSTALL_PROMPTS.CLUSTERING_USER],Ve.CLUSTER_USERNAME),name:y.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Dr,default:gv,validate:i=>Pt(i)?Pt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Ue(Ve.CLUSTER_USERNAME)},{type:"password",when:Mr(e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Ve.CLUSTER_PASS),name:y.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Dr,validate:i=>Pt(i)?Pt(i):!0,message:Ue(Ve.CLUSTER_PASS)}];r.push(...n)}let s=await FR.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(Nv,"installPrompts");function Mr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Ue(t)} ${os.gray("[hidden]")}`),ue.trace(`${Ue(t)} [hidden]`)):(console.log(`${Ue(t)} ${e}`),ue.trace(`${Ue(t)} ${e}`)),!1):!0}o(Mr,"displayCmdEnvVar");function Pt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Pt,"checkForEmptyValue");function Ov(){let e=Object.keys(y.INSTALL_PROMPTS),t=fu(e),r=fu(Object.keys(y.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=y.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(Ov,"checkForPromptOverride");async function Iv(){ue.trace("Checking for existing install.");let e=Zn.getPropsFilePath(),t=await vr.pathExists(e),r;if(t){ue.trace(`Install found an existing boot prop file at:${e}`);let n=XH(e).get(y.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await vr.pathExists(n)}if(r){if(ue.trace(`Install found existing HDB config at:${e}`),await VR.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${xR.version()}. Exiting install...`;console.log(Hr+os.magenta.bold(dv)),console.log(os.magenta.bold(n)),ue.error(n)}else console.log(Hr+os.magenta.bold(qR)),ue.error(qR);process.exit(0)}}o(Iv,"checkForExistingInstall");async function Cv(e){ue.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${lv}${Hr}and can be viewed by typing or copying and pasting the URL into your web browser.${Hr}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Dr,transformer:js,when:Mr(e[y.INSTALL_PROMPTS.TC_AGREEMENT],t),name:y.INSTALL_PROMPTS.TC_AGREEMENT,message:Ue(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:os.yellow("Please enter 'yes' or 'no'")},s=await FR.prompt([r]);s[y.INSTALL_PROMPTS.TC_AGREEMENT]&&s[y.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Ev&&(console.log(os.yellow(GR)),ue.error(GR),process.exit(0))}o(Cv,"termsAgreement");async function bv(){let e=Pr.join(Ur,y.HDB_CONFIG_FILE),t;try{t=Jn.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
|
|
79
|
-
install_user = ${t}`,s=
|
|
77
|
+
Reindexing upgrade started for transaction logs`),jt.notify("Reindexing upgrade started for transaction logs"),await _h(Hc,!0,e)),jt.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Vn?", but errors occurred":"")}o(AP,"reindexUpgrade");async function _h(e,t,r){let s=await Mt.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],_=Jt.join(e,a.toString());if(a===".DS_Store")continue;let c=await Mt.readdir(_),u=c.length;for(let l=0;l<u;l++){let E=c[l];if(E!==".DS_Store"&&!!Mt.statSync(Jt.join(_,E)).isDirectory())try{await mP(a,E,t),we.info(`Reindexing started for ${a}.${E}`),jt.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await pP(a,E,_,t,r),we.info(`Reindexing completed for ${a}.${E}`),jt.notify(`Reindexing completed for ${a}.${E}`)}catch(T){Vn=!0,T.schema_path=_,T.table_name=E,jt.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),jt.error(T),we.error(T),console.error(T)}}}if(!Vn)try{await Mt.rm(Xo,{recursive:!0})}catch{}}o(_h,"processTables");async function mP(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Jt.join(Xo,n);await Mt.ensureDir(Xo),await Mt.writeFile(i,""),we=hP({level:"debug",formatters:{bindings(){}}},i)}o(mP,"initPinoLogger");var gP=20;async function pP(e,t,r,s,n){let i;try{i=await Je.openEnvironment(r,t,s)}catch(p){if(p.message==="MDB_INVALID: File is not an LMDB file"){jt.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),we.error(p);return}throw p}let a=IP(i.dbis),_=Je.openDBI(i,a),c=Object.keys(i.dbis),u=Je.statDBI(i,a);we.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new fP.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Je.createEnvironment(r,t,!1);Je.createDBI(E,a,!1,!0);let T=[];try{for(let p of _.getRange({start:!1}))p.value=Object.assign({},p.value),T.push(p),s||e==="system"&&(t==="hdb_schema"&&(p.key=p.key.toString(),p.value.name=p.value.name.toString()),t==="hdb_table"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.name=p.value.name.toString()),t==="hdb_attribute"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.table=p.value.table.toString(),p.value.attribute=p.value.attribute.toString())),T.length>gP&&await S();await S()}catch(p){throw Vn=!0,we.error(p),p}async function S(){let p,k=T.map(({value:Ce})=>Ce);s?p=await Promise.all(k.map(Ce=>NP(E,Ce))):p=await EP(E,a,c.filter(Ce=>Ce!=="__blob__"),k,!1);for(let Ce=0,li=T.length;Ce<li;Ce++){let{key:nn,value:Ei}=T[Ce];we.info(`Record hash value: ${nn} hash: ${a}`);let ir;s?ir=p[Ce]:ir=p.written_hashes.indexOf(nn)>-1,Fn(ir,!0),OP(E,a,Ei[a],s),we.info(`Insert success, written hashes: ${p.written_hashes}`),l.increment()}T=[],l.value/l.total*100%10===0&&jt.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),we.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let A=Je.statDBI(i,a),R=Je.statDBI(E,a);if(we.info(`Old stats entry count: ${A.entryCount}. New stats entry count: ${R.entryCount}`),Fn.deepStrictEqual(A.entryCount,R.entryCount),await Je.closeEnvironment(i),await Je.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let p=Jt.join(r,t),k=Jt.join(p,"data.mdb"),Ie=Jt.join(p,"lock.mdb");await Mt.unlink(k),await Mt.unlink(Ie),await Mt.rmdir(p),we.info(`Deleted old environment files from schema folder: ${k}, ${Ie}`)}let L=await Je.openEnvironment(r,t),de=Je.statDBI(L,a);we.info(`New stats: ${JSON.stringify(R)}. New stats after move: ${JSON.stringify(de)}`),Fn.deepStrictEqual(de.entryCount,R.entryCount),await Je.closeEnvironment(L),delete global.lmdb_map[`${e}.${t}`]}o(pP,"processTable");async function NP(e,t){Je.initializeDBIs(e,pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pr.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),TP.isEmpty(t.user_name)||e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(NP,"insertTransaction");function OP(e,t,r,s){let i=e.dbis[t].get(r);Fn.deepStrictEqual(typeof i,"object");let a;if(s){let _={[pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(_)}else a=Object.entries(i);for(let[_,c]of a)if(_!==t&&e.dbis[_]!==void 0&&!SP.isEmptyOrZeroLength(c))if(s&&_==="hash_value")for(let u=0,l=c.length;u<l;u++){let E=c[u];ch(e,_,E,r)}else ch(e,_,c,r)}o(OP,"validateIndices");function ch(e,t,r,s){try{let n=!1,i=dP.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||we.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),Fn.deepStrictEqual(n,!0)}catch(n){Vn=!0,we.error(n),console.error(n)}}o(ch,"validateIndex");function IP(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(IP,"getHashDBI")});var dh=d((uk,Eh)=>{"use strict";var CP={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},bP="certificate.pem",LP="privateKey.pem",yP="ca.pem";Eh.exports={CERTIFICATE_VALUES:CP,CERTIFICATE_PEM_NAME:bP,PRIVATEKEY_PEM_NAME:LP,CA_PEM_NAME:yP}});var Fc=d((lk,Th)=>{"use strict";var wP=require("mkcert"),zo=require("path"),vc=require("fs-extra"),Gc=O(),DP=Y(),qc=h(),Fs=dh(),MP=vr(),UP=We();Th.exports={generateKeys:PP,updateConfigCert:Sh};async function PP(){let e=DP.getHdbBasePath(),t=zo.join(e,qc.LICENSE_KEY_DIR_NAME),r=await wP.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Fs.CERTIFICATE_VALUES.key,caCert:Fs.CERTIFICATE_VALUES.cert}),s=zo.join(t,Fs.CERTIFICATE_PEM_NAME),n=zo.join(t,Fs.PRIVATEKEY_PEM_NAME),i=zo.join(t,Fs.CA_PEM_NAME);try{await vc.writeFile(s,r.cert)}catch(a){throw Gc.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await vc.writeFile(n,r.key)}catch(a){throw Gc.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await vc.writeFile(i,Fs.CERTIFICATE_VALUES.cert)}catch(a){throw Gc.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}Sh(s,n,i)}o(PP,"generateKeys");function Sh(e,t,r){let s=MP(Object.keys(qc.CONFIG_PARAM_MAP),!0),n=qc.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};UP.updateConfigValue(void 0,void 0,i,!1,!0)}o(Sh,"updateConfigCert")});var mh=d((Ek,Ah)=>{"use strict";var ea=require("path"),Nr=require("fs-extra"),BP=yc(),es=O(),fh=We(),Vc=Y(),pt=h(),ta=I(),HP=require("properties-reader"),vP=At(),GP=Dc(),qP=hr(),FP=require("util"),VP=FP.promisify(qP.searchByValue),xP=Jr(),kP=nh(),$P=gt(),YP=lh(),hh=Fc(),KP=Ko(),$n=new BP("4.0.0"),Rh=[],xn,kn;async function WP(){try{if(await KP.upgradeCertsPrompt()){if(console.log("Generating new certificates."),xn){let t=ta.changeExtension(xn,".bak");await Nr.move(xn,t)}if(kn){let t=ta.changeExtension(kn,".bak");await Nr.move(kn,t)}await hh.generateKeys()}else console.log("Using existing certificates."),hh.updateConfigCert(xn,kn,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(WP,"generateNewKeys");async function QP(){console.log("Updating HarperDB nodes."),es.info("Updating HarperDB nodes.");let e=[];try{let t=new vP(pt.SYSTEM_SCHEMA_NAME,pt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=await VP(t),s=[];for(let i=0,a=r.length;i<a;i++){let _=r[i];if(!$P.NATS_TERM_CONSTRAINTS_RX.test(_.name)){let l=`Node name '${_.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let c={host:_.host,port:_.port};e.push(c);let u=[];for(let l=0,E=_.subscriptions.length;l<E;l++){let T=_.subscriptions[l],S=T.channel.split(":");u.push({schema:S[0],table:S[1],publish:T.publish,subscribe:T.subscribe})}s.push({name:_.name,subscriptions:u,system_info:{hdb_version:pt.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(ta.isEmptyOrZeroLength(s))return;let n=new GP(pt.SYSTEM_SCHEMA_NAME,pt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await xP.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{kP.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(QP,"updateNodes");async function jP(){let e=Vc.get(pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(ea.join("config","settings.js"))){es.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),es.info(t);let r=ea.dirname(e),s=Vc.get(pt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=ea.join(s,"backup","4_0_0_upgrade_settings.bak"),i=ea.join(s,pt.HDB_CONFIG_FILE);try{es.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Nr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{es.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),es.info("Updating env variables with new settings values");let E=fh.initOldConfig(e);xn=E[pt.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],kn=E[pt.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],fh.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=ta.getPropsFilePath();Nr.accessSync(a,Nr.constants.F_OK|Nr.constants.R_OK);let c=HP(a).get(pt.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
78
|
+
install_user = ${c}`;try{Nr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{Vc.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{Nr.removeSync(r),console.log(l),es.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(jP,"updateSettingsFile_4_0_0");$n.async_functions.push(jP);$n.async_functions.push(WP);$n.async_functions.push(YP);$n.async_functions.push(QP);Rh.push($n);Ah.exports=Rh});var xc=d((dk,Oh)=>{"use strict";var ts=I(),JP=h(),gh=O(),{DATA_VERSION:ZP,UPGRADE_VERSION:XP}=JP.UPGRADE_JSON_FIELD_NAMES_ENUM,ph=Qf(),ra=mh(),rs=new Map;ph&&ph.forEach(e=>{rs.set(e.version,e)});ra&&ra.forEach(e=>{rs.set(e.version,e)});ra&&ra.forEach(e=>{rs.set(e.version,e)});function zP(){return[...rs.keys()].sort(ts.compareVersions)}o(zP,"getSortedVersions");function Nh(e){let t=e[ZP],r=e[XP];return ts.isEmptyOrZeroLength(t)||ts.isEmptyOrZeroLength(r)?(gh.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),gh.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...rs.keys()].sort(ts.compareVersions).filter(function(s){return ts.compareVersions(s,t)>0&&ts.compareVersions(s,r)<=0})}o(Nh,"getVersionsForUpgrade");function eB(e){return Nh(e).length>0}o(eB,"hasUpgradesRequired");function tB(e){return ts.isEmptyOrZeroLength(e)?null:rs.has(e)?rs.get(e):null}o(tB,"getDirectiveByVersion");Oh.exports={getSortedVersions:zP,getDirectiveByVersion:tB,getVersionsForUpgrade:Nh,hasUpgradesRequired:eB}});var na=d((Sk,Dh)=>{"use strict";var Ch=require("util"),kc=require("chalk"),rB=require("os"),bh=Jr(),sB=hr(),Ze=h(),Lh=Bf(),$c=Cc(),{UpgradeObject:Ih}=qf(),{forceDowngradePrompt:nB}=Ko(),iB=Vr(),sa=O(),Yn=I(),oB=Gs(),aB=xc(),_B=Ch.promisify(sB.searchByValue),Yc=Ch.promisify(oB.setSchemaDataToGlobal),cB="info_id",uB="2.9.9",lB="3.0.0";async function EB(e){let t=new Lh.HdbInfoInsertObject(1,e,e),r=new $c.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yc(),bh.insert(r)}o(EB,"insertHdbInstallInfo");async function yh(e){let t,r=await wh(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new Lh.HdbInfoInsertObject(i,e,e);let a=new $c.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yc(),bh.insert(a)}o(yh,"insertHdbUpgradeInfo");async function wh(){let e=new $c.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,cB,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=await _B(e)}catch(r){sa.info(r)}return t}o(wh,"getAllHdbInfoRecords");async function dB(){let e=await wh();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(dB,"getLatestHdbInfoRecord");async function SB(){sa.info("Checking if HDB software has been updated");try{let e=iB.version(),t=await dB(),r;if(Yn.isEmpty(t))r=uB;else if(r=t.data_version_num,Yn.compareVersions(r.toString(),e.toString())>0){if(!Yn.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(kc.yellow(`This instance's data was last run on version ${r}`)),console.error(kc.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${rB.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Yn.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(kc.yellow(`This instance's data was last run on version ${r}`)),await nB(new Ih(r,e))?await yh(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Yc(),TB(r),e.toString()===r.toString())return;let s=new Ih(r,e);return aB.hasUpgradesRequired(s)?s:void 0}catch(e){throw sa.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),sa.fatal(e),e}}o(SB,"getVersionUpdateInfo");function TB(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Ze.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!Yn.isEmpty(e)&&e<lB)throw console.log(t),new Error(t)}o(TB,"checkIfInstallIsSupported");Dh.exports={insertHdbInstallInfo:EB,insertHdbUpgradeInfo:yh,getVersionUpdateInfo:SB}});var Hh=d((Tk,Bh)=>{"use strict";var Kc=require("joi"),{boolean:fB,string:Mh,number:hB}=Kc.types(),Uh=require("fs-extra"),Kn=h(),Ph=require("path"),RB=tt();Bh.exports=AB;function AB(e){let t=Mh.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Kc.object({[Kn.INSTALL_PROMPTS.ROOTPATH]:Kc.custom(mB),[Kn.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:hB.min(0),[Kn.INSTALL_PROMPTS.TC_AGREEMENT]:Mh.valid("yes","YES","Yes"),[Kn.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Kn.INSTALL_PROMPTS.CLUSTERING_ENABLED]:fB});return RB.validateBySchema(e,r)}o(AB,"installValidator");function mB(e,t){if(Uh.existsSync(Ph.join(e,"system/hdb_user/data.mdb"))||Uh.existsSync(Ph.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(mB,"validateRootAvailable")});var Gh=d((fk,vh)=>{"use strict";var gB=require("fs"),qe=require("path"),Zt=h(),oa=O(),ia=$(),Wc=Yt();vh.exports=pB;async function pB(e){oa.trace("Mounting HarperDB");let t=qe.join(e,Zt.SCHEMA_DIR_NAME,Zt.SYSTEM_SCHEMA_NAME);_t(e),_t(qe.join(e,"backup")),_t(qe.join(e,"trash")),_t(qe.join(e,"keys")),_t(qe.join(e,"keys",Zt.LICENSE_FILE_NAME)),_t(qe.join(e,"log")),_t(qe.join(e,"doc")),_t(qe.join(e,"schema")),_t(t),_t(qe.join(e,Zt.TRANSACTIONS_DIR_NAME)),_t(qe.join(e,"clustering")),_t(qe.join(e,"custom_functions")),await NB(t)}o(pB,"mountHdb");async function NB(e){let t=uc(),r=No(),s=Object.keys(Wc);for(let n=0;n<s.length;n++){let i=s[n],a,_=Wc[i].hash_attribute;try{let u=new r(Zt.SYSTEM_SCHEMA_NAME,i,_);await t(void 0,u),a=await ia.openEnvironment(e,i)}catch(u){throw oa.error(`issue creating environment for ${Zt.SYSTEM_SCHEMA_NAME}.${i}: ${u}`),u}let c=Wc[i].attributes;for(let u=0;u<c.length;u++){let l=c[u].attribute;try{Zt.TIME_STAMP_NAMES.indexOf(l)>=0?await ia.createDBI(a,l,!0):l===_?await ia.createDBI(a,l,!1,!0):await ia.createDBI(a,l,!0,!1)}catch(E){throw oa.error(`issue creating dbi for ${Zt.SYSTEM_SCHEMA_NAME}.${i}.${l}: ${E}`),E}}}}o(NB,"createLMDBTables");function _t(e,{isRelativeToScript:t=!1}={}){let r=qe.sep,s=qe.isAbsolute(e)?r:"",n=t?__dirname:".";e.split("/").reduce((i,a)=>{let _=qe.resolve(n,i,a);try{_&&_!=="/"&&(gB.mkdirSync(_,{mode:Zt.HDB_FILE_PERMISSIONS}),oa.info(`Directory ${_} created`))}catch(c){if(c.code!=="EEXIST")throw c}return _},s)}o(_t,"makeDirectory")});var xh=d((hk,Vh)=>{var OB=tt(),Qc=require("joi"),{hdb_schema_table:qh}=ms(),Fh={schema:qh,table:qh},IB={date:Qc.date().iso().required()},CB={timestamp:Qc.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Vh.exports=function(e,t){let r=t==="timestamp"?{...Fh,...CB}:{...Fh,...IB},s=Qc.object(r);return OB.validateBySchema(e,s)}});var Kh=d((Rk,Yh)=>{var bB=tt(),kh=require("joi"),{hdb_schema_table:$h}=ms(),LB=kh.object({schema:$h,table:$h,hash_values:kh.array().required()});Yh.exports=function(e){return bB.validateBySchema(e,LB)}});var Zc=d((Ak,Zh)=>{"use strict";var Qh=xh(),yB=Kh(),aa=I(),Wh=require("moment"),jh=O(),{promisify:wB,callbackify:DB}=require("util"),ss=h(),MB=Gs(),jc=wB(MB.getTableSchema),Jc=Ps(),{DeleteResponseObject:UB}=Cc(),{handleHDBError:Or,hdb_errors:PB}=J(),{HDB_ERROR_MSGS:_a,HTTP_STATUS_CODES:Ir}=PB,BB="records successfully deleted",HB=DB(Jh);Zh.exports={delete:HB,deleteRecord:Jh,deleteFilesBefore:vB,deleteAuditLogsBefore:GB};async function vB(e){let t=Qh(e,"date");if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);if(!Wh(e.date,Wh.ISO_8601).isValid())throw Or(new Error,_a.INVALID_DATE,Ir.BAD_REQUEST,ss.LOG_LEVELS.ERROR,_a.INVALID_DATE,!0);let s=aa.checkSchemaTableExist(e.schema,e.table);if(s)throw Or(new Error,s,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,s,!0);try{let n=await Jc.deleteRecordsBefore(e);if(await jc(e.schema,e.table),jh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}o(vB,"deleteFilesBefore");async function GB(e){let t=Qh(e,"timestamp");if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Or(new Error,_a.INVALID_VALUE("Timestamp"),Ir.BAD_REQUEST,ss.LOG_LEVELS.ERROR,_a.INVALID_VALUE("Timestamp"),!0);let r=aa.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,r,!0);try{let s=await Jc.deleteAuditLogsBefore(e);return await jc(e.schema,e.table),jh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}o(GB,"deleteAuditLogsBefore");async function Jh(e){let t=yB(e);if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);let r=aa.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,r,!0);try{await jc(e.schema,e.table);let s=await Jc.deleteRecords(e);return aa.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BB}`),s}catch(s){if(s.message===ss.SEARCH_NOT_FOUND_MESSAGE){let n=new UB;return n.message=ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(Jh,"deleteRecord")});var ca=d((mk,eR)=>{var qB=require("crypto"),Xh=9;function FB(e){let t=xB(Xh),r=zh(e+t);return t+r}o(FB,"createHash");function VB(e,t){let r=e.substr(0,Xh),s=r+zh(t+r);return e===s}o(VB,"validateHash");function xB(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}o(xB,"generateSalt");function zh(e){return qB.createHash("md5").update(e).digest("hex")}o(zh,"md5");eR.exports={hash:FB,validate:VB}});var rR=d((gk,tR)=>{var Xc=tt(),De={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 kB(e){return De.password.presence=!0,De.username.presence=!0,De.role.presence=!0,De.active.presence=!0,Xc.validateObject(e,De)}o(kB,"addUserValidation");function $B(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Xc.validateObject(e,De)}o($B,"alterUserValidation");function YB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Xc.validateObject(e,De)}o(YB,"dropUserValidation");tR.exports={addUserValidation:kB,alterUserValidation:$B,dropUserValidation:YB}});var nR=d((pk,sR)=>{"use strict";var Cr=h(),Wn=class{constructor(t=0,r=Cr.STORAGE_TYPES_ENUM.LMDB,s=Cr.LICENSE_VALUES.API_CALL_DEFAULT,n=Cr.RAM_ALLOCATION_ENUM.DEFAULT,i=Cr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o(Wn,"BaseLicense");var ua=class extends Wn{constructor(t=0,r=Cr.STORAGE_TYPES_ENUM.LMDB,s=Cr.LICENSE_VALUES.API_CALL_DEFAULT,n=Cr.RAM_ALLOCATION_ENUM.DEFAULT,i=Cr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(ua,"ExtendedLicense");sR.exports={BaseLicense:Wn,ExtendedLicense:ua}});var Qn=d((Nk,uR)=>{"use strict";var xs=require("fs-extra"),iR=ca(),oR=require("crypto"),KB=require("moment"),WB=require("uuid").v4,Me=O(),eu=require("path"),QB=I(),Xe=h(),jB=nR().ExtendedLicense,Vs="invalid license key format",JB="061183",ZB="mofi25",XB="aes-256-cbc",zB=16,eH=32,aR=Y();aR.initSync();var zc;uR.exports={validateLicense:_R,generateFingerPrint:rH,licenseSearch:cR,getLicense:iH};function tu(){return eu.join(aR.getHdbBasePath(),Xe.LICENSE_KEY_DIR_NAME,Xe.LICENSE_FILE_NAME)}o(tu,"getLicenseDirPath");function tH(){let e=tu();return eu.join(e,Xe.LICENSE_FILE_NAME)}o(tH,"getLicenseFilePath");function ru(){let e=tu();return eu.join(e,Xe.REG_KEY_FILE_NAME)}o(ru,"getFingerPrintFilePath");async function rH(){let e=ru();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await sH();throw Me.error(`Error writing fingerprint file to ${e}`),Me.error(t),new Error("There was an error generating the fingerprint")}}o(rH,"generateFingerPrint");async function sH(){let e=WB(),t=iR.hash(e),r=ru();try{await xs.mkdirp(tu()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Me.error(`Error writing fingerprint file to ${r}`),Me.error(s),new Error("There was an error generating the fingerprint")}return t}o(sH,"writeFingerprint");function _R(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Xe.STORAGE_TYPES_ENUM.LMDB,api_call:Xe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Xe.RAM_ALLOCATION_ENUM.DEFAULT,version:Xe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Me.error("empty license key passed to validate."),r;let s=ru(),n=!1;try{n=xs.statSync(s)}catch(i){Me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{Me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(ZB),_=a[1];_=Buffer.concat([Buffer.from(_)],zB);let c=Buffer.concat([Buffer.from(i)],eH),u=oR.createDecipheriv(XB,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=nH(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vs),Me.error(Vs),new Error(Vs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Vs),Me.error(Vs),new Error(Vs)}else r.exp_date=l;r.exp_date<KB().valueOf()&&(r.valid_date=!1),iR.validate(a[1],`${JB}${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||Me.error("Invalid licence"),r}o(_R,"validateLicense");function nH(e,t){try{let r=oR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Me.warn("Check old license failed")}}o(nH,"checkOldLicense");function cR(){let e=new jB;e.api_call=0;let t=[];try{t=xs.readFileSync(tH(),"utf-8").split(Xe.NEW_LINE)}catch(r){r.code==="ENOENT"?Me.info("no license file found"):Me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(QB.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=_R(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.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Me.error("There was an error parsing the license string."),Me.error(n),e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Xe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Xe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT),zc=e,e}o(cR,"licenseSearch");async function iH(){return zc||await cR(),zc}o(iH,"getLicense")});var $s=d((Ok,OR)=>{"use strict";var SR="username is required",TR="nothing to update, must supply active, role or password to update",fR="password cannot be an empty string",hR="If role is specified, it cannot be empty.",RR="active must be true or false";OR.exports={addUser:dH,alterUser:SH,dropUser:fH,userInfo:hH,listUsers:Ea,listUsersExternal:RH,setUsersToGlobal:jn,findAndValidateUser:gH,getClusterUser:pH,USERNAME_REQUIRED:SR,ALTERUSER_NOTHING_TO_UPDATE:TR,EMPTY_PASSWORD:fR,EMPTY_ROLE:hR,ACTIVE_BOOLEAN:RR};var AR=Jr(),oH=Zc(),nu=ca(),mR=rR(),gR=hr(),iu=On(),Te=I(),pR=require("validate.js"),U=O(),{promisify:ou}=require("util"),au=Gn(),ns=h(),lR=gt(),aH=We(),_u=Y(),_H=Qn(),cH=Yt(),{handleHDBError:Ut,hdb_errors:uH}=J(),{HTTP_STATUS_CODES:Pt,AUTHENTICATION_ERROR_MSGS:su,HDB_ERROR_MSGS:ks}=uH,{UserEventMsg:cu}=ps(),ER=require("lodash"),NR={username:!0,active:!0,role:!0,password:!0},dR=new Map,la=ou(gR.searchByValue),lH=ou(gR.searchByHash),EH=ou(oH.delete);async function dH(e){let t=pR.cleanAttributes(e,NR),r=mR.addUserValidation(t);if(r)throw Ut(new Error,r.message,Pt.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 la(s)}catch(u){throw U.error("There was an error searching for a role in add user"),U.error(u),u}if(!n||n.length<1)throw Ut(new Error,ks.ROLE_NAME_NOT_FOUND(t.role),Pt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ut(new Error,ks.DUP_ROLES_FOUND(t.role),Pt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=au.encrypt(t.password)),t.password=nu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await AR.insert(i)}catch(u){throw U.error("There was an error searching for a user."),U.error(u),u}U.debug(a);try{await jn()}catch(u){throw U.error("Got an error setting users to global"),U.error(u),u}if(a.skipped_hashes.length===1)throw Ut(new Error,ks.USER_ALREADY_EXISTS(t.username),Pt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.ADD_USER,c,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),`${_.username} successfully added`}o(dH,"addUser");async function SH(e){let t=pR.cleanAttributes(e,NR);if(Te.isEmptyOrZeroLength(t.username))throw new Error(SR);if(Te.isEmptyOrZeroLength(t.password)&&Te.isEmptyOrZeroLength(t.role)&&Te.isEmptyOrZeroLength(t.active))throw new Error(TR);if(!Te.isEmpty(t.password)&&Te.isEmptyOrZeroLength(t.password.trim()))throw new Error(fR);if(!Te.isEmpty(t.active)&&!Te.isBoolean(t.active))throw new Error(RR);let r=TH(t.username);if(!Te.isEmpty(t.password)&&!Te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=au.encrypt(t.password)),t.password=nu.hash(t.password)),t.role==="")throw new Error(hR);if(t.role){let a={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await la(a)}catch(c){throw U.error("Got an error searching for a role."),U.error(c),c}if(!_||_.length===0){let c=ks.ALTER_USER_ROLE_NOT_FOUND(t.role);throw U.error(c),Ut(new Error,c,Pt.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=ks.ALTER_USER_DUP_ROLES(t.role);throw U.error(c),Ut(new Error,c,Pt.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await AR.update(s)}catch(a){throw U.error("Error during update."),U.error(a),a}try{await jn()}catch(a){throw U.error("Got an error setting users to global"),U.error(a),a}let i={user:null};return i.user=t,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.ALTER_USER,i,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),n}o(SH,"alterUser");function TH(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(TH,"isClusterUser");async function fH(e){try{let t=mR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Te.isEmpty(global.hdb_users.get(e.username)))throw Ut(new Error,ks.USER_NOT_EXIST(e.username),Pt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await EH(r)}catch(i){throw U.error("Got an error deleting a user."),U.error(i),i}U.debug(s);try{await jn()}catch(i){throw U.error("Got an error setting users to global."),U.error(i),i}let n={user:null};return n.user=e,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.DROP_USER,n,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(fH,"dropUser");async function hH(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await lH(r)}catch(n){throw U.error("Got an error searching for a role."),U.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw U.error(r),r}return t}o(hH,"userInfo");async function RH(){let e;try{e=await Ea()}catch(t){throw U.error("Got an error listing users."),U.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()]}o(RH,"listUsersExternal");async function Ea(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=ER.cloneDeep(await la(e))}catch(r){throw U.error("Got an error searching for roles."),U.error(r),r}if(!Te.isEmptyOrZeroLength(t)){let r={};for(let a in t)r[t[a].id]=t[a];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=ER.cloneDeep(await la(s))}catch(a){throw U.error("Got an error searching for users."),U.error(a),a}let i=new Map;for(let a in n){let _=n[a];_.role=r[n[a].role],AH(_.role),i.set(_.username,_)}return(await _H.getLicense()).enterprise?i:mH(i)}}catch(e){throw U.error("got an error listing users"),U.error(e),Te.errorizeMessage(e)}return null}o(Ea,"listUsers");function AH(e){try{if(!e){U.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(cH)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){U.error("Got an error trying to set system permissions."),U.error(t)}}o(AH,"appendSystemTablesToRole");function mH(e){try{if(U.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(U.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return U.error("error filtering users."),U.error(t),new Map}}o(mH,"nonEnterpriseFilter");async function jn(){try{let e=await Ea();global.hdb_users=e}catch(e){throw U.error(e),e}}o(jn,"setUsersToGlobal");async function gH(e,t,r=!0){global.hdb_users||await jn();let s=global.hdb_users.get(e);if(!s)throw Ut(new Error,su.GENERIC_AUTH_FAIL,Pt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ut(new Error,su.USER_INACTIVE,Pt.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(dR.get(t)===s.password)return n;if(nu.validate(s.password,t))dR.set(t,s.password);else throw Ut(new Error,su.GENERIC_AUTH_FAIL,Pt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(gH,"findAndValidateUser");async function pH(){let e=await Ea(),t=aH.getConfigFromFile(ns.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Te.isEmpty(r))return r.decrypt_hash=au.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lR.SERVER_SUFFIX.ADMIN,r}o(pH,"getClusterUser")});var wR=d((Ik,yR)=>{var br=require("validate.js"),CR=tt(),Ys=h(),{handleHDBError:NH,hdb_errors:OH}=J(),{HDB_ERROR_MSGS:se,HTTP_STATUS_CODES:IH}=OH,uu=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),CH={STRUCTURE_USER:"structure_user"},IR=Object.values(Ys.ROLE_TYPES_ENUM),bH="attribute_permissions",LH="attribute_name",{PERMS_CRUD_ENUM:Ks}=Ys,yH=[bH,...Object.values(Ks)],bR=[Ks.READ,Ks.INSERT,Ks.UPDATE],wH=[LH,...bR];function DH(e){let t=uu();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,LR(e,t)}o(DH,"addRoleValidation");function MH(e){let t=uu();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,LR(e,t)}o(MH,"alterRoleValidation");function UH(e){let t=uu();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,CR.validateObject(e,t)}o(UH,"dropRoleValidation");var PH=["operation","role","id","permission","hdb_user","hdb_auth_header"];function LR(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)PH.includes(s[a])||n.push(s[a]);n.length>0&&ae(se.INVALID_ROLE_JSON_KEYS(n),r);let i=CR.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ae(a,r)}),e.permission){let a=BH(e);a&&ae(a,r),IR.forEach(_=>{e.permission[_]&&!br.isBoolean(e.permission[_])&&ae(se.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(IR.indexOf(a)<0){if(a===CH.STRUCTURE_USER){let c=e.permission[a];if(typeof c=="boolean")continue;if(Array.isArray(c)){for(let u=0,l=c.length;u<l;u++){let E=c[u];global.hdb_schema[E]||ae(se.SCHEMA_NOT_FOUND(E),r)}continue}ae(se.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ae(se.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ae(se.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{yH.includes(l)||ae(se.INVALID_PERM_KEY(l),r,a,c)}),Object.values(Ks).forEach(l=>{br.isDefined(u[l])?br.isBoolean(u[l])||ae(se.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ae(se.TABLE_PERM_MISSING(l),r,a,c)}),br.isDefined(u.attribute_permissions)){if(!br.isArray(u.attribute_permissions)){ae(se.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ae(se.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:T})=>T),E={read:!1,insert:!1,update:!1};for(let T in u.attribute_permissions){let S=u.attribute_permissions[T];if(Object.keys(S).forEach(R=>{!wH.includes(R)&&R!==Ks.DELETE&&ae(se.INVALID_ATTR_PERM_KEY(R),r,a,c)}),!br.isDefined(S.attribute_name)){ae(se.ATTR_PERM_MISSING_NAME,r,a,c);continue}let A=S.attribute_name;if(!l.includes(A)){ae(se.INVALID_ATTRIBUTE_IN_PERMS(A),r,a,c);continue}bR.forEach(R=>{br.isDefined(S[R])?br.isBoolean(S[R])||ae(se.ATTR_PERM_NOT_BOOLEAN(R,A),r,a,c):ae(se.ATTR_PERM_MISSING(R,A),r,a,c)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let T=`${a}.${c}`;ae(se.MISMATCHED_TABLE_ATTR_PERMS(T),r,a,c)}}}}return HH(r)}o(LR,"customValidate");yR.exports={addRoleValidation:DH,alterRoleValidation:MH,dropRoleValidation:UH};function BH(e){let{operation:t,permission:r}=e;if(t===Ys.OPERATIONS_ENUM.ADD_ROLE||t===Ys.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 se.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ys.ROLE_TYPES_ENUM.SUPER_USER:Ys.ROLE_TYPES_ENUM.CLUSTER_USER;return se.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(BH,"validateNoSUPerms");function HH(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:se.ROLE_PERMS_ERROR,...e};return NH(new Error,s,IH.BAD_REQUEST)}else return null}o(HH,"generateRolePermResponse");function ae(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]}}o(ae,"addPermError")});var vR=d((Ck,HR)=>{"use strict";var DR=Jr(),MR=hr(),vH=Zc(),du=wR(),Su=On(),GH=require("uuid").v4,Tu=require("util"),qH=Qn(),Xt=h(),UR=I(),fu=Tu.promisify(MR.searchByValue),FH=Tu.promisify(MR.searchByHash),VH=Tu.promisify(vH.delete),xH=At(),kH=Ls(),{hdb_errors:$H,handleHDBError:Jn}=J(),{HDB_ERROR_MSGS:PR,HTTP_STATUS_CODES:lu}=$H,{UserEventMsg:hu}=ps();HR.exports={addRole:YH,alterRole:WH,dropRole:QH,listRoles:BR};function Eu(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}o(Eu,"scrubRoleDetails");async function YH(e){let t=du.addRoleValidation(e);if(t)throw t;if(!(await qH.getLicense()).enterprise){let a=await BR();if(KH(e,a))throw new Error(`Your current license only supports ${Xt.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Xt.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${Xt.BASIC_LICENSE_MAX_NON_CU_ROLES+Xt.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Xt.SUPPORT_HELP_MSG}`)}e=Eu(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await fu(s)}catch(a){throw Jn(a)}if(n&&n.length>0)throw Jn(new Error,PR.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=GH());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await DR.insert(i),Su.signalUserChange(new hu(process.pid)),e=Eu(e),e}o(YH,"addRole");function KH(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!UR.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(KH,"checkClusterUserRole");async function WH(e){let t=du.alterRoleValidation(e);if(t)throw t;e=Eu(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await DR.update(r)}catch(s){throw Jn(s)}return Su.signalUserChange(new hu(process.pid)),e}o(WH,"alterRole");async function QH(e){let t=du.dropRoleValidation(e);if(t)throw Jn(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new kH(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await FH(r);if(s.length===0)throw Jn(new Error,PR.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let n=new xH(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await fu(n),a=!1;if(UR.isEmptyOrZeroLength(i)===!1){for(let c=0;c<i.length;c++)if(i[c].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let _={table:"hdb_role",schema:"system",hash_values:[e.id]};return await VH(_),Su.signalUserChange(new hu(process.pid)),`${s[0].role} successfully deleted`}o(QH,"dropRole");async function BR(){return fu({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(BR,"listRoles")});var Au=d((bk,KR)=>{"use strict";var Zn=require("os"),xR=require("inquirer"),Pr=require("fs-extra"),jH=require("properties-reader"),is=require("chalk"),Dr=require("path"),JH=require("human-readable-ids").hri,ZH=require("ora"),ue=O(),Mr=Y(),Xn=I(),Ru=vr(),kR=na(),$R=Vr(),y=h(),XH=Hh(),zH=Gh(),ev=We(),tv=$s(),rv=vR(),sv=m_(),nv=Gs(),iv=require("util").promisify,ov=iv(nv.setSchemaDataToGlobal),av=Fc(),Ws=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Ue=o(e=>is.magenta.bold(e),"HDB_PROMPT_MSG"),_v="https://harperdb.io/legal/end-user-license-agreement",Ur=Zn.EOL,Lr="",cv="yes",GR="Starting HarperDB install...",qR="HarperDB installation was successful.",FR="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",uv="An out of date version of HarperDB is already installed.",VR="It appears HarperDB is already installed. Exiting install...",lv="Aborting install",Ev=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),dv=new RegExp(/^[^\s.,*>]+$/),Sv=Zn.homedir(),Tv=Dr.join(Sv,y.HDB_ROOT_DIR_NAME),fv=9925,hv="HDB_ADMIN",Rv="CLUSTER_USER",Fe={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},wr;KR.exports=Av;async function Av(){if(console.log(Ue(Ur+GR+Ur)),ue.notify(GR),Xn.isEmptyOrZeroLength(Zn.userInfo().uid))throw`Installing user: ${Zn.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=gv(),t=XH(e);if(t)throw t.message;await pv(),await Nv(e);let r=await mv(e),s=ZH({prefixText:Ue("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),wr=r[y.INSTALL_PROMPTS.ROOTPATH],Xn.isEmpty(wr))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Mr.setHdbBasePath(wr),process.env.PM2_LOG_FILE_PATH=Dr.join(wr,"log","pm2.log"),await zH(wr),await Ov(),await Iv(r),await bv(r),await Lv(r),await av.generateKeys(),await yv(),sv(),s.stop(),console.log(Ue(Ur+qR+Ur)),ue.notify(qR)}o(Av,"install");async function mv(e){ue.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.ROOTPATH],Fe.DESTINATION),name:y.INSTALL_PROMPTS.ROOTPATH,prefix:Lr,default:Tv,validate:async n=>Bt(n)?Bt(n):await Pr.pathExists(Dr.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Ue(Fe.DESTINATION)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Fe.HDB_PORT),name:y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Lr,default:fv,validate:n=>Ev.test(n)?!0:"Invalid port.",message:Ue(Fe.HDB_PORT)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Fe.HDB_USERNAME),name:y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lr,default:hv,validate:n=>Bt(n)?Bt(n):(t=n,!0),message:Ue(Fe.HDB_USERNAME)},{type:"password",when:yr(e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Fe.HDB_PASS),name:y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lr,validate:n=>Bt(n)?Bt(n):!0,message:Ue(Fe.HDB_PASS)}];if(Xn.autoCastBoolean(e[y.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_NODENAME],Fe.NODE_NAME),name:y.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lr,default:JH.random(),validate:i=>dv.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Ue(Fe.NODE_NAME)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_USER],Fe.CLUSTER_USERNAME),name:y.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lr,default:Rv,validate:i=>Bt(i)?Bt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Ue(Fe.CLUSTER_USERNAME)},{type:"password",when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Fe.CLUSTER_PASS),name:y.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lr,validate:i=>Bt(i)?Bt(i):!0,message:Ue(Fe.CLUSTER_PASS)}];r.push(...n)}let s=await xR.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(mv,"installPrompts");function yr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Ue(t)} ${is.gray("[hidden]")}`),ue.trace(`${Ue(t)} [hidden]`)):(console.log(`${Ue(t)} ${e}`),ue.trace(`${Ue(t)} ${e}`)),!1):!0}o(yr,"displayCmdEnvVar");function Bt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Bt,"checkForEmptyValue");function gv(){let e=Object.keys(y.INSTALL_PROMPTS),t=Ru(e),r=Ru(Object.keys(y.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=y.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(gv,"checkForPromptOverride");async function pv(){ue.trace("Checking for existing install.");let e=Xn.getPropsFilePath(),t=await Pr.pathExists(e),r;if(t){ue.trace(`Install found an existing boot prop file at:${e}`);let n=jH(e).get(y.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Pr.pathExists(n)}if(r){if(ue.trace(`Install found existing HDB config at:${e}`),await kR.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${$R.version()}. Exiting install...`;console.log(Ur+is.magenta.bold(uv)),console.log(is.magenta.bold(n)),ue.error(n)}else console.log(Ur+is.magenta.bold(VR)),ue.error(VR);process.exit(0)}}o(pv,"checkForExistingInstall");async function Nv(e){ue.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${_v}${Ur}and can be viewed by typing or copying and pasting the URL into your web browser.${Ur}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Lr,transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.TC_AGREEMENT],t),name:y.INSTALL_PROMPTS.TC_AGREEMENT,message:Ue(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:is.yellow("Please enter 'yes' or 'no'")},s=await xR.prompt([r]);s[y.INSTALL_PROMPTS.TC_AGREEMENT]&&s[y.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==cv&&(console.log(is.yellow(FR)),ue.error(FR),process.exit(0))}o(Nv,"termsAgreement");async function Ov(){let e=Dr.join(wr,y.HDB_CONFIG_FILE),t;try{t=Zn.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
|
|
79
|
+
install_user = ${t}`,s=Xn.getHomeDir(),n=Dr.join(s,y.HDB_HOME_DIR_NAME),i=Dr.join(n,y.LICENSE_KEY_DIR_NAME);try{Pr.mkdirpSync(n,{mode:y.HDB_FILE_PERMISSIONS}),Pr.mkdirpSync(i,{mode:y.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${y.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=Dr.join(n,y.BOOT_PROPS_FILE_NAME);try{await Pr.writeFile(a,r)}catch(_){throw ue.error(`There was an error creating the boot file at path: ${a}`),_}Mr.setProperty(y.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Mr.setProperty(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Mr.setProperty(Mr.BOOT_PROPS_FILE_PATH,a)}o(Ov,"createBootPropertiesFile");async function Iv(e){ue.trace("Creating HarperDB config file");let t=Ru(Object.keys(y.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{ev.createConfigFile(t),Mr.initSync()}catch(r){Cv(r)}}o(Iv,"createConfigFile");function Cv(e){ue.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(lv);let t=Dr.resolve(Mr.get(Mr.BOOT_PROPS_FILE_PATH),"../");t&&Pr.removeSync(t),wr&&Pr.removeSync(wr),process.exit(1)}o(Cv,"rollbackInstall");async function YR(e,t){ue.trace("Creating admin user"),await ov();let r;try{r=await rv.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await tv.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(YR,"createAdminUser");async function bv(e){ue.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await YR(t,r),delete e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(bv,"createSuperUser");async function Lv(e){ue.trace("Creating Cluster user.");let t;e[y.INSTALL_PROMPTS.CLUSTERING_USER]&&e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[y.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await YR({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[y.INSTALL_PROMPTS.CLUSTERING_USER],delete e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Lv,"createClusterUser");async function yv(){let e=$R.version();if(e)await kR.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(yv,"insertHdbVersionInfo")});var mu=d((Lk,QR)=>{var wv=require("os"),WR=Y();QR.exports={checkPermission:Dv};function Dv(){if(wv.userInfo().username!==WR.get("install_user"))throw new Error(`Error: Must execute as ${WR.get("install_user")}`)}o(Dv,"checkPermission")});var JR=d((yk,jR)=>{"use strict";var Mv=gt(),da=class{constructor(t,r,s,n,i,a,_,c,u,l,E,T,S){this.port=t,a===null&&(a=void 0),this.server_name=r+Mv.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:a,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.accounts={SYS:{users:T},HDB:{users:S}},this.system_account="SYS"}};o(da,"HubConfigObject");jR.exports=da});var zR=d((wk,XR)=>{"use strict";var ZR=gt(),Sa=class{constructor(t,r,s,n,i,a,_,c,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+ZR.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+ZR.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};o(Sa,"LeafConfigObject");XR.exports=Sa});var tA=d((Dk,eA)=>{"use strict";var Ta=class{constructor(t,r){this.user=t,this.password=r}};o(Ta,"HdbUserObject");eA.exports=Ta});var sA=d((Mk,rA)=>{"use strict";var Uv=gt(),fa=class{constructor(t,r){this.user=t+Uv.SERVER_SUFFIX.ADMIN,this.password=r}};o(fa,"SysUserObject");rA.exports=fa});var iA=d((Uk,nA)=>{"use strict";var Pv=Ps();nA.exports={writeTransaction:Bv};function Bv(e,t,r){return Pv.writeTransaction(e,t,r)}o(Bv,"writeTransaction")});var ma=d(($k,IA)=>{"use strict";var zt=Y();zt.initSync();var Hv=require("fs-extra"),vv=require("semver"),si=require("path"),{monotonicFactory:Gv}=require("ulidx"),qv=Gv(),aA=require("util"),_A=require("child_process"),Fv=aA.promisify(_A.exec),Vv=_A.spawn,j=gt(),te=h(),Cu=I(),er=O(),ha=Gn(),xv=iA(),zn=We(),{encode:Nu,decode:cA}=require("msgpackr"),{isEmpty:os}=Cu,uA=$s(),Pk=Ls(),kv=hr(),Bk=aA.promisify(kv.searchByHash),{connect:$v,StorageType:lA,RetentionPolicy:EA,AckPolicy:dA,DeliverPolicy:Ou,NatsConnection:Hk,JetStreamManager:vk,JetStreamClient:Gk,StringCodec:qk,JSONCodec:Yv,createInbox:bu,StreamSource:Fk,headers:Kv,toJsMsg:Wv,nuid:Vk,JetStreamOptions:xk,ErrorCode:oA,nanos:kk}=require("nats"),{PACKAGE_ROOT:Qv}=h(),jv=an(),SA=Yv(),Jv="clustering",Zv=jv.engines[j.NATS_SERVER_NAME],Xv=si.join(Qv,"dependencies"),Iu=si.join(Xv,`${process.platform}-${process.arch}`,j.NATS_BINARY_NAME),gu,pu,ei,ti,ri,Nt;IA.exports={runCommand:TA,checkNATSServerInstalled:zv,createConnection:Lu,getConnection:Ra,getJetStreamManager:Qs,getJetStream:fA,getNATSReferences:ct,getServerList:tG,createLocalStream:yu,listStreams:hA,deleteLocalStream:rG,getServerConfig:ni,listRemoteStreams:sG,viewStream:nG,publishToStream:iG,createWorkQueueStream:oG,addSourceToWorkStream:RA,request:aG,removeSourceFromWorkStream:mA,reloadNATS:wu,reloadNATSHub:_G,reloadNATSLeaf:cG,extractServerName:AA,requestErrorHandler:uG,updateWorkStream:lG,createLocalTableStream:pA,createTableStreams:EG,purgeTableStream:NA,purgeSchemaTableStreams:dG,getStreamInfo:SG,updateNodeNameLocalStreams:TG,closeConnection:eG};async function TA(e,t=void 0){let{stdout:r,stderr:s}=await Fv(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
80
80
|
`,""));return r.replace(`
|
|
81
|
-
`,"")}o(dA,"runCommand");async function rG(){try{await qv.access(Nu)}catch{return!1}let e=await dA(`${Nu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Fv.eq(t,eG)}o(rG,"checkNATSServerInstalled");async function Cu(e,t,r,s=!0,n="127.0.0.1"){return Wv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:Bt.get(z.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}o(Cu,"createConnection");async function sG(){pt&&(await pt.close(),pt=void 0)}o(sG,"closeConnection");async function fa(){if(!pt){let e=await _A.getClusterUser();if(as(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Bt.get(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);pt=await Cu(t,e.username,e.decrypt_hash)}return pt}o(fa,"getConnection");async function Js(){if(ei)return ei;as(pt)&&await fa();let{domain:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(as(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ei=await pt.jetstreamManager({domain:e}),ei}o(Js,"getJetStreamManager");async function SA(){if(ti)return ti;as(pt)&&await fa();let{domain:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(as(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ti=pt.jetstream({domain:e}),ti}o(SA,"getJetStream");async function ct(){let e=pt||await fa(),t=ei||await Js(),r=ti||await SA();return{connection:e,jsm:t,js:r}}o(ct,"getNATSReferences");async function nG(){let e=Bt.get(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await _A.getClusterUser(),s=await Cu(e,t,r),n=Iu(),i=s.subscribe(n),a=[],_=(async()=>{for await(let c of i)a.push(EA.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Ou.async_set_timeout(50),await i.drain(),await s.close(),await _,a}o(nG,"getServerList");async function bu(e,t){let{jsm:r}=await ct();await r.streams.add({name:e,storage:cA.File,retention:uA.Limits,subjects:t})}o(bu,"createLocalStream");async function hA(){let{jsm:e}=await ct(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(hA,"listStreams");async function iG(e){let{jsm:t}=await ct();await t.streams.delete(e)}o(iG,"deleteLocalStream");async function oG(e){let{connection:t}=await ct(),r=[],s=Iu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(EA.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(oG,"listRemoteStreams");async function aG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ct(),i=xv(),a=[],_={ack_policy:lA.None,durable_name:i,deliver_subject:i,deliver_policy:pu.All};t&&(_.deliver_policy=pu.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=Jv(l),h=aA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:h,originators:[]},A=[];if(E.headers){let R=E.headers.get("originators");R&&(A=R.split(","),S.originators=A)}a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return a;throw c}}o(aG,"viewStream");async function _G(e,t,r=[],s=[]){sr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ct(),a=await Ta(),_=`${e}.${a}`,c=jv();s.push(a),c.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{sr.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,gu(r[u]),{headers:c})}catch(E){if(E.code&&E.code.toString()==="503")sr.trace(`publishToStream creating stream: ${t}`),await bu(t,[_]),await i.publish(_,gu(r[u]),{headers:c});else throw E}}o(_G,"publishToStream");function si(e){e=e.toLowerCase();let t=ri.join(Bt.get(z.CONFIG_PARAMS.ROOTPATH),zv);if(e===z.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return as(mu)&&(mu={port:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.HUB,config_file:j.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ri.join(t,j.PID_FILES.HUB),hdb_nats_path:t}),mu;if(e===z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return as(Au)&&(Au={port:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,config_file:j.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xn.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,pid_file_path:ri.join(t,j.PID_FILES.LEAF),hdb_nats_path:t}),Au;sr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(si,"getServerConfig");async function cG(e){let{jsm:t}=await ct(),r=await Ta();try{await t.streams.add({name:e.stream_name,storage:cA.File,retention:uA.Workqueue,subjects:[`${j.SUBJECT_PREFIXES.MSGID}.${r}`,`${j.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:lA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:pu.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`});else throw s}}o(cG,"createWorkQueueStream");async function fA(e,t,r){let{jsm:s}=await ct(),n=await s.streams.info(t),i=TA(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=ha.createNatsTableStreamName(_,c),l=i===e,E,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,L=n.config.sources.length;R<L;R++)if(E=n.config.sources[R],h=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;await AA(_,c,E,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:a,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}o(fA,"addSourceToWorkStream");function TA(e){return e.split(".")[1]}o(TA,"extractServerName");async function RA(e,t,r){let{schema:s,table:n}=r,i=ha.createNatsTableStreamName(s,n),{jsm:a}=await ct(),_=await a.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await a.streams.update(t,_.config),await AA(s,n,u,t)}o(RA,"removeSourceFromWorkStream");async function AA(e,t,r,s){let n=await Js(),i;try{i=pA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{sr.error("Error purging source subject",i,"from work stream",s)}}o(AA,"purgeSourceFromWorkStream");async function uG(e,t,r=2e3,s=Iu()){if(!Ou.isObject(t))throw new Error("data param must be an object");let n=gu(t),{connection:i}=await ct(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return aA(_.data)}o(uG,"request");function Lu(e){return new Promise(async(t,r)=>{let s=$v(Nu,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(Lu,"reloadNATS");async function lG(){let{pid_file_path:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Lu(e)}o(lG,"reloadNATSHub");async function EG(){let{pid_file_path:e}=si(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Lu(e)}o(EG,"reloadNATSLeaf");function dG(e,t,r){let s;switch(e.code){case nA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(dG,"requestErrorHandler");async function SG(e,t){let r=t+j.SERVER_SUFFIX.LEAF;await Yv.writeTransaction(z.SYSTEM_SCHEMA_NAME,z.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await fA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await RA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(SG,"updateWorkStream");async function mA(e,t){let r=ha.createNatsTableStreamName(e,t),s=await Ta(),n=pA(e,t,s);await bu(r,[n])}o(mA,"createLocalTableStream");async function hG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await mA(s,n)}}o(hG,"createTableStreams");async function gA(e,t){if(Bt.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ha.createNatsTableStreamName(e,t),{jsm:s}=await ct();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")sr.warn(r);else throw r}}o(gA,"purgeTableStream");async function fG(e,t){if(Bt.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await gA(e,t[r])}o(fG,"purgeSchemaTableStreams");async function TG(e){return(await Js()).streams.info(e)}o(TG,"getStreamInfo");function pA(e,t,r){return`${j.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(pA,"createSubjectName");async function Ta(){if(zn)return zn;if(zn=(await Js())?.nc?.info?.server_name,zn===void 0)throw new Error("Unable to get jetstream manager server name");return zn}o(Ta,"getJsmServerName");async function RG(){let e=await Js(),t=await Ta(),r=await hA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=i.split(".");if(a[a.length-1]!==t){if(n.name===j.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;sr.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===j.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;sr.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(j.WORK_QUEUE_CONSUMER_NAMES.stream_name,j.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${j.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");sr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}o(RG,"updateNodeNameLocalStreams")});var Ca=d((Qk,CA)=>{"use strict";var Zs=require("path"),pa=require("fs-extra"),AG=QR(),mG=ZR(),gG=zR(),pG=tA(),yu=Ks(),zs=I(),ut=st(),ga=T(),Aa=gt(),{CONFIG_PARAMS:fe}=ga,Na=O(),Oa=Y(),OA=qn(),wu=Ra(),Xs="clustering",NG=1e4,IA=5;CA.exports={generateNatsConfig:OG,removeNatsConfig:IG};async function OG(e=!1,t=void 0){Oa.initSync();let r=Oa.get(fe.ROOTPATH),s=Zs.join(r,Xs,Aa.PID_FILES.HUB),n=Zs.join(r,Xs,Aa.PID_FILES.LEAF),i=Zs.join(r,Xs,"leaf"),a=Zs.join(r,Xs,Aa.NATS_CONFIG_FILES.HUB_SERVER),_=Zs.join(r,Xs,Aa.NATS_CONFIG_FILES.LEAF_SERVER),c=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERTIFICATE),u=ut.getConfigFromFile(fe.CLUSTERING_TLS_PRIVATEKEY),l=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERT_AUTH),E=ut.getConfigFromFile(fe.CLUSTERING_TLS_INSECURE),h=ut.getConfigFromFile(fe.CLUSTERING_NODENAME),S=ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wu.checkNATSServerInstalled()||Ia("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await yu.listUsers(),R=ut.getConfigFromFile(fe.CLUSTERING_USER),L=await yu.getClusterUser();(zs.isEmpty(L)||L.active!==!0)&&Ia(`invalid cluster user '${R}'`),e||(await ma(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ma(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ma(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),await ma(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let de=[],p=[];for(let[_r,cr]of A.entries())cr.role.role===ga.ROLE_TYPES_ENUM.CLUSTER_USER&&cr.active&&(de.push(new pG(cr.username,OA.decrypt(cr.hash))),p.push(new gG(cr.username,OA.decrypt(cr.hash))));let k=[],{hub_routes:Ie}=ut.getClusteringRoutes();if(!zs.isEmptyOrZeroLength(Ie))for(let _r of Ie)k.push(`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@${_r.host}:${_r.port}`);let Ce=new AG(ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,l,E,S,ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NAME),ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),k,de,p);t=zs.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ga.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pa.writeJson(a,Ce),Na.trace(`Hub server config written to ${a}`));let ui=`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,an=`tls://${L.uri_encoded_name}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,li=new mG(ut.getConfigFromFile(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ui],[an],de,p,c,u,l,E);(t===void 0||t===ga.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pa.writeJson(_,li),Na.trace(`Leaf server config written to ${_}`))}o(OG,"generateNatsConfig");async function ma(e){let t=Oa.get(e);zs.isEmpty(t)&&Ia(`port undefined for '${e}'`),await zs.isPortTaken(t)&&Ia(`'${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.`)}o(ma,"isPortAvailable");function Ia(e){let t=`Error generating clustering config: ${e}`;Na.error(t),console.error(t),process.exit(1)}o(Ia,"generateNatsConfigError");async function IG(e){let{port:t,config_file:r}=wu.getServerConfig(e),{username:s,decrypt_hash:n}=await yu.getClusterUser(),i=0,a=500;for(;i<IA;){try{let u=await wu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Na.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=IA)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await zs.async_set_timeout(a*i)}let _="0".repeat(NG),c=Zs.join(Oa.get(fe.ROOTPATH),Xs,r);await pa.writeFile(c,_),await pa.remove(c)}o(IG,"removeNatsConfig")});var Mu=d((jk,UA)=>{"use strict";var ee=Y(),bA=Wn(),g=T(),Du=gt(),le=require("path"),{PACKAGE_ROOT:ba}=T(),ne="/dev/null",en=le.join(ba,"launchServiceScripts"),LA=le.join(ba,"utility/scripts"),CG=le.join(LA,g.HDB_RESTART_SCRIPT),yA=le.resolve(ba,"dependencies",`${process.platform}-${process.arch}`,Du.NATS_BINARY_NAME),pe,Ne;function Ht(){(pe===void 0||Ne===void 0)&&(ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}o(Ht,"initLogConfig");function wA(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.IPC),t={name:g.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:g.SERVICE_SERVERS_CWD.IPC};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:g.SERVICE_SERVERS.IPC}}o(wA,"generateIPCServerConfig");function DA(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.HDB),t=bA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.HDB,script:g.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ee.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:en};return pe||(s.out_file=ne,s.error_file=ne),s}o(DA,"generateHDBServerConfig");function MA(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=bA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:g.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ee.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:en};return pe||(s.out_file=ne,s.error_file=ne),s}o(MA,"generateCFServerConfig");function bG(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Du.NATS_CONFIG_FILES.HUB_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:yA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(bG,"generateNatsHubServerConfig");function LG(){Ht(),ee.initSync(),pe=ee.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=ee.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Du.NATS_CONFIG_FILES.LEAF_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:yA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(LG,"generateNatsLeafServerConfig");function yG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en};return pe||(t.out_file=ne,t.error_file=ne),t}o(yG,"generateNatsIngestServiceConfig");function wG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en};return pe||(t.out_file=ne,t.error_file=ne),t}o(wG,"generateNatsReplyServiceConfig");function DG(){Ht(),ee.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:g.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:en,autorestart:!1};return pe||(t.out_file=ne,t.error_file=ne),t}o(DG,"generateClusteringUpgradeV4ServiceConfig");function MG(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.PM2),t={name:g.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:LA};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:CG}}o(MG,"generateRestart");function UG(e){Ht();let t=le.join(Ne,g.PROCESS_LOG_NAMES.JOBS),r=le.join(ba,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:en,autorestart:!1};return pe||(s.out_file=ne,s.error_file=ne),{...s,script:le.join(r,"jobProcess.js")}}o(UG,"generateJobConfig");function PG(){return{apps:[wA(),DA(),MA()]}}o(PG,"generateAllServiceConfigs");UA.exports={generateAllServiceConfigs:PG,generateIPCServerConfig:wA,generateHDBServerConfig:DA,generateCFServerConfig:MA,generateRestart:MG,generateNatsHubServerConfig:bG,generateNatsLeafServerConfig:LG,generateNatsIngestServiceConfig:yG,generateNatsReplyServiceConfig:wG,generateClusteringUpgradeV4ServiceConfig:DG,generateJobConfig:UG}});var BA=d((Jk,PA)=>{var BG=tt(),HG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};PA.exports=function(e){return BG.validateObject(e,HG)}});var vA=d((Zk,HA)=>{"use strict";var vG={OPERATION:"operation",REFRESH:"refresh"},La=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(La,"JWTTokens");var ya=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(ya,"JWTRSAKeys");HA.exports={JWTTokens:La,TOKEN_TYPE_ENUM:vG,JWTRSAKeys:ya}});var xA=d((Xk,VA)=>{"use strict";var ii=require("jsonwebtoken"),Uu=require("fs-extra"),Pu=I(),lt=T(),{handleHDBError:xe,hdb_errors:GG}=J(),{HTTP_STATUS_CODES:ke,AUTHENTICATION_ERROR_MSGS:$e}=GG,ni=O(),GA=aa(),vu=Ks(),qG=Zr().update,FG=wc(),VG=In(),{UserEventMsg:xG}=Os(),Gr=Y();Gr.initSync();var Bu=require("path"),{JWTTokens:kG,JWTRSAKeys:$G,TOKEN_TYPE_ENUM:wa}=vA(),YG=Gr.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gr.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",KG=Gr.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gr.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Da="RS256",Hu;VA.exports={createTokens:WG,validateOperationToken:jG,refreshOperationToken:QG,validateRefreshToken:FA};async function WG(e){if(Pu.isEmpty(e)||typeof e!="object")throw xe(new Error,$e.INVALID_AUTH_OBJECT,ke.BAD_REQUEST,void 0,void 0,!0);if(Pu.isEmpty(e.username))throw xe(new Error,$e.USERNAME_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);if(Pu.isEmpty(e.password))throw xe(new Error,$e.PASSWORD_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vu.findAndValidateUser(e.username,e.password),!t)throw xe(new Error,$e.INVALID_CREDENTIALS,ke.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw ni.error(h),xe(new Error,$e.INVALID_CREDENTIALS,ke.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ma(),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},a=await qA(i,r.private_key,r.passphrase),_=await ii.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:KG,algorithm:Da,subject:wa.REFRESH}),c=GA.hash(_),u=new FG(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await qG(u)}catch(h){ni.error(h),E=h}if(E!==void 0||l.skipped_hashes.length>0)throw xe(new Error,$e.REFRESH_TOKEN_SAVE_FAILED,ke.INTERNAL_SERVER_ERROR);return VG.signalUserChange(new xG(process.pid)),new kG(a,_)}o(WG,"createTokens");async function qA(e,t,r){return await ii.sign(e,{key:t,passphrase:r},{expiresIn:YG,algorithm:Da,subject:wa.OPERATION})}o(qA,"signOperationToken");async function Ma(){if(Hu===void 0)try{let e=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bu.join(Gr.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Uu.readFile(e)).toString(),n=(await Uu.readFile(t)).toString(),i=(await Uu.readFile(r)).toString();Hu=new $G(i,n,s)}catch(e){throw ni.error(e),xe(new Error,$e.NO_ENCRYPTION_KEYS,ke.INTERNAL_SERVER_ERROR)}return Hu}o(Ma,"getJWTRSAKeys");async function QG(e){if(!e)throw xe(new Error,$e.INVALID_BODY,ke.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw xe(new Error,$e.REFRESH_TOKEN_REQUIRED,ke.BAD_REQUEST,void 0,void 0,!0);await FA(e.refresh_token);let t=await Ma(),r=await ii.decode(e.refresh_token);return{operation_token:await qA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(QG,"refreshOperationToken");async function jG(e){try{let t=await Ma(),r=await ii.verify(e,t.public_key,{algorithms:Da,subject:wa.OPERATION});return await vu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ni.warn(t),t.name&&t.name==="TokenExpiredError"?xe(new Error,$e.TOKEN_EXPIRED,ke.FORBIDDEN):xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED)}}o(jG,"validateOperationToken");async function FA(e){let t;try{let r=await Ma(),s=await ii.verify(e,r.public_key,{algorithms:Da,subject:wa.REFRESH});t=await vu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ni.warn(r),r.name&&r.name==="TokenExpiredError"?xe(new Error,$e.TOKEN_EXPIRED,ke.FORBIDDEN):xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED)}if(!GA.validate(t.refresh_token,e))throw xe(new Error,$e.INVALID_TOKEN,ke.UNAUTHORIZED);return t}o(FA,"validateRefreshToken")});var KA=d((e$,YA)=>{"use strict";var JG=BA(),tn=require("passport"),ZG=require("passport-local").Strategy,XG=require("passport-http").BasicStrategy,zG=require("util"),eq=Ks(),$A=zG.callbackify(eq.findAndValidateUser),zk=et(),tq=T(),kA=xA();tn.use(new ZG(function(e,t,r){$A(e,t,r)}));tn.use(new XG(function(e,t,r){$A(e,t,r)}));tn.serializeUser(function(e,t){t(null,e)});tn.deserializeUser(function(e,t){t(null,e)});function rq(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,_){return a?r(a):_?r(null,_):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":tn.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===tq.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?kA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):kA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:tn.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(rq,"authorize");function sq(e,t){let r=JG(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!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 a=i[e.schema].tables[e.table].attribute_permissions;for(let _ in a)e.attributes.indexOf(a[_].attribute_name)>-1&&!a[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[_].attribute_name} `))}return t(null,s)}o(sq,"checkPermissions");YA.exports={authorize:rq,checkPermissions:sq}});var QA=d((t$,WA)=>{"use strict";var Ua=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(Ua,"Node");var Pa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(Pa,"NodeSubscription");WA.exports={Node:Ua,NodeSubscription:Pa}});var JA=d((r$,jA)=>{"use strict";var nq=T().OPERATIONS_ENUM,Ba=class{constructor(t,r,s,n=void 0){this.operation=nq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Ba,"UpsertObject");jA.exports=Ba});var XA=d((s$,ZA)=>{"use strict";var Ha=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ha,"RemotePayloadObject");var va=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(va,"RemotePayloadSubscription");ZA.exports={RemotePayloadObject:Ha,RemotePayloadSubscription:va}});var em=d((n$,zA)=>{"use strict";var Ga=class{constructor(t,r,s=0,n=0,i=0,a=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=a}};o(Ga,"TableSizeObject");zA.exports=Ga});var nm=d((i$,sm)=>{"use strict";var iq=em(),tm=require("path"),rm=Z(),oq=Te(),rn=$(),aq=O();sm.exports=_q;async function _q(e){let t=new iq;try{let r=tm.join(rm.getBaseSchemaPath(),e.schema.toString()),s=await rn.openEnvironment(r,e.name),n=rn.statDBI(s,e.hash_attribute),i=tm.join(rm.getTransactionAuditStorePath(),e.schema.toString()),a=await rn.openEnvironment(i,e.name,!0),_=rn.statDBI(a,oq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await rn.environmentDataSize(r,e.name),u=await rn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){aq.warn(`unable to stat table dbi due to ${r}`)}return t}o(_q,"lmdbGetTableSize")});var om=d((o$,im)=>{"use strict";var cq=T(),qa=class{constructor(t){this.operator=cq.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};o(qa,"SystemInformationOperation");im.exports=qa});var _m=d((a$,am)=>{"use strict";var Fa=class{constructor(t,r,s,n,i,a,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=_}};o(Fa,"SystemInformationObject");am.exports=Fa});var um=d((c$,cm)=>{"use strict";var Oe=require("systeminformation"),sn=O(),uq=T(),lq=nm(),Eq=Ho(),dq=Y();dq.initSync();var _$=om(),Sq=_m(),Va;cm.exports={getHDBProcessInfo:Vu,getNetworkInfo:ku,getDiskInfo:xu,getMemoryInfo:Fu,getCPUInfo:qu,getTimeInfo:Gu,getSystemInformation:$u,systemInformation:hq,getTableSize:Yu};function Gu(){return Oe.time()}o(Gu,"getTimeInfo");async function qu(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await Oe.cpu();l.cpu_speed=await Oe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:L,cpus:de,...p}=await Oe.currentLoad();return p.cpus=[],de.forEach(k=>{let{raw_load:Ie,raw_load_idle:Ce,raw_load_irq:ui,raw_load_nice:an,raw_load_system:li,raw_load_user:_r,...cr}=k;p.cpus.push(cr)}),l.current_load=p,l}catch(e){return sn.error(`error in getCPUInfo: ${e}`),{}}}o(qu,"getCPUInfo");async function Fu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Oe.mem();return n}catch(e){return sn.error(`error in getMemoryInfo: ${e}`),{}}}o(Fu,"getMemoryInfo");async function Vu(){let e={core:[],clustering:[]};try{return(await Oe.processes()).list.forEach(r=>{r.params.includes(uq.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return sn.error(`error in getHDBProcessInfo: ${t}`),e}}o(Vu,"getHDBProcessInfo");async function xu(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Oe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await Oe.fsStats();return e.read_write=u,e.size=await Oe.fsSize(),e}catch(t){return sn.error(`error in getDiskInfo: ${t}`),e}}o(xu,"getDiskInfo");async function ku(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Oe.networkInterfaceDefault(),e.latency=await Oe.inetChecksite("google.com"),(await Oe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...h}=s;e.interfaces.push(h)}),(await Oe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e.connections=await Oe.networkConnections(),e}catch(t){return sn.error(`error in getNetworkInfo: ${t}`),e}}o(ku,"getNetworkInfo");async function $u(){if(Va!==void 0)return Va;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await Oe.osInfo();e=_;let c=await Oe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Va=e,Va}catch(t){return sn.error(`error in getSystemInformation: ${t}`),e}}o($u,"getSystemInformation");async function Yu(){let e=[],t=await Eq.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await lq(s));return e}o(Yu,"getTableSize");async function hq(e){let t=new Sq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $u(),t.time=Gu(),t.cpu=await qu(),t.memory=await Fu(),t.disk=await xu(),t.network=await ku(),t.harperdb_processes=await Vu(),t.table_size=await Yu(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $u();break;case"time":t.time=Gu();break;case"cpu":t.cpu=await qu();break;case"memory":t.memory=await Fu();break;case"disk":t.disk=await xu();break;case"network":t.network=await ku();break;case"harperdb_processes":t.harperdb_processes=await Vu();break;case"table_size":t.table_size=await Yu();break;default:break}return t}o(hq,"systemInformation")});var hm=d((E$,Sm)=>{"use strict";var fq=Zr(),Ku=I(),Wu=require("util"),_s=T(),lm=Y();lm.initSync();var Tq=KA(),Em=mr(),{Node:u$,NodeSubscription:l$}=QA(),Rq=ws(),Aq=JA(),{RemotePayloadObject:mq,RemotePayloadSubscription:gq}=XA(),{handleHDBError:pq,hdb_errors:Nq}=J(),{HTTP_STATUS_CODES:Oq,HDB_ERROR_MSGS:Iq}=Nq,Cq=mt(),bq=um(),Lq=kr(),yq=Wu.promisify(Tq.authorize),wq=Wu.promisify(Em.searchByHash),Dq=Wu.promisify(Em.searchByValue);Sm.exports={authHeaderToUser:Mq,isEmpty:Uq,getNodeRecord:Pq,upsertNodeRecord:Bq,buildNodePayloads:Hq,checkClusteringEnabled:vq,getAllNodeRecords:Gq,getSystemInfo:qq,reverseSubscription:dm};async function Mq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await yq(t,null),e}o(Mq,"authHeaderToUser");function Uq(e){return e==null}o(Uq,"isEmpty");async function Pq(e){let t=new Rq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return wq(t)}o(Pq,"getNodeRecord");async function Bq(e){let t=new Aq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return fq.upsert(t)}o(Bq,"upsertNodeRecord");function dm(e){if(Ku.isEmpty(e.subscribe)||Ku.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}o(dm,"reverseSubscription");function Hq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=Ku.getTableHashAttribute(c,u),{subscribe:E,publish:h}=dm(_),S=new gq(c,u,l,h,E,_.start_time);n.push(S)}return new mq(r,t,n,s)}o(Hq,"buildNodePayloads");function vq(){if(!lm.get(_s.CONFIG_PARAMS.CLUSTERING_ENABLED))throw pq(new Error,Iq.CLUSTERING_NOT_ENABLED,Oq.BAD_REQUEST,void 0,void 0,!0)}o(vq,"checkClusteringEnabled");async function Gq(){let e=new Cq(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Dq(e)}o(Gq,"getAllNodeRecords");async function qq(){let e=await bq.getSystemInformation();return{hdb_version:Lq.version(),node_version:e.node_version,platform:e.platform}}o(qq,"getSystemInfo")});var nn=d((d$,Cm)=>{"use strict";var D=T(),xa=I(),oi=Ca(),ka=Ra(),Fq=gt(),G=require("pm2"),Vq=require("fs-extra"),nr=Mu(),Ye=Y(),ir=O(),xq=Mu(),kq=hm(),$q=require("util"),Tm=$q.promisify(require("child_process").exec),Rm=require("path");Cm.exports={start:cs,stop:Ya,reload:mm,restart:gm,list:ju,describe:Ka,connect:vt,kill:Nm,startAllServices:eF,startService:$a,getUniqueServicesList:Ju,restartAllServices:tF,stopAllServices:rF,isServiceRegistered:Om,reloadStopStart:Qu,restartHdb:pm,deleteProcess:Xq,configureLogRotate:iF,startClustering:Im,isHdbRestartRunning:zq,isClusteringRunning:aF,stopClustering:oF,reloadClustering:_F};var{PACKAGE_ROOT:Yq}=T(),Kq="2.7.0",Am=Rm.join(Yq,"node_modules/pm2/bin/pm2"),Wq="Log rotate installed.",Qq="Error installing log rotate.",jq="Log rotate updated.",Jq="Error updating log rotate.",Zq="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function vt(){return new Promise((e,t)=>{G.connect((r,s)=>{r&&t(r),e(s)})})}o(vt,"connect");function cs(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.start(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(cs,"start");function Ya(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.stop(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.delete(e,(i,a)=>{i&&(G.disconnect(),r(s)),G.disconnect(),t(a)})})})}o(Ya,"stop");function mm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.reload(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(mm,"reload");function gm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.restart(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(gm,"restart");function Xq(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.delete(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Xq,"deleteProcess");async function pm(){await cs(xq.generateRestart())}o(pm,"restartHdb");async function zq(){let e=await ju();for(let t in e)if(e[t].name===D.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(zq,"isHdbRestartRunning");function ju(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.list((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(ju,"list");function Ka(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.describe(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Ka,"describe");function Nm(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.killDaemon((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Nm,"kill");async function eF(){try{await Im(),await cs(nr.generateAllServiceConfigs())}catch(e){throw G.disconnect(),e}}o(eF,"startAllServices");async function $a(e){try{let t;switch(e=e.toLowerCase(),e){case D.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=nr.generateIPCServerConfig();break;case D.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=nr.generateHDBServerConfig();break;case D.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=nr.generateCFServerConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=nr.generateNatsIngestServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=nr.generateNatsReplyServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=nr.generateNatsHubServerConfig(),await cs(t),await oi.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=nr.generateNatsLeafServerConfig(),await cs(t),await oi.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=nr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cs(t)}catch(t){throw G.disconnect(),t}}o($a,"startService");async function Ju(){try{let e=await ju(),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 G.disconnect(),e}}o(Ju,"getUniqueServicesList");async function tF(e=[]){try{let t=!1,r=await Ju();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],a=i.name;e.includes(a)||(i.exec_mode==="cluster_mode"?a===D.PROCESS_DESCRIPTORS.HDB?t=!0:await Qu(a):await gm(a))}t&&await Qu(D.PROCESS_DESCRIPTORS.HDB)}catch(t){throw G.disconnect(),t}}o(tF,"restartAllServices");async function rF(){try{let e=await Ju();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ya(s.name)}if(await Nm(),Ye.get(D.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Vq.readFile(Rm.join(Ye.get(D.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),D.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){ir.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw G.disconnect(),e}}o(rF,"stopAllServices");async function Om(e){return!xa.isEmptyOrZeroLength(await Ka(e))}o(Om,"isServiceRegistered");async function Qu(e){let t=e===D.PROCESS_DESCRIPTORS.HDB?Ye.get(D.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Ye.get(D.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ka(e),s=xa.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===D.PROCESS_DESCRIPTORS.HDB?ir.error(Zq):(await Ya(e),await $a(e)):e===D.PROCESS_DESCRIPTORS.HDB?await pm():await mm(e)}o(Qu,"reloadStopStart");function sF(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.stop(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(sF,"stopLogrotate");async function nF(){let{stdout:e,stderr:t}=await Tm(`${process.platform==="win32"?"node":""} ${Am} install pm2-logrotate@${Kq}`);if(ir.debug(`loadLogRotate stdout: ${e}`),t)throw ir.error(Qq),t;ir.info(Wq)}o(nF,"installLogRotate");async function fm(){let e={max_size:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${Am} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Tm(t);if(ir.debug(`updateLogRotateConfig stdout: ${r}`),s)throw ir.error(Jq),s;ir.info(jq)}o(fm,"updateLogRotateConfig");async function iF(){Ye.initSync();let e=xa.autoCastBoolean(Ye.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Ka(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(xa.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await nF(),await fm();return}if(e&&s){await cs(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await fm();return}!e&&r===D.PM2_PROCESS_STATUSES.ONLINE&&await sF()}o(iF,"configureLogRotate");async function Im(){for(let t in D.CLUSTERING_PROCESSES){let r=D.CLUSTERING_PROCESSES[t];await $a(r)}await ka.createWorkQueueStream(Fq.WORK_QUEUE_CONSUMER_NAMES),await ka.updateNodeNameLocalStreams();let e=await kq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===D.PRE_4_0_0_VERSION){ir.info("Starting clustering upgrade 4.0.0 process"),await $a(D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}o(Im,"startClustering");async function oF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];await Ya(t)}}o(oF,"stopClustering");async function aF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];if(await Om(t)===!1)return!1}return!0}o(aF,"isClusteringRunning");async function _F(){await oi.generateNatsConfig(!0),await ka.reloadNATSHub(),await ka.reloadNATSLeaf(),await oi.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await oi.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(_F,"reloadClustering")});var Qa=d((S$,Dm)=>{"use strict";var b=T(),F=O(),Wa=I(),cF=ds(),Zu=Ca(),el=Ra(),uF=gt(),Lm=require("minimist"),{handleHDBError:Xu,hdb_errors:lF}=J(),ai=st(),{HTTP_STATUS_CODES:zu}=lF,B,bm=`Restarting HarperDB. This may take up to ${b.RESTART_TIMEOUT_MS/1e3} seconds.`,us="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",EF="Invalid service",dF="'service' is required",SF="Restarting all services",hF="Clustering is not enabled so cannot be restarted";Dm.exports={stop:TF,restartProcesses:fF,restartService:ym};async function fF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=nn());let e=cF(Object.keys(b.CONFIG_PARAM_MAP),!0);Wa.isEmptyOrZeroLength(Object.keys(e))||ai.updateConfigValue(void 0,void 0,e,!0,!0);let t=ai.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=ai.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=Lm(process.argv);if(!Wa.isEmpty(s.service)){if(typeof s.service!="string"){let _=`Restart service argument expected a string but received: ${s.service}`;return F.error(_),_}let a=s.service.split(",");for(let _ of a){let c=_.toLowerCase();if(c===b.HDB_PROC_DESCRIPTOR.toLowerCase()&&await B.isHdbRestartRunning()===!0){F.notify(us),console.error(us);continue}if(b.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){console.error(`Restart received unrecognized service command argument: ${c}`),F.error(`Restart received unrecognized service command argument: ${c}`);continue}let u=b.PROCESS_DESCRIPTORS_VALIDATE[c];if(console.log(`Restarting ${u}`),F.trace(`Restarting ${u}`),u===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(c.toLowerCase().includes("clustering"))await on(c);else if(await B.isServiceRegistered(u))u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await ym({service:u});else if(u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await B.startService(u),F.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;F.error(l),console.log(l)}else await B.startService(u);F.notify(`${u} successfully restarted.`)}return}if(await B.isHdbRestartRunning()===!0)return F.notify(us),console.error(us),us;console.log(bm),t&&await wm();let n=await B.isServiceRegistered(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await B.startService(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Starting ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await B.configureLogRotate(),F.notify(SF),await B.restartAllServices(i),bm}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return F.error(t),t}}o(fF,"restartProcesses");async function ym(e){if(F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP),B===void 0&&(B=nn()),Wa.isEmpty(e.service))throw Xu(new Error,dF,zu.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Xu(new Error,EF,zu.BAD_REQUEST,void 0,void 0,!0);let r=ai.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=b.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===b.PROCESS_DESCRIPTORS.HDB){if(await B.isHdbRestartRunning()===!0)return F.notify(us),us;await B.reloadStopStart(s)}else if(s===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await on(s);else if(s===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===b.SERVICES.CUSTOM_FUNCTIONS){let i=await B.isServiceRegistered(s);if(r)i?(await B.reloadStopStart(s),F.trace(`Reloading ${s}`)):(await B.startService(s),F.trace(`Starting ${s}`));else if(!r&&i)await B.stop(s),F.trace(`Stopping ${s}`);else{let a=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw F.error(a),Xu(new Error,a,zu.BAD_REQUEST,void 0,void 0,!0)}}else await B.restart(s);let n=`Restarting ${s}`;return F.notify(n),n}o(ym,"restartService");async function TF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=nn());let e=Lm(process.argv);if(Wa.isEmpty(e.service))console.log("Stopping HarperDB."),await B.stopAllServices(),F.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;F.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){F.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await B.stopClustering():await B.stop(b.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${b.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;F.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}o(TF,"stop");async function wm(){await on(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await on(b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await el.updateNodeNameLocalStreams(),await el.closeConnection()}o(wm,"restartAllClusteringServices");async function on(e){e=b.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=ai.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await B.isServiceRegistered(e),i=r||s?await B.isClusteringRunning():void 0;switch(!0){case s:if(!i){F.error(hF);break}await B.reloadClustering();break;case(r&&i&&!t):await B.stopClustering();break;case(r&&!i&&t):await B.startClustering();break;case(r&&i&&t):await wm();break;case(r&&!i&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await B.stop(e),F.trace(`Stopping ${e}`);break;case(!n&&t):e!==b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await Zu.generateNatsConfig(!0,e),await B.startService(e),F.trace(`Starting ${e}`),e===b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await el.createWorkQueueStream(uF.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await B.reload(e):(await Zu.generateNatsConfig(!0,e),await B.restart(e),await Zu.removeNatsConfig(e));break;default:F.error(`Error restarting ${e}`)}}o(on,"restartClustering")});var Pm=d((h$,Um)=>{"use strict";var tl=I(),ze=O(),Mm=Fc();Um.exports={processDirectives:RF};async function RF(e){console.log("Starting upgrade process...");let t=Mm.getVersionsForUpgrade(e),r=gF(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;ze.notify(_),console.log(_);let c=[],u=[];try{c=AF(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await mF(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(RF,"processDirectives");function AF(e){if(tl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ze.info(`Running function ${r.name}`),!(r instanceof Function)){ze.info("Variable being processed is not a function");continue}let s=r();ze.info(s),t.push(s)}return t}o(AF,"runSyncFunctions");async function mF(e){if(tl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(ze.info(`Running function ${n.name}`),!(n instanceof Function)){ze.info("Variable being processed is not a function");continue}let i=await n();ze.info(i),t.push(i)}return t}o(mF,"runAsyncFunctions");function gF(e){if(tl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Mm.getDirectiveByVersion(r);s&&t.push(s)}return t}o(gF,"getUpgradeDirectivesToInstall")});var nl=d((f$,Fm)=>{"use strict";var ja=Y();ja.initSync();var Gm=require("chalk"),Bm=require("fs-extra"),Gt=O(),Nt=T(),Hm=kr(),pF=Pm(),rl=I(),qm=ra(),NF=bc(),vm=c_(),OF=Fs(),IF=require("util").promisify,CF=IF(OF.setSchemaDataToGlobal),sl,{UPGRADE_VERSION:Ja}=Nt.UPGRADE_JSON_FIELD_NAMES_ENUM;Fm.exports={upgrade:bF};async function bF(e){Gt.createLogFile(Nt.PROCESS_LOG_NAMES.CLI,Nt.PROCESS_DESCRIPTORS.UPGRADE),await CF(),sl===void 0&&(sl=nn()),Bm.existsSync(ja.get(ja.BOOT_PROPS_FILE_PATH))||(_i("The hdb_boot_properties file was not found. Please install HDB.",Nt.LOG_LEVELS.ERROR),process.exit(1)),Bm.existsSync(ja.get(Nt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_i("The hdb settings file was not found. Please make sure HDB is installed.",Nt.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await qm.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_i(`This version of HarperDB is ${Hm.version()}`,Nt.LOG_LEVELS.INFO);let r=t[Ja]?t[Ja]:Hm.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Nt.HDB_SUPPORT_ADDRESS}`),Gt.notify("Missing new version field from upgrade info object"),process.exit(1)),await LF();let s,n=0;try{s=await NF.forceUpdatePrompt(t)}catch(i){Gt.error("There was an error when prompting user about upgrade."),Gt.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Gt.info(`Starting upgrade to version ${r}`),await yF(t),_i(`HarperDB was successfully upgraded to version ${t[Ja]}`,Nt.LOG_LEVELS.INFO)}o(bF,"upgrade");async function LF(){let e=!1,t=await vm.findPs(Nt.HDB_PROC_NAME);if(rl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await vm.findPs("hdb_express");rl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await sl.list();rl.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Gm.red(r)),Gt.error(r),process.exit(1)}}o(LF,"checkIfRunning");async function yF(e){try{await pF.processDirectives(e)}catch(t){throw _i("There was an error during the data upgrade. Please check the logs.",Nt.LOG_LEVELS.ERROR),t}try{await qm.insertHdbUpgradeInfo(e[Ja])}catch(t){Gt.error("Error updating the 'hdb_info' system table."),Gt.error(t)}}o(yF,"runUpgrade");function _i(e,t=void 0){t||(t=Gt.info),Gt[t](e),console.log(Gm.magenta(e))}o(_i,"printToLogAndConsole")});var Za=d((R$,Ym)=>{"use strict";var ar=Y();ar.initSync();var te=T(),Ee=O(),ls=require("fs-extra"),Es=require("path"),wF=m_(),DF=Tu(),il=require("chalk"),MF=cn(),UF=Ru(),or=I(),PF=st(),km=ds(),BF=Ca(),{promisify:T$}=require("util"),HF=Qa(),vF=nl(),GF=require("minimist"),qF=require("child_process").spawn,{PACKAGE_ROOT:$m}=T(),FF=ra(),VF=Wt(),xF=Ho(),kF=ic(),qt,$F=po(),YF="Upgrade complete. Starting HarperDB.",KF="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",WF="HarperDB not found, starting install process.",QF="There was an error during install, check install_log.log for more details. Exiting.",jF="HarperDB successfully started.";async function JF(e=!1){try{if(console.log(il.magenta("Starting HarperDB...")),await e0()===!1){console.log(WF);try{await DF()}catch(i){console.error(QF),Ee.error(i),process.exit(1)}}if(process.env.PM2_LOG_FILE_PATH=Es.join(ar.getHdbBasePath(),"log","pm2.log"),qt===void 0&&(qt=nn()),Ee.createLogFile(te.PROCESS_LOG_NAMES.CLI,te.PROCESS_DESCRIPTORS.RUN),!e){let i=km(Object.keys(te.CONFIG_PARAM_MAP),!0);!or.isEmpty(i)&&!or.isEmptyOrZeroLength(Object.keys(i))&&PF.updateConfigValue(void 0,void 0,i,!0,!0)}let t;try{let i=await FF.getVersionUpdateInfo();i!==void 0&&(t=i[te.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await vF.upgrade(i),console.log(YF))}catch(i){t?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${t}. Exiting HarperDB.`),Ee.error(i)):(console.error(KF),Ee.error(i)),process.exit(1)}wF(),await XF(),ZF();try{UF.checkPermission()}catch(i){Ee.error(i),console.error(i.message),process.exit(1)}let r=or.autoCastBoolean(ar.get(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY));r&&await BF.generateNatsConfig();let s=or.autoCastBoolean(ar.get(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));await qt.configureLogRotate();let n=GF(process.argv);if(or.isEmpty(n.service))r&&s?await qt.startAllServices():r?(await ol(),await qt.startClustering()):s?(await ol(),await qt.startService(te.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)):await ol();else{if(typeof n.service!="string"){let a=`Run service argument expected a string but received: ${n.service}`;Ee.error(a),console.log(a),process.exit(1)}let i=n.service.split(",");for(let a of i){let _=a.toLowerCase();if(te.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){Ee.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===te.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!s){Ee.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){Ee.error(`${_} is not enabled in settings`);continue}_==="clustering"?await qt.startClustering():await qt.startService(te.PROCESS_DESCRIPTORS_VALIDATE[_]);let c=`${te.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;Ee.notify(c),console.log(c)}xm()}console.log(il.magenta(""+ls.readFileSync(Es.join($m,"utility/install/ascii_logo.txt")))),console.log(il.magenta(`|------------- HarperDB ${MF.version} successfully started ------------|`)),Ee.notify(jF),xm()}catch(t){console.error(t),Ee.error(t),process.exit(1)}}o(JF,"run");async function ol(){await qt.startService(te.PROCESS_DESCRIPTORS.IPC),await qt.startService(te.PROCESS_DESCRIPTORS.HDB)}o(ol,"startHdbIpc");function ZF(){let e=Es.join(ar.getHdbBasePath(),te.LICENSE_KEY_DIR_NAME,te.LICENSE_FILE_NAME),t=Es.join(e,te.LICENSE_FILE_NAME),r=Es.join(e,te.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=km(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(or.isEmpty(s)||or.isEmpty(n))return;ls.mkdirpSync(e),ls.writeFileSync(r,s),ls.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Ee.error(n)}}o(ZF,"writeLicenseFromVars");async function XF(){if(ar.getHdbBasePath()!==void 0){Ee.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(VF))await Vm(te.SYSTEM_SCHEMA_NAME,t);let e=await xF.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await Vm(t,r);Ee.info("Finished checking Transaction Audit Environments exist")}}o(XF,"checkAuditLogEnvironmentsExist");async function Vm(e,t){try{let r=new $F(e,t);await kF(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),Ee.error(s)}}o(Vm,"openCreateAuditEnvironment");function xm(){t0()||process.exit(0),Ee.trace("Running in foreground"),process.on("exit",ci),process.on("SIGINT",ci),process.on("SIGUSR1",ci),process.on("SIGUSR2",ci),process.on("SIGTERM",ci),zF()}o(xm,"foregroundHandler");function zF(){let e=qF("node",[Es.join($m,"node_modules/pm2/bin/pm2"),"logs"]);ls.writeFileSync(Es.join(ar.get(te.CONFIG_PARAMS.ROOTPATH),te.FOREGROUND_PID_FILE),e.pid.toString()),e.on("error",t=>{console.log(t),console.error("Failed to start subprocess.")}),e.stdout.on("data",t=>{console.log(t.toString())}),e.stderr.on("data",t=>{console.error(t.toString())})}o(zF,"spawnLogProcess");async function ci(){try{await HF.stop()}catch(e){console.error(e)}process.exit(143)}o(ci,"processExitHandler");Ym.exports={run:JF};async function e0(){try{await ls.stat(or.getPropsFilePath()),await ls.stat(ar.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw Ee.error(`Error checking for HDB install - ${e}`),e}return!0}o(e0,"isHdbInstalled");function t0(){return or.autoCastBoolean(ar.get(te.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(t0,"getRunInForeground")});var jm=d((A$,Qm)=>{var r0=Tu(),Km=O(),Wm=T();Qm.exports=s0;async function s0(){try{Km.createLogFile(Wm.PROCESS_LOG_NAMES.INSTALL,Wm.PROCESS_DESCRIPTORS.INSTALL),await r0()}catch(e){console.error("There was an error during the install."),console.error(e),Km.error(e),process.exit(1)}}o(s0,"install")});var tg=d((m$,eg)=>{var za=Wn(),Jm=require("chalk"),Ft=O(),Zm=Ru(),Xm=require("prompt"),{promisify:n0}=require("util"),Xa=T(),i0=require("fs-extra"),o0=require("path"),a0=I(),_0=kr(),zm=Y();zm.initSync();var c0=require("moment"),u0=n0(Xm.get),l0=o0.join(zm.getHdbBasePath(),Xa.LICENSE_KEY_DIR_NAME,Xa.LICENSE_FILE_NAME,Xa.LICENSE_FILE_NAME);eg.exports={getFingerprint:d0,setLicense:E0,parseLicense:al,register:S0,getRegistrationInfo:f0};async function E0(e){if(e&&e.key&&e.company){try{Ft.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await al(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ft.error(r),Ft.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(E0,"setLicense");async function d0(){try{Zm.checkPermission()}catch(t){throw Ft.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await za.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ft.error(r),Ft.error(t),new Error(r)}return e}o(d0,"getFingerprint");async function al(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=za.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Ft.info("writing license to disk"),await i0.writeFile(l0,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ft.error("Failed to write License"),s}return"Registration successful."}o(al,"parseLicense");async function S0(){let e=await h0();return al(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(S0,"register");async function h0(){try{Zm.checkPermission()}catch(s){return console.error(s.message)}let e=await za.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Jm.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Jm.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Xm.start()}catch(s){Ft.error(s)}let r;try{r=await u0(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(h0,"promptForRegistration");async function f0(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await za.getLicense()}catch(r){throw Ft.error(`There was an error when searching licenses due to: ${r.message}`),r}if(a0.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=_0.version(),e.storage_type=Xa.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=c0.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(f0,"getRegistrationInfo")});var og=d((g$,ig)=>{"use strict";var T0=tg(),rg=O(),sg=T(),ng="Registration failed.";async function R0(){rg.createLogFile(sg.PROCESS_LOG_NAMES.CLI,sg.PROCESS_DESCRIPTORS.REGISTER);let e;try{e=await T0.register()}catch(t){return rg.error(`Registration error ${t}`),ng}return e||ng}o(R0,"register");ig.exports={register:R0}});var qr=O(),A0=kr(),Vt=T(),ag=require("fs"),_g=require("path"),m0=require("os"),{PACKAGE_ROOT:cg}=T(),g0=Bl();N0();function p0(){let e=_g.join(cg,"bin",`harperdb.${Vt.CODE_EXTENSION}`),t;try{t=ag.statSync(e)}catch{qr.info("Couldn't find the harperdb executable process.");return}let r=m0.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw qr.error(s),console.log(s),new Error(s)}}o(p0,"checkCallingUserSync");function N0(){let e=g0();if(e)if(e.error){console.error(e.error),qr.error(e.error);return}else e.warn&&(console.warn(e.warn),qr.warn(e.warn));let t;ag.readdir(_g.join(cg,"bin"),r=>{if(r)return qr.error(r);if(process.argv&&process.argv[2]&&(t=process.argv[2].toLowerCase()),t!==Vt.SERVICE_ACTIONS_ENUM.INSTALL)try{p0()}catch(n){throw console.log(n.message),n}let s;switch(t){case Vt.SERVICE_ACTIONS_ENUM.RUN:s=Za().run();break;case Vt.SERVICE_ACTIONS_ENUM.INSTALL:jm()().then(()=>{Za().run(!0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.REGISTER:og().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.STOP:Qa().stop().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.RESTART:Qa().restartProcesses().then().catch(E=>{qr.error(E),console.error("There was an error restarting harperdb. Please stop manually with harperdb stop and start again."),process.exit(1)});break;case Vt.SERVICE_ACTIONS_ENUM.VERSION:A0.printVersion();break;case Vt.SERVICE_ACTIONS_ENUM.UPGRADE:qr.setLogLevel(Vt.LOG_LEVELS.INFO),nl().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{qr.error(`Got an error during upgrade ${E}`)});break;default:Za().run();break}})}o(N0,"harperDBService");
|
|
81
|
+
`,"")}o(TA,"runCommand");async function zv(){try{await Hv.access(Iu)}catch{return!1}let e=await TA(`${Iu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return vv.eq(t,Zv)}o(zv,"checkNATSServerInstalled");async function Lu(e,t,r,s=!0,n="127.0.0.1"){return $v({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Lu,"createConnection");async function eG(){Nt&&(await Nt.close(),Nt=void 0)}o(eG,"closeConnection");async function Ra(){if(!Nt){let e=await uA.getClusterUser();if(os(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=zt.get(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Nt=await Lu(t,e.username,e.decrypt_hash)}return Nt}o(Ra,"getConnection");async function Qs(){if(ti)return ti;os(Nt)&&await Ra();let{domain:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ti=await Nt.jetstreamManager({domain:e}),ti}o(Qs,"getJetStreamManager");async function fA(){if(ri)return ri;os(Nt)&&await Ra();let{domain:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ri=Nt.jetstream({domain:e}),ri}o(fA,"getJetStream");async function ct(){let e=Nt||await Ra(),t=ti||await Qs(),r=ri||await fA();return{connection:e,jsm:t,js:r}}o(ct,"getNATSReferences");async function tG(){let e=zt.get(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await uA.getClusterUser(),s=await Lu(e,t,r),n=bu(),i=s.subscribe(n),a=[],_=(async()=>{for await(let c of i)a.push(SA.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Cu.async_set_timeout(50),await i.drain(),await s.close(),await _,a}o(tG,"getServerList");async function yu(e,t){let{jsm:r}=await ct();await r.streams.add({name:e,storage:lA.File,retention:EA.Limits,subjects:t})}o(yu,"createLocalStream");async function hA(){let{jsm:e}=await ct(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(hA,"listStreams");async function rG(e){let{jsm:t}=await ct();await t.streams.delete(e)}o(rG,"deleteLocalStream");async function sG(e){let{connection:t}=await ct(),r=[],s=bu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(SA.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(sG,"listRemoteStreams");async function nG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ct(),i=qv(),a=[],_={ack_policy:dA.None,durable_name:i,deliver_subject:i,deliver_policy:Ou.All};t&&(_.deliver_policy=Ou.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=Wv(l),T=cA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:T,originators:[]},A=[];if(E.headers){let R=E.headers.get("originators");R&&(A=R.split(","),S.originators=A)}a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return a;throw c}}o(nG,"viewStream");async function iG(e,t,r=[],s=[]){er.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ct(),a=await Aa(),_=`${e}.${a}`,c=Kv();s.push(a),c.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{er.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,Nu(r[u]),{headers:c})}catch(E){if(E.code&&E.code.toString()==="503")er.trace(`publishToStream creating stream: ${t}`),await yu(t,[_]),await i.publish(_,Nu(r[u]),{headers:c});else throw E}}o(iG,"publishToStream");function ni(e){e=e.toLowerCase();let t=si.join(zt.get(te.CONFIG_PARAMS.ROOTPATH),Jv);if(e===te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return os(pu)&&(pu={port:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.HUB,config_file:j.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:si.join(t,j.PID_FILES.HUB),hdb_nats_path:t}),pu;if(e===te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return os(gu)&&(gu={port:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,config_file:j.NATS_CONFIG_FILES.LEAF_SERVER,domain:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,pid_file_path:si.join(t,j.PID_FILES.LEAF),hdb_nats_path:t}),gu;er.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(ni,"getServerConfig");async function oG(e){let{jsm:t}=await ct(),r=await Aa();try{await t.streams.add({name:e.stream_name,storage:lA.File,retention:EA.Workqueue,subjects:[`${j.SUBJECT_PREFIXES.MSGID}.${r}`,`${j.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:dA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ou.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`});else throw s}}o(oG,"createWorkQueueStream");async function RA(e,t,r){let{jsm:s}=await ct(),n=await s.streams.info(t),i=AA(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=ha.createNatsTableStreamName(_,c),l=i===e,E,T,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,L=n.config.sources.length;R<L;R++)if(E=n.config.sources[R],T=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;await gA(_,c,E,t),n.config.sources.splice(T,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:a,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}o(RA,"addSourceToWorkStream");function AA(e){return e.split(".")[1]}o(AA,"extractServerName");async function mA(e,t,r){let{schema:s,table:n}=r,i=ha.createNatsTableStreamName(s,n),{jsm:a}=await ct(),_=await a.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await a.streams.update(t,_.config),await gA(s,n,u,t)}o(mA,"removeSourceFromWorkStream");async function gA(e,t,r,s){let n=await Qs(),i;try{i=OA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{er.error("Error purging source subject",i,"from work stream",s)}}o(gA,"purgeSourceFromWorkStream");async function aG(e,t,r=2e3,s=bu()){if(!Cu.isObject(t))throw new Error("data param must be an object");let n=Nu(t),{connection:i}=await ct(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return cA(_.data)}o(aG,"request");function wu(e){return new Promise(async(t,r)=>{let s=Vv(Iu,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(wu,"reloadNATS");async function _G(){let{pid_file_path:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await wu(e)}o(_G,"reloadNATSHub");async function cG(){let{pid_file_path:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await wu(e)}o(cG,"reloadNATSLeaf");function uG(e,t,r){let s;switch(e.code){case oA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case oA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(uG,"requestErrorHandler");async function lG(e,t){let r=t+j.SERVER_SUFFIX.LEAF;await xv.writeTransaction(te.SYSTEM_SCHEMA_NAME,te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await RA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await mA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(lG,"updateWorkStream");async function pA(e,t){let r=ha.createNatsTableStreamName(e,t),s=await Aa(),n=OA(e,t,s);await yu(r,[n])}o(pA,"createLocalTableStream");async function EG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await pA(s,n)}}o(EG,"createTableStreams");async function NA(e,t){if(zt.get(te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ha.createNatsTableStreamName(e,t),{jsm:s}=await ct();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")er.warn(r);else throw r}}o(NA,"purgeTableStream");async function dG(e,t){if(zt.get(te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await NA(e,t[r])}o(dG,"purgeSchemaTableStreams");async function SG(e){return(await Qs()).streams.info(e)}o(SG,"getStreamInfo");function OA(e,t,r){return`${j.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(OA,"createSubjectName");async function Aa(){if(ei)return ei;if(ei=(await Qs())?.nc?.info?.server_name,ei===void 0)throw new Error("Unable to get jetstream manager server name");return ei}o(Aa,"getJsmServerName");async function TG(){let e=await Qs(),t=await Aa(),r=await hA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=i.split(".");if(a[a.length-1]!==t){if(n.name===j.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;er.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===j.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;er.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(j.WORK_QUEUE_CONSUMER_NAMES.stream_name,j.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${j.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");er.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}o(TG,"updateNodeNameLocalStreams")});var La=d((Yk,LA)=>{"use strict";var js=require("path"),Oa=require("fs-extra"),fG=JR(),hG=zR(),RG=tA(),AG=sA(),Du=$s(),Zs=I(),ut=We(),Na=h(),ga=gt(),{CONFIG_PARAMS:fe}=Na,Ia=O(),Ca=Y(),CA=Gn(),Mu=ma(),Js="clustering",mG=1e4,bA=5;LA.exports={generateNatsConfig:gG,removeNatsConfig:pG};async function gG(e=!1,t=void 0){Ca.initSync();let r=Ca.get(fe.ROOTPATH),s=js.join(r,Js,ga.PID_FILES.HUB),n=js.join(r,Js,ga.PID_FILES.LEAF),i=js.join(r,Js,"leaf"),a=js.join(r,Js,ga.NATS_CONFIG_FILES.HUB_SERVER),_=js.join(r,Js,ga.NATS_CONFIG_FILES.LEAF_SERVER),c=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERTIFICATE),u=ut.getConfigFromFile(fe.CLUSTERING_TLS_PRIVATEKEY),l=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERT_AUTH),E=ut.getConfigFromFile(fe.CLUSTERING_TLS_INSECURE),T=ut.getConfigFromFile(fe.CLUSTERING_NODENAME),S=ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Mu.checkNATSServerInstalled()||ba("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await Du.listUsers(),R=ut.getConfigFromFile(fe.CLUSTERING_USER),L=await Du.getClusterUser();(Zs.isEmpty(L)||L.active!==!0)&&ba(`invalid cluster user '${R}'`),e||(await pa(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await pa(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await pa(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),await pa(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let de=[],p=[];for(let[ir,or]of A.entries())or.role.role===Na.ROLE_TYPES_ENUM.CLUSTER_USER&&or.active&&(de.push(new AG(or.username,CA.decrypt(or.hash))),p.push(new RG(or.username,CA.decrypt(or.hash))));let k=[],{hub_routes:Ie}=ut.getClusteringRoutes();if(!Zs.isEmptyOrZeroLength(Ie))for(let ir of Ie)k.push(`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@${ir.host}:${ir.port}`);let Ce=new fG(ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,l,E,S,ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NAME),ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),k,de,p);t=Zs.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Na.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Oa.writeJson(a,Ce),Ia.trace(`Hub server config written to ${a}`));let li=`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,nn=`tls://${L.uri_encoded_name}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,Ei=new hG(ut.getConfigFromFile(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[li],[nn],de,p,c,u,l,E);(t===void 0||t===Na.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Oa.writeJson(_,Ei),Ia.trace(`Leaf server config written to ${_}`))}o(gG,"generateNatsConfig");async function pa(e){let t=Ca.get(e);Zs.isEmpty(t)&&ba(`port undefined for '${e}'`),await Zs.isPortTaken(t)&&ba(`'${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.`)}o(pa,"isPortAvailable");function ba(e){let t=`Error generating clustering config: ${e}`;Ia.error(t),console.error(t),process.exit(1)}o(ba,"generateNatsConfigError");async function pG(e){let{port:t,config_file:r}=Mu.getServerConfig(e),{username:s,decrypt_hash:n}=await Du.getClusterUser(),i=0,a=500;for(;i<bA;){try{let u=await Mu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ia.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=bA)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Zs.async_set_timeout(a*i)}let _="0".repeat(mG),c=js.join(Ca.get(fe.ROOTPATH),Js,r);await Oa.writeFile(c,_),await Oa.remove(c)}o(pG,"removeNatsConfig")});var Pu=d((Kk,BA)=>{"use strict";var z=Y(),yA=Qn(),g=h(),Uu=gt(),le=require("path"),{PACKAGE_ROOT:ya}=h(),ne="/dev/null",Xs=le.join(ya,"launchServiceScripts"),wA=le.join(ya,"utility/scripts"),NG=le.join(wA,g.HDB_RESTART_SCRIPT),DA=le.resolve(ya,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME),pe,Ne;function Ht(){(pe===void 0||Ne===void 0)&&(z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}o(Ht,"initLogConfig");function MA(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.IPC),t={name:g.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:g.SERVICE_SERVERS_CWD.IPC};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:g.SERVICE_SERVERS.IPC}}o(MA,"generateIPCServerConfig");function UA(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.HDB),t=yA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.HDB,script:g.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:z.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Xs};return pe||(s.out_file=ne,s.error_file=ne),s}o(UA,"generateHDBServerConfig");function PA(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=yA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:g.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:z.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Xs};return pe||(s.out_file=ne,s.error_file=ne),s}o(PA,"generateCFServerConfig");function OG(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=z.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(OG,"generateNatsHubServerConfig");function IG(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=z.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(IG,"generateNatsLeafServerConfig");function CG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs};return pe||(t.out_file=ne,t.error_file=ne),t}o(CG,"generateNatsIngestServiceConfig");function bG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs};return pe||(t.out_file=ne,t.error_file=ne),t}o(bG,"generateNatsReplyServiceConfig");function LG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:g.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs,autorestart:!1};return pe||(t.out_file=ne,t.error_file=ne),t}o(LG,"generateClusteringUpgradeV4ServiceConfig");function yG(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.PM2),t={name:g.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:wA};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:NG}}o(yG,"generateRestart");function wG(e){Ht();let t=le.join(Ne,g.PROCESS_LOG_NAMES.JOBS),r=le.join(ya,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Xs,autorestart:!1};return pe||(s.out_file=ne,s.error_file=ne),{...s,script:le.join(r,"jobProcess.js")}}o(wG,"generateJobConfig");function DG(){return{apps:[MA(),UA(),PA()]}}o(DG,"generateAllServiceConfigs");BA.exports={generateAllServiceConfigs:DG,generateIPCServerConfig:MA,generateHDBServerConfig:UA,generateCFServerConfig:PA,generateRestart:yG,generateNatsHubServerConfig:OG,generateNatsLeafServerConfig:IG,generateNatsIngestServiceConfig:CG,generateNatsReplyServiceConfig:bG,generateClusteringUpgradeV4ServiceConfig:LG,generateJobConfig:wG}});var vA=d((Wk,HA)=>{var MG=tt(),UG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HA.exports=function(e){return MG.validateObject(e,UG)}});var qA=d((Qk,GA)=>{"use strict";var PG={OPERATION:"operation",REFRESH:"refresh"},wa=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(wa,"JWTTokens");var Da=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(Da,"JWTRSAKeys");GA.exports={JWTTokens:wa,TOKEN_TYPE_ENUM:PG,JWTRSAKeys:Da}});var $A=d((jk,kA)=>{"use strict";var oi=require("jsonwebtoken"),Bu=require("fs-extra"),Hu=I(),lt=h(),{handleHDBError:Ve,hdb_errors:BG}=J(),{HTTP_STATUS_CODES:xe,AUTHENTICATION_ERROR_MSGS:ke}=BG,ii=O(),FA=ca(),qu=$s(),HG=Jr().update,vG=Dc(),GG=On(),{UserEventMsg:qG}=ps(),Br=Y();Br.initSync();var vu=require("path"),{JWTTokens:FG,JWTRSAKeys:VG,TOKEN_TYPE_ENUM:Ma}=qA(),xG=Br.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Br.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kG=Br.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Br.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ua="RS256",Gu;kA.exports={createTokens:$G,validateOperationToken:KG,refreshOperationToken:YG,validateRefreshToken:xA};async function $G(e){if(Hu.isEmpty(e)||typeof e!="object")throw Ve(new Error,ke.INVALID_AUTH_OBJECT,xe.BAD_REQUEST,void 0,void 0,!0);if(Hu.isEmpty(e.username))throw Ve(new Error,ke.USERNAME_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);if(Hu.isEmpty(e.password))throw Ve(new Error,ke.PASSWORD_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qu.findAndValidateUser(e.username,e.password),!t)throw Ve(new Error,ke.INVALID_CREDENTIALS,xe.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ii.error(T),Ve(new Error,ke.INVALID_CREDENTIALS,xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Pa(),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},a=await VA(i,r.private_key,r.passphrase),_=await oi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kG,algorithm:Ua,subject:Ma.REFRESH}),c=FA.hash(_),u=new vG(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await HG(u)}catch(T){ii.error(T),E=T}if(E!==void 0||l.skipped_hashes.length>0)throw Ve(new Error,ke.REFRESH_TOKEN_SAVE_FAILED,xe.INTERNAL_SERVER_ERROR);return GG.signalUserChange(new qG(process.pid)),new FG(a,_)}o($G,"createTokens");async function VA(e,t,r){return await oi.sign(e,{key:t,passphrase:r},{expiresIn:xG,algorithm:Ua,subject:Ma.OPERATION})}o(VA,"signOperationToken");async function Pa(){if(Gu===void 0)try{let e=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Bu.readFile(e)).toString(),n=(await Bu.readFile(t)).toString(),i=(await Bu.readFile(r)).toString();Gu=new VG(i,n,s)}catch(e){throw ii.error(e),Ve(new Error,ke.NO_ENCRYPTION_KEYS,xe.INTERNAL_SERVER_ERROR)}return Gu}o(Pa,"getJWTRSAKeys");async function YG(e){if(!e)throw Ve(new Error,ke.INVALID_BODY,xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ve(new Error,ke.REFRESH_TOKEN_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);await xA(e.refresh_token);let t=await Pa(),r=await oi.decode(e.refresh_token);return{operation_token:await VA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(YG,"refreshOperationToken");async function KG(e){try{let t=await Pa(),r=await oi.verify(e,t.public_key,{algorithms:Ua,subject:Ma.OPERATION});return await qu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ii.warn(t),t.name&&t.name==="TokenExpiredError"?Ve(new Error,ke.TOKEN_EXPIRED,xe.FORBIDDEN):Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED)}}o(KG,"validateOperationToken");async function xA(e){let t;try{let r=await Pa(),s=await oi.verify(e,r.public_key,{algorithms:Ua,subject:Ma.REFRESH});t=await qu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ii.warn(r),r.name&&r.name==="TokenExpiredError"?Ve(new Error,ke.TOKEN_EXPIRED,xe.FORBIDDEN):Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED)}if(!FA.validate(t.refresh_token,e))throw Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED);return t}o(xA,"validateRefreshToken")});var QA=d((Zk,WA)=>{"use strict";var WG=vA(),zs=require("passport"),QG=require("passport-local").Strategy,jG=require("passport-http").BasicStrategy,JG=require("util"),ZG=$s(),KA=JG.callbackify(ZG.findAndValidateUser),Jk=et(),XG=h(),YA=$A();zs.use(new QG(function(e,t,r){KA(e,t,r)}));zs.use(new jG(function(e,t,r){KA(e,t,r)}));zs.serializeUser(function(e,t){t(null,e)});zs.deserializeUser(function(e,t){t(null,e)});function zG(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,_){return a?r(a):_?r(null,_):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":zs.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===XG.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?YA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):YA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:zs.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(zG,"authorize");function eq(e,t){let r=WG(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!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 a=i[e.schema].tables[e.table].attribute_permissions;for(let _ in a)e.attributes.indexOf(a[_].attribute_name)>-1&&!a[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[_].attribute_name} `))}return t(null,s)}o(eq,"checkPermissions");WA.exports={authorize:zG,checkPermissions:eq}});var JA=d((Xk,jA)=>{"use strict";var Ba=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(Ba,"Node");var Ha=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(Ha,"NodeSubscription");jA.exports={Node:Ba,NodeSubscription:Ha}});var XA=d((zk,ZA)=>{"use strict";var tq=h().OPERATIONS_ENUM,va=class{constructor(t,r,s,n=void 0){this.operation=tq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(va,"UpsertObject");ZA.exports=va});var em=d((e$,zA)=>{"use strict";var Ga=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ga,"RemotePayloadObject");var qa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(qa,"RemotePayloadSubscription");zA.exports={RemotePayloadObject:Ga,RemotePayloadSubscription:qa}});var rm=d((t$,tm)=>{"use strict";var Fa=class{constructor(t,r,s=0,n=0,i=0,a=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=a}};o(Fa,"TableSizeObject");tm.exports=Fa});var om=d((r$,im)=>{"use strict";var rq=rm(),sm=require("path"),nm=Z(),sq=he(),en=$(),nq=O();im.exports=iq;async function iq(e){let t=new rq;try{let r=sm.join(nm.getBaseSchemaPath(),e.schema.toString()),s=await en.openEnvironment(r,e.name),n=en.statDBI(s,e.hash_attribute),i=sm.join(nm.getTransactionAuditStorePath(),e.schema.toString()),a=await en.openEnvironment(i,e.name,!0),_=en.statDBI(a,sq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await en.environmentDataSize(r,e.name),u=await en.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){nq.warn(`unable to stat table dbi due to ${r}`)}return t}o(iq,"lmdbGetTableSize")});var _m=d((s$,am)=>{"use strict";var oq=h(),Va=class{constructor(t){this.operator=oq.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};o(Va,"SystemInformationOperation");am.exports=Va});var um=d((n$,cm)=>{"use strict";var xa=class{constructor(t,r,s,n,i,a,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=_}};o(xa,"SystemInformationObject");cm.exports=xa});var Em=d((o$,lm)=>{"use strict";var Oe=require("systeminformation"),tn=O(),aq=h(),_q=om(),cq=vo(),uq=Y();uq.initSync();var i$=_m(),lq=um(),ka;lm.exports={getHDBProcessInfo:ku,getNetworkInfo:Yu,getDiskInfo:$u,getMemoryInfo:xu,getCPUInfo:Vu,getTimeInfo:Fu,getSystemInformation:Ku,systemInformation:Eq,getTableSize:Wu};function Fu(){return Oe.time()}o(Fu,"getTimeInfo");async function Vu(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await Oe.cpu();l.cpu_speed=await Oe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:T,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:L,cpus:de,...p}=await Oe.currentLoad();return p.cpus=[],de.forEach(k=>{let{raw_load:Ie,raw_load_idle:Ce,raw_load_irq:li,raw_load_nice:nn,raw_load_system:Ei,raw_load_user:ir,...or}=k;p.cpus.push(or)}),l.current_load=p,l}catch(e){return tn.error(`error in getCPUInfo: ${e}`),{}}}o(Vu,"getCPUInfo");async function xu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Oe.mem();return n}catch(e){return tn.error(`error in getMemoryInfo: ${e}`),{}}}o(xu,"getMemoryInfo");async function ku(){let e={core:[],clustering:[]};try{return(await Oe.processes()).list.forEach(r=>{r.params.includes(aq.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return tn.error(`error in getHDBProcessInfo: ${t}`),e}}o(ku,"getHDBProcessInfo");async function $u(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Oe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await Oe.fsStats();return e.read_write=u,e.size=await Oe.fsSize(),e}catch(t){return tn.error(`error in getDiskInfo: ${t}`),e}}o($u,"getDiskInfo");async function Yu(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Oe.networkInterfaceDefault(),e.latency=await Oe.inetChecksite("google.com"),(await Oe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...T}=s;e.interfaces.push(T)}),(await Oe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e.connections=await Oe.networkConnections(),e}catch(t){return tn.error(`error in getNetworkInfo: ${t}`),e}}o(Yu,"getNetworkInfo");async function Ku(){if(ka!==void 0)return ka;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await Oe.osInfo();e=_;let c=await Oe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,ka=e,ka}catch(t){return tn.error(`error in getSystemInformation: ${t}`),e}}o(Ku,"getSystemInformation");async function Wu(){let e=[],t=await cq.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await _q(s));return e}o(Wu,"getTableSize");async function Eq(e){let t=new lq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Ku(),t.time=Fu(),t.cpu=await Vu(),t.memory=await xu(),t.disk=await $u(),t.network=await Yu(),t.harperdb_processes=await ku(),t.table_size=await Wu(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Ku();break;case"time":t.time=Fu();break;case"cpu":t.cpu=await Vu();break;case"memory":t.memory=await xu();break;case"disk":t.disk=await $u();break;case"network":t.network=await Yu();break;case"harperdb_processes":t.harperdb_processes=await ku();break;case"table_size":t.table_size=await Wu();break;default:break}return t}o(Eq,"systemInformation")});var hm=d((c$,fm)=>{"use strict";var dq=Jr(),Qu=I(),ju=require("util"),as=h(),dm=Y();dm.initSync();var Sq=QA(),Sm=hr(),{Node:a$,NodeSubscription:_$}=JA(),Tq=Ls(),fq=XA(),{RemotePayloadObject:hq,RemotePayloadSubscription:Rq}=em(),{handleHDBError:Aq,hdb_errors:mq}=J(),{HTTP_STATUS_CODES:gq,HDB_ERROR_MSGS:pq}=mq,Nq=At(),Oq=Em(),Iq=Vr(),Cq=ju.promisify(Sq.authorize),bq=ju.promisify(Sm.searchByHash),Lq=ju.promisify(Sm.searchByValue);fm.exports={authHeaderToUser:yq,isEmpty:wq,getNodeRecord:Dq,upsertNodeRecord:Mq,buildNodePayloads:Uq,checkClusteringEnabled:Pq,getAllNodeRecords:Bq,getSystemInfo:Hq,reverseSubscription:Tm};async function yq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cq(t,null),e}o(yq,"authHeaderToUser");function wq(e){return e==null}o(wq,"isEmpty");async function Dq(e){let t=new Tq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return bq(t)}o(Dq,"getNodeRecord");async function Mq(e){let t=new fq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return dq.upsert(t)}o(Mq,"upsertNodeRecord");function Tm(e){if(Qu.isEmpty(e.subscribe)||Qu.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}o(Tm,"reverseSubscription");function Uq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=Qu.getTableHashAttribute(c,u),{subscribe:E,publish:T}=Tm(_),S=new Rq(c,u,l,T,E,_.start_time);n.push(S)}return new hq(r,t,n,s)}o(Uq,"buildNodePayloads");function Pq(){if(!dm.get(as.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aq(new Error,pq.CLUSTERING_NOT_ENABLED,gq.BAD_REQUEST,void 0,void 0,!0)}o(Pq,"checkClusteringEnabled");async function Bq(){let e=new Nq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Lq(e)}o(Bq,"getAllNodeRecords");async function Hq(){let e=await Oq.getSystemInformation();return{hdb_version:Iq.version(),node_version:e.node_version,platform:e.platform}}o(Hq,"getSystemInfo")});var rn=d((u$,Lm)=>{"use strict";var D=h(),$a=I(),ai=La(),Ya=ma(),vq=gt(),G=require("pm2"),Gq=require("fs-extra"),tr=Pu(),$e=Y(),rr=O(),qq=Pu(),Fq=hm(),Vq=require("util"),Am=Vq.promisify(require("child_process").exec),mm=require("path");Lm.exports={start:_s,stop:Wa,reload:pm,restart:Nm,list:Zu,describe:Qa,connect:vt,kill:Im,startAllServices:Zq,startService:Ka,getUniqueServicesList:Xu,restartAllServices:Xq,stopAllServices:zq,isServiceRegistered:Cm,reloadStopStart:Ju,restartHdb:Om,deleteProcess:jq,configureLogRotate:rF,startClustering:bm,isHdbRestartRunning:Jq,isClusteringRunning:nF,stopClustering:sF,reloadClustering:iF};var{PACKAGE_ROOT:xq}=h(),kq="2.7.0",gm=mm.join(xq,"node_modules/pm2/bin/pm2"),$q="Log rotate installed.",Yq="Error installing log rotate.",Kq="Log rotate updated.",Wq="Error updating log rotate.",Qq="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function vt(){return new Promise((e,t)=>{G.connect((r,s)=>{r&&t(r),e(s)})})}o(vt,"connect");function _s(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.start(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(_s,"start");function Wa(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.stop(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.delete(e,(i,a)=>{i&&(G.disconnect(),r(s)),G.disconnect(),t(a)})})})}o(Wa,"stop");function pm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.reload(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(pm,"reload");function Nm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.restart(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Nm,"restart");function jq(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.delete(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(jq,"deleteProcess");async function Om(){await _s(qq.generateRestart())}o(Om,"restartHdb");async function Jq(){let e=await Zu();for(let t in e)if(e[t].name===D.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Jq,"isHdbRestartRunning");function Zu(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.list((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Zu,"list");function Qa(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.describe(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Qa,"describe");function Im(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.killDaemon((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Im,"kill");async function Zq(){try{await bm(),await _s(tr.generateAllServiceConfigs())}catch(e){throw G.disconnect(),e}}o(Zq,"startAllServices");async function Ka(e){try{let t;switch(e=e.toLowerCase(),e){case D.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=tr.generateIPCServerConfig();break;case D.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=tr.generateHDBServerConfig();break;case D.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=tr.generateCFServerConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=tr.generateNatsIngestServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=tr.generateNatsReplyServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=tr.generateNatsHubServerConfig(),await _s(t),await ai.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=tr.generateNatsLeafServerConfig(),await _s(t),await ai.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=tr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _s(t)}catch(t){throw G.disconnect(),t}}o(Ka,"startService");async function Xu(){try{let e=await Zu(),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 G.disconnect(),e}}o(Xu,"getUniqueServicesList");async function Xq(e=[]){try{let t=!1,r=await Xu();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],a=i.name;e.includes(a)||(i.exec_mode==="cluster_mode"?a===D.PROCESS_DESCRIPTORS.HDB?t=!0:await Ju(a):await Nm(a))}t&&await Ju(D.PROCESS_DESCRIPTORS.HDB)}catch(t){throw G.disconnect(),t}}o(Xq,"restartAllServices");async function zq(){try{let e=await Xu();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Wa(s.name)}if(await Im(),$e.get(D.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Gq.readFile(mm.join($e.get(D.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),D.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){rr.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw G.disconnect(),e}}o(zq,"stopAllServices");async function Cm(e){return!$a.isEmptyOrZeroLength(await Qa(e))}o(Cm,"isServiceRegistered");async function Ju(e){let t=e===D.PROCESS_DESCRIPTORS.HDB?$e.get(D.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$e.get(D.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Qa(e),s=$a.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===D.PROCESS_DESCRIPTORS.HDB?rr.error(Qq):(await Wa(e),await Ka(e)):e===D.PROCESS_DESCRIPTORS.HDB?await Om():await pm(e)}o(Ju,"reloadStopStart");function eF(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.stop(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(eF,"stopLogrotate");async function tF(){let{stdout:e,stderr:t}=await Am(`${process.platform==="win32"?"node":""} ${gm} install pm2-logrotate@${kq}`);if(rr.debug(`loadLogRotate stdout: ${e}`),t)throw rr.error(Yq),t;rr.info($q)}o(tF,"installLogRotate");async function Rm(){let e={max_size:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${gm} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Am(t);if(rr.debug(`updateLogRotateConfig stdout: ${r}`),s)throw rr.error(Wq),s;rr.info(Kq)}o(Rm,"updateLogRotateConfig");async function rF(){$e.initSync();let e=$a.autoCastBoolean($e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Qa(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if($a.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await tF(),await Rm();return}if(e&&s){await _s(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Rm();return}!e&&r===D.PM2_PROCESS_STATUSES.ONLINE&&await eF()}o(rF,"configureLogRotate");async function bm(){for(let t in D.CLUSTERING_PROCESSES){let r=D.CLUSTERING_PROCESSES[t];await Ka(r)}await Ya.createWorkQueueStream(vq.WORK_QUEUE_CONSUMER_NAMES),await Ya.updateNodeNameLocalStreams();let e=await Fq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===D.PRE_4_0_0_VERSION){rr.info("Starting clustering upgrade 4.0.0 process"),await Ka(D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}o(bm,"startClustering");async function sF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];await Wa(t)}}o(sF,"stopClustering");async function nF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];if(await Cm(t)===!1)return!1}return!0}o(nF,"isClusteringRunning");async function iF(){await ai.generateNatsConfig(!0),await Ya.reloadNATSHub(),await Ya.reloadNATSLeaf(),await ai.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ai.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(iF,"reloadClustering")});var Ja=d((l$,Um)=>{"use strict";var b=h(),F=O(),ja=I(),oF=vr(),zu=La(),rl=ma(),aF=gt(),wm=require("minimist"),{handleHDBError:el,hdb_errors:_F}=J(),_i=We(),{HTTP_STATUS_CODES:tl}=_F,B,ym=`Restarting HarperDB. This may take up to ${b.RESTART_TIMEOUT_MS/1e3} seconds.`,cs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",cF="Invalid service",uF="'service' is required",lF="Restarting all services",EF="Clustering is not enabled so cannot be restarted";Um.exports={stop:SF,restartProcesses:dF,restartService:Dm};async function dF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=rn());let e=oF(Object.keys(b.CONFIG_PARAM_MAP),!0);ja.isEmptyOrZeroLength(Object.keys(e))||_i.updateConfigValue(void 0,void 0,e,!0,!0);let t=_i.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=_i.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=wm(process.argv);if(!ja.isEmpty(s.service)){if(typeof s.service!="string"){let _=`Restart service argument expected a string but received: ${s.service}`;return F.error(_),_}let a=s.service.split(",");for(let _ of a){let c=_.toLowerCase();if(c===b.HDB_PROC_DESCRIPTOR.toLowerCase()&&await B.isHdbRestartRunning()===!0){F.notify(cs),console.error(cs);continue}if(b.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){console.error(`Restart received unrecognized service command argument: ${c}`),F.error(`Restart received unrecognized service command argument: ${c}`);continue}let u=b.PROCESS_DESCRIPTORS_VALIDATE[c];if(console.log(`Restarting ${u}`),F.trace(`Restarting ${u}`),u===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(c.toLowerCase().includes("clustering"))await sn(c);else if(await B.isServiceRegistered(u))u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await Dm({service:u});else if(u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await B.startService(u),F.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;F.error(l),console.log(l)}else await B.startService(u);F.notify(`${u} successfully restarted.`)}return}if(await B.isHdbRestartRunning()===!0)return F.notify(cs),console.error(cs),cs;console.log(ym),t&&await Mm();let n=await B.isServiceRegistered(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await B.startService(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Starting ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await B.configureLogRotate(),F.notify(lF),await B.restartAllServices(i),ym}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return F.error(t),t}}o(dF,"restartProcesses");async function Dm(e){if(F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP),B===void 0&&(B=rn()),ja.isEmpty(e.service))throw el(new Error,uF,tl.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw el(new Error,cF,tl.BAD_REQUEST,void 0,void 0,!0);let r=_i.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=b.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===b.PROCESS_DESCRIPTORS.HDB){if(await B.isHdbRestartRunning()===!0)return F.notify(cs),cs;await B.reloadStopStart(s)}else if(s===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await sn(s);else if(s===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===b.SERVICES.CUSTOM_FUNCTIONS){let i=await B.isServiceRegistered(s);if(r)i?(await B.reloadStopStart(s),F.trace(`Reloading ${s}`)):(await B.startService(s),F.trace(`Starting ${s}`));else if(!r&&i)await B.stop(s),F.trace(`Stopping ${s}`);else{let a=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw F.error(a),el(new Error,a,tl.BAD_REQUEST,void 0,void 0,!0)}}else await B.restart(s);let n=`Restarting ${s}`;return F.notify(n),n}o(Dm,"restartService");async function SF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=rn());let e=wm(process.argv);if(ja.isEmpty(e.service))console.log("Stopping HarperDB."),await B.stopAllServices(),F.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;F.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){F.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await B.stopClustering():await B.stop(b.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${b.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;F.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}o(SF,"stop");async function Mm(){await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await rl.updateNodeNameLocalStreams(),await rl.closeConnection()}o(Mm,"restartAllClusteringServices");async function sn(e){e=b.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=_i.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await B.isServiceRegistered(e),i=r||s?await B.isClusteringRunning():void 0;switch(!0){case s:if(!i){F.error(EF);break}await B.reloadClustering();break;case(r&&i&&!t):await B.stopClustering();break;case(r&&!i&&t):await B.startClustering();break;case(r&&i&&t):await Mm();break;case(r&&!i&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await B.stop(e),F.trace(`Stopping ${e}`);break;case(!n&&t):e!==b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await zu.generateNatsConfig(!0,e),await B.startService(e),F.trace(`Starting ${e}`),e===b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await rl.createWorkQueueStream(aF.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await B.reload(e):(await zu.generateNatsConfig(!0,e),await B.restart(e),await zu.removeNatsConfig(e));break;default:F.error(`Error restarting ${e}`)}}o(sn,"restartClustering")});var Hm=d((E$,Bm)=>{"use strict";var sl=I(),ze=O(),Pm=xc();Bm.exports={processDirectives:TF};async function TF(e){console.log("Starting upgrade process...");let t=Pm.getVersionsForUpgrade(e),r=RF(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;ze.notify(_),console.log(_);let c=[],u=[];try{c=fF(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await hF(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(TF,"processDirectives");function fF(e){if(sl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ze.info(`Running function ${r.name}`),!(r instanceof Function)){ze.info("Variable being processed is not a function");continue}let s=r();ze.info(s),t.push(s)}return t}o(fF,"runSyncFunctions");async function hF(e){if(sl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(ze.info(`Running function ${n.name}`),!(n instanceof Function)){ze.info("Variable being processed is not a function");continue}let i=await n();ze.info(i),t.push(i)}return t}o(hF,"runAsyncFunctions");function RF(e){if(sl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Pm.getDirectiveByVersion(r);s&&t.push(s)}return t}o(RF,"getUpgradeDirectivesToInstall")});var ol=d((d$,xm)=>{"use strict";var Za=Y();Za.initSync();var Fm=require("chalk"),vm=require("fs-extra"),Gt=O(),Ot=h(),Gm=Vr(),AF=Hm(),nl=I(),Vm=na(),mF=Ko(),qm=l_(),gF=Gs(),pF=require("util").promisify,NF=pF(gF.setSchemaDataToGlobal),il,{UPGRADE_VERSION:Xa}=Ot.UPGRADE_JSON_FIELD_NAMES_ENUM;xm.exports={upgrade:OF};async function OF(e){Gt.createLogFile(Ot.PROCESS_LOG_NAMES.CLI,Ot.PROCESS_DESCRIPTORS.UPGRADE),await NF(),il===void 0&&(il=rn()),vm.existsSync(Za.get(Za.BOOT_PROPS_FILE_PATH))||(ci("The hdb_boot_properties file was not found. Please install HDB.",Ot.LOG_LEVELS.ERROR),process.exit(1)),vm.existsSync(Za.get(Ot.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(ci("The hdb settings file was not found. Please make sure HDB is installed.",Ot.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Vm.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),ci(`This version of HarperDB is ${Gm.version()}`,Ot.LOG_LEVELS.INFO);let r=t[Xa]?t[Xa]:Gm.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ot.HDB_SUPPORT_ADDRESS}`),Gt.notify("Missing new version field from upgrade info object"),process.exit(1)),await IF();let s,n=0;try{s=await mF.forceUpdatePrompt(t)}catch(i){Gt.error("There was an error when prompting user about upgrade."),Gt.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Gt.info(`Starting upgrade to version ${r}`),await CF(t),ci(`HarperDB was successfully upgraded to version ${t[Xa]}`,Ot.LOG_LEVELS.INFO)}o(OF,"upgrade");async function IF(){let e=!1,t=await qm.findPs(Ot.HDB_PROC_NAME);if(nl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await qm.findPs("hdb_express");nl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await il.list();nl.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Fm.red(r)),Gt.error(r),process.exit(1)}}o(IF,"checkIfRunning");async function CF(e){try{await AF.processDirectives(e)}catch(t){throw ci("There was an error during the data upgrade. Please check the logs.",Ot.LOG_LEVELS.ERROR),t}try{await Vm.insertHdbUpgradeInfo(e[Xa])}catch(t){Gt.error("Error updating the 'hdb_info' system table."),Gt.error(t)}}o(CF,"runUpgrade");function ci(e,t=void 0){t||(t=Gt.info),Gt[t](e),console.log(Fm.magenta(e))}o(ci,"printToLogAndConsole")});var za=d((T$,Wm)=>{"use strict";var nr=Y();nr.initSync();var ee=h(),Ee=O(),us=require("fs-extra"),ls=require("path"),bF=m_(),LF=Au(),al=require("chalk"),yF=an(),wF=mu(),sr=I(),DF=We(),Ym=vr(),MF=La(),{promisify:S$}=require("util"),UF=Ja(),PF=ol(),BF=require("minimist"),HF=require("child_process").spawn,{PACKAGE_ROOT:Km}=h(),vF=na(),GF=Yt(),qF=vo(),FF=ic(),qt,VF=No(),xF="Upgrade complete. Starting HarperDB.",kF="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",$F="HarperDB not found, starting install process.",YF="There was an error during install, check install_log.log for more details. Exiting.",KF="HarperDB successfully started.";async function WF(e=!1){try{if(console.log(al.magenta("Starting HarperDB...")),await ZF()===!1){console.log($F);try{await LF()}catch(i){console.error(YF),Ee.error(i),process.exit(1)}}process.env.PM2_LOG_FILE_PATH=ls.join(nr.getHdbBasePath(),"log","pm2.log"),qt===void 0&&(qt=rn()),Ee.createLogFile(ee.PROCESS_LOG_NAMES.CLI,ee.PROCESS_DESCRIPTORS.RUN);let t;try{let i=await vF.getVersionUpdateInfo();i!==void 0&&(t=i[ee.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await PF.upgrade(i),console.log(xF))}catch(i){t?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${t}. Exiting HarperDB.`),Ee.error(i)):(console.error(kF),Ee.error(i)),process.exit(1)}if(!e){let i=Ym(Object.keys(ee.CONFIG_PARAM_MAP),!0);!sr.isEmpty(i)&&!sr.isEmptyOrZeroLength(Object.keys(i))&&DF.updateConfigValue(void 0,void 0,i,!0,!0)}bF(),await jF(),QF();try{wF.checkPermission()}catch(i){Ee.error(i),console.error(i.message),process.exit(1)}let r=sr.autoCastBoolean(nr.get(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY));r&&await MF.generateNatsConfig();let s=sr.autoCastBoolean(nr.get(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));await qt.configureLogRotate();let n=BF(process.argv);if(sr.isEmpty(n.service))r&&s?await qt.startAllServices():r?(await _l(),await qt.startClustering()):s?(await _l(),await qt.startService(ee.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)):await _l();else{if(typeof n.service!="string"){let a=`Run service argument expected a string but received: ${n.service}`;Ee.error(a),console.log(a),process.exit(1)}let i=n.service.split(",");for(let a of i){let _=a.toLowerCase();if(ee.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){Ee.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===ee.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!s){Ee.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){Ee.error(`${_} is not enabled in settings`);continue}_==="clustering"?await qt.startClustering():await qt.startService(ee.PROCESS_DESCRIPTORS_VALIDATE[_]);let c=`${ee.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;Ee.notify(c),console.log(c)}$m()}console.log(al.magenta(""+us.readFileSync(ls.join(Km,"utility/install/ascii_logo.txt")))),console.log(al.magenta(`|------------- HarperDB ${yF.version} successfully started ------------|`)),Ee.notify(KF),$m()}catch(t){console.error(t),Ee.error(t),process.exit(1)}}o(WF,"run");async function _l(){await qt.startService(ee.PROCESS_DESCRIPTORS.IPC),await qt.startService(ee.PROCESS_DESCRIPTORS.HDB)}o(_l,"startHdbIpc");function QF(){let e=ls.join(nr.getHdbBasePath(),ee.LICENSE_KEY_DIR_NAME,ee.LICENSE_FILE_NAME),t=ls.join(e,ee.LICENSE_FILE_NAME),r=ls.join(e,ee.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Ym(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(sr.isEmpty(s)||sr.isEmpty(n))return;us.mkdirpSync(e),us.writeFileSync(r,s),us.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Ee.error(n)}}o(QF,"writeLicenseFromVars");async function jF(){if(nr.getHdbBasePath()!==void 0){Ee.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(GF))await km(ee.SYSTEM_SCHEMA_NAME,t);let e=await qF.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await km(t,r);Ee.info("Finished checking Transaction Audit Environments exist")}}o(jF,"checkAuditLogEnvironmentsExist");async function km(e,t){try{let r=new VF(e,t);await FF(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),Ee.error(s)}}o(km,"openCreateAuditEnvironment");function $m(){XF()||process.exit(0),Ee.trace("Running in foreground"),process.on("exit",ui),process.on("SIGINT",ui),process.on("SIGUSR1",ui),process.on("SIGUSR2",ui),process.on("SIGTERM",ui),JF()}o($m,"foregroundHandler");function JF(){let e=HF("node",[ls.join(Km,"node_modules/pm2/bin/pm2"),"logs"]);us.writeFileSync(ls.join(nr.get(ee.CONFIG_PARAMS.ROOTPATH),ee.FOREGROUND_PID_FILE),e.pid.toString()),e.on("error",t=>{console.log(t),console.error("Failed to start subprocess.")}),e.stdout.on("data",t=>{console.log(t.toString())}),e.stderr.on("data",t=>{console.error(t.toString())})}o(JF,"spawnLogProcess");async function ui(){try{await UF.stop()}catch(e){console.error(e)}process.exit(143)}o(ui,"processExitHandler");Wm.exports={run:WF};async function ZF(){try{await us.stat(sr.getPropsFilePath()),await us.stat(nr.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw Ee.error(`Error checking for HDB install - ${e}`),e}return!0}o(ZF,"isHdbInstalled");function XF(){return sr.autoCastBoolean(nr.get(ee.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(XF,"getRunInForeground")});var Zm=d((f$,Jm)=>{var zF=Au(),Qm=O(),jm=h();Jm.exports=eV;async function eV(){try{Qm.createLogFile(jm.PROCESS_LOG_NAMES.INSTALL,jm.PROCESS_DESCRIPTORS.INSTALL),await zF()}catch(e){console.error("There was an error during the install."),console.error(e),Qm.error(e),process.exit(1)}}o(eV,"install")});var sg=d((h$,rg)=>{var t_=Qn(),Xm=require("chalk"),Ft=O(),zm=mu(),eg=require("prompt"),{promisify:tV}=require("util"),e_=h(),rV=require("fs-extra"),sV=require("path"),nV=I(),iV=Vr(),tg=Y();tg.initSync();var oV=require("moment"),aV=tV(eg.get),_V=sV.join(tg.getHdbBasePath(),e_.LICENSE_KEY_DIR_NAME,e_.LICENSE_FILE_NAME,e_.LICENSE_FILE_NAME);rg.exports={getFingerprint:uV,setLicense:cV,parseLicense:cl,register:lV,getRegistrationInfo:dV};async function cV(e){if(e&&e.key&&e.company){try{Ft.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await cl(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ft.error(r),Ft.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(cV,"setLicense");async function uV(){try{zm.checkPermission()}catch(t){throw Ft.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await t_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ft.error(r),Ft.error(t),new Error(r)}return e}o(uV,"getFingerprint");async function cl(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=t_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Ft.info("writing license to disk"),await rV.writeFile(_V,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ft.error("Failed to write License"),s}return"Registration successful."}o(cl,"parseLicense");async function lV(){let e=await EV();return cl(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(lV,"register");async function EV(){try{zm.checkPermission()}catch(s){return console.error(s.message)}let e=await t_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Xm.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Xm.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{eg.start()}catch(s){Ft.error(s)}let r;try{r=await aV(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(EV,"promptForRegistration");async function dV(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await t_.getLicense()}catch(r){throw Ft.error(`There was an error when searching licenses due to: ${r.message}`),r}if(nV.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=iV.version(),e.storage_type=e_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=oV.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(dV,"getRegistrationInfo")});var _g=d((R$,ag)=>{"use strict";var SV=sg(),ng=O(),ig=h(),og="Registration failed.";async function TV(){ng.createLogFile(ig.PROCESS_LOG_NAMES.CLI,ig.PROCESS_DESCRIPTORS.REGISTER);let e;try{e=await SV.register()}catch(t){return ng.error(`Registration error ${t}`),og}return e||og}o(TV,"register");ag.exports={register:TV}});var Hr=O(),fV=Vr(),Vt=h(),cg=require("fs"),ug=require("path"),hV=require("os"),{PACKAGE_ROOT:lg}=h(),RV=vl();mV();function AV(){let e=ug.join(lg,"bin",`harperdb.${Vt.CODE_EXTENSION}`),t;try{t=cg.statSync(e)}catch{Hr.info("Couldn't find the harperdb executable process.");return}let r=hV.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw Hr.error(s),console.log(s),new Error(s)}}o(AV,"checkCallingUserSync");function mV(){let e=RV();if(e)if(e.error){console.error(e.error),Hr.error(e.error);return}else e.warn&&(console.warn(e.warn),Hr.warn(e.warn));let t;cg.readdir(ug.join(lg,"bin"),r=>{if(r)return Hr.error(r);if(process.argv&&process.argv[2]&&(t=process.argv[2].toLowerCase()),t!==Vt.SERVICE_ACTIONS_ENUM.INSTALL)try{AV()}catch(n){throw console.log(n.message),n}let s;switch(t){case Vt.SERVICE_ACTIONS_ENUM.RUN:s=za().run();break;case Vt.SERVICE_ACTIONS_ENUM.INSTALL:Zm()().then(()=>{za().run(!0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.REGISTER:_g().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.STOP:Ja().stop().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.RESTART:Ja().restartProcesses().then().catch(E=>{Hr.error(E),console.error("There was an error restarting harperdb. Please stop manually with harperdb stop and start again."),process.exit(1)});break;case Vt.SERVICE_ACTIONS_ENUM.VERSION:fV.printVersion();break;case Vt.SERVICE_ACTIONS_ENUM.UPGRADE:Hr.setLogLevel(Vt.LOG_LEVELS.INFO),ol().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{Hr.error(`Got an error during upgrade ${E}`)});break;default:za().run();break}})}o(mV,"harperDBService");
|