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
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var gb=Object.defineProperty;var a=(e,t)=>gb(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=h((UJ,ah)=>{"use strict";var $e=require("path"),Ib=require("fs");function bb(){let e=__dirname;for(;!Ib.existsSync($e.join(e,"package.json"));){let t=$e.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(bb,"getHDBPackageRoot");var Gt=bb(),Wd="js",Qn=Wd,Cb="harperdb-config.yaml",wb="defaultConfig.yaml",Lb="hdb",Jd=`hdbServer.${Qn}`,Zd=`customFunctionsServer.${Qn}`,Xd=`hdbIpcServer.${Qn}`,Ub=`restartHdb.${Qn}`,eu="HarperDB",fa="Custom Functions",Ta="Clustering Hub",ma="Clustering Leaf",tu="Clustering Ingest Service",ru="Clustering Reply Service",yb="foreground.pid",j_={HDB:eu,IPC:"IPC",CLUSTERING_HUB:Ta,CLUSTERING_LEAF:ma,CLUSTERING_INGEST_SERVICE:tu,CLUSTERING_REPLY_SERVICE:ru,CUSTOM_FUNCTIONS:fa,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"},Db={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"},Mb={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Pb={harperdb:eu,ipc:"IPC","clustering hub":Ta,"clustering leaf":ma,"clustering ingest service":tu,"clustering reply service":ru,"custom functions":fa,custom_functions:fa,"pm2-logrotate":j_.PM2_LOGROTATE,logrotate:j_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Bb={CLUSTERING_HUB_PROC_DESCRIPTOR:Ta,CLUSTERING_LEAF_PROC_DESCRIPTOR:ma,CLUSTERING_INGEST_PROC_DESCRIPTOR:tu,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:ru},Sa={HDB:$e.join(Gt,"server/harperdb"),IPC:$e.join(Gt,"server/ipc"),CUSTOM_FUNCTIONS:$e.join(Gt,"server/customFunctions"),CLUSTERING_HUB:$e.join(Gt,"server/nats"),CLUSTERING_LEAF:$e.join(Gt,"server/nats")},vb={HDB:$e.join(Sa.HDB,Jd),IPC:$e.join(Sa.IPC,Xd),CUSTOM_FUNCTIONS:$e.join(Sa.CUSTOM_FUNCTIONS,Zd)},Hb={HDB:$e.join(Gt,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:$e.join(Gt,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:$e.join(Gt,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:$e.join(Gt,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:$e.resolve(Gt,"launchServiceScripts/launchUpdateNodes4-0-0.js")},qb={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},zd="support@harperdb.io",Gb="customer-success@harperdb.io",jd=1,Fb=4141,eh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Vb="https://www.harperdb.io/product",kb=`For support, please submit a request at ${eh} or contact ${zd}`,th=`For license support, please contact ${Gb}`,xb="None of the specified records were found.",$b="hash attribute not found",Yb=`Your current license only supports ${jd} role. ${th}`,Kb="Your current license only supports 3 connections to a node.",Qb="127.0.0.1",Wb=1,Jb=/^\.$/,Zb=/^\.\.$/,Xb="U+002E",zb=/\//g,jb="U+002F",eC=/U\+002F/g,tC=/^U\+002E$/,rC=/^U\+002EU\+002E$/,sC="d",nC=999999,iC="*",aC="--max-old-space-size=",oC="system",cC="__hdb_hash",_C=".harperdb",uC=".hdb",lC="keys",EC="hdb_boot_properties.file",dC=".updateConfig.json",hC="SIGTSTP",SC=24,fC=6e4,TC=448,mC="blob",RC="trash",AC="schema",pC="transactions",OC=".count",NC="id",gC="install_log.log",IC="run_log.log",bC="PROCESS_NAME",CC={SETTINGS_PATH_KEY:"settings_path"},rh=require("lodash"),wC={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"},LC={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},UC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},yC={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"},DC={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"},ht="hdb_internal:",MC={CREATE_SCHEMA:ht+"create_schema",CREATE_TABLE:ht+"create_table",CREATE_ATTRIBUTE:ht+"create_attribute",ADD_USER:ht+"add_user",ALTER_USER:ht+"alter_user",DROP_USER:ht+"drop_user",HDB_NODES:ht+"hdb_nodes",HDB_USERS:ht+"hdb_users",HDB_WORKERS:ht+"hdb_workers",CATCHUP:ht+"catchup",SCHEMA_CATCHUP:ht+"schema_catchup",WORKER_ROOM:ht+"cluster_workers"},PC={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"},BC="060493.ks",vC=".license",HC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},I={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"},qC={CSV:".csv",JSON:".json"},GC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},FC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},vr={};vr[I.CREATE_SCHEMA]=I.CREATE_SCHEMA;vr[I.CREATE_TABLE]=I.CREATE_TABLE;vr[I.CREATE_ATTRIBUTE]=I.CREATE_ATTRIBUTE;vr[I.INSERT]=I.INSERT;vr[I.UPDATE]=I.UPDATE;vr[I.UPSERT]=I.UPSERT;vr[I.DELETE]=I.DELETE;var J=Object.create(null);J[I.DESCRIBE_ALL]=I.DESCRIBE_ALL;J[I.DESCRIBE_TABLE]=I.DESCRIBE_TABLE;J[I.DESCRIBE_SCHEMA]=I.DESCRIBE_SCHEMA;J[I.READ_LOG]=I.READ_LOG;J[I.ADD_NODE]=I.ADD_NODE;J[I.LIST_USERS]=I.LIST_USERS;J[I.LIST_ROLES]=I.LIST_ROLES;J[I.USER_INFO]=I.USER_INFO;J[I.SQL]=I.SQL;J[I.GET_JOB]=I.GET_JOB;J[I.SEARCH_JOBS_BY_START_DATE]=I.SEARCH_JOBS_BY_START_DATE;J[I.DELETE_FILES_BEFORE]=I.DELETE_FILES_BEFORE;J[I.EXPORT_LOCAL]=I.EXPORT_LOCAL;J[I.EXPORT_TO_S3]=I.EXPORT_TO_S3;J[I.CLUSTER_STATUS]=I.CLUSTER_STATUS;J[I.REMOVE_NODE]=I.REMOVE_NODE;J[I.RESTART]=I.RESTART;J[I.CUSTOM_FUNCTIONS_STATUS]=I.CUSTOM_FUNCTIONS_STATUS;J[I.GET_CUSTOM_FUNCTIONS]=I.GET_CUSTOM_FUNCTIONS;J[I.GET_CUSTOM_FUNCTION]=I.GET_CUSTOM_FUNCTION;J[I.SET_CUSTOM_FUNCTION]=I.SET_CUSTOM_FUNCTION;J[I.DROP_CUSTOM_FUNCTION]=I.DROP_CUSTOM_FUNCTION;J[I.ADD_CUSTOM_FUNCTION_PROJECT]=I.ADD_CUSTOM_FUNCTION_PROJECT;J[I.DROP_CUSTOM_FUNCTION_PROJECT]=I.DROP_CUSTOM_FUNCTION_PROJECT;J[I.PACKAGE_CUSTOM_FUNCTION_PROJECT]=I.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[I.DEPLOY_CUSTOM_FUNCTION_PROJECT]=I.DEPLOY_CUSTOM_FUNCTION_PROJECT;var VC={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},kC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sh={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"},xC=rh.invert(sh),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"},$C={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},YC={csv_file_load:"csv_file_load",csv_data_load:I.CSV_DATA_LOAD,csv_url_load:I.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"},KC={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"},QC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},WC={FILE_SYSTEM:"fs",LMDB:"lmdb"},JC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},ZC={DEVELOPMENT:8192,DEFAULT:512},XC={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"},zC={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"},jC={ENOENT:"ENOENT",EACCES:"EACCES"},nh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},ew="__clustering__",tw=Object.values(nh),rw=15984864e5,ih={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},sw=rh.invert(ih),nw={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"},iw=111,aw=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Pw.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(qw,"findPs")});var Ye=h((PJ,Ah)=>{"use strict";var Gw="__dbis__",Fw="__environment_name__",Vw="__dbi_defintion__",kw={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"},xw=["__createdtime__","__updatedtime__"],$w="\uFFFF",Rh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Yw=Object.values(Rh);Ah.exports={INTERNAL_DBIS_NAME:Gw,DBI_DEFINITION_NAME:Vw,SEARCH_TYPES:kw,TIMESTAMP_NAMES:xw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Fw,TRANSACTIONS_DBI_NAMES_ENUM:Rh,TRANSACTIONS_DBIS:Yw,OVERFLOW_MARKER:$w}});var Ke=h((BJ,Lh)=>{"use strict";var ph=T(),Oh=Ye(),Nh={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},gh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Ih={500:gh("There was an error processing your request."),400:"Invalid request"},Kw=Ih[Nh.INTERNAL_SERVER_ERROR],Qw={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.`},Ww={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Jw={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"},Zw={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 ${Oh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Oh.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"},Xw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ph.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 ${ph.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"},bh={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"},zw={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."},jw={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`},eL={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"},tL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rL={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`},Ch={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.`},wh={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}`},sL={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."},nL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},iL={...bh,...Jw,...Qw,...zw,...jw,...eL,...tL,...rL,...Xw,...Ch,...wh,...sL,...nL,...Ww};Lh.exports={CHECK_LOGS_WRAPPER:gh,HDB_ERROR_MSGS:iL,DEFAULT_ERROR_MSGS:Ih,DEFAULT_ERROR_RESP:Kw,HTTP_STATUS_CODES:Nh,LMDB_ERRORS_ENUM:Zw,AUTHENTICATION_ERROR_MSGS:bh,VALIDATION_ERROR_MSGS:Ch,IPC_ERRORS:wh}});var D=h((vJ,Dh)=>{"use strict";var Js=Ke(),aL=g(),oL=T(),Wn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Uh),this.http_resp_code=s||Js.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Js.DEFAULT_ERROR_MSGS[s]?Js.DEFAULT_ERROR_MSGS[s]:Js.DEFAULT_ERROR_MSGS[Js.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&&aL[n](i)}};a(Wn,"HdbError");function Uh(e,t,r,s=oL.LOG_LEVELS.ERROR,n=null,i=!1){if(yh(e))return e;let o=new Wn(e,t,r,s,n);return i&&delete o.stack,o}a(Uh,"handleHDBError");function yh(e){return e.__proto__.constructor.name===Wn.name}a(yh,"isHDBError");Dh.exports={isHDBError:yh,handleHDBError:Uh,hdb_errors:Js}});var b=h((qJ,Qh)=>{"use strict";var _u=require("path"),cL=require("fs-extra"),Ie=g(),Mh=require("fs-extra"),_L=require("truncate-utf8-bytes"),Jn=require("os"),uL=require("net"),lL=require("recursive-iterator"),Ue=T(),qh=mh(),Ph=require("papaparse"),pa=require("moment"),{inspect:EL}=require("util"),Bh=require("is-number"),HJ=require("lodash"),{hdb_errors:Oa}=D(),Gh=require("util").promisify(setTimeout),dL=100,hL=5,SL="",fL=4,vh=255,Hh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qh.exports={isEmpty:St,isEmptyOrZeroLength:jt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:Fh,errorizeMessage:TL,stripFileExtension:NL,autoCast:gL,autoCastJSONDeep:uu,removeDir:bL,compareVersions:CL,isCompatibleDataVersion:wL,escapeRawValue:kh,unescapeValue:LL,stringifyProps:UL,valueConverter:yL,timeoutPromise:ML,isClusterOperation:BL,getClusterUser:qL,sendTransactionToSocketCluster:vL,checkGlobalSchemaTable:HL,getHomeDir:xh,getPropsFilePath:DL,promisifyPapaParse:GL,removeBOM:$h,createEventPromise:FL,checkProcessRunning:VL,checkSchemaTableExist:kL,checkSchemaExists:Yh,checkTableExists:Kh,getStartOfTomorrowInSeconds:xL,getLimitKey:$L,isObject:OL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:Vh,backtickASTSchemaItems:YL,isPortTaken:PL,stopProcess:KL,createForkArgs:QL,autoCastBoolean:WL,async_set_timeout:Gh,getTableHashAttribute:JL,doesSchemaExist:ZL,doesTableExist:XL,stringifyObj:zL,ms_to_time:jL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function St(e){return e==null}a(St,"isEmpty");function mL(e){return!St(e)&&(e||e===0||e===""||Fh(e))}a(mL,"isNotEmptyAndHasValue");function jt(e){return St(e)||e.length===0||e.size===0}a(jt,"isEmptyOrZeroLength");function RL(e){if(St(e))return!0;for(let t=0;t<e.length;t++)if(St(e[t]))return!0;return!1}a(RL,"arrayHasEmptyValues");function AL(e){if(jt(e))return!0;for(let t=0;t<e.length;t++)if(jt(e[t]))return!0;return!1}a(AL,"arrayHasEmptyOrZeroLengthValues");function pL(...e){try{return e.join(_u.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function Fh(e){return St(e)?!1:e===!0||e===!1}a(Fh,"isBoolean");function OL(e){return St(e)?!1:typeof e=="object"}a(OL,"isObject");function NL(e){return jt(e)?SL:e.slice(0,-fL)}a(NL,"stripFileExtension");function gL(e){return St(e)||e===""||typeof e!="string"?e:Hh[e]!==void 0?Hh[e]:Vh(e)===!0?Number(e):e}a(gL,"autoCast");function IL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(IL,"autoCastJSON");function uu(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=uu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=uu(r);s!==r&&(e[t]=s)}return e}else return IL(e)}a(uu,"autoCastJSONDeep");function Vh(e){if(e.startsWith("0.")&&Bh(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Bh(e))}a(Vh,"autoCasterIsNumberCheck");async function bL(e){if(jt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Mh.emptyDir(e),await Mh.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(bL,"removeDir");function CL(e,t){if(jt(e)){Ie.info("Invalid current version sent as parameter.");return}if(jt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(CL,"compareVersions");function wL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(wL,"isCompatibleDataVersion");function kh(e){if(St(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(kh,"escapeRawValue");function LL(e){if(St(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(LL,"unescapeValue");function UL(e,t){if(St(e))return Ie.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Jn.EOL}!jt(s)&&s[0]===";"?r+=" "+s+n+Jn.EOL:jt(s)||(r+=s+"="+n+Jn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(UL,"stringifyProps");function yL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(kh(t)),s=Buffer.byteLength(r)>vh?_L(r,vh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(yL,"valueConverter");function xh(){let e;try{e=Jn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xh,"getHomeDir");function DL(){let e=_u.join(xh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return cL.existsSync(e)||(e=_u.join(__dirname,"../","hdb_boot_properties.file")),e}a(DL,"getPropsFilePath");function ML(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ML,"timeoutPromise");async function PL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(PL,"isPortTaken");function BL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(BL,"isClusterOperation");function vL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.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]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(vL,"sendTransactionToSocketCluster");function HL(e,t){if(!global.hdb_schema[e])return Oa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Oa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(HL,"checkGlobalSchemaTable");function qL(e,t){if(St(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(St(e)||jt(e)){Ie.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){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(qL,"getClusterUser");function GL(){Ph.parsePromise=function(e,t){return new Promise(function(r,s){Ph.parse(e,{header:!0,transformHeader:$h,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(GL,"promisifyPapaParse");function $h(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($h,"removeBOM");function FL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(FL,"createEventPromise");async function VL(e){let t=!0,r=0;do await Gh(dL*r++),(await qh.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(VL,"checkProcessRunning");function kL(e,t){let r=Yh(e);if(r)return r;let s=Kh(e,t);if(s)return s}a(kL,"checkSchemaTableExist");function Yh(e){if(!global.hdb_schema[e])return Oa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Yh,"checkSchemaExists");function Kh(e,t){if(!global.hdb_schema[e][t])return Oa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kh,"checkTableExists");function xL(){let e=pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=pa().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function $L(){return pa().utc().format("DD-MM-YYYY")}a($L,"getLimitKey");function YL(e){try{let t=new lL(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){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(YL,"backtickASTSchemaItems");async function KL(e){let t=Jn.userInfo();(await qh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(KL,"stopProcess");function QL(e){return[e]}a(QL,"createForkArgs");function WL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WL,"autoCastBoolean");function JL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(JL,"getTableHashAttribute");function ZL(e){return global?.hdb_schema?.[e]!==void 0}a(ZL,"doesSchemaExist");function XL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(XL,"doesTableExist");function zL(e){try{return JSON.stringify(e)}catch{return e}}a(zL,"stringifyObj");function jL(e){let t=pa.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(jL,"ms_to_time")});var Jh=h((GJ,Wh)=>{"use strict";var eU={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))},tU="certificate.pem",rU="privateKey.pem",sU="ca.pem";Wh.exports={CERTIFICATE_VALUES:eU,CERTIFICATE_PEM_NAME:tU,PRIVATEKEY_PEM_NAME:rU,CA_PEM_NAME:sU}});var Ee=h((FJ,Zh)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Zh.exports={validateObject:nU,validateObjectAsync:iU,validateBySchema:aU};function nU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(nU,"validateObject");async function iU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(iU,"validateObjectAsync");function aU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(aU,"validateBySchema")});var Eu=h((VJ,zh)=>{"use strict";var oU=require("fs-extra"),F=require("joi"),cU=require("os"),{boolean:ye,string:fr,number:er,array:lu}=F.types(),Ft=require("path"),_U=g(),Na=b(),Tr=Jh(),uU=Ee(),Sr="keys",lU=Tr.CERTIFICATE_PEM_NAME,EU=Tr.PRIVATEKEY_PEM_NAME,dU=Tr.CA_PEM_NAME,hU=Tr.CERTIFICATE_PEM_NAME,SU=Tr.PRIVATEKEY_PEM_NAME,fU=Tr.CA_PEM_NAME,TU=Tr.CERTIFICATE_PEM_NAME,mU=Tr.PRIVATEKEY_PEM_NAME,RU=Tr.CA_PEM_NAME,AU="log",pU="custom_functions",OU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",NU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",gU="rootPath config parameter is undefined",IU="clustering.enabled config parameter is undefined",qr=er.min(0).required(),ga=lu.items({host:fr.required(),port:qr}).empty(null),nt;zh.exports={configValidator:bU,routesValidator:yU,route_constraints:ga};function bU(e){if(nt=e.rootPath,Na.isEmpty(nt))throw gU;let t=ye.required(),r=F.valid("production","development").required(),s=er.min(1).max(1e3).empty(null).default(UU),n=fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xh),i=F.custom(wU).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Xh),o=fr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(Na.isEmpty(c))throw IU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:qr,routes:ga}).required()}).required(),leafNodes:F.object({network:F.object({port:qr}).required()}).required(),network:F.object({port:qr}).required()}).required(),leafServer:F.object({network:F.object({port:qr,routes:ga}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:lu.required(),headersTimeout:er.min(1).required(),https:ye.required(),keepAliveTimeout:er.min(1).required(),port:qr,timeout:er.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:qr})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:fr.required(),maxSize:fr.custom(LU).required(),retain:er.min(0).required(),rotate:ye.required(),rotateInterval:fr.required(),rotateModule:ye.required(),timezone:fr.required(),workerInterval:er.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:lu.required(),headersTimeout:er.min(1).required(),https:ye.required(),keepAliveTimeout:er.min(1).required(),port:qr,timeout:er.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(bU,"configValidator");function CU(e){return oU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(CU,"doesPathExist");function wU(e,t){F.assert(e,fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=CU(e);if(r)return t.message(r)}a(wU,"validatePemFile");function LU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(OU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(NU)}a(LU,"validateRotationMaxSize");function UU(e,t){let r=t.state.path.join("."),s=cU.cpus().length,n=s-1;return n<=2&&(n=2),_U.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(UU,"setDefaultThreads");function Xh(e,t){if(!Na.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Na.isEmpty(nt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ft.join(nt,pU);case"logging.root":return Ft.join(nt,AU);case"operationsApi.tls.certificate":return Ft.join(nt,Sr,lU);case"operationsApi.tls.privateKey":return Ft.join(nt,Sr,EU);case"operationsApi.tls.certificateAuthority":return Ft.join(nt,Sr,dU);case"customFunctions.tls.certificate":return Ft.join(nt,Sr,hU);case"customFunctions.tls.privateKey":return Ft.join(nt,Sr,SU);case"customFunctions.tls.certificateAuthority":return Ft.join(nt,Sr,fU);case"clustering.tls.certificate":return Ft.join(nt,Sr,TU);case"clustering.tls.privateKey":return Ft.join(nt,Sr,mU);case"clustering.tls.certificateAuthority":return Ft.join(nt,Sr,RU);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xh,"setDefaultRoot");function yU(e){let t=F.object({routes:ga});return uU.validateBySchema({routes:e},t)}a(yU,"routesValidator")});var mr=h((kJ,iS)=>{"use strict";var re=T(),bt=b(),Qe=g(),{configValidator:DU,routesValidator:jh}=Eu(),Vt=require("fs-extra"),MU=require("yaml"),Zs=require("path"),PU=require("is-number"),Ca=require("properties-reader"),BU=require("lodash"),{handleHDBError:vU}=D(),{HTTP_STATUS_CODES:HU,HDB_ERROR_MSGS:Ia}=Ke(),{PACKAGE_ROOT:qU}=T(),GU="Unable to get config value because config is uninitialized",FU="Config successfully initialized",VU="Error backing up config file",kU="Empty parameter sent to getConfigValue",eS=Zs.join(qU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),xU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ba,it;iS.exports={createConfigFile:$U,getDefaultConfig:YU,getConfigValue:tS,initConfig:rS,flattenConfig:Es,updateConfigValue:sS,updateConfigObject:KU,getConfiguration:QU,setConfiguration:WU,readConfigFile:Su,getClusteringRoutes:JU,initOldConfig:nS,getConfigFromFile:ZU};function $U(e){let t=Xs(eS);ba=Es(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=du(o,e[i]);try{t.setIn([...c],_)}catch(u){Qe.error(u)}}}hu(t);let r=t.toJSON();it=Es(r);let s=t.getIn(["rootPath"]),n=Zs.join(s,re.HDB_CONFIG_FILE);Vt.createFileSync(n),Vt.writeFileSync(n,String(t)),Qe.trace(`Config file written to ${n}`)}a($U,"createConfigFile");function YU(e){if(ba===void 0){let r=Xs(eS);ba=Es(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ba[t.toLowerCase()]}a(YU,"getDefaultConfig");function tS(e){if(bt.isEmpty(e)){Qe.error(kU);return}if(it===void 0){Qe.trace(GU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return it[t.toLowerCase()]}a(tS,"getConfigValue");function rS(e=!1){if(it===void 0||e){let t=bt.getPropsFilePath();try{Vt.accessSync(t,Vt.constants.F_OK|Vt.constants.R_OK)}catch(o){throw Qe.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ca(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{nS(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Xs(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Qe.trace(`HarperDB config file not found at ${s}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Qe.error(o),new Error(`Error reading HarperDB config file at ${s}`)}hu(n);let i=n.toJSON();it=Es(i),Qe.trace(FU)}}a(rS,"initConfig");function hu(e){let t=e.toJSON(),r=DU(t);if(r.error)throw Ia.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)}a(hu,"validateConfig");function KU(e,t){it===void 0&&(it={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Qe.trace(`Unable to update config object because config param '${e}' does not exist`);return}it[r.toLowerCase()]=t}a(KU,"updateConfigObject");function sS(e,t,r=void 0,s=!1,n=!1){it===void 0&&rS();let i=tS(re.CONFIG_PARAM_MAP.hdb_root),o=Zs.join(i,re.HDB_CONFIG_FILE),c=Xs(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=du(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),S=du(E,r[l]);try{c.setIn([...d],S)}catch(m){Qe.error(m)}}}hu(c);let _=c.getIn(["rootPath"]),u=Zs.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Zs.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Vt.copySync(o,l),Qe.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Qe.error(VU),Qe.error(l)}Vt.writeFileSync(u,String(c)),n&&(it=Es(c.toJSON())),Qe.trace(`Config parameter: ${e} updated with value: ${t}`)}a(sS,"updateConfigValue");function Es(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=Es(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Es,"flattenConfig");function du(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.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(PU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||bt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return bt.autoCast(t)}a(du,"castConfigValue");function QU(){let e=bt.getPropsFilePath(),r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(QU,"getConfiguration");async function WU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sS(void 0,void 0,n,!0),xU}catch(i){throw typeof i=="string"||i instanceof String?vU(i,i,HU.BAD_REQUEST,void 0,void 0,!0):i}}a(WU,"setConfiguration");function Su(){let e=bt.getPropsFilePath();try{Vt.accessSync(e,Vt.constants.F_OK|Vt.constants.R_OK)}catch(n){throw Qe.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(Su,"readConfigFile");function Xs(e){return MU.parseDocument(Vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xs,"parseYamlDoc");function JU(){let e=Su(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=bt.isEmptyOrZeroLength(t)?[]:t;let r=jh(t);if(r)throw Ia.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=bt.isEmptyOrZeroLength(s)?[]:s;let n=jh(s);if(n)throw Ia.CONFIG_VALIDATION(n.message);if(!bt.isEmptyOrZeroLength(s)&&!bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ia.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JU,"getClusteringRoutes");function nS(e){let t=Ca(e);it={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(bt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?it[n]=Zs.dirname(s):it[n]=s}return it}a(nS,"initOldConfig");function ZU(e){let t=Su();return BU.get(t,e.replaceAll("_","."))}a(ZU,"getConfigFromFile")});var Y=h((xJ,oS)=>{"use strict";var fu=require("fs-extra"),tr=require("path"),XU=require("os"),zU=require("properties-reader"),Zn=g(),zs=b(),M=T(),wa=mr(),jU="Error initializing environment manager",La="BOOT_PROPS_FILE_PATH",aS=!1,ey={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Rr={};oS.exports={BOOT_PROPS_FILE_PATH:La,getHdbBasePath:ty,setHdbBasePath:ry,get:sy,initSync:iy,setProperty:$,initTestEnvironment:ay};function ty(){return Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ty,"getHdbBasePath");function ry(e){Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ry,"setHdbBasePath");function sy(e){let t=wa.getConfigValue(e);return t===void 0?Rr[e]:t}a(sy,"get");function $(e,t){ey[e]&&(Rr[e]=t),wa.updateConfigObject(e,t)}a($,"setProperty");function ny(){let e;try{e=zs.getPropsFilePath(),fu.accessSync(e,fu.constants.F_OK|fu.constants.R_OK),aS=!0;let t=zU(e);return Rr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),Rr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Rr[La]=e,!0}catch{return Zn.trace(`Environment manager found no properties file at ${e}`),!1}}a(ny,"doesPropFileExist");function iy(e=!1){try{(aS||ny())&&(wa.initConfig(e),Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wa.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zn.error(jU),Zn.error(t),console.error(t),process.exit(1)}}a(iy,"initSync");function ay(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=tr.join(__dirname,"../../","unitTests");Rr[La]=tr.join(_,"hdb_boot_properties.file"),$(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,tr.join(_,"settings.test")),$(M.HDB_SETTINGS_NAMES.INSTALL_USER,XU.userInfo().username),$(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,tr.join(_,"envDir","utility","keys","privateKey.pem")),$(M.HDB_SETTINGS_NAMES.CERT_KEY,tr.join(_,"envDir","utility","keys","certificate.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,tr.join(_,"envDir","utility","keys","privateKey.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,tr.join(_,"envDir","utility","keys","certificate.pem")),$(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),$(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,tr.join(_,"envDir","log")),$(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),$(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),$(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,tr.join(_,"envDir")),$(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,zs.isEmpty(n)?!0:n),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,zs.isEmpty(n)?!0:n),$(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),$(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,zs.isEmpty(i)?!1:i),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,zs.isEmpty(i)?!1:i),$(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),$(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),$(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,tr.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),$(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,zs.isEmpty(c)?!1:c),o&&($("CORS_ACCESSLIST",o),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&($(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&($(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&($(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${La}. Please check your boot props and settings files`;Zn.fatal(r),Zn.error(t)}}a(ay,"initTestEnvironment")});var Ua=h(($J,oy)=>{oy.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 _S=h((YJ,cS)=>{var cy=require("fastify-plugin");cS.exports=cy(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var ds=h((KJ,_y)=>{_y.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 OS=h((WJ,pS)=>{"use strict";var Tu=require("recursive-iterator"),uy=require("alasql"),mu=require("clone"),uS=b(),{handleHDBError:lS,hdb_errors:ly}=D(),{HDB_ERROR_MSGS:ES,HTTP_STATUS_CODES:dS}=ly,Ey=["DISTINCT_ARRAY"],hS=Symbol("validateTables"),Ru=Symbol("validateTable"),QJ=Symbol("getAllColumns"),SS=Symbol("validateAllColumns"),ya=Symbol("findColumn"),fS=Symbol("validateOrderBy"),Xn=Symbol("validateSegment"),Au=Symbol("validateColumn"),TS=Symbol("setColumnsForTable"),mS=Symbol("checkColumnsForAsterisk"),RS=Symbol("validateGroupBy"),AS=Symbol("hasColumns"),Da=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hS](),this[mS](),this[SS]()}[hS](){if(this[AS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ru](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ru](t.table)})}}[AS](){let t=!1,r=new Tu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ru](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw lS(new Error,ES.SCHEMA_NOT_FOUND(t.databaseid),dS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw lS(new Error,ES.TABLE_NOT_FOUND(t.databaseid,t.tableid),dS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=mu(s);n.table=mu(t),this.attributes.push(n)})}[ya](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)}[mS](){let t=new Tu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[TS](r.tableid)}[TS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new uy.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[SS](){this[Xn](this.statement.columns,!1),this[Xn](this.statement.joins,!1),this[Xn](this.statement.where,!1),this[RS](this.statement.group,!1),this[Xn](this.statement.order,!0)}[Xn](t,r){if(!t)return;let s=new Tu(t),n=[];for(let{node:i,path:o}of s)!uS.isEmpty(i)&&!uS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[fS](i):n.push(this[Au](i)));return n}[RS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Ey.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=mu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ya](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[ya](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[fS](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[Au](t)}[Au](t){let r=this[ya](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]}};a(Da,"SelectValidator");pS.exports=Da});var pu=h((JJ,NS)=>{"use strict";var Ma=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")}};a(Ma,"BridgeMethods");NS.exports=Ma});var hs=h((zJ,CS)=>{"use strict";var gS=Ke().LMDB_ERRORS_ENUM,ZJ=require("lmdb"),dy=Ye(),XJ=require("buffer").Buffer,hy=require("microtime"),{OVERFLOW_MARKER:IS,MAX_SEARCH_KEY_LENGTH:Pa}=dy,bS=["number","string","symbol","boolean","bigint"];function Sy(e){if(!e)throw new Error(gS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(gS.INVALID_ENVIRONMENT)}a(Sy,"validateEnv");function fy(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(fy,"stringifyData");function Ty(e){return e instanceof Date?e.valueOf():e}a(Ty,"convertKeyValueToWrite");function my(e){if(e==null)return;if(bS.includes(typeof e))return e.length>Pa?[e.slice(0,Pa)+IS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];bS.includes(typeof n)&&(n.length>Pa?t.push(n.slice(0,Pa)+IS):t.push(n))}}return t}a(my,"getIndexedValues");function Ry(){let e=hy.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(Ry,"getMicroTime");CS.exports={validateEnv:Sy,stringifyData:fy,convertKeyValueToWrite:Ty,getMicroTime:Ry,getIndexedValues:my}});var LS=h((jJ,wS)=>{"use strict";var Ba=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ba,"DBIDefinition");wS.exports=Ba});var yS=h((eZ,US)=>{"use strict";var va=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)}};a(va,"OpenDBIObject");US.exports=va});var MS=h((tZ,DS)=>{"use strict";var Ha=class{constructor(t,r,s,n,i=!1,o=!1,c=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=o,c!==void 0&&(this.overlappingSync=c)}};a(Ha,"OpenEnvironmentObject");DS.exports=Ha});var Z=h((sZ,YS)=>{"use strict";var Ou=require("lmdb"),Ct=require("fs-extra"),kt=require("path"),Ga=hs(),PS=g(),De=Ke().LMDB_ERRORS_ENUM,Fa=LS(),Nu=yS(),BS=MS(),Gr=Ye(),rZ=T(),zn=Y();zn.initSync();var vS=zn.get("STORAGE_WRITEASYNC")===!0||zn.get("STORAGE_WRITEASYNC")==="true"||zn.get("STORAGE_WRITEASYNC")==="TRUE",HS=zn.get("STORAGE_OVERLAPPINGSYNC"),qS=1024*1024*1024,GS=1e4,FS=1e3,xt=Gr.INTERNAL_DBIS_NAME,VS=Gr.DBI_DEFINITION_NAME,Ay="data.mdb",py="lock.mdb",jn=".mdb",Oy="-lock",qa=class{constructor(t,r,s=!1){this.dbi=wt(t,r),this.key_type=this.dbi[Gr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Gr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ou.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(qa,"TransactionCursor");function gu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(gu,"pathEnvNameValidation");async function Iu(e,t,r=!0){try{await Ct.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=kt.join(e,t+jn);return await Ct.access(s,Ct.constants.R_OK|Ct.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ct.access(kt.join(e,t,Ay),Ct.constants.R_OK|Ct.constants.F_OK),kt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Iu,"validateEnvironmentPath");function Va(e,t){if(Ga.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Va,"validateEnvDBIName");async function Ny(e,t,r=!1,s=!1){gu(e,t),t=t.toString();try{return await Iu(e,t,s),bu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=kt.join(e,t);await Ct.mkdirp(s?i:e);let o=new BS(s?i:i+jn,qS,GS,FS,!1,vS,HS),c=Ou.open(o);c.dbis=Object.create(null);let _=new Nu(!1);c.openDB(xt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Cu(e,t,r);return c[Gr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(Ny,"createEnvironment");async function gy(e,t,r,s=!0){let n=await bu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await Ct.access(kt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gy,"copyEnvironment");async function bu(e,t,r=!1){gu(e,t),t=t.toString();let s=Cu(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 Iu(e,t),i=kt.join(e,t+jn),o=n!=i,c=new BS(n,qS,GS,FS,o,vS,HS),_=Ou.open(c);_.dbis=Object.create(null);let u=xS(_);for(let l=0;l<u.length;l++)wt(_,u[l]);return _[Gr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(bu,"openEnvironment");async function Iy(e,t,r=!1){gu(e,t),t=t.toString();let s=kt.join(e,t+jn),n=await Iu(e,t);if(global.lmdb_map!==void 0){let i=Cu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await kS(o),delete global.lmdb_map[i]}}await Ct.remove(n),await Ct.remove(n===s?n+Oy:kt.join(kt.dirname(n),py))}a(Iy,"deleteEnvironment");async function kS(e){Ga.validateEnv(e);let t=e[Gr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(kS,"closeEnvironment");function Cu(e,t,r=!1){let n=`${kt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Cu,"getCachedEnvironmentName");function by(e){Ga.validateEnv(e);let t=Object.create(null),r=wt(e,xt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==xt)try{t[s]=Object.assign(new Fa,n)}catch{PS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(by,"listDBIDefinitions");function xS(e){Ga.validateEnv(e);let t=[],r=wt(e,xt);for(let{key:s}of r.getRange({start:!1}))s!==xt&&t.push(s);return t}a(xS,"listDBIs");function Cy(e,t){let s=wt(e,xt).getEntry(t),n=new Fa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{PS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Cy,"getDBIDefinition");function $S(e,t,r,s=!1){if(Va(e,t),t=t.toString(),t===xt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return wt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Nu(r,s===!0),o=e.openDB(t,i),c=new Fa(r===!0,s);return o[VS]=c,wt(e,xt).putSync(t,c),e.dbis[t]=o,o}throw n}}a($S,"createDBI");function wt(e,t){if(Va(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==xt?r=Cy(e,t):r=new Fa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Nu(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(De.DBI_DOES_NOT_EXIST):n}return s[VS]=r,e.dbis[t]=s,s}a(wt,"openDBI");function wy(e,t){Va(e,t),t=t.toString();let r=wt(e,t),s=r.getStats();return r[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wy,"statDBI");async function Ly(e,t){try{let r=kt.join(e,t+jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(Ly,"environmentDataSize");function Uy(e,t){if(Va(e,t),t=t.toString(),t===xt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);wt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],wt(e,xt).removeSync(t)}a(Uy,"dropDBI");function yy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{wt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)$S(e,n,n!==t,n===t);else throw i}}}a(yy,"initializeDBIs");YS.exports={openDBI:wt,openEnvironment:bu,createEnvironment:Ny,listDBIs:xS,listDBIDefinitions:by,createDBI:$S,dropDBI:Uy,statDBI:wy,deleteEnvironment:Iy,initializeDBIs:yy,TransactionCursor:qa,environmentDataSize:Ly,copyEnvironment:gy,closeEnvironment:kS}});var QS=h((nZ,KS)=>{"use strict";var ka=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(ka,"InsertRecordsResponseObject");KS.exports=ka});var JS=h((iZ,WS)=>{"use strict";var xa=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(xa,"UpdateRecordsResponseObject");WS.exports=xa});var XS=h((aZ,ZS)=>{"use strict";var $a=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a($a,"UpsertRecordsResponseObject");ZS.exports=$a});var js=h((uZ,jS)=>{"use strict";var Dy=Z(),My=QS(),Py=JS(),By=XS(),ti=hs(),ei=Ke().LMDB_ERRORS_ENUM,vy=Ye(),Fr=T(),Hy=b(),qy=require("uuid"),oZ=require("lmdb"),{handleHDBError:Gy,hdb_errors:Fy}=D(),{OVERFLOW_MARKER:cZ,MAX_SEARCH_KEY_LENGTH:_Z}=vy,wu=Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ss=Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Vy(e,t,r,s,n=!0){Du(e,t,r,s),Lu(e,t,r);let i=new My,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];zS(u,!0,n);let l=ky(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Uu(o,c,s,i)}a(Vy,"insertRecords");function ky(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][Fr.FUNC_VAL],s[o]=c)}let _=ti.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[Ss])})}a(ky,"insertRecord");function xy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xy,"removeSkippedRecords");function zS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Ss]))&&(e[Ss]=s),t===!0?(r===!0||!Number.isInteger(e[wu]))&&(e[wu]=s):delete e[wu]}a(zS,"setTimestamps");function Lu(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),Dy.initializeDBIs(e,t,r)}a(Lu,"initializeTransaction");async function $y(e,t,r,s,n=!0){Du(e,t,r,s),Lu(e,t,r);let i=new Py,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Uu(c,_,s,i,o)}a($y,"updateRecords");async function Yy(e,t,r,s,n=!0){try{Du(e,t,r,s)}catch(_){throw Gy(_,_.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST)}Lu(e,t,r);let i=new By,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;Hy.isEmpty(u[t])?(l=qy.v4(),u[t]=l):l=u[t];let E=yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Uu(o,c,s,i)}a(Yy,"upsertRecords");async function Uu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=ti.getMicroTime(),xy(r,n),s}a(Uu,"finalizeWrite");function yu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(zS(r,!l,o),Number.isInteger(r[Ss])&&u[Ss]>r[Ss])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let z=R([[u]]);Array.isArray(z)&&(R=z[0][Fr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=ti.getIndexedValues(L);if(B)for(let z=0,V=B.length;z<V;z++)w.remove(B[z],s);if(B=ti.getIndexedValues(R),B)for(let z=0,V=B.length;z<V;z++)w.put(B[z],s)}let S=Object.assign({},u,r);c.put(s,S,S[Ss])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:yu(e,t,r,s,n,i,o))}a(yu,"updateUpsertRecord");function Ky(e,t,r){if(ti.validateEnv(e),t===void 0)throw new Error(ei.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ei.WRITE_ATTRIBUTES_REQUIRED):new Error(ei.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ky,"validateBasic");function Du(e,t,r,s){if(Ky(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ei.RECORDS_REQUIRED):new Error(ei.RECORDS_MUST_BE_ARRAY)}a(Du,"validateWrite");jS.exports={insertRecords:Vy,updateRecords:$y,upsertRecords:Yy}});var te=h((lZ,tf)=>{"use strict";var Mu=T(),en=Y(),Pu=require("path");en.initSync();var Ya,Ka,Qa;function ef(){if(Ya!==void 0)return Ya;if(en.getHdbBasePath()!==void 0)return Ya=Pu.join(en.getHdbBasePath(),Mu.SCHEMA_DIR_NAME),Ya}a(ef,"getBaseSchemaPath");function Qy(){if(Ka!==void 0)return Ka;if(en.getHdbBasePath()!==void 0)return Ka=Pu.join(ef(),Mu.SYSTEM_SCHEMA_NAME),Ka}a(Qy,"getSystemSchemaPath");function Wy(){if(Qa!==void 0)return Qa;if(en.getHdbBasePath()!==void 0)return Qa=Pu.join(en.getHdbBasePath(),Mu.TRANSACTIONS_DIR_NAME),Qa}a(Wy,"getTransactionAuditStorePath");tf.exports={getBaseSchemaPath:ef,getSystemSchemaPath:Qy,getTransactionAuditStorePath:Wy}});var Ar=h((EZ,nf)=>{"use strict";var sf=b(),rf=T(),Ja=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Bu=require("joi"),Wa={schema_format:{pattern:Ja,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Jy=Bu.alternatives(Bu.string().min(1).max(Wa.schema_length.maximum).pattern(Ja).messages({"string.pattern.base":"{:#label} "+Wa.schema_format.message}),Bu.number()).required();function Zy(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wa.schema_length.maximum?`'${e}' maximum of 250 characters`:Ja.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Zy,"checkValidTable");function Xy(e,t){return sf.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Xy,"validateSchemaExists");function zy(e,t){let r=t.state.ancestors[0].schema;return sf.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(zy,"validateTableExists");function jy(e,t){return e.toLowerCase()===rf.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${rf.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(jy,"validateSchemaName");nf.exports={common_validators:Wa,schema_regex:Ja,hdb_schema_table:Jy,validateSchemaExists:Xy,validateTableExists:zy,validateSchemaName:jy,checkValidTable:Zy}});var Za=h((dZ,af)=>{var{common_validators:Vr}=Ar(),ri=Ee(),$t="is required",X={schema:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},table:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},attribute:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},hash_attribute:{presence:!0,format:Vr.schema_format,length:Vr.schema_length}};function si(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(si,"makeAttributesStrings");function eD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(eD,"schema_object");function tD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(tD,"table_object");function rD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence={message:$t},ri.validateObject(e,X)}a(rD,"create_table_object");function sD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence={message:$t},X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(sD,"attribute_object");function nD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(nD,"describe_table");function iD(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(iD,"validateTableResidence");af.exports={schema_object:eD,create_table_object:rD,table_object:tD,attribute_object:sD,describe_table:nD,validateTableResidence:iD}});var cf=h((hZ,of)=>{"use strict";var aD=require("uuid"),Xa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||aD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Xa,"CreateAttributeObject");of.exports=Xa});var ja=h((SZ,_f)=>{"use strict";var oD=cf(),za=class extends oD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(za,"LMDBCreateAttributeObject");_f.exports=za});var lf=h((fZ,uf)=>{"use strict";uf.exports=_D;var cD="inserted";function _D(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===cD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(_D,"returnObject")});var eo=h((TZ,df)=>{"use strict";var uD=T(),vu=Z(),lD=js(),{getSystemSchemaPath:ED,getBaseSchemaPath:dD}=te(),hD=require("path"),SD=ds(),fD=Za(),TD=ja(),mD=lf(),{handleHDBError:RD,hdb_errors:AD}=D(),pD=b(),Hu=SD.hdb_attribute,Ef=[];for(let e=0;e<Hu.attributes.length;e++)Ef.push(Hu.attributes[e].attribute);var OD="inserted";df.exports=ND;async function ND(e){let t=fD.attribute_object(e);if(t)throw RD(new Error,t.message,AD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=pD.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 TD(e.schema,e.table,e.attribute,e.id);try{let n=await vu.openEnvironment(hD.join(dD(),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}`);vu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await vu.openEnvironment(ED(),uD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await lD.insertRecords(i,Hu.hash_attribute,Ef,[s]);return mD(OD,o,{records:[s]},c)}catch(n){throw n}}a(ND,"lmdbCreateAttribute")});var Gu=h((mZ,Sf)=>{var{hdb_schema_table:hf}=Ar(),gD=Ee(),qu=require("joi"),ID={undefined:"undefined",null:"null"},bD=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||ID[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),CD=qu.object({schema:hf,table:hf,records:qu.array().items(qu.object().custom(bD)).required()});Sf.exports=function(e){return gD.validateBySchema(e,CD)}});var to=h((AZ,Tf)=>{"use strict";var pr=b(),ff=g(),RZ=Gu();Tf.exports=wD;function wD(e){if(pr.isEmpty(e))throw new Error("invalid update parameters defined.");if(pr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(pr.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(pr.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(o=>{if(i&&pr.isEmptyOrZeroLength(o[r]))throw ff.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!pr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ff.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!pr.isEmpty(o[r])&&o[r]!==""&&s.has(pr.autoCast(o[r]))&&(o.skip=!0),s.add(pr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(wD,"insertUpdateValidate")});var ni=h((pZ,mf)=>{"use strict";var LD=T().OPERATIONS_ENUM,ro=class{constructor(t,r,s,n,i=void 0){this.operation=LD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(ro,"InsertObject");mf.exports=ro});var no=h((NZ,Rf)=>{"use strict";var OZ=ni(),so=T(),Vu=b(),Fu=g(),UD=require("uuid"),{handleHDBError:ii,hdb_errors:yD}=D(),{HDB_ERROR_MSGS:ai,HTTP_STATUS_CODES:oi}=yD;Rf.exports=DD;function DD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];PD(i,r,e.operation)}}a(DD,"processRows");function MD(e){if(Buffer.byteLength(String(e))>so.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ii(new Error,ai.ATTR_NAME_LENGTH_ERR(e),oi.BAD_REQUEST,void 0,void 0,!0);if(Vu.isEmptyOrZeroLength(e)||Vu.isEmpty(e.trim()))throw ii(new Error,ai.ATTR_NAME_NULLISH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateAttribute");function PD(e,t,r){if(!e.hasOwnProperty(t)||Vu.isEmptyOrZeroLength(e[t])){if(r===so.OPERATIONS_ENUM.INSERT||r===so.OPERATIONS_ENUM.UPSERT){e[t]=UD.v4();return}throw Fu.error("Update transaction aborted due to record with no hash value:",e),ii(new Error,ai.RECORD_MISSING_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>so.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Fu.error(e),ii(new Error,ai.HASH_VAL_LENGTH_ERR,oi.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Fu.error(e),ii(new Error,ai.INVALID_FORWARD_SLASH_IN_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(PD,"validateHash")});var pf=h((gZ,Af)=>{"use strict";var io=class{constructor(t,r){this.type=t,this.message=r}};a(io,"IPCEventObject");Af.exports=io});var kr=h((IZ,Of)=>{"use strict";var BD=g(),ku=b(),vD=T(),{IPC_ERRORS:ci}=Ke();Of.exports={sendIpcEvent:HD,validateEvent:qD,SchemaEventMsg:GD,UserEventMsg:FD};function HD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):BD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(HD,"sendIpcEvent");function qD(e){if(typeof e!="object")return ci.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ku.isEmpty(e.type))return ci.MISSING_TYPE;if(!e.hasOwnProperty("message")||ku.isEmpty(e.message))return ci.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ku.isEmpty(e.message.originator))return ci.MISSING_ORIGIN;if(vD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ci.INVALID_EVENT(e.type)}a(qD,"validateEvent");function GD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(GD,"SchemaEventMsg");function FD(e){this.originator=e}a(FD,"UserEventMsg")});var tn=h((CZ,bf)=>{"use strict";var Nf=T(),bZ=b(),ao=g(),gf=pf(),{sendIpcEvent:If}=kr();function VD(e){try{ao.trace("signalSchemaChange called with message:",e);let t=new gf(Nf.IPC_EVENT_TYPES.SCHEMA,e);If(t)}catch(t){ao.error(t)}}a(VD,"signalSchemaChange");function kD(e){try{ao.trace("signalUserChange called with message:",e);let t=new gf(Nf.IPC_EVENT_TYPES.USER,e);If(t)}catch(t){ao.error(t)}}a(kD,"signalUserChange");bf.exports={signalSchemaChange:VD,signalUserChange:kD}});var oo=h((wZ,wf)=>{"use strict";var Cf=b(),xD=T(),$D=g(),YD=eo(),KD=ja(),QD=tn(),{SchemaEventMsg:WD}=kr(),JD="already exists in";wf.exports=ZD;async function ZD(e,t,r){try{if(Cf.isEmptyOrZeroLength(r))return r;let s=[];Cf.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 XD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(ZD,"lmdbCheckForNewAttributes");async function XD(e,t,r,s){let n=new KD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await zD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(JD))$D.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(XD,"createNewAttribute");async function zD(e){let t;try{return t=await YD(e),QD.signalSchemaChange(new WD(process.pid,xD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(zD,"createAttribute")});var rn=h((LZ,Lf)=>{"use strict";var co=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}};a(co,"LMDBTransactionObject");Lf.exports=co});var yf=h((UZ,Uf)=>{"use strict";var jD=rn(),eM=T().OPERATIONS_ENUM,_o=class extends jD{constructor(t,r,s,n,i=void 0){super(eM.INSERT,r,s,n,i),this.records=t}};a(_o,"LMDBInsertTransactionObject");Uf.exports=_o});var Mf=h((yZ,Df)=>{"use strict";var tM=rn(),rM=T().OPERATIONS_ENUM,uo=class extends tM{constructor(t,r,s,n,i,o=void 0){super(rM.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(uo,"LMDBUpdateTransactionObject");Df.exports=uo});var Bf=h((DZ,Pf)=>{"use strict";var sM=rn(),nM=T().OPERATIONS_ENUM,lo=class extends sM{constructor(t,r,s,n,i,o=void 0){super(nM.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(lo,"LMDBUpsertTransactionObject");Pf.exports=lo});var Hf=h((MZ,vf)=>{"use strict";var iM=rn(),aM=T().OPERATIONS_ENUM,Eo=class extends iM{constructor(t,r,s,n,i=void 0){super(aM.DELETE,s,n,t,i),this.original_records=r}};a(Eo,"LMDBDeleteTransactionObject");vf.exports=Eo});var _i=h((PZ,Vf)=>{"use strict";var oM=require("path"),qf=Z(),cM=yf(),_M=Mf(),uM=Bf(),lM=Hf(),sn=Ye(),Gf=b(),{CONFIG_PARAMS:EM}=T(),Ff=Y();Ff.initSync();var ho=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:dM}=te();Vf.exports=hM;async function hM(e,t){if(Ff.get(EM.LOGGING_AUDITLOG)===!1)return;let r=oM.join(dM(),e.schema.toString()),s=await qf.openEnvironment(r,e.table,!0),n=SM(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){qf.initializeDBIs(s,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sn.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Gf.isEmpty(n.user_name)||s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(hM,"writeTransaction");function SM(e,t){let r=Gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ho.INSERT)return new cM(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPDATE)return new _M(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPSERT)return new uM(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.DELETE)return new lM(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SM,"createTransactionObject")});var xu=h((vZ,kf)=>{"use strict";var fM=to(),BZ=ni(),nn=T(),TM=no(),mM=js().insertRecords,RM=Z(),AM=require("path"),pM=g(),OM=oo(),{getBaseSchemaPath:NM}=te(),gM=_i();kf.exports=IM;async function IM(e){try{let{schema_table:t,attributes:r}=fM(e);TM(e,r,t.hash_attribute),e.schema!==nn.SYSTEM_SCHEMA_NAME&&(r.includes(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await OM(e.hdb_auth_header,t,r),n=AM.join(NM(),e.schema.toString()),i=await RM.openEnvironment(n,e.table),o=await mM(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await gM(e,o)}catch(c){pM.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(IM,"lmdbCreateRecords")});var Yf=h((HZ,$f)=>{"use strict";var xf=T(),bM=xu(),CM=ni(),wM=require("fs-extra"),LM=require("path"),{getBaseSchemaPath:UM}=te();$f.exports=yM;async function yM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CM(xf.SYSTEM_SCHEMA_NAME,xf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await bM(r),await wM.mkdirp(LM.join(UM(),e.schema.toString()))}a(yM,"lmdbCreateSchema")});var Qf=h((qZ,Kf)=>{"use strict";var So=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(So,"DeleteRecordsResponseObject");Kf.exports=So});var Ku=h((kZ,Zf)=>{"use strict";var Wf=Z(),$u=hs(),Yu=Ke().LMDB_ERRORS_ENUM,DM=Ye(),Jf=g(),GZ=b(),MM=require("lmdb"),PM=Qf(),{OVERFLOW_MARKER:FZ,MAX_SEARCH_KEY_LENGTH:VZ}=DM;async function BM(e,t,r){if($u.validateEnv(e),t===void 0)throw new Error(Yu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yu.IDS_REQUIRED):new Error(Yu.IDS_MUST_BE_ARRAY);try{let s=Wf.listDBIs(e);Wf.initializeDBIs(e,t,s);let n=new PM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,MM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let z=$u.getIndexedValues(B);if(z)for(let V=0,W=z.length;V<W;V++)L.remove(z[V],i)}catch{Jf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){Jf.warn(S),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=$u.getMicroTime(),n}catch(s){throw s}}a(BM,"deleteRecords");Zf.exports={deleteRecords:BM}});var ui=h((xZ,zf)=>{"use strict";var an=b(),vM=Ku(),HM=Z(),qM=require("path"),{getBaseSchemaPath:GM}=te(),FM=_i(),VM=g();zf.exports=kM;async function kM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(an.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(an.isEmptyOrZeroLength(e.hash_values)&&!an.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];an.isEmpty(_)||e.hash_values.push(_)}}if(an.isEmptyOrZeroLength(e.hash_values))return Xf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(an.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=qM.join(GM(),e.schema.toString()),i=await HM.openEnvironment(n,e.table),o=await vM.deleteRecords(i,s,e.hash_values);try{t===!0&&await FM(e,o)}catch(c){VM.error(`unable to write transaction due to ${c.message}`)}return Xf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(kM,"lmdbDeleteRecords");function Xf(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Xf,"createDeleteResponse")});var Wu=h((YZ,jf)=>{"use strict";var xM=T(),$Z=hs();function Qu(e,t){let r=Object.create(null);if(t.length===1&&xM.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Qu,"parseRow");function $M(e,t,r,s){let n=Qu(r,e);s.push(n)}a($M,"searchAll");function YM(e,t,r,s){let n=Qu(r,e);s[t]=n}a(YM,"searchAllToMap");function KM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(KM,"iterateDBI");function fs(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(fs,"pushResults");function QM(e,t,r,s,n,i){t.toString().endsWith(e)&&fs(t,r,s,n,i)}a(QM,"endsWith");function WM(e,t,r,s,n,i){t.toString().includes(e)&&fs(t,r,s,n,i)}a(WM,"contains");function JM(e,t,r,s,n,i){t>e&&fs(t,r,s,n,i)}a(JM,"greaterThanCompare");function ZM(e,t,r,s,n,i){t>=e&&fs(t,r,s,n,i)}a(ZM,"greaterThanEqualCompare");function XM(e,t,r,s,n,i){t<e&&fs(t,r,s,n,i)}a(XM,"lessThanCompare");function zM(e,t,r,s,n,i){t<=e&&fs(t,r,s,n,i)}a(zM,"lessThanEqualCompare");jf.exports={parseRow:Qu,searchAll:$M,searchAllToMap:YM,iterateDBI:KM,endsWith:QM,contains:WM,greaterThanCompare:JM,greaterThanEqualCompare:ZM,lessThanCompare:XM,lessThanEqualCompare:zM,pushResults:fs}});var on=h((WZ,iT)=>{"use strict";var Lt=Z(),jM=g(),ft=hs(),xr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,KZ=b(),eP=T(),Yt=Wu(),QZ=require("lmdb"),{OVERFLOW_MARKER:eT,MAX_SEARCH_KEY_LENGTH:tP}=xr,li={lazy:!0};function tT(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=Lt.openDBI(e,r);_[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ju(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(tT,"iterateFullIndex");function Ei(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=Lt.openDBI(e,r),d=Ju(e,t,r);E[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))Yt.pushResults(d(L,B),B,l,t,r);return l}a(Ei,"iterateRangeBetween");function Ju(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(eT)){if(!s)if(t)s=Lt.openDBI(e,t);else{let c=Lt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=Lt.openDBI(e,c[_]),!s[xr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,li)[r]}return n}}a(Ju,"getOverflowCheck");function rP(e,t,r,s=!1,n=void 0,i=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);fo(r),r=di(e,r);let o=[],c=Lt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Yt.searchAll(r,_,u,o);return o}a(rP,"searchAll");function sP(e,t,r,s=!1,n=void 0,i=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return fo(r),r=di(e,r),tT(e,t,t,Yt.searchAllToMap.bind(null,r),s,n,i)}a(sP,"searchAllToMap");function nP(e,t,r=!1,s=void 0,n=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return tT(e,void 0,t,Yt.iterateDBI,r,s,n)}a(nP,"iterateDBI");function iP(e,t){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(iP,"countAll");function aP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=Lt.openDBI(e,r);s=ft.convertKeyValueToWrite(s);let _=[[],[]];if(c[xr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,li);u!==void 0&&Yt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))Yt.pushResults(s,u,_,t,r);return _}a(aP,"equals");function oP(e,t,r){return $r(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(oP,"count");function cP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=[[],[]],_=Lt.openDBI(e,r);_[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ft.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))Yt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))Yt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(cP,"startsWith");function _P(e,t,r,s,n=!1,i=void 0,o=void 0){return rT(e,t,r,s,n,i,o,!0)}a(_P,"endsWith");function rT(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){$r(e,r,s);let _=[[],[]],u=Lt.openDBI(e,r);u[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Ju(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=d.toString();if(S.endsWith(eT))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?S.endsWith(s):S.includes(s))if(u[xr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&(Yt.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(rT,"contains");function uP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ei(e,t,r,s,_,n,i,o,!0,!1)}a(uP,"greaterThan");function lP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ei(e,t,r,s,_,n,i,o,!1,!1)}a(lP,"greaterThanEqual");function EP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!0)}a(EP,"lessThan");function dP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!1)}a(dP,"lessThanEqual");function hP(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ft.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=ft.convertKeyValueToWrite(s),n=ft.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ei(e,t,r,s,n,i,o,c)}a(hP,"between");function SP(e,t,r,s){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(fo(r),r=di(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?li:void 0);return i&&(n=Yt.parseRow(i,r)),n}a(SP,"searchByHash");function fP(e,t,r){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,li)===void 0&&(s=!1),s}a(fP,"checkHashExists");function TP(e,t,r,s,n=[]){nT(e,t,r,s,n);let i=sT(e,t,r,s,n);return Object.values(i)}a(TP,"batchSearchByHash");function mP(e,t,r,s,n=[]){return nT(e,t,r,s,n),sT(e,t,r,s,n)}a(mP,"batchSearchByHashToMap");function sT(e,t,r,s,n=[]){r=di(e,r);let i=Object.create(null),o=r.length<3?li:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=Yt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw jM.warn(u),u}}return i}a(sT,"batchHashSearch");function nT(e,t,r,s,n){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(fo(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(nT,"initializeBatchSearchByHash");function fo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(fo,"validateFetchAttributes");function $r(e,t,r){if(ft.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>tP)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a($r,"validateComparisonFunctions");function di(e,t){return t.length===1&&eP.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(di,"setGetWholeRowAttributes");iT.exports={searchAll:rP,searchAllToMap:sP,count:oP,countAll:iP,equals:aP,startsWith:cP,endsWith:_P,contains:rT,searchByHash:SP,setGetWholeRowAttributes:di,batchSearchByHash:TP,batchSearchByHashToMap:mP,checkHashExists:fP,iterateDBI:nP,greaterThan:uP,greaterThanEqual:lP,lessThan:EP,lessThanEqual:dP,between:hP}});var hi=h((ZZ,_T)=>{var aT=require("lodash"),oT=Ee(),Q=require("joi"),RP=b(),{hdb_schema_table:Kt,checkValidTable:cT}=Ar(),{handleHDBError:AP,hdb_errors:pP}=D(),{HTTP_STATUS_CODES:OP}=pP,JZ=Q.object({schema:Kt,table:Kt,hash_values:Q.array().min(1).items(Q.alternatives(Q.string(),Q.number())).required(),get_attributes:Q.array().min(1).items(Kt).required()}),NP=Q.object({schema:Kt,table:Kt,search_attribute:Kt,search_value:Q.any().required(),get_attributes:Q.array().min(1).items(Kt).required(),desc:Q.bool(),limit:Q.number().integer().min(1),offset:Q.number().integer().min(0)}),gP=Q.object({schema:Kt,table:Kt,operator:Q.string().valid("and","or").default("and").lowercase(),offset:Q.number().integer().min(0),limit:Q.number().integer().min(1),get_attributes:Q.array().min(1).items(Kt).required(),conditions:Q.array().min(1).items(Q.object({search_attribute:Kt,search_type:Q.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Q.when("search_type",{switch:[{is:"equals",then:Q.any()},{is:"between",then:Q.array().items(Q.alternatives([Q.string(),Q.number()])).length(2)}],otherwise:Q.alternatives(Q.string(),Q.number())}).required()})).required()});_T.exports=function(e,t){let r=null;switch(t){case"value":r=oT.validateBySchema(e,NP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(cT("schema",e.schema)),i(cT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=oT.validateBySchema(e,gP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=RP.checkGlobalSchemaTable(e.schema,e.table);if(n)return AP(new Error,n,OP.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=aT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!aT.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Zu=h((XZ,uT)=>{"use strict";var IP=Z(),bP=hi(),CP=require("path"),{getBaseSchemaPath:wP}=te();uT.exports=LP;function LP(e){let t=bP(e,"hashes");if(t)throw t;let r=CP.join(wP(),e.schema.toString());return IP.openEnvironment(r,e.table)}a(LP,"initialize")});var Xu=h((zZ,lT)=>{"use strict";var UP=on(),yP=Zu();lT.exports=DP;async function DP(e){try{let t=await yP(e),r=global.hdb_schema[e.schema][e.table];return UP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(DP,"lmdbGetDataByHash")});var Ts=h((jZ,ET)=>{"use strict";var To=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(To,"SearchByHashObject");ET.exports=To});var hT=h((tX,dT)=>{"use strict";var eX=Ts(),MP=on(),PP=Zu();dT.exports=BP;async function BP(e){try{let t=await PP(e),r=global.hdb_schema[e.schema][e.table];return MP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(BP,"lmdbSearchByHash")});var Qt=h((rX,ST)=>{"use strict";var mo=class{constructor(t,r,s,n,i,o,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=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(mo,"SearchObject");ST.exports=mo});var Ro=h((sX,AT)=>{"use strict";var We=on(),vP=Z(),HP=require("path"),qP=b(),U=Ye(),ms=T(),{getBaseSchemaPath:GP}=te(),FP=ds(),fT=Ke().LMDB_ERRORS_ENUM,{compareKeys:cn}=require("ordered-binary"),Or=ms.SEARCH_WILDCARDS;async function VP(e,t,r){let s;e.schema===ms.SYSTEM_SCHEMA_NAME?s=FP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=RT(e,s.hash_attribute,r,t);return TT(e,n,s.hash_attribute,r)}a(VP,"prepSearch");async function TT(e,t,r,s){let n=HP.join(GP(),e.schema.toString()),i=await vP.openEnvironment(n,e.table),o=mT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if($P(e,r)===!1)return s===!0?xP(o):o[1];let _=o[0];return s===!0?We.batchSearchByHashToMap(i,r,e.get_attributes,_):We.batchSearchByHash(i,r,e.get_attributes,_)}a(TT,"executeSearch");function mT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=We.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=We.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=We.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=We.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return We.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return We.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return We.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return We.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=We.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=We.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=We.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=We.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=We.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(mT,"searchByType");function kP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return cn(i,s[0])>=0&&cn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>cn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>cn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>cn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>cn(n[r],s)<=0;default:return Object.create(null)}}a(kP,"filterByType");function xP(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}a(xP,"createMapFromArrays");function $P(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a($P,"checkToFetchMore");function RT(e,t,r,s){if(qP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Or.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Or[0])<0&&n.indexOf(Or[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Or.indexOf(i)>=0&&Or.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Or.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Or.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Or[0])||n.includes(Or[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(fT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ms.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case ms.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case ms.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case ms.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case ms.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(fT.UNKNOWN_SEARCH_TYPE)}}a(RT,"createSearchTypeFromSearchObject");AT.exports={executeSearch:TT,createSearchTypeFromSearchObject:RT,prepSearch:VP,searchByType:mT,filterByType:kP}});var OT=h((iX,pT)=>{"use strict";var nX=Qt(),YP=hi(),KP=b(),QP=T(),WP=Ro();pT.exports=JP;async function JP(e,t){if(!KP.isEmpty(t)&&QP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YP(e,"value");if(s)throw s;let n=!0;try{return await WP.prepSearch(e,t,n)}catch(i){throw i}}a(JP,"lmdbGetDataByValue")});var _n=h((oX,NT)=>{"use strict";var aX=Qt(),ZP=hi(),XP=b(),zP=T(),jP=Ro();NT.exports=eB;async function eB(e,t){if(!XP.isEmpty(t)&&zP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZP(e,"value");if(s)throw s;let n=!1;try{return await jP.prepSearch(e,t,n)}catch(i){throw i}}a(eB,"lmdbSearchByValue")});var IT=h((_X,gT)=>{"use strict";var cX=Ye(),Ao=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Ao,"SearchByConditionsObject");var po=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(po,"SearchCondition");var Oo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oo,"SortAttribute");gT.exports={SearchByConditionsObject:Ao,SearchCondition:po,SortAttribute:Oo}});var yT=h((lX,UT)=>{"use strict";var uX=IT().SearchByConditionsObject,tB=Qt(),rB=hi(),zu=on(),No=Ye(),LT=Ro(),sB=Wu(),bT=require("lodash"),{getBaseSchemaPath:nB}=te(),iB=require("path"),aB=Z(),{handleHDBError:CT,hdb_errors:oB}=D(),{HTTP_STATUS_CODES:cB}=oB,_B=1e8,uB={lazy:!0};UT.exports=lB;async function lB(e){try{let t=rB(e,"conditions");if(t)throw CT(t,t.message,cB.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=iB.join(nB(),e.schema.toString()),s=await aB.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=bT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===No.SEARCH_TYPES.EQUALS?o.estimated_count=zu.count(s,o.search_attribute,o.search_value):c===No.SEARCH_TYPES.CONTAINS||c===No.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=_B}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await wT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(LT.filterByType),u=_.length,l=[],E=zu.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,uB);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(sB.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await wT(s,e,_,n.hash_attribute);c.push(u)}if(o=bT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return zu.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw CT(t)}}a(lB,"lmdbSearchByConditions");async function wT(e,t,r,s){let n=new tB(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===No.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,LT.searchByType(e,n,i,s)}a(wT,"executeConditionSearch")});var Si=h((EX,DT)=>{"use strict";var EB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=EB.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(go,"DeleteObject");DT.exports=go});var ju=h((dX,MT)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Io,"DropAttributeObject");MT.exports=Io});var tl=h((SX,PT)=>{"use strict";var dB=Qt(),hB=Si(),hX=ju(),rr=T(),SB=b(),el=Z(),fB=ds(),TB=_n(),mB=ui(),{getBaseSchemaPath:RB}=te(),AB=require("path");PT.exports=pB;async function pB(e,t=!0){let r;e.schema===rr.SYSTEM_SCHEMA_NAME?r=fB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await NB(e),n=AB.join(RB(),e.schema.toString()),i=await el.openEnvironment(n,e.table);return t===!0&&await OB(e,i,r.hash_attribute),el.dropDBI(i,e.attribute),s}a(pB,"lmdbDropAttribute");async function OB(e,t,r){let s=el.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(OB,"removeAttributeFromAllObjects");async function NB(e){let t=new dB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await TB(t)).filter(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(SB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new hB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return mB(i)}a(NB,"dropAttributeFromSystem")});var qT=h((fX,HT)=>{"use strict";var gB=tl(),IB=ju(),BT=b(),vT=g(),bB=Ke().LMDB_ERRORS_ENUM;HT.exports=CB;async function CB(e){if(BT.isEmpty(global.hdb_schema[e.schema])||BT.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 IB(e.schema,e.table,r);try{await gB(n,!1)}catch(i){i.message!==bB.DBI_DOES_NOT_EXIST&&vT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw vT.error(`Error dropping attribute ${r}`),s}}a(CB,"lmdbDropAllAttributes")});var rl=h((mX,QT)=>{"use strict";var xT=Qt(),$T=Si(),YT=_n(),KT=ui(),TX=qT(),at=T(),GT=b(),FT=Z(),{getBaseSchemaPath:wB,getTransactionAuditStorePath:LB}=te(),VT=require("path"),kT=g();QT.exports=UB;async function UB(e){try{if(GT.isEmpty(global.hdb_schema[e.schema])||GT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await yB(e),await DB(e);let t=VT.join(wB(),e.schema.toString());try{await FT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=VT.join(LB(),e.schema.toString());await FT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(UB,"lmdbDropTable");async function yB(e){let t=new xT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await YT(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new $T(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await KT(n)}a(yB,"deleteAttributesFromSystem");async function DB(e){let t=new xT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await YT(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new $T(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await KT(n)}catch(i){throw i}}a(DB,"dropTableFromSystem")});var JT=h((AX,WT)=>{"use strict";var MB=require("fs-extra"),PB=Qt(),BB=Ts(),vB=Si(),HB=rl(),qB=ui(),GB=Xu(),FB=_n(),Nr=T(),RX=b(),VB=require("path"),{getBaseSchemaPath:kB}=te(),{handleHDBError:xB,hdb_errors:$B}=D(),{HDB_ERROR_MSGS:YB,HTTP_STATUS_CODES:KB}=$B;WT.exports=QB;async function QB(e){let t;try{t=await WB(e.schema);let r=new PB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await FB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await HB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new vB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qB(n);let i=VB.join(kB(),t.toString());await MB.remove(i)}catch(r){throw r}}a(QB,"lmdbDropSchema");async function WB(e){let t=new BB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await GB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw xB(new Error,YB.SCHEMA_NOT_FOUND(e),KB.NOT_FOUND,void 0,void 0,!0);return s}a(WB,"validateDropSchema")});var sl=h((pX,ZT)=>{"use strict";var bo=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(bo,"CreateTableObject");ZT.exports=bo});var zT=h((NX,XT)=>{"use strict";var JB=require("path"),ZB=require("fs-extra"),Co=Z(),{getTransactionAuditStorePath:XB}=te(),nl=Ye(),OX=sl();XT.exports=zB;async function zB(e){let t;try{let r=JB.join(XB(),e.schema.toString());await ZB.mkdirp(r),t=await Co.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{Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(zB,"createTransactionsAuditEnvironment")});var rm=h((gX,tm)=>{"use strict";var il=T(),jT=Z(),jB=js(),ev=require("path"),{getSystemSchemaPath:tv,getBaseSchemaPath:rv}=te(),sv=ds(),nv=eo(),al=ja(),iv=g(),av=zT(),cl=sv.hdb_table,em=[];for(let e=0;e<cl.attributes.length;e++)em.push(cl.attributes[e].attribute);tm.exports=ov;async function ov(e,t){let r=ev.join(rv(),t.schema.toString()),s=new al(t.schema,t.table,il.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new al(t.schema,t.table,il.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new al(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jT.createEnvironment(r,t.table),e!==void 0){let o=await jT.openEnvironment(tv(),il.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await jB.insertRecords(o,cl.hash_attribute,em,[e]),await ol(s),await ol(n),await ol(i)}await av(t)}catch(o){throw o}}a(ov,"lmdbCreateTable");async function ol(e){try{await nv(e)}catch(t){iv.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ol,"createAttribute")});var nm=h((IX,sm)=>{"use strict";var cv=to(),_v=no(),uv=oo(),un=T(),lv=js().updateRecords,Ev=Z(),dv=require("path"),{getBaseSchemaPath:hv}=te(),Sv=_i(),fv=g();sm.exports=Tv;async function Tv(e){try{let{schema_table:t,attributes:r}=cv(e);_v(e,r,t.hash_attribute),e.schema!==un.SYSTEM_SCHEMA_NAME&&(r.includes(un.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(un.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(un.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(un.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await uv(e.hdb_auth_header,t,r),n=dv.join(hv(),e.schema.toString()),i=await Ev.openEnvironment(n,e.table),o=await lv(i,t.hash_attribute,r,e.records,e[un.CLUSTERING_FLAG]!==!0);try{await Sv(e,o)}catch(c){fv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Tv,"lmdbUpdateRecords")});var am=h((bX,im)=>{"use strict";var mv=T().OPERATIONS_ENUM,wo=class{constructor(t,r,s,n=void 0){this.operation=mv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(wo,"UpsertObject");im.exports=wo});var cm=h((wX,om)=>{"use strict";var CX=am(),Rv=to(),Av=no(),pv=oo(),ln=T(),Ov=js().upsertRecords,Nv=Z(),gv=require("path"),{getBaseSchemaPath:Iv}=te(),bv=_i(),Cv=g(),{handleHDBError:wv,hdb_errors:Lv}=D();om.exports=Uv;async function Uv(e){let t;try{t=Rv(e)}catch(_){throw wv(_,_.message,Lv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Av(e,s,r.hash_attribute),e.schema!==ln.SYSTEM_SCHEMA_NAME&&(s.includes(ln.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(ln.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(ln.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(ln.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await pv(e.hdb_auth_header,r,s),i=gv.join(Iv(),e.schema.toString()),o=await Nv.openEnvironment(i,e.table),c=await Ov(o,r.hash_attribute,s,e.records,e[ln.CLUSTERING_FLAG]!==!0);try{await bv(e,c)}catch(_){Cv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(Uv,"lmdbUpsertRecords")});var hm=h((LX,dm)=>{"use strict";var yv=Qt(),_m=b(),um=g(),Dv=_n(),lm=T(),Mv=Ku().deleteRecords,Pv=Z(),Bv=require("path"),{getBaseSchemaPath:vv}=te(),{promisify:Hv}=require("util"),qv=Hv(setTimeout),Em=1e4,Gv=10;dm.exports=Fv;async function Fv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(_m.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 yv(e.schema,e.table,lm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Dv(n,lm.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw um.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return _m.isEmptyOrZeroLength(s)?(um.trace("No records found to delete"),{message:"No records found to delete"}):await Vv(e,s,t)}a(Fv,"lmdbDeleteRecordsBefore");async function Vv(e,t,r){let s=Bv.join(vv(),e.schema.toString()),n=await Pv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=Em){let _=t.slice(o,o+Em),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await Mv(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 qv(Gv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Vv,"chunkDeletes")});var fm=h((UX,Sm)=>{"use strict";var Lo=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Lo,"DeleteBeforeObject");Sm.exports=Lo});var mm=h((yX,Tm)=>{"use strict";var Uo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Uo,"DeleteAuditLogsBeforeResults");Tm.exports=Uo});var pm=h((MX,Am)=>{"use strict";var _l=Z(),{getTransactionAuditStorePath:kv}=te(),DX=fm(),xv=require("path"),fi=Ye(),$v=b(),Rm=mm(),Yv=require("util").promisify,Kv=Yv(setTimeout),Qv=1e4,Wv=100;Am.exports=Jv;async function Jv(e){let t=xv.join(kv(),e.schema),r=await _l.openEnvironment(t,e.table,!0),s=_l.listDBIs(r);_l.initializeDBIs(r,fi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Rm;do n=await Zv(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 Kv(Wv);while(n.transactions_deleted>0);return i}a(Jv,"deleteAuditLogsBefore");async function Zv(e,t){let r=new Rm;try{let s=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[fi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];$v.isEmpty(c)||(n=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Qv)break}return await n,r}catch(s){throw s}}a(Zv,"deleteTransactions")});var wm=h((PX,Cm)=>{"use strict";var ul=Z(),En=Ye(),Om=hs(),ll=T(),Nm=b(),{getTransactionAuditStorePath:Xv}=te(),zv=require("path"),jv=on(),yo=rn(),eH=g();Cm.exports=tH;async function tH(e){let t=zv.join(Xv(),e.schema),r=await ul.openEnvironment(t,e.table,!0),s=ul.listDBIs(r);ul.initializeDBIs(r,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gm(r,e.search_values);case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,sH(r,e.search_values,n);case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rH(r,e.search_values);default:return gm(r)}}a(tH,"readAuditLog");function gm(e,t=[0,Om.getMicroTime()]){Nm.isEmpty(t[0])&&(t[0]=0),Nm.isEmpty(t[1])&&(t[1]=Om.getMicroTime());let r=[];try{let s=e.dbis[En.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 o=Object.assign(new yo,i);r.push(o)}return r}catch(s){throw s}}a(gm,"searchTransactionsByTimestamp");function rH(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[En.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,bm(e,i))}return Object.fromEntries(r)}a(rH,"searchTransactionsByUsername");function sH(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=jv.equals(e,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,En.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=bm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Im(_,"records",r,l,o),Im(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(sH,"searchTransactionsByHashValues");function Im(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new yo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new yo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Im,"loopRecords");function bm(e,t){let r=[];try{let s=e.dbis[En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new yo,i);r.push(o)}}catch(i){eH.warn(i)}return r}catch(s){throw s}}a(bm,"batchSearchTransactions")});var Um=h((BX,Lm)=>{"use strict";var nH=require("path"),{getBaseSchemaPath:iH}=te(),aH=Z();Lm.exports={writeTransaction:oH};async function oH(e,t,r){let s=nH.join(iH(),e);return(await aH.openEnvironment(s,t)).transaction(r)}a(oH,"writeTransaction")});var Dm=h((vX,ym)=>{"use strict";var cH=require("path"),{getBaseSchemaPath:_H}=te(),uH=Z();ym.exports={flush:lH};async function lH(e,t){let r=cH.join(_H(),e.toString());return(await uH.openEnvironment(r,t.toString())).flushed}a(lH,"flush")});var Pm=h((HX,Mm)=>{"use strict";var Re=g(),{handleHDBError:EH}=D(),dH=pu(),hH=eo(),SH=xu(),fH=Yf(),TH=ui(),mH=Xu(),RH=hT(),AH=OT(),pH=_n(),OH=yT(),NH=JT(),gH=rm(),IH=nm(),bH=cm(),CH=hm(),wH=pm(),LH=rl(),UH=tl(),yH=wm(),DH=Um(),MH=Dm(),Do=class extends dH{async searchByConditions(t){try{return OH(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await mH(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await RH(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await AH(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await pH(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await fH(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await NH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await gH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await LH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await hH(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await SH(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await IH(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await bH(t)}catch(r){throw EH(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await TH(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await CH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await UH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await wH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await yH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return DH.writeTransaction(t,r,s)}flush(t,r){return MH.flush(t,r)}};a(Do,"LMDBBridge");Mm.exports=Do});var gr=h((qX,vm)=>{"use strict";var PH=Pm(),BH=pu(),vH=Y();vH.initSync();var Bm;function HH(){return Bm instanceof BH?Bm:new PH}a(HH,"getBridge");vm.exports=HH()});var Fm=h((GX,Gm)=>{"use strict";var Hm=require("lodash"),Ti=require("mathjs"),qH=require("jsonata"),qm=b();Gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hm.uniqWith(e,Hm.isEqual):e,searchJSON:GH,mad:mi.bind(null,Ti.mad),mean:mi.bind(null,Ti.mean),mode:mi.bind(null,Ti.mode),prod:mi.bind(null,Ti.prod),median:mi.bind(null,Ti.median)};function mi(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(mi,"aggregateFunction");function GH(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(qm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qm.isEmpty(this.__ala__.res[r])){let s=qH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(GH,"searchJSON")});var km=h((FX,Vm)=>{"use strict";var de=require("moment"),El="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;Vm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(El),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(El),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(El)}});var Km=h((VX,Ym)=>{"use strict";var FH=require("@turf/area"),VH=require("@turf/length"),kH=require("@turf/circle"),xH=require("@turf/difference"),$H=require("@turf/distance"),YH=require("@turf/boolean-contains"),KH=require("@turf/boolean-equal"),QH=require("@turf/boolean-disjoint"),WH=require("@turf/helpers"),xm=T(),k=b();Ym.exports={geoArea:JH,geoLength:ZH,geoCircle:XH,geoDifference:zH,geoDistance:$m,geoNear:jH,geoContains:eq,geoEqual:tq,geoCrosses:rq,geoConvert:sq};var dl="geo1 is required",hl="geo2 is required";function JH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),FH.default(e)}a(JH,"geoArea");function ZH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),VH.default(e,{units:t||"kilometers"})}a(ZH,"geoLength");function XH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),kH.default(e,t,{units:r||"kilometers"})}a(XH,"geoCircle");function zH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),xH(e,t)}a(zH,"geoDifference");function $m(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),$H.default(e,t,{units:r||"kilometers"})}a($m,"geoDistance");function jH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return $m(e,t,s)<=r}a(jH,"geoNear");function eq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),YH.default(e,t)}a(eq,"geoContains");function tq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),KH.default(e,t)}a(tq,"geoEqual");function rq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!QH.default(e,t)}a(rq,"geoCrosses");function sq(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(xm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(xm.GEO_CONVERSION_ENUM).join(",")}`);return WH[t](e,r)}a(sq,"geoConvert")});var Mo=h((kX,Qm)=>{var Rs=Fm(),Tt=km(),sr=Km();Qm.exports=e=>{e.aggr.mad=e.aggr.MAD=Rs.mad,e.aggr.mean=e.aggr.MEAN=Rs.mean,e.aggr.mode=e.aggr.MODE=Rs.mode,e.aggr.prod=e.aggr.PROD=Rs.prod,e.aggr.median=e.aggr.MEDIAN=Rs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Rs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Rs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tt.current_time,e.fn.extract=e.fn.EXTRACT=Tt.extract,e.fn.date=e.fn.DATE=Tt.date,e.fn.date_format=e.fn.DATE_FORMAT=Tt.date_format,e.fn.date_add=e.fn.DATE_ADD=Tt.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tt.date_diff,e.fn.now=e.fn.NOW=Tt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tt.get_server_time,e.fn.getdate=e.fn.GETDATE=Tt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=sr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=sr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=sr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=sr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=sr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=sr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=sr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=sr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=sr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=sr.geoNear}});var Zm=h((xX,Jm)=>{"use strict";var Ri=require("lodash"),Me=require("alasql");Me.options.cache=!1;var nq=Mo(),Wm=require("clone"),Po=require("recursive-iterator"),v=g(),q=b(),dn=gr(),iq=T(),{hdb_errors:aq}=D(),oq="IS NULL",Ai="There was a problem performing this search. Please check the logs and try again.";nq(Me);var Bo=class{constructor(t,r){if(q.isEmpty(t))throw v.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(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(Ai)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(Ai)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(Ai)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(Ai)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(Ai)}}_getColumns(){let t=new Po(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(Wm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ri.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(q.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Po(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Po(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!q.isEmpty(iq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(q.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.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&&Ri.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(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.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(Wm(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(q.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(oq)>-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=Ri.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await dn.getDataByHash(c);for(let E of c.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){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await dn.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(S)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await dn.getDataByValue(c,S.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await dn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.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,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.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 Me.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.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 Me.yy.FuncValue:new Me.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 m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=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 d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Ri.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Po(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ri.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){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.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,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await dn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).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();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.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 v.error(aq.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await dn.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Bo,"SQLSearch");Jm.exports=Bo});var mt=h(($X,zm)=>{"use strict";var cq=OS();zm.exports={searchByConditions:Eq,searchByHash:dq,searchByValue:hq,search:Sq};var Sl=gr(),Xm=require("util"),_q=Xm.callbackify(Sl.searchByHash),uq=Xm.callbackify(Sl.searchByValue),lq=Zm();async function Eq(e){return Sl.searchByConditions(e)}a(Eq,"searchByConditions");function dq(e,t){try{_q(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(dq,"searchByHash");function hq(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),uq(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(hq,"searchByValue");function Sq(e,t){try{let r=new cq(e);r.validate(),new lq(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Sq,"search")});var Yr=h((YX,rR)=>{"use strict";var pi=require("crypto"),eR="aes-256-cbc",fq=32,Tq=16,fl=64,tR=32,mq=fl+tR,jm=new Map;rR.exports={encrypt:Rq,decrypt:Aq,createNatsTableStreamName:pq};function Rq(e){let t=pi.randomBytes(fq),r=pi.randomBytes(Tq),s=pi.createCipheriv(eR,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(Rq,"encrypt");function Aq(e){let t=e.substr(0,fl),r=e.substr(fl,tR),s=e.substr(mq,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=pi.createDecipheriv(eR,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Aq,"decrypt");function pq(e,t){let r=`${e}.${t}`,s=jm.get(r);return s||(s=pi.createHash("md5").update(`${e}.${t}`).digest("hex"),jm.set(r,s)),s}a(pq,"createNatsTableStreamName")});var As=h((KX,_R)=>{"use strict";var nR=mt(),Kr=g(),iR=Za(),Oq=require("lodash"),Nq=require("path"),gq=Yr(),Tl=b(),{promisify:aR}=require("util"),j=T(),{handleHDBError:vo,hdb_errors:Iq}=D(),{HDB_ERROR_MSGS:Ho,HTTP_STATUS_CODES:oR}=Iq,bq=Y();bq.initSync();var sR=Z(),Cq=te(),Oi=aR(nR.searchByValue),wq=aR(nR.searchByHash),hn="name",cR="hash_attribute",ml="schema",Lq="schema_table",Uq="attribute";_R.exports={describeAll:yq,describeTable:qo,describeSchema:Mq};async function yq(e){try{let t=Tl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:hn,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[hn]},i=await Oi(n);if(Tl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[cR,j.ID_ATTRIBUTE_STRING,hn,ml]},u=await Oi(_),l=[];for(let d of u)try{let S;if(t||s)S=await qo({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;S=await qo({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){Kr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),vo(new Error,Ho.DESCRIBE_ALL_ERR)}}a(yq,"describeAll");async function qo(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={},o=iR.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:hn,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await Oi(c);if(!_||_.length===0)throw vo(new Error,Ho.TABLE_NOT_FOUND(e.schema,e.table),oR.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw vo(new Error,Ho.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Lq,search_value:r+"."+s,get_attributes:[Uq]},E=await Oi(l);E=Oq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Dq(n)),i.attributes=E,i.clustering_stream_name=gq.createNatsTableStreamName(u.schema,u.name);try{let d=Nq.join(Cq.getBaseSchemaPath(),i.schema.toString()),S=await sR.openEnvironment(d,i.name),m=sR.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(qo,"descTable");function Dq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Dq,"getAttrsByPerms");async function Mq(e){let t=iR.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:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ml,search_value:s,hash_values:[],get_attributes:[cR,j.ID_ATTRIBUTE_STRING,hn,ml]},i=await Oi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[hn]},c=await wq(o);if(c&&c.length<1)throw vo(new Error,Ho.SCHEMA_NOT_FOUND(e.schema),oR.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Tl.isEmpty(_)||_.describe){let u=await qo({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(Mq,"describeSchema")});var Qr=h((JX,hR)=>{var QX=require("async"),Sn=ds(),WX=g(),{callbackify:ER,promisify:Pq}=require("util");hR.exports={setSchemaDataToGlobal:uR,getTableSchema:Hq,getSystemSchema:Gq,setSchemaDataToGlobalAsync:Pq(uR)};var dR=As(),Bq=ER(dR.describeAll),vq=ER(dR.describeTable);function uR(e){Bq(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(uR,"setSchemaDataToGlobal");function lR(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(lR,"returnSchema");function Hq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?qq(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,lR(e,t))}):r(null,lR(e,t))}a(Hq,"getTableSchema");function qq(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}vq(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(qq,"setTableDataToGlobal");function Gq(){return Sn}a(Gq,"getSystemSchema")});var yt=h((ZX,TR)=>{"use strict";var Fo=Gu(),Ut=b(),Fq=require("util"),Vo=gr(),Vq=Qr(),Rl=g(),{handleHDBError:Wr,hdb_errors:kq}=D(),{HTTP_STATUS_CODES:ps}=kq,xq=Fq.promisify(Vq.getTableSchema),$q="updated",SR="inserted",fR="upserted";TR.exports={insert:Kq,update:Qq,upsert:Wq,validation:Yq,flush:Jq};async function Yq(e){if(Ut.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ut.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ut.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await xq(e.schema,e.table),r=Fo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ut.isEmptyOrZeroLength(c[s]))throw Rl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Ut.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw Rl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ut.isEmpty(c[s])&&c[s]!==""&&n.has(Ut.autoCast(c[s]))&&(c.skip=!0),n.add(Ut.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Yq,"validation");async function Kq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.createRecords(e);return Go(SR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Kq,"insertData");async function Qq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.updateRecords(e);return Ut.isEmpty(s.existing_rows)?Go($q,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}}a(Qq,"updateData");async function Wq(e){if(e.operation!=="upsert")throw Wr(new Error,"invalid operation, must be upsert",ps.INTERNAL_SERVER_ERROR);let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.upsertRecords(e);return Go(fR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Wr(s,null,null,Rl.ERR,n)}}a(Wq,"upsertData");function Go(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===SR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===fR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Go,"returnObject");function Jq(e){return Vo.flush(e.schema,e.table)}a(Jq,"flush")});var pl=h((XX,AR)=>{var Zq=Ee(),Al=require("joi"),{hdb_schema_table:mR}=Ar(),RR={schema:mR,table:mR},Xq={date:Al.date().iso().required()},zq={timestamp:Al.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AR.exports=function(e,t){let r=t==="timestamp"?{...RR,...zq}:{...RR,...Xq},s=Al.object(r);return Zq.validateBySchema(e,s)}});var gR=h((zX,NR)=>{var jq=Ee(),pR=require("joi"),{hdb_schema_table:OR}=Ar(),eG=pR.object({schema:OR,table:OR,hash_values:pR.array().required()});NR.exports=function(e){return jq.validateBySchema(e,eG)}});var bR=h((jX,IR)=>{"use strict";var ko=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ko,"InsertObject");var xo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(xo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");IR.exports={InsertObject:ko,NoSQLSeachObject:xo,DeleteResponseObject:$o}});var Ns=h((e3,yR)=>{"use strict";var wR=pl(),tG=gR(),Yo=b(),CR=require("moment"),LR=g(),{promisify:rG,callbackify:sG}=require("util"),Os=T(),nG=Qr(),Ol=rG(nG.getTableSchema),Nl=gr(),{DeleteResponseObject:iG}=bR(),{handleHDBError:Jr,hdb_errors:aG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:Zr}=aG,oG="records successfully deleted",cG=sG(UR);yR.exports={delete:cG,deleteRecord:UR,deleteFilesBefore:_G,deleteAuditLogsBefore:uG};async function _G(e){let t=wR(e,"date");if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);if(!CR(e.date,CR.ISO_8601).isValid())throw Jr(new Error,Ko.INVALID_DATE,Zr.BAD_REQUEST,Os.LOG_LEVELS.ERROR,Ko.INVALID_DATE,!0);let s=Yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Jr(new Error,s,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,s,!0);try{let n=await Nl.deleteRecordsBefore(e);if(await Ol(e.schema,e.table),LR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(_G,"deleteFilesBefore");async function uG(e){let t=wR(e,"timestamp");if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Jr(new Error,Ko.INVALID_VALUE("Timestamp"),Zr.BAD_REQUEST,Os.LOG_LEVELS.ERROR,Ko.INVALID_VALUE("Timestamp"),!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Jr(new Error,r,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,r,!0);try{let s=await Nl.deleteAuditLogsBefore(e);return await Ol(e.schema,e.table),LR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(uG,"deleteAuditLogsBefore");async function UR(e){let t=tG(e);if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Jr(new Error,r,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,r,!0);try{await Ol(e.schema,e.table);let s=await Nl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${oG}`),s}catch(s){if(s.message===Os.SEARCH_NOT_FOUND_MESSAGE){let n=new iG;return n.message=Os.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UR,"deleteRecord")});var Qo=h((t3,PR)=>{var lG=require("crypto"),DR=9;function EG(e){let t=hG(DR),r=MR(e+t);return t+r}a(EG,"createHash");function dG(e,t){let r=e.substr(0,DR),s=r+MR(t+r);return e===s}a(dG,"validateHash");function hG(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(hG,"generateSalt");function MR(e){return lG.createHash("md5").update(e).digest("hex")}a(MR,"md5");PR.exports={hash:EG,validate:dG}});var vR=h((r3,BR)=>{var gl=Ee(),Je={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 SG(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,gl.validateObject(e,Je)}a(SG,"addUserValidation");function fG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,gl.validateObject(e,Je)}a(fG,"alterUserValidation");function TG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,gl.validateObject(e,Je)}a(TG,"dropUserValidation");BR.exports={addUserValidation:SG,alterUserValidation:fG,dropUserValidation:TG}});var he=h((n3,qR)=>{"use strict";var{platform:s3}=require("os"),mG="nats-server.zip",Il="nats-server",RG=process.platform==="win32"?`${Il}.exe`:Il,bl="HDB",AG=/^[^\s.,*>]+$/,HR="__request__",pG=a(e=>`${e}.${HR}`,"REQUEST_SUBJECT"),OG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},NG={HUB:"hub.pid",LEAF:"leaf.pid"},gG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},IG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:bl,deliver_subject:"__HDB__.WORKQUEUE"},bG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:bl,deliver_subject:"HDB.SCHEMAQUEUE"},CG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:bl,deliver_subject:"HDB.USERQUEUE"},wG={SUCCESS:"success",ERROR:"error"},LG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},UG={TXN:"txn",MSGID:"msgid"};qR.exports={NATS_SERVER_ZIP:mG,NATS_SERVER_NAME:Il,NATS_BINARY_NAME:RG,PID_FILES:NG,NATS_CONFIG_FILES:OG,SERVER_SUFFIX:gG,WORK_QUEUE_CONSUMER_NAMES:IG,SCHEMA_QUEUE_CONSUMER_NAMES:bG,USER_QUEUE_CONSUMER_NAMES:CG,NATS_TERM_CONSTRAINTS_RX:AG,REQUEST_SUFFIX:HR,UPDATE_REMOTE_RESPONSE_STATUSES:wG,CLUSTER_STATUS_STATUSES:LG,REQUEST_SUBJECT:pG,SUBJECT_PREFIXES:UG}});var FR=h((i3,GR)=>{"use strict";var Xr=T(),Ni=class{constructor(t=0,r=Xr.STORAGE_TYPES_ENUM.LMDB,s=Xr.LICENSE_VALUES.API_CALL_DEFAULT,n=Xr.RAM_ALLOCATION_ENUM.DEFAULT,i=Xr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ni,"BaseLicense");var Wo=class extends Ni{constructor(t=0,r=Xr.STORAGE_TYPES_ENUM.LMDB,s=Xr.LICENSE_VALUES.API_CALL_DEFAULT,n=Xr.RAM_ALLOCATION_ENUM.DEFAULT,i=Xr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Wo,"ExtendedLicense");GR.exports={BaseLicense:Ni,ExtendedLicense:Wo}});var mn=h((a3,KR)=>{"use strict";var Tn=require("fs-extra"),VR=Qo(),kR=require("crypto"),yG=require("moment"),DG=require("uuid").v4,Ze=g(),wl=require("path"),MG=b(),Rt=T(),PG=FR().ExtendedLicense,fn="invalid license key format",BG="061183",vG="mofi25",HG="aes-256-cbc",qG=16,GG=32,xR=Y();xR.initSync();var Cl;KR.exports={validateLicense:$R,generateFingerPrint:VG,licenseSearch:YR,getLicense:$G};function Ll(){return wl.join(xR.getHdbBasePath(),Rt.LICENSE_KEY_DIR_NAME,Rt.LICENSE_FILE_NAME)}a(Ll,"getLicenseDirPath");function FG(){let e=Ll();return wl.join(e,Rt.LICENSE_FILE_NAME)}a(FG,"getLicenseFilePath");function Ul(){let e=Ll();return wl.join(e,Rt.REG_KEY_FILE_NAME)}a(Ul,"getFingerPrintFilePath");async function VG(){let e=Ul();try{return await Tn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await kG();throw Ze.error(`Error writing fingerprint file to ${e}`),Ze.error(t),new Error("There was an error generating the fingerprint")}}a(VG,"generateFingerPrint");async function kG(){let e=DG(),t=VR.hash(e),r=Ul();try{await Tn.mkdirp(Ll()),await Tn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ze.error(`Error writing fingerprint file to ${r}`),Ze.error(s),new Error("There was an error generating the fingerprint")}return t}a(kG,"writeFingerprint");function $R(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Rt.STORAGE_TYPES_ENUM.LMDB,api_call:Rt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Rt.RAM_ALLOCATION_ENUM.DEFAULT,version:Rt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ze.error("empty license key passed to validate."),r;let s=Ul(),n=!1;try{n=Tn.statSync(s)}catch(i){Ze.error(i)}if(n){let i;try{i=Tn.readFileSync(s,"utf8")}catch{Ze.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vG),c=o[1];c=Buffer.concat([Buffer.from(c)],qG);let _=Buffer.concat([Buffer.from(i)],GG),u=kR.createDecipheriv(HG,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=xG(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fn),Ze.error(fn),new Error(fn)}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(fn),Ze.error(fn),new Error(fn)}else r.exp_date=l;r.exp_date<yG().valueOf()&&(r.valid_date=!1),VR.validate(o[1],`${BG}${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||Ze.error("Invalid licence"),r}a($R,"validateLicense");function xG(e,t){try{let r=kR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ze.warn("Check old license failed")}}a(xG,"checkOldLicense");function YR(){let e=new PG;e.api_call=0;let t=[];try{t=Tn.readFileSync(FG(),"utf-8").split(Rt.NEW_LINE)}catch(r){r.code==="ENOENT"?Ze.info("no license file found"):Ze.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(MG.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){Ze.error("There was an error parsing the license string."),Ze.error(n),e.api_call=Rt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Rt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Rt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Rt.LICENSE_VALUES.API_CALL_DEFAULT),Cl=e,e}a(YR,"licenseSearch");async function $G(){return Cl||await YR(),Cl}a($G,"getLicense")});var Ir=h((o3,aA)=>{"use strict";var ZR="username is required",XR="nothing to update, must supply active, role or password to update",zR="password cannot be an empty string",jR="If role is specified, it cannot be empty.",eA="active must be true or false";aA.exports={addUser:zG,alterUser:jG,dropUser:tF,userInfo:rF,listUsers:Zo,listUsersExternal:sF,setUsersToGlobal:gi,findAndValidateUser:aF,getClusterUser:oF,USERNAME_REQUIRED:ZR,ALTERUSER_NOTHING_TO_UPDATE:XR,EMPTY_PASSWORD:zR,EMPTY_ROLE:jR,ACTIVE_BOOLEAN:eA};var tA=yt(),YG=Ns(),Dl=Qo(),rA=vR(),sA=mt(),Ml=tn(),be=b(),nA=require("validate.js"),H=g(),{promisify:Pl}=require("util"),Bl=Yr(),gs=T(),QR=he(),KG=mr(),vl=Y(),QG=mn(),WG=ds(),{handleHDBError:nr,hdb_errors:JG}=D(),{HTTP_STATUS_CODES:ir,AUTHENTICATION_ERROR_MSGS:yl,HDB_ERROR_MSGS:Rn}=JG,{UserEventMsg:Hl}=kr(),WR=require("lodash"),iA={username:!0,active:!0,role:!0,password:!0},JR=new Map,Jo=Pl(sA.searchByValue),ZG=Pl(sA.searchByHash),XG=Pl(YG.delete);async function zG(e){let t=nA.cleanAttributes(e,iA),r=rA.addUserValidation(t);if(r)throw nr(new Error,r.message,ir.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 Jo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw nr(new Error,Rn.ROLE_NAME_NOT_FOUND(t.role),ir.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw nr(new Error,Rn.DUP_ROLES_FOUND(t.role),ir.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Bl.encrypt(t.password)),t.password=Dl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tA.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await gi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw nr(new Error,Rn.USER_ALREADY_EXISTS(t.username),ir.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.ADD_USER,_,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),`${c.username} successfully added`}a(zG,"addUser");async function jG(e){let t=nA.cleanAttributes(e,iA);if(be.isEmptyOrZeroLength(t.username))throw new Error(ZR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(XR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(zR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(eA);let r=eF(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Bl.encrypt(t.password)),t.password=Dl.hash(t.password)),t.role==="")throw new Error(jR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Jo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=Rn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),nr(new Error,_,ir.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=Rn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),nr(new Error,_,ir.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await tA.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await gi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.ALTER_USER,i,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),n}a(jG,"alterUser");function eF(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eF,"isClusterUser");async function tF(e){try{let t=rA.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw nr(new Error,Rn.USER_NOT_EXIST(e.username),ir.NOT_FOUND,void 0,void 0,!0);let s;try{s=await XG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await gi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.DROP_USER,n,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tF,"dropUser");async function rF(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 ZG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(rF,"userInfo");async function sF(){let e;try{e=await Zo()}catch(t){throw H.error("Got an error listing users."),H.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(sF,"listUsersExternal");async function Zo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=WR.cloneDeep(await Jo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=WR.cloneDeep(await Jo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],nF(c.role),i.set(c.username,c)}return(await QG.getLicense()).enterprise?i:iF(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Zo,"listUsers");function nF(e){try{if(!e){H.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(WG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(nF,"appendSystemTablesToRole");function iF(e){try{if(H.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?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(iF,"nonEnterpriseFilter");async function gi(){try{let e=await Zo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(gi,"setUsersToGlobal");async function aF(e,t,r=!0){global.hdb_users||await gi();let s=global.hdb_users.get(e);if(!s)throw nr(new Error,yl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nr(new Error,yl.USER_INACTIVE,ir.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(JR.get(t)===s.password)return n;if(Dl.validate(s.password,t))JR.set(t,s.password);else throw nr(new Error,yl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aF,"findAndValidateUser");async function oF(){let e=await Zo(),t=KG.getConfigFromFile(gs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=Bl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QR.SERVER_SUFFIX.ADMIN,r}a(oF,"getClusterUser")});var _A=h((c3,cA)=>{"use strict";var ql=Z(),cF=g(),oA=Ke().LMDB_ERRORS_ENUM;cA.exports=_F;async function _F(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await ql.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==oA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ql.closeEnvironment(global.lmdb_map[s]),await ql.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==oA.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){cF.error(t)}}a(_F,"cleanLMDBMap")});var hA=h((_3,dA)=>{"use strict";var Is=g(),Xo=T(),uF=_A(),uA=Qr(),lF=As(),EF=Ir(),{validateEvent:EA}=kr(),dF={[Xo.IPC_EVENT_TYPES.SCHEMA]:hF,[Xo.IPC_EVENT_TYPES.USER]:fF};async function hF(e){let t=EA(e);if(t){Is.error(t);return}Is.trace(`IPC schemaHandler ${Xo.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await uF(e.message),await SF(e.message)}a(hF,"schemaHandler");async function SF(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await lF.describeTable({schema:e.schema,table:e.table});break;default:uA.setSchemaDataToGlobal(lA);break}else uA.setSchemaDataToGlobal(lA)}catch(t){Is.error(t)}}a(SF,"syncSchemaMetadata");function lA(e){e&&Is.error(e)}a(lA,"handleErrorCallback");async function fF(e){try{let t=EA(e);if(t){Is.error(t);return}Is.trace(`IPC userHandler ${Xo.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await EF.setUsersToGlobal()}catch(t){Is.error(t)}}a(fF,"userHandler");dA.exports=dF});var mA=h((u3,TA)=>{"use strict";var TF=require("node-ipc").IPC,SA=b(),fA=T(),br=g(),{IPC_ERRORS:An}=Ke(),mF=require("os"),zo=class{constructor(t,r){this.ipc=new TF,this.server_name=fA.HDB_IPC_SERVER,this.ipc.config.retry=mF.platform()=="win32"?6e5:100,this.ipc.config.id=fA.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{br.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{br.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&br.warn("Error connecting to HDB IPC server. Confirm that the server is running."),br.warn(`Error with IPC client ${this.ipc.config.id}`),br.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw br.warn(An.INVALID_IPC_DATA_TYPE),new Error(An.INVALID_IPC_DATA_TYPE);if(SA.isEmpty(t.type))throw br.warn(An.MISSING_TYPE),new Error(An.MISSING_TYPE);if(SA.isEmpty(t.message))throw br.warn(An.MISSING_MSG),new Error(An.MISSING_MSG);br.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(zo,"IPCClient");TA.exports=zo});var AA=h((l3,RA)=>{var RF=Ee(),AF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RA.exports=function(e){return RF.validateObject(e,AF)}});var Gl=h((E3,pA)=>{"use strict";var pF=T().OPERATIONS_ENUM,jo=class{constructor(t,r,s,n=void 0){this.operation=pF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(jo,"UpdateObject");pA.exports=jo});var NA=h((d3,OA)=>{"use strict";var OF={OPERATION:"operation",REFRESH:"refresh"},ec=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(ec,"JWTTokens");var tc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(tc,"JWTRSAKeys");OA.exports={JWTTokens:ec,TOKEN_TYPE_ENUM:OF,JWTRSAKeys:tc}});var ic=h((h3,CA)=>{"use strict";var bi=require("jsonwebtoken"),Fl=require("fs-extra"),Vl=b(),Dt=T(),{handleHDBError:ot,hdb_errors:NF}=D(),{HTTP_STATUS_CODES:ct,AUTHENTICATION_ERROR_MSGS:_t}=NF,Ii=g(),gA=Qo(),$l=Ir(),gF=yt().update,IF=Gl(),bF=tn(),{UserEventMsg:CF}=kr(),zr=Y();zr.initSync();var kl=require("path"),{JWTTokens:wF,JWTRSAKeys:LF,TOKEN_TYPE_ENUM:rc}=NA(),UF=zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",yF=zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sc="RS256",xl;CA.exports={createTokens:DF,validateOperationToken:PF,refreshOperationToken:MF,validateRefreshToken:bA};async function DF(e){if(Vl.isEmpty(e)||typeof e!="object")throw ot(new Error,_t.INVALID_AUTH_OBJECT,ct.BAD_REQUEST,void 0,void 0,!0);if(Vl.isEmpty(e.username))throw ot(new Error,_t.USERNAME_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);if(Vl.isEmpty(e.password))throw ot(new Error,_t.PASSWORD_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await $l.findAndValidateUser(e.username,e.password),!t)throw ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ii.error(d),ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}let r=await nc(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await IA(i,r.private_key,r.passphrase),c=await bi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:yF,algorithm:sc,subject:rc.REFRESH}),_=gA.hash(c),u=new IF(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await gF(u)}catch(d){Ii.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ot(new Error,_t.REFRESH_TOKEN_SAVE_FAILED,ct.INTERNAL_SERVER_ERROR);return bF.signalUserChange(new CF(process.pid)),new wF(o,c)}a(DF,"createTokens");async function IA(e,t,r){return await bi.sign(e,{key:t,passphrase:r},{expiresIn:UF,algorithm:sc,subject:rc.OPERATION})}a(IA,"signOperationToken");async function nc(){if(xl===void 0)try{let e=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Fl.readFile(e)).toString(),n=(await Fl.readFile(t)).toString(),i=(await Fl.readFile(r)).toString();xl=new LF(i,n,s)}catch(e){throw Ii.error(e),ot(new Error,_t.NO_ENCRYPTION_KEYS,ct.INTERNAL_SERVER_ERROR)}return xl}a(nc,"getJWTRSAKeys");async function MF(e){if(!e)throw ot(new Error,_t.INVALID_BODY,ct.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ot(new Error,_t.REFRESH_TOKEN_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);await bA(e.refresh_token);let t=await nc(),r=await bi.decode(e.refresh_token);return{operation_token:await IA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MF,"refreshOperationToken");async function PF(e){try{let t=await nc(),r=await bi.verify(e,t.public_key,{algorithms:sc,subject:rc.OPERATION});return await $l.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ii.warn(t),t.name&&t.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}}a(PF,"validateOperationToken");async function bA(e){let t;try{let r=await nc(),s=await bi.verify(e,r.public_key,{algorithms:sc,subject:rc.REFRESH});t=await $l.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ii.warn(r),r.name&&r.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}if(!gA.validate(t.refresh_token,e))throw ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED);return t}a(bA,"validateRefreshToken")});var Yl=h((f3,UA)=>{"use strict";var BF=AA(),pn=require("passport"),vF=require("passport-local").Strategy,HF=require("passport-http").BasicStrategy,qF=require("util"),GF=Ir(),LA=qF.callbackify(GF.findAndValidateUser),S3=Ke(),FF=T(),wA=ic();pn.use(new vF(function(e,t,r){LA(e,t,r)}));pn.use(new HF(function(e,t,r){LA(e,t,r)}));pn.serializeUser(function(e,t){t(null,e)});pn.deserializeUser(function(e,t){t(null,e)});function VF(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":pn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===FF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):wA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:pn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(VF,"authorize");function kF(e,t){let r=BF(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 o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(kF,"checkPermissions");UA.exports={authorize:VF,checkPermissions:kF}});var ac=h((T3,yA)=>{"use strict";var xF=gr();yA.exports={writeTransaction:$F};function $F(e,t,r){return xF.writeTransaction(e,t,r)}a($F,"writeTransaction")});var At=h((w3,XA)=>{"use strict";var ar=Y();ar.initSync();var YF=require("fs-extra"),KF=require("semver"),yi=require("path"),{monotonicFactory:QF}=require("ulidx"),WF=QF(),MA=require("util"),PA=require("child_process"),JF=MA.promisify(PA.exec),ZF=PA.spawn,ee=he(),se=T(),Xl=b(),Cr=g(),oc=Yr(),XF=ac(),Ci=mr(),{encode:Wl,decode:BA}=require("msgpackr"),{isEmpty:bs}=Xl,vA=Ir(),m3=Ts(),zF=mt(),R3=MA.promisify(zF.searchByHash),{connect:jF,StorageType:HA,RetentionPolicy:qA,AckPolicy:GA,DeliverPolicy:Jl,NatsConnection:A3,JetStreamManager:p3,JetStreamClient:O3,StringCodec:N3,JSONCodec:e0,createInbox:zl,StreamSource:g3,headers:t0,toJsMsg:r0,nuid:I3,JetStreamOptions:b3,ErrorCode:DA,nanos:C3}=require("nats"),{PACKAGE_ROOT:s0}=T(),n0=Ua(),FA=e0(),i0="clustering",a0=n0.engines[ee.NATS_SERVER_NAME],o0=yi.join(s0,"dependencies"),Zl=yi.join(o0,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Kl,Ql,wi,Li,Ui,Wt;XA.exports={runCommand:VA,checkNATSServerInstalled:c0,createConnection:jl,getConnection:cc,getJetStreamManager:On,getJetStream:kA,getNATSReferences:Mt,getServerList:u0,createLocalStream:eE,listStreams:xA,deleteLocalStream:l0,getServerConfig:Di,listRemoteStreams:E0,viewStream:d0,publishToStream:h0,createWorkQueueStream:S0,addSourceToWorkStream:$A,request:f0,removeSourceFromWorkStream:KA,reloadNATS:tE,reloadNATSHub:T0,reloadNATSLeaf:m0,extractServerName:YA,requestErrorHandler:R0,updateWorkStream:A0,createLocalTableStream:WA,createTableStreams:p0,purgeTableStream:JA,purgeSchemaTableStreams:O0,getStreamInfo:N0,updateNodeNameLocalStreams:g0,closeConnection:_0};async function VA(e,t=void 0){let{stdout:r,stderr:s}=await JF(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var Rb=Object.defineProperty;var a=(e,t)=>Rb(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=h((hJ,sh)=>{"use strict";var xe=require("path"),Ab=require("fs");function pb(){let e=__dirname;for(;!Ab.existsSync(xe.join(e,"package.json"));){let t=xe.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(pb,"getHDBPackageRoot");var qt=pb(),Yd="js",xn=Yd,Ob="harperdb-config.yaml",Nb="defaultConfig.yaml",gb="hdb",Kd=`hdbServer.${xn}`,Wd=`customFunctionsServer.${xn}`,Qd=`hdbIpcServer.${xn}`,Ib=`restartHdb.${xn}`,z_="HarperDB",ha="Custom Functions",Sa="Clustering Hub",fa="Clustering Leaf",j_="Clustering Ingest Service",eu="Clustering Reply Service",bb="foreground.pid",Z_={HDB:z_,IPC:"IPC",CLUSTERING_HUB:Sa,CLUSTERING_LEAF:fa,CLUSTERING_INGEST_SERVICE:j_,CLUSTERING_REPLY_SERVICE:eu,CUSTOM_FUNCTIONS:ha,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"},Cb={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"},wb={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Lb={harperdb:z_,ipc:"IPC","clustering hub":Sa,"clustering leaf":fa,"clustering ingest service":j_,"clustering reply service":eu,"custom functions":ha,custom_functions:ha,"pm2-logrotate":Z_.PM2_LOGROTATE,logrotate:Z_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Ub={CLUSTERING_HUB_PROC_DESCRIPTOR:Sa,CLUSTERING_LEAF_PROC_DESCRIPTOR:fa,CLUSTERING_INGEST_PROC_DESCRIPTOR:j_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:eu},da={HDB:xe.join(qt,"server/harperdb"),IPC:xe.join(qt,"server/ipc"),CUSTOM_FUNCTIONS:xe.join(qt,"server/customFunctions"),CLUSTERING_HUB:xe.join(qt,"server/nats"),CLUSTERING_LEAF:xe.join(qt,"server/nats")},yb={HDB:xe.join(da.HDB,Kd),IPC:xe.join(da.IPC,Qd),CUSTOM_FUNCTIONS:xe.join(da.CUSTOM_FUNCTIONS,Wd)},Db={HDB:xe.join(qt,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:xe.join(qt,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:xe.join(qt,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:xe.join(qt,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:xe.resolve(qt,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Mb={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Jd="support@harperdb.io",Pb="customer-success@harperdb.io",Xd=1,Bb=4141,Zd="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",vb="https://www.harperdb.io/product",Hb=`For support, please submit a request at ${Zd} or contact ${Jd}`,zd=`For license support, please contact ${Pb}`,qb="None of the specified records were found.",Gb="hash attribute not found",Fb=`Your current license only supports ${Xd} role. ${zd}`,Vb="Your current license only supports 3 connections to a node.",$b="127.0.0.1",kb=1,xb=/^\.$/,Yb=/^\.\.$/,Kb="U+002E",Wb=/\//g,Qb="U+002F",Jb=/U\+002F/g,Xb=/^U\+002E$/,Zb=/^U\+002EU\+002E$/,zb="d",jb=999999,eC="*",tC="--max-old-space-size=",rC="system",sC="__hdb_hash",nC=".harperdb",iC=".hdb",aC="keys",oC="hdb_boot_properties.file",cC=".updateConfig.json",_C="SIGTSTP",uC=24,lC=6e4,EC=448,dC="blob",hC="trash",SC="schema",fC="transactions",TC=".count",mC="id",RC="install_log.log",AC="run_log.log",pC="PROCESS_NAME",OC={SETTINGS_PATH_KEY:"settings_path"},jd=require("lodash"),NC={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"},gC={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},IC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bC={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"},CC={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"},dt="hdb_internal:",wC={CREATE_SCHEMA:dt+"create_schema",CREATE_TABLE:dt+"create_table",CREATE_ATTRIBUTE:dt+"create_attribute",ADD_USER:dt+"add_user",ALTER_USER:dt+"alter_user",DROP_USER:dt+"drop_user",HDB_NODES:dt+"hdb_nodes",HDB_USERS:dt+"hdb_users",HDB_WORKERS:dt+"hdb_workers",CATCHUP:dt+"catchup",SCHEMA_CATCHUP:dt+"schema_catchup",WORKER_ROOM:dt+"cluster_workers"},LC={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"},UC="060493.ks",yC=".license",DC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},I={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"},MC={CSV:".csv",JSON:".json"},PC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},BC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Dr={};Dr[I.CREATE_SCHEMA]=I.CREATE_SCHEMA;Dr[I.CREATE_TABLE]=I.CREATE_TABLE;Dr[I.CREATE_ATTRIBUTE]=I.CREATE_ATTRIBUTE;Dr[I.INSERT]=I.INSERT;Dr[I.UPDATE]=I.UPDATE;Dr[I.UPSERT]=I.UPSERT;Dr[I.DELETE]=I.DELETE;var J=Object.create(null);J[I.DESCRIBE_ALL]=I.DESCRIBE_ALL;J[I.DESCRIBE_TABLE]=I.DESCRIBE_TABLE;J[I.DESCRIBE_SCHEMA]=I.DESCRIBE_SCHEMA;J[I.READ_LOG]=I.READ_LOG;J[I.ADD_NODE]=I.ADD_NODE;J[I.LIST_USERS]=I.LIST_USERS;J[I.LIST_ROLES]=I.LIST_ROLES;J[I.USER_INFO]=I.USER_INFO;J[I.SQL]=I.SQL;J[I.GET_JOB]=I.GET_JOB;J[I.SEARCH_JOBS_BY_START_DATE]=I.SEARCH_JOBS_BY_START_DATE;J[I.DELETE_FILES_BEFORE]=I.DELETE_FILES_BEFORE;J[I.EXPORT_LOCAL]=I.EXPORT_LOCAL;J[I.EXPORT_TO_S3]=I.EXPORT_TO_S3;J[I.CLUSTER_STATUS]=I.CLUSTER_STATUS;J[I.REMOVE_NODE]=I.REMOVE_NODE;J[I.RESTART]=I.RESTART;J[I.CUSTOM_FUNCTIONS_STATUS]=I.CUSTOM_FUNCTIONS_STATUS;J[I.GET_CUSTOM_FUNCTIONS]=I.GET_CUSTOM_FUNCTIONS;J[I.GET_CUSTOM_FUNCTION]=I.GET_CUSTOM_FUNCTION;J[I.SET_CUSTOM_FUNCTION]=I.SET_CUSTOM_FUNCTION;J[I.DROP_CUSTOM_FUNCTION]=I.DROP_CUSTOM_FUNCTION;J[I.ADD_CUSTOM_FUNCTION_PROJECT]=I.ADD_CUSTOM_FUNCTION_PROJECT;J[I.DROP_CUSTOM_FUNCTION_PROJECT]=I.DROP_CUSTOM_FUNCTION_PROJECT;J[I.PACKAGE_CUSTOM_FUNCTION_PROJECT]=I.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[I.DEPLOY_CUSTOM_FUNCTION_PROJECT]=I.DEPLOY_CUSTOM_FUNCTION_PROJECT;var vC={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},HC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},eh={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"},qC=jd.invert(eh),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"},GC={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},FC={csv_file_load:"csv_file_load",csv_data_load:I.CSV_DATA_LOAD,csv_url_load:I.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"},VC={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"},$C={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},kC={FILE_SYSTEM:"fs",LMDB:"lmdb"},xC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},YC={DEVELOPMENT:8192,DEFAULT:512},KC={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"},WC={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"},QC={ENOENT:"ENOENT",EACCES:"EACCES"},th={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},JC="__clustering__",XC=Object.values(th),ZC=15984864e5,rh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},zC=jd.invert(rh),jC={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"},ew=111,tw=`\r
|
|
2
|
+
`,rw={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},sw=["*","%"],nw="unauthorized_access",iw="func_val",aw={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ow={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cw="hdb_ipc_server",_w="hdb_ipc_client_",uw={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"},lw={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Ew={STOPPED:"stopped",ONLINE:"online"},dw="3.x.x";sh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Jd,HDB_SUPPORT_URL:Zd,HDB_PRICING_URL:vb,SUPPORT_HELP_MSG:Hb,LICENSE_HELP_MSG:zd,HDB_PROC_NAME:Kd,HDB_PROC_DESCRIPTOR:z_,CLUSTERING_LEAF_PROC_DESCRIPTOR:fa,CLUSTERING_HUB_PROC_DESCRIPTOR:Sa,SYSTEM_SCHEMA_NAME:rC,HASH_FOLDER_NAME:sC,HDB_HOME_DIR_NAME:nC,UPDATE_FILE_NAME:cC,LICENSE_KEY_DIR_NAME:aC,BOOT_PROPS_FILE_NAME:oC,JOB_TYPE_ENUM:FC,JOB_STATUS_ENUM:DC,SYSTEM_TABLE_NAMES:bC,SYSTEM_TABLE_HASH_ATTRIBUTES:CC,OPERATIONS_ENUM:I,VALID_S3_FILE_TYPES:MC,S3_BUCKET_AUTH_KEYS:PC,VALID_SQL_OPS_ENUM:BC,GEO_CONVERSION_ENUM:HC,HDB_SETTINGS_NAMES:eh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:qC,SERVICE_ACTIONS_ENUM:vC,CLUSTER_MESSAGE_TYPE_ENUM:VC,CLUSTER_CONNECTION_DIRECTION_ENUM:$C,CLUSTER_EVENTS_DEFS_ENUM:KC,PERIOD_REGEX:xb,DOUBLE_PERIOD_REGEX:Yb,UNICODE_PERIOD:Kb,FORWARD_SLASH_REGEX:Wb,UNICODE_FORWARD_SLASH:Qb,ESCAPED_FORWARD_SLASH_REGEX:Jb,ESCAPED_PERIOD_REGEX:Xb,ESCAPED_DOUBLE_PERIOD_REGEX:Zb,REG_KEY_FILE_NAME:UC,RESTART_TIMEOUT_MS:lC,HDB_FILE_PERMISSIONS:EC,SCHEMA_DIR_NAME:SC,TRANSACTIONS_DIR_NAME:fC,LIMIT_COUNT_NAME:TC,ID_ATTRIBUTE_STRING:mC,INSERT_MODULE_ENUM:gC,UPGRADE_JSON_FIELD_NAMES_ENUM:IC,RESTART_CODE:_C,RESTART_CODE_NUM:uC,CLUSTER_OPERATIONS:Dr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:LC,HDB_INTERNAL_SC_CHANNEL_PREFIX:dt,INTERNAL_SC_CHANNELS:wC,CLUSTERING_MESSAGE_TYPES:jC,HDB_FILE_SUFFIX:iC,BLOB_FOLDER_NAME:dC,HDB_TRASH_DIR:hC,ORIGINATOR_SET_VALUE:ew,LICENSE_VALUES:xC,RAM_ALLOCATION_ENUM:YC,STORAGE_TYPES_ENUM:kC,TIME_STAMP_NAMES_ENUM:th,TIME_STAMP_NAMES:XC,PERMS_UPDATE_RELEASE_TIMESTAMP:ZC,SEARCH_NOT_FOUND_MESSAGE:qb,SEARCH_ATTRIBUTE_NOT_FOUND:Gb,LICENSE_ROLE_DENIED_RESPONSE:Fb,LICENSE_MAX_CONNS_REACHED:Vb,BASIC_LICENSE_MAX_NON_CU_ROLES:Xd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Bb,VALUE_SEARCH_COMPARATORS:rh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:zC,LICENSE_FILE_NAME:yC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:WC,NEW_LINE:tw,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:kb,MOMENT_DAYS_TAG:zb,API_TURNOVER_SEC:jb,LOOPBACK:$b,CODE_EXTENSION:xn,WILDCARD_SEARCH_VALUE:eC,NODE_ERROR_CODES:QC,JAVASCRIPT_EXTENSION:Yd,PERMS_CRUD_ENUM:rw,UNAUTHORIZED_PERMISSION_NAME:nw,SEARCH_WILDCARDS:sw,FUNC_VAL:iw,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:aw,JWT_ENUM:ow,CLUSTERING_FLAG:JC,RUN_LOG:AC,INSTALL_LOG:RC,IPC_SERVER_MODULE:Qd,HDB_IPC_SERVER:cw,IPC_EVENT_TYPES:uw,HDB_IPC_CLIENT_PREFIX:_w,CUSTOM_FUNCTION_PROC_NAME:Wd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ha,SERVICES:lw,MEM_SETTING_KEY:tC,HDB_RESTART_SCRIPT:Ib,PROCESS_DESCRIPTORS:Z_,SERVICE_SERVERS:yb,SERVICE_SERVERS_CWD:da,PROCESS_DESCRIPTORS_VALIDATE:Lb,LAUNCH_SERVICE_SCRIPTS:Db,LOG_LEVELS:wb,PROCESS_NAME_ENV_PROP:pC,PROCESS_LOG_NAMES:Cb,PM2_PROCESS_STATUSES:Ew,CONFIG_PARAM_MAP:GC,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Ob,HDB_DEFAULT_CONFIG_FILE:Nb,ROLE_TYPES_ENUM:Mb,BOOT_PROP_PARAMS:OC,INSTALL_PROMPTS:NC,HDB_ROOT_DIR_NAME:gb,CLUSTERING_PROCESSES:Ub,FOREGROUND_PID_FILE:bb,PACKAGE_ROOT:qt,PRE_4_0_0_VERSION:dw}});var tu=h((SJ,ah)=>{"use strict";var nh=require("minimist");ah.exports=hw;function hw(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ih(process.env),s=ih(nh(process.argv))):(r=process.env,s=nh(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(hw,"assignCMDENVVariables");function ih(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ih,"objKeysToLowerCase")});var g=h((fJ,dh)=>{"use strict";var is=require("fs-extra"),as=require("path"),ch=require("yaml"),_h=require("properties-reader"),me=T(),Sw=tu(),fw=require("os"),{PACKAGE_ROOT:nu}=T(),rt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ta=as.join(nu,"logs"),Mr=process.env.pm_id===void 0,Tw=as.join(nu,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),iu=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,xs,Xt,lr,tt,ru,Ys;Ys===void 0&&uh();dh.exports={createLogFile:mw,notify:pw,fatal:Ow,error:su,warn:Nw,info:Rw,debug:Aw,trace:Eh,setLogLevel:Iw,log_level:tt};function uh(){try{if(Ys===void 0){let e=gw();Ys=_h(e),{level:tt,config_log_path:ru,to_file:Xt,to_stream:lr}=bw(Ys.get("settings_path"))}}catch(e){if(Ys=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=Sw(Object.keys(me.CONFIG_PARAM_MAP),!0);for(let i in t){let o=me.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let c=t[i];if(o===me.CONFIG_PARAMS.LOGGING_LEVEL){tt=c;continue}if(o===me.CONFIG_PARAMS.LOGGING_STDSTREAMS){lr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(Xt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Cw();Xt=Xt===void 0?s:Xt,Xt=oh(Xt),lr=lr===void 0?n:lr,lr=oh(lr),tt=tt===void 0?r:tt,ru=Ta;return}throw su("Error initializing log settings"),su(e),e}}a(uh,"initLogSettings");function mw(e,t){if(!Mr){Eh("createLogFile should only be used if the process is not being managed by pm2");return}Ys===void 0&&uh(),iu=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=Ta:r=ru,Xt&&(xs=as.join(r,e),is.ensureFileSync(xs))}a(mw,"createLogFile");function os(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let c=t[o];c instanceof Error&&c.stack?s+=c.stack:typeof c=="object"?s+=JSON.stringify(c):s+=c,o<i&&(s+=" ")}return`{"process_name": "${iu}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
|
+
`}a(os,"createLogRecord");function lh(e){xs===void 0&&(iu=me.PROCESS_DESCRIPTORS.INSTALL,is.ensureDirSync(Ta),xs=as.join(Ta,me.PROCESS_LOG_NAMES.INSTALL),is.ensureFileSync(xs)),is.appendFileSync(xs,e)}a(lh,"writeToLogFile");function ma(e){Xt&&lh(e),lr&&process.stdout.write(e)}a(ma,"nonPm2LogStdOut");function au(e){Xt&&lh(e),lr&&process.stderr.write(e)}a(au,"nonPm2LogStdErr");function Rw(...e){if(rt[tt]<=rt.info){let t=os("info",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(Rw,"info");function Eh(...e){if(rt[tt]<=rt.trace){let t=os("trace",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(Eh,"trace");function su(...e){if(rt[tt]<=rt.error){let t=os("error",e);if(Mr){au(t);return}process.stderr.write(t)}}a(su,"error");function Aw(...e){if(rt[tt]<=rt.debug){let t=os("debug",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(Aw,"debug");function pw(...e){if(rt[tt]<=rt.notify){let t=os("notify",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(pw,"notify");function Ow(...e){if(rt[tt]<=rt.fatal){let t=os("fatal",e);if(Mr){au(t);return}process.stderr.write(t)}}a(Ow,"fatal");function Nw(...e){if(rt[tt]<=rt.warn){let t=os("warn",e);if(Mr){au(t);return}process.stderr.write(t)}}a(Nw,"warn");function gw(){let e;try{e=fw.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=as.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return is.existsSync(t)||(t=as.join(nu,"utility/hdb_boot_properties.file")),t}a(gw,"getPropsFilePath");function Iw(e){tt=e}a(Iw,"setLogLevel");function oh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oh,"autoCastBoolean");function bw(e){try{if(e.includes("config/settings.js")){let o=_h(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:as.dirname(o.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=ch.parseDocument(is.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===me.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(bw,"getLogConfig");function Cw(){try{let e=ch.parseDocument(is.readFileSync(Tw,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(Cw,"getDefaultConfig")});var Sh=h((TJ,hh)=>{"use strict";var ww=require("util"),Lw=require("path"),Uw=require("child_process"),yw=ww.promisify(Uw.execFile),Dw=1e3*1e3*10;hh.exports={findPs:Mw};async function Mw(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await yw("ps",["wwxo",`pid,${r}`],{maxBuffer:Dw});for(let n of s.trim().split(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Lw.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Mw,"findPs")});var Ye=h((mJ,Th)=>{"use strict";var Pw="__dbis__",Bw="__environment_name__",vw="__dbi_defintion__",Hw={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"},qw=["__createdtime__","__updatedtime__"],Gw="\uFFFF",fh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Fw=Object.values(fh);Th.exports={INTERNAL_DBIS_NAME:Pw,DBI_DEFINITION_NAME:vw,SEARCH_TYPES:Hw,TIMESTAMP_NAMES:qw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Bw,TRANSACTIONS_DBI_NAMES_ENUM:fh,TRANSACTIONS_DBIS:Fw,OVERFLOW_MARKER:Gw}});var Ke=h((RJ,bh)=>{"use strict";var mh=T(),Rh=Ye(),Ah={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},ph=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Oh={500:ph("There was an error processing your request."),400:"Invalid request"},Vw=Oh[Ah.INTERNAL_SERVER_ERROR],$w={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.`},kw={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},xw={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"},Yw={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 ${Rh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Rh.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"},Kw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${mh.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 ${mh.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"},Nh={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"},Ww={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."},Qw={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`},Jw={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"},Xw={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Zw={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`},gh={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.`},Ih={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}`},zw={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."},jw={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},eL={...Nh,...xw,...$w,...Ww,...Qw,...Jw,...Xw,...Zw,...Kw,...gh,...Ih,...zw,...jw,...kw};bh.exports={CHECK_LOGS_WRAPPER:ph,HDB_ERROR_MSGS:eL,DEFAULT_ERROR_MSGS:Oh,DEFAULT_ERROR_RESP:Vw,HTTP_STATUS_CODES:Ah,LMDB_ERRORS_ENUM:Yw,AUTHENTICATION_ERROR_MSGS:Nh,VALIDATION_ERROR_MSGS:gh,IPC_ERRORS:Ih}});var D=h((AJ,Lh)=>{"use strict";var Ks=Ke(),tL=g(),rL=T(),Yn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Ch),this.http_resp_code=s||Ks.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ks.DEFAULT_ERROR_MSGS[s]?Ks.DEFAULT_ERROR_MSGS[s]:Ks.DEFAULT_ERROR_MSGS[Ks.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&&tL[n](i)}};a(Yn,"HdbError");function Ch(e,t,r,s=rL.LOG_LEVELS.ERROR,n=null,i=!1){if(wh(e))return e;let o=new Yn(e,t,r,s,n);return i&&delete o.stack,o}a(Ch,"handleHDBError");function wh(e){return e.__proto__.constructor.name===Yn.name}a(wh,"isHDBError");Lh.exports={isHDBError:wh,handleHDBError:Ch,hdb_errors:Ks}});var b=h((OJ,xh)=>{"use strict";var cs=require("path"),sL=require("fs-extra"),Ie=g(),Uh=require("fs-extra"),nL=require("truncate-utf8-bytes"),Kn=require("os"),iL=require("net"),aL=require("recursive-iterator"),Ue=T(),Bh=Sh(),yh=require("papaparse"),Ra=require("moment"),{inspect:oL}=require("util"),Dh=require("is-number"),pJ=require("lodash"),{hdb_errors:Aa}=D(),vh=require("util").promisify(setTimeout),cL=100,_L=5,uL="",lL=4,Mh=255,Ph={true:!0,false:!1,undefined:null,null:null,NaN:NaN};xh.exports={isEmpty:ht,isEmptyOrZeroLength:Zt,arrayHasEmptyValues:hL,arrayHasEmptyOrZeroLengthValues:SL,buildFolderPath:fL,isBoolean:Hh,errorizeMessage:EL,stripFileExtension:mL,autoCast:RL,autoCastJSONDeep:ou,removeDir:pL,compareVersions:OL,isCompatibleDataVersion:NL,escapeRawValue:Gh,unescapeValue:gL,stringifyProps:IL,valueConverter:bL,timeoutPromise:wL,isClusterOperation:UL,getClusterUser:ML,sendTransactionToSocketCluster:yL,checkGlobalSchemaTable:DL,getHomeDir:Fh,getPropsFilePath:CL,promisifyPapaParse:PL,removeBOM:Vh,createEventPromise:BL,checkProcessRunning:vL,checkSchemaTableExist:HL,checkSchemaExists:$h,checkTableExists:kh,getStartOfTomorrowInSeconds:qL,getLimitKey:GL,isObject:TL,isNotEmptyAndHasValue:dL,autoCasterIsNumberCheck:qh,backtickASTSchemaItems:FL,isPortTaken:LL,stopProcess:VL,createForkArgs:$L,autoCastBoolean:kL,async_set_timeout:vh,getTableHashAttribute:xL,doesSchemaExist:YL,doesTableExist:KL,stringifyObj:WL,ms_to_time:QL,changeExtension:JL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function EL(e){return e instanceof Error?e:new Error(e)}a(EL,"errorizeMessage");function ht(e){return e==null}a(ht,"isEmpty");function dL(e){return!ht(e)&&(e||e===0||e===""||Hh(e))}a(dL,"isNotEmptyAndHasValue");function Zt(e){return ht(e)||e.length===0||e.size===0}a(Zt,"isEmptyOrZeroLength");function hL(e){if(ht(e))return!0;for(let t=0;t<e.length;t++)if(ht(e[t]))return!0;return!1}a(hL,"arrayHasEmptyValues");function SL(e){if(Zt(e))return!0;for(let t=0;t<e.length;t++)if(Zt(e[t]))return!0;return!1}a(SL,"arrayHasEmptyOrZeroLengthValues");function fL(...e){try{return e.join(cs.sep)}catch{console.error(e)}}a(fL,"buildFolderPath");function Hh(e){return ht(e)?!1:e===!0||e===!1}a(Hh,"isBoolean");function TL(e){return ht(e)?!1:typeof e=="object"}a(TL,"isObject");function mL(e){return Zt(e)?uL:e.slice(0,-lL)}a(mL,"stripFileExtension");function RL(e){return ht(e)||e===""||typeof e!="string"?e:Ph[e]!==void 0?Ph[e]:qh(e)===!0?Number(e):e}a(RL,"autoCast");function AL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AL,"autoCastJSON");function ou(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=ou(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ou(r);s!==r&&(e[t]=s)}return e}else return AL(e)}a(ou,"autoCastJSONDeep");function qh(e){if(e.startsWith("0.")&&Dh(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Dh(e))}a(qh,"autoCasterIsNumberCheck");async function pL(e){if(Zt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Uh.emptyDir(e),await Uh.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(pL,"removeDir");function OL(e,t){if(Zt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Zt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(OL,"compareVersions");function NL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(NL,"isCompatibleDataVersion");function Gh(e){if(ht(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(Gh,"escapeRawValue");function gL(e){if(ht(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(gL,"unescapeValue");function IL(e,t){if(ht(e))return Ie.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Kn.EOL}!Zt(s)&&s[0]===";"?r+=" "+s+n+Kn.EOL:Zt(s)||(r+=s+"="+n+Kn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(IL,"stringifyProps");function bL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(Gh(t)),s=Buffer.byteLength(r)>Mh?nL(r,Mh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(bL,"valueConverter");function Fh(){let e;try{e=Kn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Fh,"getHomeDir");function CL(){let e=cs.join(Fh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return sL.existsSync(e)||(e=cs.join(__dirname,"../","hdb_boot_properties.file")),e}a(CL,"getPropsFilePath");function wL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wL,"timeoutPromise");async function LL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=iL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(LL,"isPortTaken");function UL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(UL,"isClusterOperation");function yL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.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]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(yL,"sendTransactionToSocketCluster");function DL(e,t){if(!global.hdb_schema[e])return Aa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Aa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(DL,"checkGlobalSchemaTable");function ML(e,t){if(ht(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ht(e)||Zt(e)){Ie.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){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ML,"getClusterUser");function PL(){yh.parsePromise=function(e,t){return new Promise(function(r,s){yh.parse(e,{header:!0,transformHeader:Vh,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(PL,"promisifyPapaParse");function Vh(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Vh,"removeBOM");function BL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${oL(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(BL,"createEventPromise");async function vL(e){let t=!0,r=0;do await vh(cL*r++),(await Bh.findPs(e)).length>0&&(t=!1);while(t&&r<_L);if(t)throw new Error(`process ${e} was not started`)}a(vL,"checkProcessRunning");function HL(e,t){let r=$h(e);if(r)return r;let s=kh(e,t);if(s)return s}a(HL,"checkSchemaTableExist");function $h(e){if(!global.hdb_schema[e])return Aa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a($h,"checkSchemaExists");function kh(e,t){if(!global.hdb_schema[e][t])return Aa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kh,"checkTableExists");function qL(){let e=Ra().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=Ra().utc().unix();return e-t}a(qL,"getStartOfTomorrowInSeconds");function GL(){return Ra().utc().format("DD-MM-YYYY")}a(GL,"getLimitKey");function FL(e){try{let t=new aL(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){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(FL,"backtickASTSchemaItems");async function VL(e){let t=Kn.userInfo();(await Bh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(VL,"stopProcess");function $L(e){return[e]}a($L,"createForkArgs");function kL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kL,"autoCastBoolean");function xL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(xL,"getTableHashAttribute");function YL(e){return global?.hdb_schema?.[e]!==void 0}a(YL,"doesSchemaExist");function KL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(KL,"doesTableExist");function WL(e){try{return JSON.stringify(e)}catch{return e}}a(WL,"stringifyObj");function QL(e){let t=Ra.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(QL,"ms_to_time");function JL(e,t){let r=cs.basename(e,cs.extname(e));return cs.join(cs.dirname(e),r+t)}a(JL,"changeExtension")});var Ee=h((NJ,Yh)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Yh.exports={validateObject:XL,validateObjectAsync:ZL,validateBySchema:zL};function XL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(XL,"validateObject");async function ZL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(ZL,"validateObjectAsync");function zL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(zL,"validateBySchema")});var _u=h((gJ,Wh)=>{"use strict";var jL=require("fs-extra"),F=require("joi"),eU=require("os"),{boolean:ye,string:Er,number:zt,array:cu}=F.types(),Kh=require("path"),tU=g(),pa=b(),rU=Ee(),sU="log",nU="custom_functions",iU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",aU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",oU="rootPath config parameter is undefined",cU="clustering.enabled config parameter is undefined",Pr=zt.min(0).required(),Oa=cu.items({host:Er.required(),port:Pr}).empty(null),Wn;Wh.exports={configValidator:_U,routesValidator:SU,route_constraints:Oa};function _U(e){if(Wn=e.rootPath,pa.isEmpty(Wn))throw oU;let t=ye.required(),r=F.valid("production","development").required(),s=zt.min(1).max(1e3).empty(null).default(dU),n=Er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hU),i=F.custom(lU).messages({"any.custom":"{:#label} {:#error}"}),o=Er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(pa.isEmpty(c))throw cU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Pr,routes:Oa}).required()}).required(),leafNodes:F.object({network:F.object({port:Pr}).required()}).required(),network:F.object({port:Pr}).required()}).required(),leafServer:F.object({network:F.object({port:Pr,routes:Oa}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:cu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Pr})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:Er.required(),maxSize:Er.custom(EU).required(),retain:zt.min(0).required(),rotate:ye.required(),rotateInterval:Er.required(),rotateModule:ye.required(),timezone:Er.required(),workerInterval:zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:cu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(_U,"configValidator");function uU(e){return jL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(uU,"doesPathExist");function lU(e,t){if(e===null)return;F.assert(e,Er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=uU(e);return r?t.message(r):e}a(lU,"validatePemFile");function EU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(iU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(aU)}a(EU,"validateRotationMaxSize");function dU(e,t){let r=t.state.path.join("."),s=eU.cpus().length,n=s-1;return n<=2&&(n=2),tU.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(dU,"setDefaultThreads");function hU(e,t){if(!pa.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(pa.isEmpty(Wn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Kh.join(Wn,nU);case"logging.root":return Kh.join(Wn,sU);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hU,"setDefaultRoot");function SU(e){let t=F.object({routes:Oa});return rU.validateBySchema({routes:e},t)}a(SU,"routesValidator")});var dr=h((IJ,eS)=>{"use strict";var re=T(),It=b(),We=g(),{configValidator:fU,routesValidator:Qh}=_u(),Gt=require("fs-extra"),TU=require("yaml"),Ws=require("path"),mU=require("is-number"),Ia=require("properties-reader"),RU=require("lodash"),{handleHDBError:AU}=D(),{HTTP_STATUS_CODES:pU,HDB_ERROR_MSGS:Na}=Ke(),{PACKAGE_ROOT:OU}=T(),NU="Unable to get config value because config is uninitialized",gU="Config successfully initialized",IU="Error backing up config file",bU="Empty parameter sent to getConfigValue",Jh=Ws.join(OU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),CU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ga,nt;eS.exports={createConfigFile:wU,getDefaultConfig:LU,getConfigValue:Xh,initConfig:Zh,flattenConfig:_s,updateConfigValue:zh,updateConfigObject:UU,getConfiguration:yU,setConfiguration:DU,readConfigFile:Eu,getClusteringRoutes:MU,initOldConfig:jh,getConfigFromFile:PU};function wU(e){let t=Qs(Jh);ga=_s(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=uu(o,e[i]);try{t.setIn([...c],_)}catch(u){We.error(u)}}}lu(t);let r=t.toJSON();nt=_s(r);let s=t.getIn(["rootPath"]),n=Ws.join(s,re.HDB_CONFIG_FILE);Gt.createFileSync(n),Gt.writeFileSync(n,String(t)),We.trace(`Config file written to ${n}`)}a(wU,"createConfigFile");function LU(e){if(ga===void 0){let r=Qs(Jh);ga=_s(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ga[t.toLowerCase()]}a(LU,"getDefaultConfig");function Xh(e){if(It.isEmpty(e)){We.error(bU);return}if(nt===void 0){We.trace(NU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return nt[t.toLowerCase()]}a(Xh,"getConfigValue");function Zh(e=!1){if(nt===void 0||e){let t=It.getPropsFilePath();try{Gt.accessSync(t,Gt.constants.F_OK|Gt.constants.R_OK)}catch(o){throw We.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ia(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{jh(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Qs(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){We.trace(`HarperDB config file not found at ${s}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw We.error(o),new Error(`Error reading HarperDB config file at ${s}`)}lu(n);let i=n.toJSON();nt=_s(i),We.trace(gU)}}a(Zh,"initConfig");function lu(e){let t=e.toJSON(),r=fU(t);if(r.error)throw Na.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)}a(lu,"validateConfig");function UU(e,t){nt===void 0&&(nt={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){We.trace(`Unable to update config object because config param '${e}' does not exist`);return}nt[r.toLowerCase()]=t}a(UU,"updateConfigObject");function zh(e,t,r=void 0,s=!1,n=!1){nt===void 0&&Zh();let i=Xh(re.CONFIG_PARAM_MAP.hdb_root),o=Ws.join(i,re.HDB_CONFIG_FILE),c=Qs(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=uu(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),S=uu(E,r[l]);try{c.setIn([...d],S)}catch(m){We.error(m)}}}lu(c);let _=c.getIn(["rootPath"]),u=Ws.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Ws.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Gt.copySync(o,l),We.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){We.error(IU),We.error(l)}Gt.writeFileSync(u,String(c)),n&&(nt=_s(c.toJSON())),We.trace(`Config parameter: ${e} updated with value: ${t}`)}a(zh,"updateConfigValue");function _s(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=_s(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(_s,"flattenConfig");function uu(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.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(mU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.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 It.autoCast(t)}a(uu,"castConfigValue");function yU(){let e=It.getPropsFilePath(),r=Ia(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Qs(r).toJSON()}a(yU,"getConfiguration");async function DU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return zh(void 0,void 0,n,!0),CU}catch(i){throw typeof i=="string"||i instanceof String?AU(i,i,pU.BAD_REQUEST,void 0,void 0,!0):i}}a(DU,"setConfiguration");function Eu(){let e=It.getPropsFilePath();try{Gt.accessSync(e,Gt.constants.F_OK|Gt.constants.R_OK)}catch(n){throw We.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ia(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Qs(r).toJSON()}a(Eu,"readConfigFile");function Qs(e){return TU.parseDocument(Gt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function MU(){let e=Eu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=Qh(t);if(r)throw Na.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=Qh(s);if(n)throw Na.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Na.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(MU,"getClusteringRoutes");function jh(e){let t=Ia(e);nt={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?nt[n]=Ws.dirname(s):nt[n]=s}return nt}a(jh,"initOldConfig");function PU(e){let t=Eu();return RU.get(t,e.replaceAll("_","."))}a(PU,"getConfigFromFile")});var Y=h((bJ,rS)=>{"use strict";var du=require("fs-extra"),jt=require("path"),BU=require("os"),vU=require("properties-reader"),Qn=g(),Js=b(),M=T(),ba=dr(),HU="Error initializing environment manager",Ca="BOOT_PROPS_FILE_PATH",tS=!1,qU={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},hr={};rS.exports={BOOT_PROPS_FILE_PATH:Ca,getHdbBasePath:GU,setHdbBasePath:FU,get:VU,initSync:kU,setProperty:x,initTestEnvironment:xU};function GU(){return hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(GU,"getHdbBasePath");function FU(e){hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(FU,"setHdbBasePath");function VU(e){let t=ba.getConfigValue(e);return t===void 0?hr[e]:t}a(VU,"get");function x(e,t){qU[e]&&(hr[e]=t),ba.updateConfigObject(e,t)}a(x,"setProperty");function $U(){let e;try{e=Js.getPropsFilePath(),du.accessSync(e,du.constants.F_OK|du.constants.R_OK),tS=!0;let t=vU(e);return hr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),hr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),hr[Ca]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a($U,"doesPropFileExist");function kU(e=!1){try{(tS||$U())&&(ba.initConfig(e),hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ba.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(HU),Qn.error(t),console.error(t),process.exit(1)}}a(kU,"initSync");function xU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=jt.join(__dirname,"../../","unitTests");hr[Ca]=jt.join(_,"hdb_boot_properties.file"),x(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,jt.join(_,"settings.test")),x(M.HDB_SETTINGS_NAMES.INSTALL_USER,BU.userInfo().username),x(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.HDB_SETTINGS_NAMES.CERT_KEY,jt.join(_,"envDir","utility","keys","certificate.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,jt.join(_,"envDir","utility","keys","certificate.pem")),x(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),x(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,jt.join(_,"envDir","log")),x(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),x(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),x(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,jt.join(_,"envDir")),x(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Js.isEmpty(n)?!0:n),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Js.isEmpty(n)?!0:n),x(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),x(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Js.isEmpty(i)?!1:i),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Js.isEmpty(i)?!1:i),x(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),x(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),x(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,jt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),x(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Js.isEmpty(c)?!1:c),o&&(x("CORS_ACCESSLIST",o),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(x(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(x(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(x(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ca}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(xU,"initTestEnvironment")});var wa=h((CJ,YU)=>{YU.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 nS=h((wJ,sS)=>{var KU=require("fastify-plugin");sS.exports=KU(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var us=h((LJ,WU)=>{WU.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 TS=h((yJ,fS)=>{"use strict";var hu=require("recursive-iterator"),QU=require("alasql"),Su=require("clone"),iS=b(),{handleHDBError:aS,hdb_errors:JU}=D(),{HDB_ERROR_MSGS:oS,HTTP_STATUS_CODES:cS}=JU,XU=["DISTINCT_ARRAY"],_S=Symbol("validateTables"),fu=Symbol("validateTable"),UJ=Symbol("getAllColumns"),uS=Symbol("validateAllColumns"),La=Symbol("findColumn"),lS=Symbol("validateOrderBy"),Jn=Symbol("validateSegment"),Tu=Symbol("validateColumn"),ES=Symbol("setColumnsForTable"),dS=Symbol("checkColumnsForAsterisk"),hS=Symbol("validateGroupBy"),SS=Symbol("hasColumns"),Ua=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_S](),this[dS](),this[uS]()}[_S](){if(this[SS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fu](t.table)})}}[SS](){let t=!1,r=new hu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw aS(new Error,oS.SCHEMA_NOT_FOUND(t.databaseid),cS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw aS(new Error,oS.TABLE_NOT_FOUND(t.databaseid,t.tableid),cS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Su(s);n.table=Su(t),this.attributes.push(n)})}[La](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)}[dS](){let t=new hu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ES](r.tableid)}[ES](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new QU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[uS](){this[Jn](this.statement.columns,!1),this[Jn](this.statement.joins,!1),this[Jn](this.statement.where,!1),this[hS](this.statement.group,!1),this[Jn](this.statement.order,!0)}[Jn](t,r){if(!t)return;let s=new hu(t),n=[];for(let{node:i,path:o}of s)!iS.isEmpty(i)&&!iS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[lS](i):n.push(this[Tu](i)));return n}[hS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&XU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Su(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[La](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[La](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[lS](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[Tu](t)}[Tu](t){let r=this[La](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]}};a(Ua,"SelectValidator");fS.exports=Ua});var mu=h((DJ,mS)=>{"use strict";var ya=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")}};a(ya,"BridgeMethods");mS.exports=ya});var ls=h((BJ,OS)=>{"use strict";var RS=Ke().LMDB_ERRORS_ENUM,MJ=require("lmdb"),ZU=Ye(),PJ=require("buffer").Buffer,zU=require("microtime"),{OVERFLOW_MARKER:AS,MAX_SEARCH_KEY_LENGTH:Da}=ZU,pS=["number","string","symbol","boolean","bigint"];function jU(e){if(!e)throw new Error(RS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(RS.INVALID_ENVIRONMENT)}a(jU,"validateEnv");function ey(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(ey,"stringifyData");function ty(e){return e instanceof Date?e.valueOf():e}a(ty,"convertKeyValueToWrite");function ry(e){if(e==null)return;if(pS.includes(typeof e))return e.length>Da?[e.slice(0,Da)+AS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];pS.includes(typeof n)&&(n.length>Da?t.push(n.slice(0,Da)+AS):t.push(n))}}return t}a(ry,"getIndexedValues");function sy(){let e=zU.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(sy,"getMicroTime");OS.exports={validateEnv:jU,stringifyData:ey,convertKeyValueToWrite:ty,getMicroTime:sy,getIndexedValues:ry}});var gS=h((vJ,NS)=>{"use strict";var Ma=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ma,"DBIDefinition");NS.exports=Ma});var bS=h((HJ,IS)=>{"use strict";var Pa=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)}};a(Pa,"OpenDBIObject");IS.exports=Pa});var wS=h((qJ,CS)=>{"use strict";var Ba=class{constructor(t,r,s,n,i=!1,o=!1,c=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=o,c!==void 0&&(this.overlappingSync=c)}};a(Ba,"OpenEnvironmentObject");CS.exports=Ba});var X=h((FJ,FS)=>{"use strict";var Ru=require("lmdb"),bt=require("fs-extra"),Ft=require("path"),Ha=ls(),LS=g(),De=Ke().LMDB_ERRORS_ENUM,qa=gS(),Au=bS(),US=wS(),Br=Ye(),GJ=T(),Xn=Y();Xn.initSync();var yS=Xn.get("STORAGE_WRITEASYNC")===!0||Xn.get("STORAGE_WRITEASYNC")==="true"||Xn.get("STORAGE_WRITEASYNC")==="TRUE",DS=Xn.get("STORAGE_OVERLAPPINGSYNC"),MS=1024*1024*1024,PS=1e4,BS=1e3,Vt=Br.INTERNAL_DBIS_NAME,vS=Br.DBI_DEFINITION_NAME,ny="data.mdb",iy="lock.mdb",Zn=".mdb",ay="-lock",va=class{constructor(t,r,s=!1){this.dbi=Ct(t,r),this.key_type=this.dbi[Br.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Br.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ru.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(va,"TransactionCursor");function pu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(pu,"pathEnvNameValidation");async function Ou(e,t,r=!0){try{await bt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Ft.join(e,t+Zn);return await bt.access(s,bt.constants.R_OK|bt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bt.access(Ft.join(e,t,ny),bt.constants.R_OK|bt.constants.F_OK),Ft.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Ou,"validateEnvironmentPath");function Ga(e,t){if(Ha.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ga,"validateEnvDBIName");async function oy(e,t,r=!1,s=!1){pu(e,t),t=t.toString();try{return await Ou(e,t,s),Nu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Ft.join(e,t);await bt.mkdirp(s?i:e);let o=new US(s?i:i+Zn,MS,PS,BS,!1,yS,DS),c=Ru.open(o);c.dbis=Object.create(null);let _=new Au(!1);c.openDB(Vt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=gu(e,t,r);return c[Br.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(oy,"createEnvironment");async function cy(e,t,r,s=!0){let n=await Nu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await bt.access(Ft.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(cy,"copyEnvironment");async function Nu(e,t,r=!1){pu(e,t),t=t.toString();let s=gu(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 Ou(e,t),i=Ft.join(e,t+Zn),o=n!=i,c=new US(n,MS,PS,BS,o,yS,DS),_=Ru.open(c);_.dbis=Object.create(null);let u=qS(_);for(let l=0;l<u.length;l++)Ct(_,u[l]);return _[Br.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Nu,"openEnvironment");async function _y(e,t,r=!1){pu(e,t),t=t.toString();let s=Ft.join(e,t+Zn),n=await Ou(e,t);if(global.lmdb_map!==void 0){let i=gu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await HS(o),delete global.lmdb_map[i]}}await bt.remove(n),await bt.remove(n===s?n+ay:Ft.join(Ft.dirname(n),iy))}a(_y,"deleteEnvironment");async function HS(e){Ha.validateEnv(e);let t=e[Br.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(HS,"closeEnvironment");function gu(e,t,r=!1){let n=`${Ft.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(gu,"getCachedEnvironmentName");function uy(e){Ha.validateEnv(e);let t=Object.create(null),r=Ct(e,Vt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Vt)try{t[s]=Object.assign(new qa,n)}catch{LS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(uy,"listDBIDefinitions");function qS(e){Ha.validateEnv(e);let t=[],r=Ct(e,Vt);for(let{key:s}of r.getRange({start:!1}))s!==Vt&&t.push(s);return t}a(qS,"listDBIs");function ly(e,t){let s=Ct(e,Vt).getEntry(t),n=new qa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{LS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ly,"getDBIDefinition");function GS(e,t,r,s=!1){if(Ga(e,t),t=t.toString(),t===Vt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ct(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Au(r,s===!0),o=e.openDB(t,i),c=new qa(r===!0,s);return o[vS]=c,Ct(e,Vt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GS,"createDBI");function Ct(e,t){if(Ga(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Vt?r=ly(e,t):r=new qa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Au(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(De.DBI_DOES_NOT_EXIST):n}return s[vS]=r,e.dbis[t]=s,s}a(Ct,"openDBI");function Ey(e,t){Ga(e,t),t=t.toString();let r=Ct(e,t),s=r.getStats();return r[Br.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Ey,"statDBI");async function dy(e,t){try{let r=Ft.join(e,t+Zn);return(await bt.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(dy,"environmentDataSize");function hy(e,t){if(Ga(e,t),t=t.toString(),t===Vt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);Ct(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ct(e,Vt).removeSync(t)}a(hy,"dropDBI");function Sy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ct(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)GS(e,n,n!==t,n===t);else throw i}}}a(Sy,"initializeDBIs");FS.exports={openDBI:Ct,openEnvironment:Nu,createEnvironment:oy,listDBIs:qS,listDBIDefinitions:uy,createDBI:GS,dropDBI:hy,statDBI:Ey,deleteEnvironment:_y,initializeDBIs:Sy,TransactionCursor:va,environmentDataSize:dy,copyEnvironment:cy,closeEnvironment:HS}});var $S=h((VJ,VS)=>{"use strict";var Fa=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Fa,"InsertRecordsResponseObject");VS.exports=Fa});var xS=h(($J,kS)=>{"use strict";var Va=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(Va,"UpdateRecordsResponseObject");kS.exports=Va});var KS=h((kJ,YS)=>{"use strict";var $a=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a($a,"UpsertRecordsResponseObject");YS.exports=$a});var Xs=h((WJ,QS)=>{"use strict";var fy=X(),Ty=$S(),my=xS(),Ry=KS(),jn=ls(),zn=Ke().LMDB_ERRORS_ENUM,Ay=Ye(),vr=T(),py=b(),Oy=require("uuid"),xJ=require("lmdb"),{handleHDBError:Ny,hdb_errors:gy}=D(),{OVERFLOW_MARKER:YJ,MAX_SEARCH_KEY_LENGTH:KJ}=Ay,Iu=vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Es=vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Iy(e,t,r,s,n=!0){Lu(e,t,r,s),bu(e,t,r);let i=new Ty,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];WS(u,!0,n);let l=by(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Cu(o,c,s,i)}a(Iy,"insertRecords");function by(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][vr.FUNC_VAL],s[o]=c)}let _=jn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[Es])})}a(by,"insertRecord");function Cy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Cy,"removeSkippedRecords");function WS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Es]))&&(e[Es]=s),t===!0?(r===!0||!Number.isInteger(e[Iu]))&&(e[Iu]=s):delete e[Iu]}a(WS,"setTimestamps");function bu(e,t,r){r.indexOf(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),fy.initializeDBIs(e,t,r)}a(bu,"initializeTransaction");async function wy(e,t,r,s,n=!0){Lu(e,t,r,s),bu(e,t,r);let i=new my,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=wu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Cu(c,_,s,i,o)}a(wy,"updateRecords");async function Ly(e,t,r,s,n=!0){try{Lu(e,t,r,s)}catch(_){throw Ny(_,_.message,gy.HTTP_STATUS_CODES.BAD_REQUEST)}bu(e,t,r);let i=new Ry,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;py.isEmpty(u[t])?(l=Oy.v4(),u[t]=l):l=u[t];let E=wu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Cu(o,c,s,i)}a(Ly,"upsertRecords");async function Cu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=jn.getMicroTime(),Cy(r,n),s}a(Cu,"finalizeWrite");function wu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(WS(r,!l,o),Number.isInteger(r[Es])&&u[Es]>r[Es])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let z=R([[u]]);Array.isArray(z)&&(R=z[0][vr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=jn.getIndexedValues(L);if(B)for(let z=0,V=B.length;z<V;z++)w.remove(B[z],s);if(B=jn.getIndexedValues(R),B)for(let z=0,V=B.length;z<V;z++)w.put(B[z],s)}let S=Object.assign({},u,r);c.put(s,S,S[Es])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:wu(e,t,r,s,n,i,o))}a(wu,"updateUpsertRecord");function Uy(e,t,r){if(jn.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Uy,"validateBasic");function Lu(e,t,r,s){if(Uy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Lu,"validateWrite");QS.exports={insertRecords:Iy,updateRecords:wy,upsertRecords:Ly}});var te=h((QJ,XS)=>{"use strict";var Uu=T(),Zs=Y(),yu=require("path");Zs.initSync();var ka,xa,Ya;function JS(){if(ka!==void 0)return ka;if(Zs.getHdbBasePath()!==void 0)return ka=yu.join(Zs.getHdbBasePath(),Uu.SCHEMA_DIR_NAME),ka}a(JS,"getBaseSchemaPath");function yy(){if(xa!==void 0)return xa;if(Zs.getHdbBasePath()!==void 0)return xa=yu.join(JS(),Uu.SYSTEM_SCHEMA_NAME),xa}a(yy,"getSystemSchemaPath");function Dy(){if(Ya!==void 0)return Ya;if(Zs.getHdbBasePath()!==void 0)return Ya=yu.join(Zs.getHdbBasePath(),Uu.TRANSACTIONS_DIR_NAME),Ya}a(Dy,"getTransactionAuditStorePath");XS.exports={getBaseSchemaPath:JS,getSystemSchemaPath:yy,getTransactionAuditStorePath:Dy}});var Sr=h((JJ,jS)=>{"use strict";var zS=b(),ZS=T(),Wa=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Du=require("joi"),Ka={schema_format:{pattern:Wa,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},My=Du.alternatives(Du.string().min(1).max(Ka.schema_length.maximum).pattern(Wa).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Du.number()).required();function Py(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ka.schema_length.maximum?`'${e}' maximum of 250 characters`:Wa.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Py,"checkValidTable");function By(e,t){return zS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(By,"validateSchemaExists");function vy(e,t){let r=t.state.ancestors[0].schema;return zS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(vy,"validateTableExists");function Hy(e,t){return e.toLowerCase()===ZS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${ZS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Hy,"validateSchemaName");jS.exports={common_validators:Ka,schema_regex:Wa,hdb_schema_table:My,validateSchemaExists:By,validateTableExists:vy,validateSchemaName:Hy,checkValidTable:Py}});var Qa=h((XJ,ef)=>{var{common_validators:Hr}=Sr(),ei=Ee(),$t="is required",Z={schema:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},table:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},hash_attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length}};function ti(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ti,"makeAttributesStrings");function qy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(qy,"schema_object");function Gy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(Gy,"table_object");function Fy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence={message:$t},ei.validateObject(e,Z)}a(Fy,"create_table_object");function Vy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence={message:$t},Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(Vy,"attribute_object");function $y(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a($y,"describe_table");function ky(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(ky,"validateTableResidence");ef.exports={schema_object:qy,create_table_object:Fy,table_object:Gy,attribute_object:Vy,describe_table:$y,validateTableResidence:ky}});var rf=h((ZJ,tf)=>{"use strict";var xy=require("uuid"),Ja=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||xy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ja,"CreateAttributeObject");tf.exports=Ja});var Za=h((zJ,sf)=>{"use strict";var Yy=rf(),Xa=class extends Yy{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Xa,"LMDBCreateAttributeObject");sf.exports=Xa});var af=h((jJ,nf)=>{"use strict";nf.exports=Wy;var Ky="inserted";function Wy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ky?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Wy,"returnObject")});var za=h((eX,cf)=>{"use strict";var Qy=T(),Mu=X(),Jy=Xs(),{getSystemSchemaPath:Xy,getBaseSchemaPath:Zy}=te(),zy=require("path"),jy=us(),eD=Qa(),tD=Za(),rD=af(),{handleHDBError:sD,hdb_errors:nD}=D(),iD=b(),Pu=jy.hdb_attribute,of=[];for(let e=0;e<Pu.attributes.length;e++)of.push(Pu.attributes[e].attribute);var aD="inserted";cf.exports=oD;async function oD(e){let t=eD.attribute_object(e);if(t)throw sD(new Error,t.message,nD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=iD.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 tD(e.schema,e.table,e.attribute,e.id);try{let n=await Mu.openEnvironment(zy.join(Zy(),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}`);Mu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Mu.openEnvironment(Xy(),Qy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await Jy.insertRecords(i,Pu.hash_attribute,of,[s]);return rD(aD,o,{records:[s]},c)}catch(n){throw n}}a(oD,"lmdbCreateAttribute")});var vu=h((tX,uf)=>{var{hdb_schema_table:_f}=Sr(),cD=Ee(),Bu=require("joi"),_D={undefined:"undefined",null:"null"},uD=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||_D[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),lD=Bu.object({schema:_f,table:_f,records:Bu.array().items(Bu.object().custom(uD)).required()});uf.exports=function(e){return cD.validateBySchema(e,lD)}});var ja=h((sX,Ef)=>{"use strict";var fr=b(),lf=g(),rX=vu();Ef.exports=ED;function ED(e){if(fr.isEmpty(e))throw new Error("invalid update parameters defined.");if(fr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(fr.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(fr.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(o=>{if(i&&fr.isEmptyOrZeroLength(o[r]))throw lf.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!fr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw lf.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!fr.isEmpty(o[r])&&o[r]!==""&&s.has(fr.autoCast(o[r]))&&(o.skip=!0),s.add(fr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(ED,"insertUpdateValidate")});var ri=h((nX,df)=>{"use strict";var dD=T().OPERATIONS_ENUM,eo=class{constructor(t,r,s,n,i=void 0){this.operation=dD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(eo,"InsertObject");df.exports=eo});var ro=h((aX,hf)=>{"use strict";var iX=ri(),to=T(),qu=b(),Hu=g(),hD=require("uuid"),{handleHDBError:si,hdb_errors:SD}=D(),{HDB_ERROR_MSGS:ni,HTTP_STATUS_CODES:ii}=SD;hf.exports=fD;function fD(e,t,r){for(let n=0;n<t.length;n++)TD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];mD(i,r,e.operation)}}a(fD,"processRows");function TD(e){if(Buffer.byteLength(String(e))>to.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw si(new Error,ni.ATTR_NAME_LENGTH_ERR(e),ii.BAD_REQUEST,void 0,void 0,!0);if(qu.isEmptyOrZeroLength(e)||qu.isEmpty(e.trim()))throw si(new Error,ni.ATTR_NAME_NULLISH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}a(TD,"validateAttribute");function mD(e,t,r){if(!e.hasOwnProperty(t)||qu.isEmptyOrZeroLength(e[t])){if(r===to.OPERATIONS_ENUM.INSERT||r===to.OPERATIONS_ENUM.UPSERT){e[t]=hD.v4();return}throw Hu.error("Update transaction aborted due to record with no hash value:",e),si(new Error,ni.RECORD_MISSING_HASH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>to.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Hu.error(e),si(new Error,ni.HASH_VAL_LENGTH_ERR,ii.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Hu.error(e),si(new Error,ni.INVALID_FORWARD_SLASH_IN_HASH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}a(mD,"validateHash")});var ff=h((oX,Sf)=>{"use strict";var so=class{constructor(t,r){this.type=t,this.message=r}};a(so,"IPCEventObject");Sf.exports=so});var qr=h((cX,Tf)=>{"use strict";var RD=g(),Gu=b(),AD=T(),{IPC_ERRORS:ai}=Ke();Tf.exports={sendIpcEvent:pD,validateEvent:OD,SchemaEventMsg:ND,UserEventMsg:gD};function pD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):RD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(pD,"sendIpcEvent");function OD(e){if(typeof e!="object")return ai.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Gu.isEmpty(e.type))return ai.MISSING_TYPE;if(!e.hasOwnProperty("message")||Gu.isEmpty(e.message))return ai.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Gu.isEmpty(e.message.originator))return ai.MISSING_ORIGIN;if(AD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ai.INVALID_EVENT(e.type)}a(OD,"validateEvent");function ND(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(ND,"SchemaEventMsg");function gD(e){this.originator=e}a(gD,"UserEventMsg")});var zs=h((uX,pf)=>{"use strict";var mf=T(),_X=b(),no=g(),Rf=ff(),{sendIpcEvent:Af}=qr();function ID(e){try{no.trace("signalSchemaChange called with message:",e);let t=new Rf(mf.IPC_EVENT_TYPES.SCHEMA,e);Af(t)}catch(t){no.error(t)}}a(ID,"signalSchemaChange");function bD(e){try{no.trace("signalUserChange called with message:",e);let t=new Rf(mf.IPC_EVENT_TYPES.USER,e);Af(t)}catch(t){no.error(t)}}a(bD,"signalUserChange");pf.exports={signalSchemaChange:ID,signalUserChange:bD}});var io=h((lX,Nf)=>{"use strict";var Of=b(),CD=T(),wD=g(),LD=za(),UD=Za(),yD=zs(),{SchemaEventMsg:DD}=qr(),MD="already exists in";Nf.exports=PD;async function PD(e,t,r){try{if(Of.isEmptyOrZeroLength(r))return r;let s=[];Of.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 BD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(PD,"lmdbCheckForNewAttributes");async function BD(e,t,r,s){let n=new UD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await vD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(MD))wD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(BD,"createNewAttribute");async function vD(e){let t;try{return t=await LD(e),yD.signalSchemaChange(new DD(process.pid,CD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(vD,"createAttribute")});var js=h((EX,gf)=>{"use strict";var ao=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}};a(ao,"LMDBTransactionObject");gf.exports=ao});var bf=h((dX,If)=>{"use strict";var HD=js(),qD=T().OPERATIONS_ENUM,oo=class extends HD{constructor(t,r,s,n,i=void 0){super(qD.INSERT,r,s,n,i),this.records=t}};a(oo,"LMDBInsertTransactionObject");If.exports=oo});var wf=h((hX,Cf)=>{"use strict";var GD=js(),FD=T().OPERATIONS_ENUM,co=class extends GD{constructor(t,r,s,n,i,o=void 0){super(FD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(co,"LMDBUpdateTransactionObject");Cf.exports=co});var Uf=h((SX,Lf)=>{"use strict";var VD=js(),$D=T().OPERATIONS_ENUM,_o=class extends VD{constructor(t,r,s,n,i,o=void 0){super($D.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(_o,"LMDBUpsertTransactionObject");Lf.exports=_o});var Df=h((fX,yf)=>{"use strict";var kD=js(),xD=T().OPERATIONS_ENUM,uo=class extends kD{constructor(t,r,s,n,i=void 0){super(xD.DELETE,s,n,t,i),this.original_records=r}};a(uo,"LMDBDeleteTransactionObject");yf.exports=uo});var oi=h((TX,vf)=>{"use strict";var YD=require("path"),Mf=X(),KD=bf(),WD=wf(),QD=Uf(),JD=Df(),en=Ye(),Pf=b(),{CONFIG_PARAMS:XD}=T(),Bf=Y();Bf.initSync();var lo=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZD}=te();vf.exports=zD;async function zD(e,t){if(Bf.get(XD.LOGGING_AUDITLOG)===!1)return;let r=YD.join(ZD(),e.schema.toString()),s=await Mf.openEnvironment(r,e.table,!0),n=jD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Mf.initializeDBIs(s,en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,en.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Pf.isEmpty(n.user_name)||s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(zD,"writeTransaction");function jD(e,t){let r=Pf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===lo.INSERT)return new KD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.UPDATE)return new WD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.UPSERT)return new QD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.DELETE)return new JD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jD,"createTransactionObject")});var Fu=h((RX,Hf)=>{"use strict";var eM=ja(),mX=ri(),tn=T(),tM=ro(),rM=Xs().insertRecords,sM=X(),nM=require("path"),iM=g(),aM=io(),{getBaseSchemaPath:oM}=te(),cM=oi();Hf.exports=_M;async function _M(e){try{let{schema_table:t,attributes:r}=eM(e);tM(e,r,t.hash_attribute),e.schema!==tn.SYSTEM_SCHEMA_NAME&&(r.includes(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aM(e.hdb_auth_header,t,r),n=nM.join(oM(),e.schema.toString()),i=await sM.openEnvironment(n,e.table),o=await rM(i,t.hash_attribute,r,e.records,e[tn.CLUSTERING_FLAG]!==!0);try{await cM(e,o)}catch(c){iM.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(_M,"lmdbCreateRecords")});var Ff=h((AX,Gf)=>{"use strict";var qf=T(),uM=Fu(),lM=ri(),EM=require("fs-extra"),dM=require("path"),{getBaseSchemaPath:hM}=te();Gf.exports=SM;async function SM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new lM(qf.SYSTEM_SCHEMA_NAME,qf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await uM(r),await EM.mkdirp(dM.join(hM(),e.schema.toString()))}a(SM,"lmdbCreateSchema")});var $f=h((pX,Vf)=>{"use strict";var Eo=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Eo,"DeleteRecordsResponseObject");Vf.exports=Eo});var ku=h((IX,Yf)=>{"use strict";var kf=X(),Vu=ls(),$u=Ke().LMDB_ERRORS_ENUM,fM=Ye(),xf=g(),OX=b(),TM=require("lmdb"),mM=$f(),{OVERFLOW_MARKER:NX,MAX_SEARCH_KEY_LENGTH:gX}=fM;async function RM(e,t,r){if(Vu.validateEnv(e),t===void 0)throw new Error($u.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($u.IDS_REQUIRED):new Error($u.IDS_MUST_BE_ARRAY);try{let s=kf.listDBIs(e);kf.initializeDBIs(e,t,s);let n=new mM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,TM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let z=Vu.getIndexedValues(B);if(z)for(let V=0,Q=z.length;V<Q;V++)L.remove(z[V],i)}catch{xf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){xf.warn(S),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Vu.getMicroTime(),n}catch(s){throw s}}a(RM,"deleteRecords");Yf.exports={deleteRecords:RM}});var ci=h((bX,Wf)=>{"use strict";var rn=b(),AM=ku(),pM=X(),OM=require("path"),{getBaseSchemaPath:NM}=te(),gM=oi(),IM=g();Wf.exports=bM;async function bM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(rn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(rn.isEmptyOrZeroLength(e.hash_values)&&!rn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];rn.isEmpty(_)||e.hash_values.push(_)}}if(rn.isEmptyOrZeroLength(e.hash_values))return Kf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(rn.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=OM.join(NM(),e.schema.toString()),i=await pM.openEnvironment(n,e.table),o=await AM.deleteRecords(i,s,e.hash_values);try{t===!0&&await gM(e,o)}catch(c){IM.error(`unable to write transaction due to ${c.message}`)}return Kf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(bM,"lmdbDeleteRecords");function Kf(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Kf,"createDeleteResponse")});var Yu=h((wX,Qf)=>{"use strict";var CM=T(),CX=ls();function xu(e,t){let r=Object.create(null);if(t.length===1&&CM.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(xu,"parseRow");function wM(e,t,r,s){let n=xu(r,e);s.push(n)}a(wM,"searchAll");function LM(e,t,r,s){let n=xu(r,e);s[t]=n}a(LM,"searchAllToMap");function UM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(UM,"iterateDBI");function ds(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ds,"pushResults");function yM(e,t,r,s,n,i){t.toString().endsWith(e)&&ds(t,r,s,n,i)}a(yM,"endsWith");function DM(e,t,r,s,n,i){t.toString().includes(e)&&ds(t,r,s,n,i)}a(DM,"contains");function MM(e,t,r,s,n,i){t>e&&ds(t,r,s,n,i)}a(MM,"greaterThanCompare");function PM(e,t,r,s,n,i){t>=e&&ds(t,r,s,n,i)}a(PM,"greaterThanEqualCompare");function BM(e,t,r,s,n,i){t<e&&ds(t,r,s,n,i)}a(BM,"lessThanCompare");function vM(e,t,r,s,n,i){t<=e&&ds(t,r,s,n,i)}a(vM,"lessThanEqualCompare");Qf.exports={parseRow:xu,searchAll:wM,searchAllToMap:LM,iterateDBI:UM,endsWith:yM,contains:DM,greaterThanCompare:MM,greaterThanEqualCompare:PM,lessThanCompare:BM,lessThanEqualCompare:vM,pushResults:ds}});var sn=h((yX,eT)=>{"use strict";var wt=X(),HM=g(),St=ls(),Gr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,LX=b(),qM=T(),kt=Yu(),UX=require("lmdb"),{OVERFLOW_MARKER:Jf,MAX_SEARCH_KEY_LENGTH:GM}=Gr,_i={lazy:!0};function Xf(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ku(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Xf,"iterateFullIndex");function ui(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=Ku(e,t,r);E[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))kt.pushResults(d(L,B),B,l,t,r);return l}a(ui,"iterateRangeBetween");function Ku(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(Jf)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Gr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,_i)[r]}return n}}a(Ku,"getOverflowCheck");function FM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ho(r),r=li(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))kt.searchAll(r,_,u,o);return o}a(FM,"searchAll");function VM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return ho(r),r=li(e,r),Xf(e,t,t,kt.searchAllToMap.bind(null,r),s,n,i)}a(VM,"searchAllToMap");function $M(e,t,r=!1,s=void 0,n=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Xf(e,void 0,t,kt.iterateDBI,r,s,n)}a($M,"iterateDBI");function kM(e,t){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(kM,"countAll");function xM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=wt.openDBI(e,r);s=St.convertKeyValueToWrite(s);let _=[[],[]];if(c[Gr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,_i);u!==void 0&&kt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))kt.pushResults(s,u,_,t,r);return _}a(xM,"equals");function YM(e,t,r){return Fr(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(YM,"count");function KM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=St.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))kt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))kt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(KM,"startsWith");function WM(e,t,r,s,n=!1,i=void 0,o=void 0){return Zf(e,t,r,s,n,i,o,!0)}a(WM,"endsWith");function Zf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){Fr(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Ku(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=d.toString();if(S.endsWith(Jf))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?S.endsWith(s):S.includes(s))if(u[Gr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&(kt.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(Zf,"contains");function QM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ui(e,t,r,s,_,n,i,o,!0,!1)}a(QM,"greaterThan");function JM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ui(e,t,r,s,_,n,i,o,!1,!1)}a(JM,"greaterThanEqual");function XM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ui(e,t,r,_,s,n,i,o,!1,!0)}a(XM,"lessThan");function ZM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ui(e,t,r,_,s,n,i,o,!1,!1)}a(ZM,"lessThanEqual");function zM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(St.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=St.convertKeyValueToWrite(s),n=St.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ui(e,t,r,s,n,i,o,c)}a(zM,"between");function jM(e,t,r,s){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ho(r),r=li(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?_i:void 0);return i&&(n=kt.parseRow(i,r)),n}a(jM,"searchByHash");function eP(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,_i)===void 0&&(s=!1),s}a(eP,"checkHashExists");function tP(e,t,r,s,n=[]){jf(e,t,r,s,n);let i=zf(e,t,r,s,n);return Object.values(i)}a(tP,"batchSearchByHash");function rP(e,t,r,s,n=[]){return jf(e,t,r,s,n),zf(e,t,r,s,n)}a(rP,"batchSearchByHashToMap");function zf(e,t,r,s,n=[]){r=li(e,r);let i=Object.create(null),o=r.length<3?_i:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=kt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw HM.warn(u),u}}return i}a(zf,"batchHashSearch");function jf(e,t,r,s,n){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ho(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(jf,"initializeBatchSearchByHash");function ho(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ho,"validateFetchAttributes");function Fr(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>GM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Fr,"validateComparisonFunctions");function li(e,t){return t.length===1&&qM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(li,"setGetWholeRowAttributes");eT.exports={searchAll:FM,searchAllToMap:VM,count:YM,countAll:kM,equals:xM,startsWith:KM,endsWith:WM,contains:Zf,searchByHash:jM,setGetWholeRowAttributes:li,batchSearchByHash:tP,batchSearchByHashToMap:rP,checkHashExists:eP,iterateDBI:$M,greaterThan:QM,greaterThanEqual:JM,lessThan:XM,lessThanEqual:ZM,between:zM}});var Ei=h((MX,nT)=>{var tT=require("lodash"),rT=Ee(),W=require("joi"),sP=b(),{hdb_schema_table:xt,checkValidTable:sT}=Sr(),{handleHDBError:nP,hdb_errors:iP}=D(),{HTTP_STATUS_CODES:aP}=iP,DX=W.object({schema:xt,table:xt,hash_values:W.array().min(1).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(xt).required()}),oP=W.object({schema:xt,table:xt,search_attribute:xt,search_value:W.any().required(),get_attributes:W.array().min(1).items(xt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),cP=W.object({schema:xt,table:xt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(xt).required(),conditions:W.array().min(1).items(W.object({search_attribute:xt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});nT.exports=function(e,t){let r=null;switch(t){case"value":r=rT.validateBySchema(e,oP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(sT("schema",e.schema)),i(sT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=rT.validateBySchema(e,cP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=sP.checkGlobalSchemaTable(e.schema,e.table);if(n)return nP(new Error,n,aP.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=tT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!tT.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Wu=h((PX,iT)=>{"use strict";var _P=X(),uP=Ei(),lP=require("path"),{getBaseSchemaPath:EP}=te();iT.exports=dP;function dP(e){let t=uP(e,"hashes");if(t)throw t;let r=lP.join(EP(),e.schema.toString());return _P.openEnvironment(r,e.table)}a(dP,"initialize")});var Qu=h((BX,aT)=>{"use strict";var hP=sn(),SP=Wu();aT.exports=fP;async function fP(e){try{let t=await SP(e),r=global.hdb_schema[e.schema][e.table];return hP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(fP,"lmdbGetDataByHash")});var hs=h((vX,oT)=>{"use strict";var So=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(So,"SearchByHashObject");oT.exports=So});var _T=h((qX,cT)=>{"use strict";var HX=hs(),TP=sn(),mP=Wu();cT.exports=RP;async function RP(e){try{let t=await mP(e),r=global.hdb_schema[e.schema][e.table];return TP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(RP,"lmdbSearchByHash")});var Yt=h((GX,uT)=>{"use strict";var fo=class{constructor(t,r,s,n,i,o,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=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(fo,"SearchObject");uT.exports=fo});var To=h((FX,ST)=>{"use strict";var Qe=sn(),AP=X(),pP=require("path"),OP=b(),U=Ye(),Ss=T(),{getBaseSchemaPath:NP}=te(),gP=us(),lT=Ke().LMDB_ERRORS_ENUM,{compareKeys:nn}=require("ordered-binary"),Tr=Ss.SEARCH_WILDCARDS;async function IP(e,t,r){let s;e.schema===Ss.SYSTEM_SCHEMA_NAME?s=gP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hT(e,s.hash_attribute,r,t);return ET(e,n,s.hash_attribute,r)}a(IP,"prepSearch");async function ET(e,t,r,s){let n=pP.join(NP(),e.schema.toString()),i=await AP.openEnvironment(n,e.table),o=dT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(wP(e,r)===!1)return s===!0?CP(o):o[1];let _=o[0];return s===!0?Qe.batchSearchByHashToMap(i,r,e.get_attributes,_):Qe.batchSearchByHash(i,r,e.get_attributes,_)}a(ET,"executeSearch");function dT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=Qe.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=Qe.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=Qe.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=Qe.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return Qe.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qe.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=Qe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=Qe.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=Qe.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(dT,"searchByType");function bP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return nn(i,s[0])>=0&&nn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>nn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>nn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>nn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>nn(n[r],s)<=0;default:return Object.create(null)}}a(bP,"filterByType");function CP(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}a(CP,"createMapFromArrays");function wP(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(wP,"checkToFetchMore");function hT(e,t,r,s){if(OP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(lT.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ss.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case Ss.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case Ss.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ss.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case Ss.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lT.UNKNOWN_SEARCH_TYPE)}}a(hT,"createSearchTypeFromSearchObject");ST.exports={executeSearch:ET,createSearchTypeFromSearchObject:hT,prepSearch:IP,searchByType:dT,filterByType:bP}});var TT=h(($X,fT)=>{"use strict";var VX=Yt(),LP=Ei(),UP=b(),yP=T(),DP=To();fT.exports=MP;async function MP(e,t){if(!UP.isEmpty(t)&&yP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=LP(e,"value");if(s)throw s;let n=!0;try{return await DP.prepSearch(e,t,n)}catch(i){throw i}}a(MP,"lmdbGetDataByValue")});var an=h((xX,mT)=>{"use strict";var kX=Yt(),PP=Ei(),BP=b(),vP=T(),HP=To();mT.exports=qP;async function qP(e,t){if(!BP.isEmpty(t)&&vP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PP(e,"value");if(s)throw s;let n=!1;try{return await HP.prepSearch(e,t,n)}catch(i){throw i}}a(qP,"lmdbSearchByValue")});var AT=h((KX,RT)=>{"use strict";var YX=Ye(),mo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(mo,"SearchByConditionsObject");var Ro=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Ro,"SearchCondition");var Ao=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ao,"SortAttribute");RT.exports={SearchByConditionsObject:mo,SearchCondition:Ro,SortAttribute:Ao}});var bT=h((QX,IT)=>{"use strict";var WX=AT().SearchByConditionsObject,GP=Yt(),FP=Ei(),Ju=sn(),po=Ye(),gT=To(),VP=Yu(),pT=require("lodash"),{getBaseSchemaPath:$P}=te(),kP=require("path"),xP=X(),{handleHDBError:OT,hdb_errors:YP}=D(),{HTTP_STATUS_CODES:KP}=YP,WP=1e8,QP={lazy:!0};IT.exports=JP;async function JP(e){try{let t=FP(e,"conditions");if(t)throw OT(t,t.message,KP.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=kP.join($P(),e.schema.toString()),s=await xP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=pT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===po.SEARCH_TYPES.EQUALS?o.estimated_count=Ju.count(s,o.search_attribute,o.search_value):c===po.SEARCH_TYPES.CONTAINS||c===po.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=WP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await NT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(gT.filterByType),u=_.length,l=[],E=Ju.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,QP);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(VP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await NT(s,e,_,n.hash_attribute);c.push(u)}if(o=pT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return Ju.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw OT(t)}}a(JP,"lmdbSearchByConditions");async function NT(e,t,r,s){let n=new GP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===po.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gT.searchByType(e,n,i,s)}a(NT,"executeConditionSearch")});var di=h((JX,CT)=>{"use strict";var XP=T().OPERATIONS_ENUM,Oo=class{constructor(t,r,s,n=void 0){this.operation=XP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Oo,"DeleteObject");CT.exports=Oo});var Xu=h((XX,wT)=>{"use strict";var No=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(No,"DropAttributeObject");wT.exports=No});var zu=h((zX,LT)=>{"use strict";var ZP=Yt(),zP=di(),ZX=Xu(),er=T(),jP=b(),Zu=X(),eB=us(),tB=an(),rB=ci(),{getBaseSchemaPath:sB}=te(),nB=require("path");LT.exports=iB;async function iB(e,t=!0){let r;e.schema===er.SYSTEM_SCHEMA_NAME?r=eB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oB(e),n=nB.join(sB(),e.schema.toString()),i=await Zu.openEnvironment(n,e.table);return t===!0&&await aB(e,i,r.hash_attribute),Zu.dropDBI(i,e.attribute),s}a(iB,"lmdbDropAttribute");async function aB(e,t,r){let s=Zu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(aB,"removeAttributeFromAllObjects");async function oB(e){let t=new ZP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await tB(t)).filter(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rB(i)}a(oB,"dropAttributeFromSystem")});var MT=h((jX,DT)=>{"use strict";var cB=zu(),_B=Xu(),UT=b(),yT=g(),uB=Ke().LMDB_ERRORS_ENUM;DT.exports=lB;async function lB(e){if(UT.isEmpty(global.hdb_schema[e.schema])||UT.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 _B(e.schema,e.table,r);try{await cB(n,!1)}catch(i){i.message!==uB.DBI_DOES_NOT_EXIST&&yT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw yT.error(`Error dropping attribute ${r}`),s}}a(lB,"lmdbDropAllAttributes")});var ju=h((tZ,$T)=>{"use strict";var qT=Yt(),GT=di(),FT=an(),VT=ci(),eZ=MT(),it=T(),PT=b(),BT=X(),{getBaseSchemaPath:EB,getTransactionAuditStorePath:dB}=te(),vT=require("path"),HT=g();$T.exports=hB;async function hB(e){try{if(PT.isEmpty(global.hdb_schema[e.schema])||PT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await SB(e),await fB(e);let t=vT.join(EB(),e.schema.toString());try{await BT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")HT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=vT.join(dB(),e.schema.toString());await BT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")HT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(hB,"lmdbDropTable");async function SB(e){let t=new qT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await FT(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new GT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VT(n)}a(SB,"deleteAttributesFromSystem");async function fB(e){let t=new qT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await FT(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new GT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VT(n)}catch(i){throw i}}a(fB,"dropTableFromSystem")});var xT=h((sZ,kT)=>{"use strict";var TB=require("fs-extra"),mB=Yt(),RB=hs(),AB=di(),pB=ju(),OB=ci(),NB=Qu(),gB=an(),mr=T(),rZ=b(),IB=require("path"),{getBaseSchemaPath:bB}=te(),{handleHDBError:CB,hdb_errors:wB}=D(),{HDB_ERROR_MSGS:LB,HTTP_STATUS_CODES:UB}=wB;kT.exports=yB;async function yB(e){let t;try{t=await DB(e.schema);let r=new mB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await gB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await pB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new AB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await OB(n);let i=IB.join(bB(),t.toString());await TB.remove(i)}catch(r){throw r}}a(yB,"lmdbDropSchema");async function DB(e){let t=new RB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await NB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw CB(new Error,LB.SCHEMA_NOT_FOUND(e),UB.NOT_FOUND,void 0,void 0,!0);return s}a(DB,"validateDropSchema")});var el=h((nZ,YT)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(go,"CreateTableObject");YT.exports=go});var WT=h((aZ,KT)=>{"use strict";var MB=require("path"),PB=require("fs-extra"),Io=X(),{getTransactionAuditStorePath:BB}=te(),tl=Ye(),iZ=el();KT.exports=vB;async function vB(e){let t;try{let r=MB.join(BB(),e.schema.toString());await PB.mkdirp(r),t=await Io.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{Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(vB,"createTransactionsAuditEnvironment")});var ZT=h((oZ,XT)=>{"use strict";var rl=T(),QT=X(),HB=Xs(),qB=require("path"),{getSystemSchemaPath:GB,getBaseSchemaPath:FB}=te(),VB=us(),$B=za(),sl=Za(),kB=g(),xB=WT(),il=VB.hdb_table,JT=[];for(let e=0;e<il.attributes.length;e++)JT.push(il.attributes[e].attribute);XT.exports=YB;async function YB(e,t){let r=qB.join(FB(),t.schema.toString()),s=new sl(t.schema,t.table,rl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new sl(t.schema,t.table,rl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new sl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await QT.createEnvironment(r,t.table),e!==void 0){let o=await QT.openEnvironment(GB(),rl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HB.insertRecords(o,il.hash_attribute,JT,[e]),await nl(s),await nl(n),await nl(i)}await xB(t)}catch(o){throw o}}a(YB,"lmdbCreateTable");async function nl(e){try{await $B(e)}catch(t){kB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(nl,"createAttribute")});var jT=h((cZ,zT)=>{"use strict";var KB=ja(),WB=ro(),QB=io(),on=T(),JB=Xs().updateRecords,XB=X(),ZB=require("path"),{getBaseSchemaPath:zB}=te(),jB=oi(),ev=g();zT.exports=tv;async function tv(e){try{let{schema_table:t,attributes:r}=KB(e);WB(e,r,t.hash_attribute),e.schema!==on.SYSTEM_SCHEMA_NAME&&(r.includes(on.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(on.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(on.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(on.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await QB(e.hdb_auth_header,t,r),n=ZB.join(zB(),e.schema.toString()),i=await XB.openEnvironment(n,e.table),o=await JB(i,t.hash_attribute,r,e.records,e[on.CLUSTERING_FLAG]!==!0);try{await jB(e,o)}catch(c){ev.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(tv,"lmdbUpdateRecords")});var tm=h((_Z,em)=>{"use strict";var rv=T().OPERATIONS_ENUM,bo=class{constructor(t,r,s,n=void 0){this.operation=rv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(bo,"UpsertObject");em.exports=bo});var sm=h((lZ,rm)=>{"use strict";var uZ=tm(),sv=ja(),nv=ro(),iv=io(),cn=T(),av=Xs().upsertRecords,ov=X(),cv=require("path"),{getBaseSchemaPath:_v}=te(),uv=oi(),lv=g(),{handleHDBError:Ev,hdb_errors:dv}=D();rm.exports=hv;async function hv(e){let t;try{t=sv(e)}catch(_){throw Ev(_,_.message,dv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;nv(e,s,r.hash_attribute),e.schema!==cn.SYSTEM_SCHEMA_NAME&&(s.includes(cn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(cn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(cn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(cn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await iv(e.hdb_auth_header,r,s),i=cv.join(_v(),e.schema.toString()),o=await ov.openEnvironment(i,e.table),c=await av(o,r.hash_attribute,s,e.records,e[cn.CLUSTERING_FLAG]!==!0);try{await uv(e,c)}catch(_){lv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(hv,"lmdbUpsertRecords")});var _m=h((EZ,cm)=>{"use strict";var Sv=Yt(),nm=b(),im=g(),fv=an(),am=T(),Tv=ku().deleteRecords,mv=X(),Rv=require("path"),{getBaseSchemaPath:Av}=te(),{promisify:pv}=require("util"),Ov=pv(setTimeout),om=1e4,Nv=10;cm.exports=gv;async function gv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(nm.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 Sv(e.schema,e.table,am.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await fv(n,am.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw im.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return nm.isEmptyOrZeroLength(s)?(im.trace("No records found to delete"),{message:"No records found to delete"}):await Iv(e,s,t)}a(gv,"lmdbDeleteRecordsBefore");async function Iv(e,t,r){let s=Rv.join(Av(),e.schema.toString()),n=await mv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=om){let _=t.slice(o,o+om),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await Tv(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 Ov(Nv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Iv,"chunkDeletes")});var lm=h((dZ,um)=>{"use strict";var Co=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Co,"DeleteBeforeObject");um.exports=Co});var dm=h((hZ,Em)=>{"use strict";var wo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(wo,"DeleteAuditLogsBeforeResults");Em.exports=wo});var fm=h((fZ,Sm)=>{"use strict";var al=X(),{getTransactionAuditStorePath:bv}=te(),SZ=lm(),Cv=require("path"),hi=Ye(),wv=b(),hm=dm(),Lv=require("util").promisify,Uv=Lv(setTimeout),yv=1e4,Dv=100;Sm.exports=Mv;async function Mv(e){let t=Cv.join(bv(),e.schema),r=await al.openEnvironment(t,e.table,!0),s=al.listDBIs(r);al.initializeDBIs(r,hi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new hm;do n=await Pv(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 Uv(Dv);while(n.transactions_deleted>0);return i}a(Mv,"deleteAuditLogsBefore");async function Pv(e,t){let r=new hm;try{let s=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wv.isEmpty(c)||(n=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yv)break}return await n,r}catch(s){throw s}}a(Pv,"deleteTransactions")});var Nm=h((TZ,Om)=>{"use strict";var ol=X(),_n=Ye(),Tm=ls(),cl=T(),mm=b(),{getTransactionAuditStorePath:Bv}=te(),vv=require("path"),Hv=sn(),Lo=js(),qv=g();Om.exports=Gv;async function Gv(e){let t=vv.join(Bv(),e.schema),r=await ol.openEnvironment(t,e.table,!0),s=ol.listDBIs(r);ol.initializeDBIs(r,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Rm(r,e.search_values);case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Vv(r,e.search_values,n);case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Fv(r,e.search_values);default:return Rm(r)}}a(Gv,"readAuditLog");function Rm(e,t=[0,Tm.getMicroTime()]){mm.isEmpty(t[0])&&(t[0]=0),mm.isEmpty(t[1])&&(t[1]=Tm.getMicroTime());let r=[];try{let s=e.dbis[_n.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 o=Object.assign(new Lo,i);r.push(o)}return r}catch(s){throw s}}a(Rm,"searchTransactionsByTimestamp");function Fv(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,pm(e,i))}return Object.fromEntries(r)}a(Fv,"searchTransactionsByUsername");function Vv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=Hv.equals(e,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=pm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Am(_,"records",r,l,o),Am(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(Vv,"searchTransactionsByHashValues");function Am(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new Lo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Lo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Am,"loopRecords");function pm(e,t){let r=[];try{let s=e.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Lo,i);r.push(o)}}catch(i){qv.warn(i)}return r}catch(s){throw s}}a(pm,"batchSearchTransactions")});var Im=h((mZ,gm)=>{"use strict";var $v=require("path"),{getBaseSchemaPath:kv}=te(),xv=X();gm.exports={writeTransaction:Yv};async function Yv(e,t,r){let s=$v.join(kv(),e);return(await xv.openEnvironment(s,t)).transaction(r)}a(Yv,"writeTransaction")});var Cm=h((RZ,bm)=>{"use strict";var Kv=require("path"),{getBaseSchemaPath:Wv}=te(),Qv=X();bm.exports={flush:Jv};async function Jv(e,t){let r=Kv.join(Wv(),e.toString());return(await Qv.openEnvironment(r,t.toString())).flushed}a(Jv,"flush")});var Lm=h((AZ,wm)=>{"use strict";var Re=g(),{handleHDBError:Xv}=D(),Zv=mu(),zv=za(),jv=Fu(),eH=Ff(),tH=ci(),rH=Qu(),sH=_T(),nH=TT(),iH=an(),aH=bT(),oH=xT(),cH=ZT(),_H=jT(),uH=sm(),lH=_m(),EH=fm(),dH=ju(),hH=zu(),SH=Nm(),fH=Im(),TH=Cm(),Uo=class extends Zv{async searchByConditions(t){try{return aH(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await rH(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await sH(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await nH(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await iH(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await eH(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await oH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await cH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await dH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await zv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await jv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await _H(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await uH(t)}catch(r){throw Xv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await tH(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await lH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await hH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await EH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await SH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return fH.writeTransaction(t,r,s)}flush(t,r){return TH.flush(t,r)}};a(Uo,"LMDBBridge");wm.exports=Uo});var Rr=h((pZ,ym)=>{"use strict";var mH=Lm(),RH=mu(),AH=Y();AH.initSync();var Um;function pH(){return Um instanceof RH?Um:new mH}a(pH,"getBridge");ym.exports=pH()});var Bm=h((OZ,Pm)=>{"use strict";var Dm=require("lodash"),Si=require("mathjs"),OH=require("jsonata"),Mm=b();Pm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Dm.uniqWith(e,Dm.isEqual):e,searchJSON:NH,mad:fi.bind(null,Si.mad),mean:fi.bind(null,Si.mean),mode:fi.bind(null,Si.mode),prod:fi.bind(null,Si.prod),median:fi.bind(null,Si.median)};function fi(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(fi,"aggregateFunction");function NH(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(Mm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Mm.isEmpty(this.__ala__.res[r])){let s=OH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(NH,"searchJSON")});var Hm=h((NZ,vm)=>{"use strict";var de=require("moment"),_l="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;vm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(_l),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(_l),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(_l)}});var Vm=h((gZ,Fm)=>{"use strict";var gH=require("@turf/area"),IH=require("@turf/length"),bH=require("@turf/circle"),CH=require("@turf/difference"),wH=require("@turf/distance"),LH=require("@turf/boolean-contains"),UH=require("@turf/boolean-equal"),yH=require("@turf/boolean-disjoint"),DH=require("@turf/helpers"),qm=T(),$=b();Fm.exports={geoArea:MH,geoLength:PH,geoCircle:BH,geoDifference:vH,geoDistance:Gm,geoNear:HH,geoContains:qH,geoEqual:GH,geoCrosses:FH,geoConvert:VH};var ul="geo1 is required",ll="geo2 is required";function MH(e){if($.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=$.autoCast(e)),gH.default(e)}a(MH,"geoArea");function PH(e,t){if($.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=$.autoCast(e)),IH.default(e,{units:t||"kilometers"})}a(PH,"geoLength");function BH(e,t,r){if($.isEmpty(e))throw new Error("point is required");if($.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=$.autoCast(e)),bH.default(e,t,{units:r||"kilometers"})}a(BH,"geoCircle");function vH(e,t){if($.isEmpty(e))throw new Error("poly1 is required");if($.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),CH(e,t)}a(vH,"geoDifference");function Gm(e,t,r){if($.isEmpty(e))throw new Error("point1 is required");if($.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),wH.default(e,t,{units:r||"kilometers"})}a(Gm,"geoDistance");function HH(e,t,r,s){if($.isEmpty(e))throw new Error("point1 is required");if($.isEmpty(t))throw new Error("point2 is required");if($.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Gm(e,t,s)<=r}a(HH,"geoNear");function qH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),LH.default(e,t)}a(qH,"geoContains");function GH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),UH.default(e,t)}a(GH,"geoEqual");function FH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),!yH.default(e,t)}a(FH,"geoCrosses");function VH(e,t,r){if($.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($.isEmpty(t))throw new Error("geo_type is required");if($.isEmpty(qm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qm.GEO_CONVERSION_ENUM).join(",")}`);return DH[t](e,r)}a(VH,"geoConvert")});var yo=h((IZ,$m)=>{var fs=Bm(),ft=Hm(),tr=Vm();$m.exports=e=>{e.aggr.mad=e.aggr.MAD=fs.mad,e.aggr.mean=e.aggr.MEAN=fs.mean,e.aggr.mode=e.aggr.MODE=fs.mode,e.aggr.prod=e.aggr.PROD=fs.prod,e.aggr.median=e.aggr.MEDIAN=fs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=fs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=fs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ft.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ft.current_time,e.fn.extract=e.fn.EXTRACT=ft.extract,e.fn.date=e.fn.DATE=ft.date,e.fn.date_format=e.fn.DATE_FORMAT=ft.date_format,e.fn.date_add=e.fn.DATE_ADD=ft.date_add,e.fn.date_sub=e.fn.DATE_SUB=ft.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ft.date_diff,e.fn.now=e.fn.NOW=ft.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ft.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ft.get_server_time,e.fn.getdate=e.fn.GETDATE=ft.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ft.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tr.geoNear}});var Ym=h((bZ,xm)=>{"use strict";var Ti=require("lodash"),Me=require("alasql");Me.options.cache=!1;var $H=yo(),km=require("clone"),Do=require("recursive-iterator"),v=g(),q=b(),un=Rr(),kH=T(),{hdb_errors:xH}=D(),YH="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";$H(Me);var Mo=class{constructor(t,r){if(q.isEmpty(t))throw v.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(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(mi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(mi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(mi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(mi)}}_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(km(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ti.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(q.isEmpty(this.statement.where)){v.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),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.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 o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!q.isEmpty(kH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(q.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.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&&Ti.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(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.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(km(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(q.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(YH)>-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=Ti.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await un.getDataByHash(c);for(let E of c.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){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await un.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(S)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await un.getDataByValue(c,S.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await un.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.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,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.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 Me.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.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 Me.yy.FuncValue:new Me.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 m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=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 d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Ti.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.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 o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ti.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){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.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,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await un.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).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();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.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 v.error(xH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await un.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Mo,"SQLSearch");xm.exports=Mo});var Tt=h((CZ,Wm)=>{"use strict";var KH=TS();Wm.exports={searchByConditions:XH,searchByHash:ZH,searchByValue:zH,search:jH};var El=Rr(),Km=require("util"),WH=Km.callbackify(El.searchByHash),QH=Km.callbackify(El.searchByValue),JH=Ym();async function XH(e){return El.searchByConditions(e)}a(XH,"searchByConditions");function ZH(e,t){try{WH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ZH,"searchByHash");function zH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),QH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(zH,"searchByValue");function jH(e,t){try{let r=new KH(e);r.validate(),new JH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jH,"search")});var Vr=h((wZ,Zm)=>{"use strict";var Ri=require("crypto"),Jm="aes-256-cbc",eq=32,tq=16,dl=64,Xm=32,rq=dl+Xm,Qm=new Map;Zm.exports={encrypt:sq,decrypt:nq,createNatsTableStreamName:iq};function sq(e){let t=Ri.randomBytes(eq),r=Ri.randomBytes(tq),s=Ri.createCipheriv(Jm,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(sq,"encrypt");function nq(e){let t=e.substr(0,dl),r=e.substr(dl,Xm),s=e.substr(rq,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ri.createDecipheriv(Jm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(nq,"decrypt");function iq(e,t){let r=`${e}.${t}`,s=Qm.get(r);return s||(s=Ri.createHash("md5").update(`${e}.${t}`).digest("hex"),Qm.set(r,s)),s}a(iq,"createNatsTableStreamName")});var Ts=h((LZ,nR)=>{"use strict";var jm=Tt(),$r=g(),eR=Qa(),aq=require("lodash"),oq=require("path"),cq=Vr(),hl=b(),{promisify:tR}=require("util"),j=T(),{handleHDBError:Po,hdb_errors:_q}=D(),{HDB_ERROR_MSGS:Bo,HTTP_STATUS_CODES:rR}=_q,uq=Y();uq.initSync();var zm=X(),lq=te(),Ai=tR(jm.searchByValue),Eq=tR(jm.searchByHash),ln="name",sR="hash_attribute",Sl="schema",dq="schema_table",hq="attribute";nR.exports={describeAll:Sq,describeTable:vo,describeSchema:Tq};async function Sq(e){try{let t=hl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:ln,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[ln]},i=await Ai(n);if(hl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[sR,j.ID_ATTRIBUTE_STRING,ln,Sl]},u=await Ai(_),l=[];for(let d of u)try{let S;if(t||s)S=await vo({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;S=await vo({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){$r.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return $r.error("Got an error in describeAll"),$r.error(t),Po(new Error,Bo.DESCRIBE_ALL_ERR)}}a(Sq,"describeAll");async function vo(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={},o=eR.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ln,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await Ai(c);if(!_||_.length===0)throw Po(new Error,Bo.TABLE_NOT_FOUND(e.schema,e.table),rR.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Po(new Error,Bo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dq,search_value:r+"."+s,get_attributes:[hq]},E=await Ai(l);E=aq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=fq(n)),i.attributes=E,i.clustering_stream_name=cq.createNatsTableStreamName(u.schema,u.name);try{let d=oq.join(lq.getBaseSchemaPath(),i.schema.toString()),S=await zm.openEnvironment(d,i.name),m=zm.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){$r.warn(`unable to stat table dbi due to ${d}`)}}catch(l){$r.error(`There was an error getting attributes for table '${u.name}'`),$r.error(l)}return i}a(vo,"descTable");function fq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(fq,"getAttrsByPerms");async function Tq(e){let t=eR.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:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sl,search_value:s,hash_values:[],get_attributes:[sR,j.ID_ATTRIBUTE_STRING,ln,Sl]},i=await Ai(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[ln]},c=await Eq(o);if(c&&c.length<1)throw Po(new Error,Bo.SCHEMA_NOT_FOUND(e.schema),rR.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),hl.isEmpty(_)||_.describe){let u=await vo({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){$r.error(`Error describing schema table '${e.schema}.${c}'`),$r.error(_)}})),o}}a(Tq,"describeSchema")});var kr=h((DZ,_R)=>{var UZ=require("async"),En=us(),yZ=g(),{callbackify:oR,promisify:mq}=require("util");_R.exports={setSchemaDataToGlobal:iR,getTableSchema:pq,getSystemSchema:Nq,setSchemaDataToGlobalAsync:mq(iR)};var cR=Ts(),Rq=oR(cR.describeAll),Aq=oR(cR.describeTable);function iR(e){Rq(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=En),global.hdb_schema=r,e(null,null)})}a(iR,"setSchemaDataToGlobal");function aR(e,t){return e==="system"?En[t]:global.hdb_schema[e][t]}a(aR,"returnSchema");function pq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Oq(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,aR(e,t))}):r(null,aR(e,t))}a(pq,"getTableSchema");function Oq(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=En:global.hdb_schema={system:En},r();return}Aq(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:En}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Oq,"setTableDataToGlobal");function Nq(){return En}a(Nq,"getSystemSchema")});var Ut=h((MZ,ER)=>{"use strict";var qo=vu(),Lt=b(),gq=require("util"),Go=Rr(),Iq=kr(),fl=g(),{handleHDBError:xr,hdb_errors:bq}=D(),{HTTP_STATUS_CODES:ms}=bq,Cq=gq.promisify(Iq.getTableSchema),wq="updated",uR="inserted",lR="upserted";ER.exports={insert:Uq,update:yq,upsert:Dq,validation:Lq,flush:Mq};async function Lq(e){if(Lt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Lt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cq(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={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lt.isEmptyOrZeroLength(c[s]))throw fl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Lt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Lt.isEmpty(c[s])&&c[s]!==""&&n.has(Lt.autoCast(c[s]))&&(c.skip=!0),n.add(Lt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Lq,"validation");async function Uq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.createRecords(e);return Ho(uR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Uq,"insertData");async function yq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.updateRecords(e);return Lt.isEmpty(s.existing_rows)?Ho(wq,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(yq,"updateData");async function Dq(e){if(e.operation!=="upsert")throw xr(new Error,"invalid operation, must be upsert",ms.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.upsertRecords(e);return Ho(lR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw xr(s,null,null,fl.ERR,n)}}a(Dq,"upsertData");function Ho(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===uR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===lR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Mq(e){return Go.flush(e.schema,e.table)}a(Mq,"flush")});var ml=h((PZ,SR)=>{var Pq=Ee(),Tl=require("joi"),{hdb_schema_table:dR}=Sr(),hR={schema:dR,table:dR},Bq={date:Tl.date().iso().required()},vq={timestamp:Tl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};SR.exports=function(e,t){let r=t==="timestamp"?{...hR,...vq}:{...hR,...Bq},s=Tl.object(r);return Pq.validateBySchema(e,s)}});var RR=h((BZ,mR)=>{var Hq=Ee(),fR=require("joi"),{hdb_schema_table:TR}=Sr(),qq=fR.object({schema:TR,table:TR,hash_values:fR.array().required()});mR.exports=function(e){return Hq.validateBySchema(e,qq)}});var pR=h((vZ,AR)=>{"use strict";var Fo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Fo,"InsertObject");var Vo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(Vo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");AR.exports={InsertObject:Fo,NoSQLSeachObject:Vo,DeleteResponseObject:$o}});var As=h((HZ,bR)=>{"use strict";var NR=ml(),Gq=RR(),ko=b(),OR=require("moment"),gR=g(),{promisify:Fq,callbackify:Vq}=require("util"),Rs=T(),$q=kr(),Rl=Fq($q.getTableSchema),Al=Rr(),{DeleteResponseObject:kq}=pR(),{handleHDBError:Yr,hdb_errors:xq}=D(),{HDB_ERROR_MSGS:xo,HTTP_STATUS_CODES:Kr}=xq,Yq="records successfully deleted",Kq=Vq(IR);bR.exports={delete:Kq,deleteRecord:IR,deleteFilesBefore:Wq,deleteAuditLogsBefore:Qq};async function Wq(e){let t=NR(e,"date");if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);if(!OR(e.date,OR.ISO_8601).isValid())throw Yr(new Error,xo.INVALID_DATE,Kr.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,xo.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw Yr(new Error,s,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,s,!0);try{let n=await Al.deleteRecordsBefore(e);if(await Rl(e.schema,e.table),gR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Wq,"deleteFilesBefore");async function Qq(e){let t=NR(e,"timestamp");if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Yr(new Error,xo.INVALID_VALUE("Timestamp"),Kr.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,xo.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw Yr(new Error,r,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,r,!0);try{let s=await Al.deleteAuditLogsBefore(e);return await Rl(e.schema,e.table),gR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Qq,"deleteAuditLogsBefore");async function IR(e){let t=Gq(e);if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw Yr(new Error,r,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,r,!0);try{await Rl(e.schema,e.table);let s=await Al.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Yq}`),s}catch(s){if(s.message===Rs.SEARCH_NOT_FOUND_MESSAGE){let n=new kq;return n.message=Rs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(IR,"deleteRecord")});var Yo=h((qZ,LR)=>{var Jq=require("crypto"),CR=9;function Xq(e){let t=zq(CR),r=wR(e+t);return t+r}a(Xq,"createHash");function Zq(e,t){let r=e.substr(0,CR),s=r+wR(t+r);return e===s}a(Zq,"validateHash");function zq(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(zq,"generateSalt");function wR(e){return Jq.createHash("md5").update(e).digest("hex")}a(wR,"md5");LR.exports={hash:Xq,validate:Zq}});var yR=h((GZ,UR)=>{var pl=Ee(),Je={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 jq(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,pl.validateObject(e,Je)}a(jq,"addUserValidation");function eG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,pl.validateObject(e,Je)}a(eG,"alterUserValidation");function tG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,pl.validateObject(e,Je)}a(tG,"dropUserValidation");UR.exports={addUserValidation:jq,alterUserValidation:eG,dropUserValidation:tG}});var he=h((VZ,MR)=>{"use strict";var{platform:FZ}=require("os"),rG="nats-server.zip",Ol="nats-server",sG=process.platform==="win32"?`${Ol}.exe`:Ol,Nl="HDB",nG=/^[^\s.,*>]+$/,DR="__request__",iG=a(e=>`${e}.${DR}`,"REQUEST_SUBJECT"),aG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},oG={HUB:"hub.pid",LEAF:"leaf.pid"},cG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},_G={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Nl,deliver_subject:"__HDB__.WORKQUEUE"},uG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Nl,deliver_subject:"HDB.SCHEMAQUEUE"},lG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Nl,deliver_subject:"HDB.USERQUEUE"},EG={SUCCESS:"success",ERROR:"error"},dG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},hG={TXN:"txn",MSGID:"msgid"};MR.exports={NATS_SERVER_ZIP:rG,NATS_SERVER_NAME:Ol,NATS_BINARY_NAME:sG,PID_FILES:oG,NATS_CONFIG_FILES:aG,SERVER_SUFFIX:cG,WORK_QUEUE_CONSUMER_NAMES:_G,SCHEMA_QUEUE_CONSUMER_NAMES:uG,USER_QUEUE_CONSUMER_NAMES:lG,NATS_TERM_CONSTRAINTS_RX:nG,REQUEST_SUFFIX:DR,UPDATE_REMOTE_RESPONSE_STATUSES:EG,CLUSTER_STATUS_STATUSES:dG,REQUEST_SUBJECT:iG,SUBJECT_PREFIXES:hG}});var BR=h(($Z,PR)=>{"use strict";var Wr=T(),pi=class{constructor(t=0,r=Wr.STORAGE_TYPES_ENUM.LMDB,s=Wr.LICENSE_VALUES.API_CALL_DEFAULT,n=Wr.RAM_ALLOCATION_ENUM.DEFAULT,i=Wr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(pi,"BaseLicense");var Ko=class extends pi{constructor(t=0,r=Wr.STORAGE_TYPES_ENUM.LMDB,s=Wr.LICENSE_VALUES.API_CALL_DEFAULT,n=Wr.RAM_ALLOCATION_ENUM.DEFAULT,i=Wr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Ko,"ExtendedLicense");PR.exports={BaseLicense:pi,ExtendedLicense:Ko}});var Sn=h((kZ,VR)=>{"use strict";var hn=require("fs-extra"),vR=Yo(),HR=require("crypto"),SG=require("moment"),fG=require("uuid").v4,Xe=g(),Il=require("path"),TG=b(),mt=T(),mG=BR().ExtendedLicense,dn="invalid license key format",RG="061183",AG="mofi25",pG="aes-256-cbc",OG=16,NG=32,qR=Y();qR.initSync();var gl;VR.exports={validateLicense:GR,generateFingerPrint:IG,licenseSearch:FR,getLicense:wG};function bl(){return Il.join(qR.getHdbBasePath(),mt.LICENSE_KEY_DIR_NAME,mt.LICENSE_FILE_NAME)}a(bl,"getLicenseDirPath");function gG(){let e=bl();return Il.join(e,mt.LICENSE_FILE_NAME)}a(gG,"getLicenseFilePath");function Cl(){let e=bl();return Il.join(e,mt.REG_KEY_FILE_NAME)}a(Cl,"getFingerPrintFilePath");async function IG(){let e=Cl();try{return await hn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await bG();throw Xe.error(`Error writing fingerprint file to ${e}`),Xe.error(t),new Error("There was an error generating the fingerprint")}}a(IG,"generateFingerPrint");async function bG(){let e=fG(),t=vR.hash(e),r=Cl();try{await hn.mkdirp(bl()),await hn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Xe.error(`Error writing fingerprint file to ${r}`),Xe.error(s),new Error("There was an error generating the fingerprint")}return t}a(bG,"writeFingerprint");function GR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:mt.STORAGE_TYPES_ENUM.LMDB,api_call:mt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:mt.RAM_ALLOCATION_ENUM.DEFAULT,version:mt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Xe.error("empty license key passed to validate."),r;let s=Cl(),n=!1;try{n=hn.statSync(s)}catch(i){Xe.error(i)}if(n){let i;try{i=hn.readFileSync(s,"utf8")}catch{Xe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(AG),c=o[1];c=Buffer.concat([Buffer.from(c)],OG);let _=Buffer.concat([Buffer.from(i)],NG),u=HR.createDecipheriv(pG,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=CG(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(dn),Xe.error(dn),new Error(dn)}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(dn),Xe.error(dn),new Error(dn)}else r.exp_date=l;r.exp_date<SG().valueOf()&&(r.valid_date=!1),vR.validate(o[1],`${RG}${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||Xe.error("Invalid licence"),r}a(GR,"validateLicense");function CG(e,t){try{let r=HR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Xe.warn("Check old license failed")}}a(CG,"checkOldLicense");function FR(){let e=new mG;e.api_call=0;let t=[];try{t=hn.readFileSync(gG(),"utf-8").split(mt.NEW_LINE)}catch(r){r.code==="ENOENT"?Xe.info("no license file found"):Xe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(TG.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=GR(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){Xe.error("There was an error parsing the license string."),Xe.error(n),e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=mt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=mt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT),gl=e,e}a(FR,"licenseSearch");async function wG(){return gl||await FR(),gl}a(wG,"getLicense")});var Ar=h((xZ,tA)=>{"use strict";var YR="username is required",KR="nothing to update, must supply active, role or password to update",WR="password cannot be an empty string",QR="If role is specified, it cannot be empty.",JR="active must be true or false";tA.exports={addUser:vG,alterUser:HG,dropUser:GG,userInfo:FG,listUsers:Qo,listUsersExternal:VG,setUsersToGlobal:Oi,findAndValidateUser:xG,getClusterUser:YG,USERNAME_REQUIRED:YR,ALTERUSER_NOTHING_TO_UPDATE:KR,EMPTY_PASSWORD:WR,EMPTY_ROLE:QR,ACTIVE_BOOLEAN:JR};var XR=Ut(),LG=As(),Ll=Yo(),ZR=yR(),zR=Tt(),Ul=zs(),be=b(),jR=require("validate.js"),H=g(),{promisify:yl}=require("util"),Dl=Vr(),ps=T(),$R=he(),UG=dr(),Ml=Y(),yG=Sn(),DG=us(),{handleHDBError:rr,hdb_errors:MG}=D(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:wl,HDB_ERROR_MSGS:fn}=MG,{UserEventMsg:Pl}=qr(),kR=require("lodash"),eA={username:!0,active:!0,role:!0,password:!0},xR=new Map,Wo=yl(zR.searchByValue),PG=yl(zR.searchByHash),BG=yl(LG.delete);async function vG(e){let t=jR.cleanAttributes(e,eA),r=ZR.addUserValidation(t);if(r)throw rr(new Error,r.message,sr.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 Wo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw rr(new Error,fn.ROLE_NAME_NOT_FOUND(t.role),sr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rr(new Error,fn.DUP_ROLES_FOUND(t.role),sr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Dl.encrypt(t.password)),t.password=Ll.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XR.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Oi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw rr(new Error,fn.USER_ALREADY_EXISTS(t.username),sr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.ADD_USER,_,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),`${c.username} successfully added`}a(vG,"addUser");async function HG(e){let t=jR.cleanAttributes(e,eA);if(be.isEmptyOrZeroLength(t.username))throw new Error(YR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(KR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(WR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(JR);let r=qG(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Dl.encrypt(t.password)),t.password=Ll.hash(t.password)),t.role==="")throw new Error(QR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Wo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=fn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),rr(new Error,_,sr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=fn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),rr(new Error,_,sr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await XR.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Oi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.ALTER_USER,i,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),n}a(HG,"alterUser");function qG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(qG,"isClusterUser");async function GG(e){try{let t=ZR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw rr(new Error,fn.USER_NOT_EXIST(e.username),sr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await BG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Oi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.DROP_USER,n,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(GG,"dropUser");async function FG(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 PG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(FG,"userInfo");async function VG(){let e;try{e=await Qo()}catch(t){throw H.error("Got an error listing users."),H.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(VG,"listUsersExternal");async function Qo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=kR.cloneDeep(await Wo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=kR.cloneDeep(await Wo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],$G(c.role),i.set(c.username,c)}return(await yG.getLicense()).enterprise?i:kG(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Qo,"listUsers");function $G(e){try{if(!e){H.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(DG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a($G,"appendSystemTablesToRole");function kG(e){try{if(H.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?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(kG,"nonEnterpriseFilter");async function Oi(){try{let e=await Qo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Oi,"setUsersToGlobal");async function xG(e,t,r=!0){global.hdb_users||await Oi();let s=global.hdb_users.get(e);if(!s)throw rr(new Error,wl.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rr(new Error,wl.USER_INACTIVE,sr.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(xR.get(t)===s.password)return n;if(Ll.validate(s.password,t))xR.set(t,s.password);else throw rr(new Error,wl.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(xG,"findAndValidateUser");async function YG(){let e=await Qo(),t=UG.getConfigFromFile(ps.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=Dl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+$R.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+$R.SERVER_SUFFIX.ADMIN,r}a(YG,"getClusterUser")});var nA=h((YZ,sA)=>{"use strict";var Bl=X(),KG=g(),rA=Ke().LMDB_ERRORS_ENUM;sA.exports=WG;async function WG(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==rA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Bl.closeEnvironment(global.lmdb_map[s]),await Bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==rA.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){KG.error(t)}}a(WG,"cleanLMDBMap")});var _A=h((KZ,cA)=>{"use strict";var Os=g(),Jo=T(),QG=nA(),iA=kr(),JG=Ts(),XG=Ar(),{validateEvent:oA}=qr(),ZG={[Jo.IPC_EVENT_TYPES.SCHEMA]:zG,[Jo.IPC_EVENT_TYPES.USER]:eF};async function zG(e){let t=oA(e);if(t){Os.error(t);return}Os.trace(`IPC schemaHandler ${Jo.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await QG(e.message),await jG(e.message)}a(zG,"schemaHandler");async function jG(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await JG.describeTable({schema:e.schema,table:e.table});break;default:iA.setSchemaDataToGlobal(aA);break}else iA.setSchemaDataToGlobal(aA)}catch(t){Os.error(t)}}a(jG,"syncSchemaMetadata");function aA(e){e&&Os.error(e)}a(aA,"handleErrorCallback");async function eF(e){try{let t=oA(e);if(t){Os.error(t);return}Os.trace(`IPC userHandler ${Jo.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await XG.setUsersToGlobal()}catch(t){Os.error(t)}}a(eF,"userHandler");cA.exports=ZG});var dA=h((WZ,EA)=>{"use strict";var tF=require("node-ipc").IPC,uA=b(),lA=T(),pr=g(),{IPC_ERRORS:Tn}=Ke(),rF=require("os"),Xo=class{constructor(t,r){this.ipc=new tF,this.server_name=lA.HDB_IPC_SERVER,this.ipc.config.retry=rF.platform()=="win32"?6e5:100,this.ipc.config.id=lA.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{pr.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{pr.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&pr.warn("Error connecting to HDB IPC server. Confirm that the server is running."),pr.warn(`Error with IPC client ${this.ipc.config.id}`),pr.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw pr.warn(Tn.INVALID_IPC_DATA_TYPE),new Error(Tn.INVALID_IPC_DATA_TYPE);if(uA.isEmpty(t.type))throw pr.warn(Tn.MISSING_TYPE),new Error(Tn.MISSING_TYPE);if(uA.isEmpty(t.message))throw pr.warn(Tn.MISSING_MSG),new Error(Tn.MISSING_MSG);pr.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(Xo,"IPCClient");EA.exports=Xo});var SA=h((QZ,hA)=>{var sF=Ee(),nF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};hA.exports=function(e){return sF.validateObject(e,nF)}});var vl=h((JZ,fA)=>{"use strict";var iF=T().OPERATIONS_ENUM,Zo=class{constructor(t,r,s,n=void 0){this.operation=iF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Zo,"UpdateObject");fA.exports=Zo});var mA=h((XZ,TA)=>{"use strict";var aF={OPERATION:"operation",REFRESH:"refresh"},zo=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(zo,"JWTTokens");var jo=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(jo,"JWTRSAKeys");TA.exports={JWTTokens:zo,TOKEN_TYPE_ENUM:aF,JWTRSAKeys:jo}});var sc=h((ZZ,OA)=>{"use strict";var gi=require("jsonwebtoken"),Hl=require("fs-extra"),ql=b(),yt=T(),{handleHDBError:at,hdb_errors:oF}=D(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:ct}=oF,Ni=g(),RA=Yo(),Vl=Ar(),cF=Ut().update,_F=vl(),uF=zs(),{UserEventMsg:lF}=qr(),Qr=Y();Qr.initSync();var Gl=require("path"),{JWTTokens:EF,JWTRSAKeys:dF,TOKEN_TYPE_ENUM:ec}=mA(),hF=Qr.get(yt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Qr.get(yt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",SF=Qr.get(yt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Qr.get(yt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",tc="RS256",Fl;OA.exports={createTokens:fF,validateOperationToken:mF,refreshOperationToken:TF,validateRefreshToken:pA};async function fF(e){if(ql.isEmpty(e)||typeof e!="object")throw at(new Error,ct.INVALID_AUTH_OBJECT,ot.BAD_REQUEST,void 0,void 0,!0);if(ql.isEmpty(e.username))throw at(new Error,ct.USERNAME_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);if(ql.isEmpty(e.password))throw at(new Error,ct.PASSWORD_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Vl.findAndValidateUser(e.username,e.password),!t)throw at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ni.error(d),at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}let r=await rc(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await AA(i,r.private_key,r.passphrase),c=await gi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:SF,algorithm:tc,subject:ec.REFRESH}),_=RA.hash(c),u=new _F(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await cF(u)}catch(d){Ni.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw at(new Error,ct.REFRESH_TOKEN_SAVE_FAILED,ot.INTERNAL_SERVER_ERROR);return uF.signalUserChange(new lF(process.pid)),new EF(o,c)}a(fF,"createTokens");async function AA(e,t,r){return await gi.sign(e,{key:t,passphrase:r},{expiresIn:hF,algorithm:tc,subject:ec.OPERATION})}a(AA,"signOperationToken");async function rc(){if(Fl===void 0)try{let e=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Hl.readFile(e)).toString(),n=(await Hl.readFile(t)).toString(),i=(await Hl.readFile(r)).toString();Fl=new dF(i,n,s)}catch(e){throw Ni.error(e),at(new Error,ct.NO_ENCRYPTION_KEYS,ot.INTERNAL_SERVER_ERROR)}return Fl}a(rc,"getJWTRSAKeys");async function TF(e){if(!e)throw at(new Error,ct.INVALID_BODY,ot.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw at(new Error,ct.REFRESH_TOKEN_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);await pA(e.refresh_token);let t=await rc(),r=await gi.decode(e.refresh_token);return{operation_token:await AA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(TF,"refreshOperationToken");async function mF(e){try{let t=await rc(),r=await gi.verify(e,t.public_key,{algorithms:tc,subject:ec.OPERATION});return await Vl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ni.warn(t),t.name&&t.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}}a(mF,"validateOperationToken");async function pA(e){let t;try{let r=await rc(),s=await gi.verify(e,r.public_key,{algorithms:tc,subject:ec.REFRESH});t=await Vl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ni.warn(r),r.name&&r.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}if(!RA.validate(t.refresh_token,e))throw at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED);return t}a(pA,"validateRefreshToken")});var $l=h((jZ,IA)=>{"use strict";var RF=SA(),mn=require("passport"),AF=require("passport-local").Strategy,pF=require("passport-http").BasicStrategy,OF=require("util"),NF=Ar(),gA=OF.callbackify(NF.findAndValidateUser),zZ=Ke(),gF=T(),NA=sc();mn.use(new AF(function(e,t,r){gA(e,t,r)}));mn.use(new pF(function(e,t,r){gA(e,t,r)}));mn.serializeUser(function(e,t){t(null,e)});mn.deserializeUser(function(e,t){t(null,e)});function IF(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":mn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===gF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?NA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):NA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:mn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(IF,"authorize");function bF(e,t){let r=RF(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 o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(bF,"checkPermissions");IA.exports={authorize:IF,checkPermissions:bF}});var nc=h((e3,bA)=>{"use strict";var CF=Rr();bA.exports={writeTransaction:wF};function wF(e,t,r){return CF.writeTransaction(e,t,r)}a(wF,"writeTransaction")});var Rt=h((l3,KA)=>{"use strict";var Or=Y();Or.initSync();var LF=require("fs-extra"),UF=require("semver"),Li=require("path"),{monotonicFactory:yF}=require("ulidx"),DF=yF(),wA=require("util"),LA=require("child_process"),MF=wA.promisify(LA.exec),PF=LA.spawn,ee=he(),ie=T(),Ql=b(),Nr=g(),ic=Vr(),BF=nc(),Ii=dr(),{encode:Yl,decode:UA}=require("msgpackr"),{isEmpty:Ns}=Ql,yA=Ar(),t3=hs(),vF=Tt(),r3=wA.promisify(vF.searchByHash),{connect:HF,StorageType:DA,RetentionPolicy:MA,AckPolicy:PA,DeliverPolicy:Kl,NatsConnection:s3,JetStreamManager:n3,JetStreamClient:i3,StringCodec:a3,JSONCodec:qF,createInbox:Jl,StreamSource:o3,headers:GF,toJsMsg:FF,nuid:c3,JetStreamOptions:_3,ErrorCode:CA,nanos:u3}=require("nats"),{PACKAGE_ROOT:VF}=T(),$F=wa(),BA=qF(),kF="clustering",xF=$F.engines[ee.NATS_SERVER_NAME],YF=Li.join(VF,"dependencies"),Wl=Li.join(YF,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),kl,xl,bi,Ci,wi,Kt;KA.exports={runCommand:vA,checkNATSServerInstalled:KF,createConnection:Xl,getConnection:ac,getJetStreamManager:Rn,getJetStream:HA,getNATSReferences:Dt,getServerList:QF,createLocalStream:Zl,listStreams:qA,deleteLocalStream:JF,getServerConfig:Ui,listRemoteStreams:XF,viewStream:ZF,publishToStream:zF,createWorkQueueStream:jF,addSourceToWorkStream:GA,request:e0,removeSourceFromWorkStream:VA,reloadNATS:zl,reloadNATSHub:t0,reloadNATSLeaf:r0,extractServerName:FA,requestErrorHandler:s0,updateWorkStream:n0,createLocalTableStream:kA,createTableStreams:i0,purgeTableStream:xA,purgeSchemaTableStreams:a0,getStreamInfo:o0,updateNodeNameLocalStreams:c0,closeConnection:WF};async function vA(e,t=void 0){let{stdout:r,stderr:s}=await MF(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(VA,"runCommand");async function c0(){try{await YF.access(Zl)}catch{return!1}let e=await VA(`${Zl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return KF.eq(t,a0)}a(c0,"checkNATSServerInstalled");async function jl(e,t,r,s=!0,n="127.0.0.1"){return jF({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(jl,"createConnection");async function _0(){Wt&&(await Wt.close(),Wt=void 0)}a(_0,"closeConnection");async function cc(){if(!Wt){let e=await vA.getClusterUser();if(bs(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ar.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Wt=await jl(t,e.username,e.decrypt_hash)}return Wt}a(cc,"getConnection");async function On(){if(Li)return Li;bs(Wt)&&await cc();let{domain:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Li=await Wt.jetstreamManager({domain:e}),Li}a(On,"getJetStreamManager");async function kA(){if(Ui)return Ui;bs(Wt)&&await cc();let{domain:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ui=Wt.jetstream({domain:e}),Ui}a(kA,"getJetStream");async function Mt(){let e=Wt||await cc(),t=Li||await On(),r=Ui||await kA();return{connection:e,jsm:t,js:r}}a(Mt,"getNATSReferences");async function u0(){let e=ar.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await vA.getClusterUser(),s=await jl(e,t,r),n=zl(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(FA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Xl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(u0,"getServerList");async function eE(e,t){let{jsm:r}=await Mt();await r.streams.add({name:e,storage:HA.File,retention:qA.Limits,subjects:t})}a(eE,"createLocalStream");async function xA(){let{jsm:e}=await Mt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(xA,"listStreams");async function l0(e){let{jsm:t}=await Mt();await t.streams.delete(e)}a(l0,"deleteLocalStream");async function E0(e){let{connection:t}=await Mt(),r=[],s=zl(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(FA.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(E0,"listRemoteStreams");async function d0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Mt(),i=WF(),o=[],c={ack_policy:GA.None,durable_name:i,deliver_subject:i,deliver_policy:Jl.All};t&&(c.deliver_policy=Jl.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=r0(l),d=BA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),S.originators=m)}o.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(d0,"viewStream");async function h0(e,t,r=[],s=[]){Cr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Mt(),o=await _c(),c=`${e}.${o}`,_=t0();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{Cr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Wl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")Cr.trace(`publishToStream creating stream: ${t}`),await eE(t,[c]),await i.publish(c,Wl(r[u]),{headers:_});else throw E}}a(h0,"publishToStream");function Di(e){e=e.toLowerCase();let t=yi.join(ar.get(se.CONFIG_PARAMS.ROOTPATH),i0);if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bs(Ql)&&(Ql={port:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yi.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),Ql;if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bs(Kl)&&(Kl={port:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:yi.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),Kl;Cr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Di,"getServerConfig");async function S0(e){let{jsm:t}=await Mt(),r=await _c();try{await t.streams.add({name:e.stream_name,storage:HA.File,retention:qA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.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:GA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Jl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(S0,"createWorkQueueStream");async function $A(e,t,r){let{jsm:s}=await Mt(),n=await s.streams.info(t),i=YA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=oc.createNatsTableStreamName(c,_),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,w=n.config.sources.length;R<w;R++)if(E=n.config.sources[R],d=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===o)return;await QA(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a($A,"addSourceToWorkStream");function YA(e){return e.split(".")[1]}a(YA,"extractServerName");async function KA(e,t,r){let{schema:s,table:n}=r,i=oc.createNatsTableStreamName(s,n),{jsm:o}=await Mt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config),await QA(s,n,u,t)}a(KA,"removeSourceFromWorkStream");async function QA(e,t,r,s){let n=await On(),i;try{i=ZA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Cr.error("Error purging source subject",i,"from work stream",s)}}a(QA,"purgeSourceFromWorkStream");async function f0(e,t,r=2e3,s=zl()){if(!Xl.isObject(t))throw new Error("data param must be an object");let n=Wl(t),{connection:i}=await Mt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return BA(c.data)}a(f0,"request");function tE(e){return new Promise(async(t,r)=>{let s=ZF(Zl,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(tE,"reloadNATS");async function T0(){let{pid_file_path:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await tE(e)}a(T0,"reloadNATSHub");async function m0(){let{pid_file_path:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await tE(e)}a(m0,"reloadNATSLeaf");function R0(e,t,r){let s;switch(e.code){case DA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case DA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(R0,"requestErrorHandler");async function A0(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await XF.writeTransaction(se.SYSTEM_SCHEMA_NAME,se.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await $A(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await KA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(A0,"updateWorkStream");async function WA(e,t){let r=oc.createNatsTableStreamName(e,t),s=await _c(),n=ZA(e,t,s);await eE(r,[n])}a(WA,"createLocalTableStream");async function p0(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await WA(s,n)}}a(p0,"createTableStreams");async function JA(e,t){if(ar.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=oc.createNatsTableStreamName(e,t),{jsm:s}=await Mt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Cr.warn(r);else throw r}}a(JA,"purgeTableStream");async function O0(e,t){if(ar.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await JA(e,t[r])}a(O0,"purgeSchemaTableStreams");async function N0(e){return(await On()).streams.info(e)}a(N0,"getStreamInfo");function ZA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ZA,"createSubjectName");async function _c(){if(wi)return wi;if(wi=(await On())?.nc?.info?.server_name,wi===void 0)throw new Error("Unable to get jetstream manager server name");return wi}a(_c,"getJsmServerName");async function g0(){let e=await On(),t=await _c(),r=await xA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Cr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Cr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");Cr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(g0,"updateNodeNameLocalStreams")});var rE=h((L3,zA)=>{"use strict";var uc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(uc,"ClusteringOriginObject");zA.exports=uc});var In=h((U3,tp)=>{"use strict";var jA=b(),Pi=Y(),_e=T(),sE=he(),Nn=At(),Se=g(),ep=rE(),I0=Yr();Pi.initSync();var gn=sE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Mi=sE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;tp.exports={sendAttributeTransaction:Ec,postOperationHandler:C0};async function Ec(e,t,r=[]){if(!!Pi.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!jA.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==_e.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=Pi.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new ep(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${gn}`,o),await Nn.publishToStream(Mi,gn,[o],r)}}}a(Ec,"sendAttributeTransaction");async function lc(e,t,r,s=[]){if(e.schema===_e.SYSTEM_SCHEMA_NAME)return;let n=b0(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await Nn.publishToStream(`${sE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,I0.createNatsTableStreamName(e.schema,e.table),[n],s))}a(lc,"sendOperationTransaction");function b0(e,t,r){if(jA.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_e.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(b0,"convertCRUDOperationToTransaction");async function C0(e,t,r=[]){if(!Pi.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Se.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=Pi.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new ep(t.txn_time,s,n);switch(e.operation){case _e.OPERATIONS_ENUM.INSERT:try{await lc(e,t.inserted_hashes,i,r),await Ec(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.DELETE:try{await lc(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPDATE:try{await lc(e,t.update_hashes,i,r),await Ec(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPSERT:try{await lc(e,t.upserted_hashes,i,r),await Ec(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:_e.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for csv_data_load."),Se.error(o)}break;default:break}return t}a(C0,"postOperationHandler")});var ap=h((y3,ip)=>{"use strict";var w0=mt(),L0=Qr(),rp=g(),sp=yt(),U0=ac(),y0=require("clone"),iE=require("alasql"),D0=Mo(),np=require("util"),M0=np.promisify(L0.getTableSchema),P0=np.promisify(w0.search),B0=T(),nE=b(),v0=In();D0(iE);ip.exports={update:q0};var H0="There was a problem performing this update. Please check the logs and try again.";async function q0({statement:e,hdb_user:t}){let r=await M0(e.table.databaseid,e.table.tableid),s=G0(e.columns);nE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=y0(n),c=nE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=iE.parse(_).statements[0],l=await U0.writeTransaction(r.schema,r.name,async()=>{let E=await P0(u),d=F0(s,E);return V0(o,d,t)});return await sp.flush({schema:r.schema,table:r.name}),l}a(q0,"update");function G0(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=iE.compile(`SELECT ${r.expression.toString()} AS [${B0.FUNC_VAL}] FROM ?`)}),t}catch(t){throw rp.error(t),new Error(H0)}}a(G0,"createUpdateRecord");function F0(e,t){return nE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(F0,"buildUpdateRecords");async function V0(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await sp.update(s);await v0.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){rp.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(V0,"updateRecords")});var cp=h((D3,op)=>{var k0=require("alasql"),x0=mt(),$0=g(),Y0=gr(),oE=require("util"),aE=b(),K0=T(),Q0=Qr(),W0=ac(),J0=In(),Z0=yt(),X0="record",z0="successfully deleted",j0=oE.callbackify(sV),eV=oE.promisify(x0.search),tV=oE.promisify(Q0.getTableSchema);op.exports={convertDelete:j0};function rV(e){return`${e.deleted_hashes.length} ${X0}${e.deleted_hashes.length===1?"":"s"} ${z0}`}a(rV,"generateReturnMessage");async function sV({statement:e,hdb_user:t}){let r=await tV(e.table.databaseid,e.table.tableid);aE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=aE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=k0.parse(o).statements[0],_={operation:K0.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await W0.writeTransaction(r.schema,r.name,async()=>(_.records=await eV(c),Y0.deleteRecords(_)));return await Z0.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await J0.postOperationHandler(_,u),aE.isEmptyOrZeroLength(u.message)&&(u.message=rV(u)),delete u.txn_time,u}catch(u){throw $0.error(u),u.hdb_code?u.message:u}}a(sV,"convertDelete")});var lp=h((M3,up)=>{"use strict";var _E=As(),{hdb_errors:cE}=D();up.exports={checkSchemaExists:_p,checkSchemaTableExists:nV,schema_describe:_E};async function _p(e){if(!global.hdb_schema[e])try{let t=await _E.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(_p,"checkSchemaExists");async function nV(e,t){let r=await _p(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await _E.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(nV,"checkSchemaTableExists")});var dc=h((B3,fp)=>{"use strict";var bn=Za(),Cs=lp(),Ep=g(),iV=require("uuid").v4,P3=require("clone"),wn=tn(),ws=T(),aV=require("util"),Ls=gr(),{handleHDBError:Pe,hdb_errors:oV}=D(),{HDB_ERROR_MSGS:Cn,HTTP_STATUS_CODES:Be}=oV,{SchemaEventMsg:Ln}=kr(),dp=At();fp.exports={createSchema:cV,createSchemaStructure:hp,createTable:_V,createTableStructure:Sp,createAttribute:hV,dropSchema:uV,dropTable:lV,dropAttribute:EV};async function cV(e){try{let t=await hp(e);return wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(cV,"createSchema");async function hp(e){let t=bn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);if(!await Cs.checkSchemaExists(e.schema))throw Pe(new Error,Cn.SCHEMA_EXISTS_ERR(e.schema),Be.BAD_REQUEST,ws.LOG_LEVELS.ERROR,Cn.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await Ls.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(hp,"createSchemaStructure");async function _V(e){try{let t=await Sp(e);return wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(_V,"createTable");async function Sp(e){let t=bn.create_table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);bn.validateTableResidence(e.residence);let r=await Cs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(!await Cs.checkSchemaTableExists(e.schema,e.table))throw Pe(new Error,Cn.TABLE_EXISTS_ERR(e.schema,e.table),Be.BAD_REQUEST,ws.LOG_LEVELS.ERROR,Cn.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:iV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ls.createTable(n,e);else throw Pe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Be.BAD_REQUEST);else await Ls.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Sp,"createTableStructure");async function uV(e){let t=bn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await Cs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);let s=await Cs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ls.dropSchema(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await dp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(uV,"dropSchema");async function lV(e){let t=bn.table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await Cs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);return await Ls.dropTable(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table)),await dp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(lV,"dropTable");async function EV(e){let t=bn.attribute_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await Cs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Pe(new Error,"You cannot drop a hash attribute",Be.BAD_REQUEST,void 0,void 0,!0);if(ws.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Pe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Be.BAD_REQUEST,void 0,void 0,!0);try{return await Ls.dropAttribute(e),dV(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Ep.error(`Got an error deleting attribute ${aV.inspect(e)}.`),s}}a(EV,"dropAttribute");function dV(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(dV,"dropAttributeFromGlobal");async function hV(e){if(!global.hdb_schema[e.schema])throw Pe(new Error,Cn.SCHEMA_NOT_FOUND(e.schema),Be.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw Pe(new Error,Cn.TABLE_NOT_FOUND(e.schema,e.table),Be.NOT_FOUND,void 0,void 0,!0);try{return await Ls.createAttribute(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw Ep.error(t),t}}a(hV,"createAttribute")});var mp=h((v3,Tp)=>{"use strict";var{OPERATIONS_ENUM:SV}=T(),hc=class{constructor(t,r,s=void 0,n=void 0){this.operation=SV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(hc,"ReadAuditLogObject");Tp.exports=hc});var uE=h((q3,Np)=>{"use strict";var fV=gr(),H3=mp(),Sc=b(),fc=T(),TV=Y(),{handleHDBError:Rp,hdb_errors:mV}=D(),{HDB_ERROR_MSGS:Ap,HTTP_STATUS_CODES:pp}=mV,RV=Object.values(fc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Op="To use this operation audit log must be enabled in harperdb-config.yaml";Np.exports=AV;async function AV(e){if(Sc.isEmpty(e.schema))throw new Error(Ap.SCHEMA_REQUIRED_ERR);if(Sc.isEmpty(e.table))throw new Error(Ap.TABLE_REQUIRED_ERR);if(!TV.get(fc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Rp(new Error,Op,pp.BAD_REQUEST,fc.LOG_LEVELS.ERROR,Op,!0);let t=Sc.checkSchemaTableExist(e.schema,e.table);if(t)throw Rp(new Error,t,pp.NOT_FOUND,fc.LOG_LEVELS.ERROR,t,!0);if(!Sc.isEmpty(e.search_type)&&RV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await fV.readAuditLog(e)}a(AV,"readAuditLog")});var Lp=h((G3,wp)=>{var jr=require("validate.js"),Ip=Ee(),Un=T(),{handleHDBError:pV,hdb_errors:OV}=D(),{HDB_ERROR_MSGS:ue,HTTP_STATUS_CODES:NV}=OV,lE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),gV={STRUCTURE_USER:"structure_user"},gp=Object.values(Un.ROLE_TYPES_ENUM),IV="attribute_permissions",bV="attribute_name",{PERMS_CRUD_ENUM:yn}=Un,CV=[IV,...Object.values(yn)],bp=[yn.READ,yn.INSERT,yn.UPDATE],wV=[bV,...bp];function LV(e){let t=lE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Cp(e,t)}a(LV,"addRoleValidation");function UV(e){let t=lE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Cp(e,t)}a(UV,"alterRoleValidation");function yV(e){let t=lE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ip.validateObject(e,t)}a(yV,"dropRoleValidation");var DV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Cp(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)DV.includes(s[o])||n.push(s[o]);n.length>0&&fe(ue.INVALID_ROLE_JSON_KEYS(n),r);let i=Ip.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=MV(e);o&&fe(o,r),gp.forEach(c=>{e.permission[c]&&!jr.isBoolean(e.permission[c])&&fe(ue.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(gp.indexOf(o)<0){if(o===gV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||fe(ue.SCHEMA_NOT_FOUND(E),r)}continue}fe(ue.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(ue.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(ue.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{CV.includes(l)||fe(ue.INVALID_PERM_KEY(l),r,o,_)}),Object.values(yn).forEach(l=>{jr.isDefined(u[l])?jr.isBoolean(u[l])||fe(ue.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(ue.TABLE_PERM_MISSING(l),r,o,_)}),jr.isDefined(u.attribute_permissions)){if(!jr.isArray(u.attribute_permissions)){fe(ue.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(ue.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(R=>{!wV.includes(R)&&R!==yn.DELETE&&fe(ue.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!jr.isDefined(S.attribute_name)){fe(ue.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=S.attribute_name;if(!l.includes(m)){fe(ue.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}bp.forEach(R=>{jr.isDefined(S[R])?jr.isBoolean(S[R])||fe(ue.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(ue.ATTR_PERM_MISSING(R,m),r,o,_)}),!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 d=`${o}.${_}`;fe(ue.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return PV(r)}a(Cp,"customValidate");wp.exports={addRoleValidation:LV,alterRoleValidation:UV,dropRoleValidation:yV};function MV(e){let{operation:t,permission:r}=e;if(t===Un.OPERATIONS_ENUM.ADD_ROLE||t===Un.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 ue.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Un.ROLE_TYPES_ENUM.SUPER_USER:Un.ROLE_TYPES_ENUM.CLUSTER_USER;return ue.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(MV,"validateNoSUPerms");function PV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ue.ROLE_PERMS_ERROR,...e};return pV(new Error,s,NV.BAD_REQUEST)}else return null}a(PV,"generateRolePermResponse");function fe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(fe,"addPermError")});var RE=h((F3,Bp)=>{"use strict";var Up=yt(),yp=mt(),BV=Ns(),hE=Lp(),SE=tn(),vV=require("uuid").v4,fE=require("util"),HV=mn(),wr=T(),Dp=b(),TE=fE.promisify(yp.searchByValue),qV=fE.promisify(yp.searchByHash),GV=fE.promisify(BV.delete),FV=Qt(),VV=Ts(),{hdb_errors:kV,handleHDBError:Bi}=D(),{HDB_ERROR_MSGS:Mp,HTTP_STATUS_CODES:EE}=kV,{UserEventMsg:mE}=kr();Bp.exports={addRole:xV,alterRole:YV,dropRole:KV,listRoles:Pp};function dE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(dE,"scrubRoleDetails");async function xV(e){let t=hE.addRoleValidation(e);if(t)throw t;if(!(await HV.getLicense()).enterprise){let o=await Pp();if($V(e,o))throw new Error(`Your current license only supports ${wr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${wr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${wr.BASIC_LICENSE_MAX_NON_CU_ROLES+wr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${wr.SUPPORT_HELP_MSG}`)}e=dE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await TE(s)}catch(o){throw Bi(o)}if(n&&n.length>0)throw Bi(new Error,Mp.ROLE_ALREADY_EXISTS(e.role),EE.CONFLICT,void 0,void 0,!0);e.id||(e.id=vV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Up.insert(i),SE.signalUserChange(new mE(process.pid)),e=dE(e),e}a(xV,"addRole");function $V(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(!Dp.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a($V,"checkClusterUserRole");async function YV(e){let t=hE.alterRoleValidation(e);if(t)throw t;e=dE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Up.update(r)}catch(s){throw Bi(s)}return SE.signalUserChange(new mE(process.pid)),e}a(YV,"alterRole");async function KV(e){let t=hE.dropRoleValidation(e);if(t)throw Bi(new Error,t,EE.BAD_REQUEST,void 0,void 0,!0);let r=new VV(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await qV(r);if(s.length===0)throw Bi(new Error,Mp.ROLE_NOT_FOUND,EE.NOT_FOUND,void 0,void 0,!0);let n=new FV(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await TE(n),o=!1;if(Dp.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await GV(c),SE.signalUserChange(new mE(process.pid)),`${s[0].role} successfully deleted`}a(KV,"dropRole");async function Pp(){return TE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Pp,"listRoles")});var Gp=h((V3,qp)=>{"use strict";var QV=Y(),es=require("joi"),WV=Ee(),vp=require("moment"),JV=require("fs-extra"),AE=require("path"),ZV=require("lodash"),vi=T(),{LOG_LEVELS:Us}=T(),XV="YYYY-MM-DD hh:mm:ss",zV=AE.resolve(__dirname,"../logs");qp.exports=function(e){return WV.validateBySchema(e,jV)};var jV=es.object({from:es.custom(Hp),until:es.custom(Hp),level:es.valid(Us.NOTIFY,Us.FATAL,Us.ERROR,Us.WARN,Us.INFO,Us.DEBUG,Us.TRACE),order:es.valid("asc","desc"),limit:es.number().min(1),start:es.number().min(0),log_name:es.custom(ek)});function Hp(e,t){if(vp(e,vp.ISO_8601).format(XV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Hp,"validateDatetime");function ek(e,t){if(ZV.invert(vi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=QV.get(vi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?vi.PROCESS_LOG_NAMES.HDB:e,i=n===vi.PROCESS_LOG_NAMES.INSTALL?AE.join(zV,vi.PROCESS_LOG_NAMES.INSTALL):AE.join(s,n);return JV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ek,"validateReadLogPath")});var OE=h((k3,Vp)=>{"use strict";var Tc=T(),Fp=g(),tk=Y(),rk=Gp(),pE=require("path"),sk=require("fs-extra"),nk=require("readline"),{once:ik}=require("events"),{handleHDBError:ak,hdb_errors:ok}=D(),{PACKAGE_ROOT:ck}=T(),_k=pE.join(ck,"logs"),uk=1e3;Vp.exports=lk;async function lk(e){let t=rk(e);if(t)throw ak(t,t.message,ok.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=tk.get(Tc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Tc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===Tc.PROCESS_LOG_NAMES.INSTALL?pE.join(_k,Tc.PROCESS_LOG_NAMES.INSTALL):pE.join(r,s),i=sk.createReadStream(n);i.on("error",z=>{Fp.error(z)});let o=nk.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,S=e.limit===void 0?uk:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,w=R+S,L=0,B=[];return o.on("line",z=>{let V,W,ke,xe;try{V=JSON.parse(z)}catch(da){Fp.warn(da.message);return}switch(!0){case(c&&u&&E):W=new Date(V.timestamp),ke=new Date(l),xe=new Date(d),V.level===_&&W>=ke&&W<=xe&&L<R?L++:V.level===_&&W>=ke&&W<=xe&&(rs(V,m,B),L++,L===w&&ts(o));break;case(c&&u):W=new Date(V.timestamp),ke=new Date(l),V.level===_&&W>=ke&&L<R?L++:V.level===_&&W>=ke&&(rs(V,m,B),L++,L===w&&ts(o));break;case(c&&E):W=new Date(V.timestamp),xe=new Date(d),V.level===_&&W<=xe&&L<R?L++:V.level===_&&W<=xe&&(rs(V,m,B),L++,L===w&&ts(o));break;case(u&&E):W=new Date(V.timestamp),ke=new Date(l),xe=new Date(d),W>=ke&&W<=xe&&L<R?L++:W>=ke&&W<=xe&&(rs(V,m,B),L++,L===w&&ts(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(rs(V,m,B),L++,L===w&&ts(o));break;case u:W=new Date(V.timestamp),ke=new Date(l),W>=ke&&L<R?L++:W>=ke&&L>=R&&(rs(V,m,B),L++,L===w&&ts(o));break;case E:W=new Date(V.timestamp),xe=new Date(d),W<=xe&&L<R?L++:W<=xe&&L>=R&&(rs(V,m,B),L++,L===w&&ts(o));break;default:L<R?L++:(rs(V,m,B),L++,L===w&&ts(o))}}),await ik(o,"close"),B}a(lk,"readLog");function ts(e){e.close(),e.removeAllListeners()}a(ts,"endReadLine");function rs(e,t,r){t==="desc"?Ek(e,r):t==="asc"?dk(e,r):r.push(e)}a(rs,"pushLineToResult");function Ek(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(Ek,"insertDescending");function dk(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(dk,"insertAscending")});var Rc=h((Y3,$p)=>{"use strict";var NE=require("joi"),{string:mc,boolean:kp,date:hk}=NE.types(),Sk=Ee(),{validateSchemaExists:x3,validateTableExists:$3,validateSchemaName:fk}=Ar(),Tk=T(),mk=he(),Rk=Y(),Ak=mc.invalid(Rk.get(Tk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(mk.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),xp={operation:mc.valid("add_node","update_node"),node_name:Ak,subscriptions:NE.array().items({table:mc.required(),schema:mc.custom(fk).required(),subscribe:kp.required(),publish:kp.required().custom(Ok),start_time:hk.iso()}).min(1).required()};function pk(e){return Sk.validateBySchema(e,NE.object(xp))}a(pk,"addUpdateNodeValidator");function Ok(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Ok,"checkForFalsy");$p.exports={addUpdateNodeValidator:pk,validation_schema:xp}});var Dn=h((K3,Yp)=>{"use strict";var Ac=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Ac,"Node");var pc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(pc,"NodeSubscription");Yp.exports={Node:Ac,NodeSubscription:pc}});var Qp=h((Q3,Kp)=>{"use strict";var Nk=T().OPERATIONS_ENUM,Oc=class{constructor(t,r,s,n=void 0){this.operation=Nk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Oc,"UpsertObject");Kp.exports=Oc});var Hi=h((W3,Wp)=>{"use strict";var Nc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Nc,"RemotePayloadObject");var gc=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(gc,"RemotePayloadSubscription");Wp.exports={RemotePayloadObject:Nc,RemotePayloadSubscription:gc}});var Zp=h((J3,Jp)=>{"use strict";var Ic=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(Ic,"TableSizeObject");Jp.exports=Ic});var eO=h((Z3,jp)=>{"use strict";var gk=Zp(),Xp=require("path"),zp=te(),Ik=Ye(),Mn=Z(),bk=g();jp.exports=Ck;async function Ck(e){let t=new gk;try{let r=Xp.join(zp.getBaseSchemaPath(),e.schema.toString()),s=await Mn.openEnvironment(r,e.name),n=Mn.statDBI(s,e.hash_attribute),i=Xp.join(zp.getTransactionAuditStorePath(),e.schema.toString()),o=await Mn.openEnvironment(i,e.name,!0),c=Mn.statDBI(o,Ik.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Mn.environmentDataSize(r,e.name),u=await Mn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){bk.warn(`unable to stat table dbi due to ${r}`)}return t}a(Ck,"lmdbGetTableSize")});var rO=h((X3,tO)=>{"use strict";var wk=T(),bc=class{constructor(t){this.operator=wk.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(bc,"SystemInformationOperation");tO.exports=bc});var nO=h((z3,sO)=>{"use strict";var Cc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(Cc,"SystemInformationObject");sO.exports=Cc});var Lc=h((e2,iO)=>{"use strict";var ve=require("systeminformation"),Pn=g(),Lk=T(),Uk=eO(),yk=As(),Dk=Y();Dk.initSync();var j3=rO(),Mk=nO(),wc;iO.exports={getHDBProcessInfo:CE,getNetworkInfo:LE,getDiskInfo:wE,getMemoryInfo:bE,getCPUInfo:IE,getTimeInfo:gE,getSystemInformation:UE,systemInformation:Pk,getTableSize:yE};function gE(){return ve.time()}a(gE,"getTimeInfo");async function IE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:w,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(z=>{let{raw_load:V,raw_load_idle:W,raw_load_irq:ke,raw_load_nice:xe,raw_load_system:da,raw_load_user:ha,...Br}=z;B.cpus.push(Br)}),l.current_load=B,l}catch(e){return Pn.error(`error in getCPUInfo: ${e}`),{}}}a(IE,"getCPUInfo");async function bE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return Pn.error(`error in getMemoryInfo: ${e}`),{}}}a(bE,"getMemoryInfo");async function CE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(Lk.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Pn.error(`error in getHDBProcessInfo: ${t}`),e}}a(CE,"getHDBProcessInfo");async function wE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return Pn.error(`error in getDiskInfo: ${t}`),e}}a(wE,"getDiskInfo");async function LE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return Pn.error(`error in getNetworkInfo: ${t}`),e}}a(LE,"getNetworkInfo");async function UE(){if(wc!==void 0)return wc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,wc=e,wc}catch(t){return Pn.error(`error in getSystemInformation: ${t}`),e}}a(UE,"getSystemInformation");async function yE(){let e=[],t=await yk.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Uk(s));return e}a(yE,"getTableSize");async function Pk(e){let t=new Mk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await UE(),t.time=gE(),t.cpu=await IE(),t.memory=await bE(),t.disk=await wE(),t.network=await LE(),t.harperdb_processes=await CE(),t.table_size=await yE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await UE();break;case"time":t.time=gE();break;case"cpu":t.cpu=await IE();break;case"memory":t.memory=await bE();break;case"disk":t.disk=await wE();break;case"network":t.network=await LE();break;case"harperdb_processes":t.harperdb_processes=await CE();break;case"table_size":t.table_size=await yE();break;default:break}return t}a(Pk,"systemInformation")});var DE=h((s2,aO)=>{"use strict";var t2=require("fs-extra"),r2=g();aO.exports={version:Bk,printVersion:Hk,nodeVersion:vk};var ss=Ua();function Bk(){if(ss)return ss.version}a(Bk,"version");function vk(){if(ss&&ss.engines&&ss.engines["preferred-node"])return ss.engines["preferred-node"]}a(vk,"nodeVersion");function Hk(){ss&&console.log(`HarperDB Version ${ss.version}`)}a(Hk,"printVersion")});var Ds=h((a2,uO)=>{"use strict";var qk=yt(),ME=b(),PE=require("util"),ys=T(),oO=Y();oO.initSync();var Gk=Yl(),cO=mt(),{Node:n2,NodeSubscription:i2}=Dn(),Fk=Ts(),Vk=Qp(),{RemotePayloadObject:kk,RemotePayloadSubscription:xk}=Hi(),{handleHDBError:$k,hdb_errors:Yk}=D(),{HTTP_STATUS_CODES:Kk,HDB_ERROR_MSGS:Qk}=Yk,Wk=Qt(),Jk=Lc(),Zk=DE(),Xk=PE.promisify(Gk.authorize),zk=PE.promisify(cO.searchByHash),jk=PE.promisify(cO.searchByValue);uO.exports={authHeaderToUser:ex,isEmpty:tx,getNodeRecord:rx,upsertNodeRecord:sx,buildNodePayloads:nx,checkClusteringEnabled:ix,getAllNodeRecords:ax,getSystemInfo:ox,reverseSubscription:_O};async function ex(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Xk(t,null),e}a(ex,"authHeaderToUser");function tx(e){return e==null}a(tx,"isEmpty");async function rx(e){let t=new Fk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return zk(t)}a(rx,"getNodeRecord");async function sx(e){let t=new Vk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return qk.upsert(t)}a(sx,"upsertNodeRecord");function _O(e){if(ME.isEmpty(e.subscribe)||ME.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(_O,"reverseSubscription");function nx(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=ME.getTableHashAttribute(_,u),{subscribe:E,publish:d}=_O(c),S=new xk(_,u,l,d,E,c.start_time);n.push(S)}return new kk(r,t,n,s)}a(nx,"buildNodePayloads");function ix(){if(!oO.get(ys.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $k(new Error,Qk.CLUSTERING_NOT_ENABLED,Kk.BAD_REQUEST,void 0,void 0,!0)}a(ix,"checkClusteringEnabled");async function ax(){let e=new Wk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return jk(e)}a(ax,"getAllNodeRecords");async function ox(){let e=await Jk.getSystemInformation();return{hdb_version:Zk.version(),node_version:e.node_version,platform:e.platform}}a(ox,"getSystemInfo")});var vE=h((o2,fO)=>{"use strict";var BE=At(),lO=b(),EO=he(),cx=T(),Uc=g(),dO=dc(),_x=sl(),{RemotePayloadObject:ux}=Hi(),{handleHDBError:hO,hdb_errors:lx}=D(),{HTTP_STATUS_CODES:SO}=lx,{NodeSubscription:Ex}=Dn();fO.exports=dx;async function dx(e,t){let r;try{r=await BE.request(`${t}.${EO.REQUEST_SUFFIX}`,new ux(cx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Uc.trace("Response from remote describe all request:",r)}catch(o){Uc.error(`addNode received error from describe all request to remote node: ${o}`);let c=BE.requestErrorHandler(o,"add_node",t);throw hO(new Error,c,SO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===EO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw hO(new Error,o,SO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=lO.doesSchemaExist(c),l=s[c]!==void 0,E=lO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Uc.trace(`addNode creating schema: ${c}`),await dO.createSchema({operation:"create_schema",schema:c})),!E&&d){Uc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new _x(c,_,s[c][_].hash_attribute);await dO.createTable(m)}await BE.createLocalTableStream(c,_);let S=new Ex(c,_,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(dx,"reviewSubscriptions")});var Mc=h((c2,RO)=>{"use strict";var{handleHDBError:yc,hdb_errors:hx}=D(),{HTTP_STATUS_CODES:Dc}=hx,{addUpdateNodeValidator:Sx}=Rc(),qi=g(),mO=T(),TO=he(),fx=b(),HE=At(),Gi=Ds(),Tx=Y(),mx=vE(),{Node:Rx,NodeSubscription:Ax}=Dn(),px="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ox="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nx=Tx.get(mO.CONFIG_PARAMS.CLUSTERING_NODENAME);RO.exports=gx;async function gx(e,t=!1){qi.trace("addNode called with:",e),Gi.checkClusteringEnabled();let r=Sx(e);if(r)throw yc(r,r.message,Dc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Gi.getNodeRecord(s);if(!fx.isEmptyOrZeroLength(E))throw yc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Dc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await mx(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=px,o;let c=Gi.buildNodePayloads(n,Nx,mO.OPERATIONS_ENUM.ADD_NODE,await Gi.getSystemInfo());qi.trace("addNode sending remote payload:",c);let _;try{_=await HE.request(`${s}.${TO.REQUEST_SUFFIX}`,c)}catch(E){qi.error(`addNode received error from request: ${E}`);let d=HE.requestErrorHandler(E,"add_node",s);throw yc(new Error,d,Dc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===TO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw yc(new Error,E,Dc.INTERNAL_SERVER_ERROR,"error",E)}qi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let S=n[E];qi.trace("Add node updating work stream for node:",s,"subscriptions:",S),await HE.updateWorkStream(S,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new Ax(S.schema,S.table,S.publish,S.subscribe))}let l=new Rx(s,u,_.system_info);return await Gi.upsertNodeRecord(l),i.length>0?o.message=Ox:o.message=`Successfully added '${s}' to manifest`,o}a(gx,"addNode")});var GE=h((_2,OO)=>{"use strict";var{handleHDBError:Pc,hdb_errors:Ix}=D(),{HTTP_STATUS_CODES:Bc}=Ix,{addUpdateNodeValidator:bx}=Rc(),Fi=g(),pO=T(),AO=he(),Cx=b(),qE=At(),Vi=Ds(),wx=Y(),{cloneDeep:Lx}=require("lodash"),Ux=vE(),{NodeSubscription:yx}=Dn(),Dx="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Mx="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Px=wx.get(pO.CONFIG_PARAMS.CLUSTERING_NODENAME);OO.exports=Bx;async function Bx(e){Fi.trace("updateNode called with:",e),Vi.checkClusteringEnabled();let t=bx(e);if(t)throw Pc(t,t.message,Bc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Lx(await Vi.getNodeRecord(r));if(Cx.isEmptyOrZeroLength(s))throw Pc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Bc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await Ux(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Dx,o;let c=Vi.buildNodePayloads(n,Px,pO.OPERATIONS_ENUM.UPDATE_NODE,await Vi.getSystemInfo());Fi.trace("updateNode sending remote payload:",c);let _;try{_=await qE.request(`${r}.${AO.REQUEST_SUFFIX}`,c)}catch(u){Fi.error(`updateNode received error from request: ${u}`);let l=qE.requestErrorHandler(u,"update_node",r);throw Pc(new Error,l,Bc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===AO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Pc(new Error,u,Bc.INTERNAL_SERVER_ERROR,"error",u)}Fi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Fi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await qE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await vx(s[0],n,_.system_info),i.length>0?o.message=Mx:o.message=`Successfully updated '${r}'`,o}a(Bx,"updateNode");async function vx(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new yx(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Vi.upsertNodeRecord(s)}a(vx,"updateNodeTable")});var CO=h((u2,bO)=>{"use strict";var IO=require("joi"),{string:NO}=IO.types(),Hx=Ee(),gO=T(),qx=Y(),Gx=he();bO.exports=Fx;function Fx(e){let t=NO.invalid(qx.get(gO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gx.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=IO.object({operation:NO.valid(gO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Hx.validateBySchema(e,r)}a(Fx,"removeNodeValidator")});var Hc=h((l2,MO)=>{"use strict";var{handleHDBError:wO,hdb_errors:Vx}=D(),{HTTP_STATUS_CODES:LO}=Vx,kx=CO(),ki=g(),UO=Ds(),xx=b(),vc=T(),yO=he(),DO=At(),$x=Y(),{RemotePayloadObject:Yx}=Hi(),{NodeSubscription:Kx}=Dn(),Qx=Si(),Wx=Ns(),Jx=$x.get(vc.CONFIG_PARAMS.CLUSTERING_NODENAME);MO.exports=Zx;async function Zx(e){ki.trace("removeNode called with:",e),UO.checkClusteringEnabled();let t=kx(e);if(t)throw wO(t,t.message,LO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await UO.getNodeRecord(r);if(xx.isEmptyOrZeroLength(s))throw wO(new Error,`Node '${r}' was not found.`,LO.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Yx(vc.OPERATIONS_ENUM.REMOVE_NODE,Jx,[]),i,o=!1;try{i=await DO.request(`${r}.${yO.REQUEST_SUFFIX}`,n),ki.trace("Remove node reply from remote node:",r,i)}catch(_){ki.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];ki.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new Kx(l.schema,l.table,!1,!1);await DO.updateWorkStream(E,r)}let c=new Qx(vc.SYSTEM_SCHEMA_NAME,vc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Wx.deleteRecord(c),i?.status===yO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ki.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Zx,"removeNode")});var vO=h((E2,BO)=>{"use strict";var PO=require("joi"),{string:Xx,array:zx}=PO.types(),jx=Ee(),e$=Rc();BO.exports=t$;function t$(e){let t=PO.object({operation:Xx.valid("configure_cluster").required(),connections:zx.items(e$.validation_schema).required()});return jx.validateBySchema(e,t)}a(t$,"configureClusterValidator")});var FE=h((d2,VO)=>{"use strict";var r$=T(),qc=g(),s$=b(),n$=Hc(),i$=Mc(),HO=Ds(),a$=vO(),{handleHDBError:qO,hdb_errors:o$}=D(),{HTTP_STATUS_CODES:GO}=o$,c$="Configure cluster complete.",_$="Failed to configure the cluster. Check the logs for more details.",u$="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";VO.exports=l$;async function l$(e){qc.trace("configure cluster called with:",e),HO.checkClusteringEnabled();let t=a$(e);if(t)throw qO(t,t.message,GO.BAD_REQUEST,void 0,void 0,!0);let r=await HO.getAllNodeRecords(),s=[];for(let d=0,S=r.length;d<S;d++)s.push(FO(n$,{operation:r$.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);qc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let S=e.connections[d];i.push(FO(i$,S,S.node_name))}let c=await Promise.allSettled(i);qc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,S=E.length;d<S;d++){let m=E[d];m.status==="rejected"&&(qc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(s$.isEmptyOrZeroLength(_))return{message:c$,connections:u};if(l)return{message:u$,failed_nodes:_,connections:u};throw qO(new Error,_$,GO.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(l$,"configureCluster");async function FO(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(FO,"functionWrapper")});var xE=h((h2,QO)=>{"use strict";var kE=Ds(),E$=At(),$O=Y(),Gc=T(),Ms=he(),d$=b(),VE=g(),{RemotePayloadObject:h$}=Hi(),{ErrorCode:kO}=require("nats"),xO=$O.get(Gc.CONFIG_PARAMS.CLUSTERING_ENABLED),YO=$O.get(Gc.CONFIG_PARAMS.CLUSTERING_NODENAME);QO.exports={clusterStatus:S$,buildNodeStatus:KO};async function S$(){let e={node_name:YO,is_enabled:xO,connections:[]};if(!xO)return e;let t=await kE.getAllNodeRecords();if(d$.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(KO(t[s],e.connections));return await Promise.allSettled(r),e}a(S$,"clusterStatus");async function KO(e,t){let r=e.name,s=new h$(Gc.OPERATIONS_ENUM.CLUSTER_STATUS,YO,void 0,await kE.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await E$.request(Ms.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Ms.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ms.CLUSTER_STATUS_STATUSES.CLOSED,VE.error(`Error getting node status from ${r} `,n))}catch(_){VE.warn(`Error getting node status from ${r}`,_),_.code===kO.NoResponders?o=Ms.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===kO.Timeout?o=Ms.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ms.CLUSTER_STATUS_STATUSES.CLOSED}let c=new f$(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Gc.PRE_4_0_0_VERSION&&await kE.upsertNodeRecord(_)}catch(_){VE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(KO,"buildNodeStatus");function f$(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(f$,"NodeStatusObject")});var XO=h((S2,ZO)=>{"use strict";var $E=require("joi"),WO=Ee(),{route_constraints:JO}=Eu();ZO.exports={setRoutesValidator:T$,deleteRoutesValidator:m$};function T$(e){let t=$E.object({server:$E.valid("hub","leaf").required(),routes:JO.required()});return WO.validateBySchema(e,t)}a(T$,"setRoutesValidator");function m$(e){let t=$E.object({routes:JO.required()});return WO.validateBySchema(e,t)}a(m$,"deleteRoutesValidator")});var KE=h((f2,tN)=>{"use strict";var Ps=mr(),YE=b(),Fc=T(),zO=XO(),{handleHDBError:jO,hdb_errors:R$}=D(),{HTTP_STATUS_CODES:eN}=R$,A$="cluster routes successfully set",p$="cluster routes successfully deleted";tN.exports={setRoutes:O$,getRoutes:N$,deleteRoutes:g$};function O$(e){let t=zO.setRoutesValidator(e);if(t)throw jO(t,t.message,eN.BAD_REQUEST,void 0,void 0,!0);let r=Ps.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=YE.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:A$,set:o,skipped:i}}a(O$,"setRoutes");function N$(){let e=Ps.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(N$,"getRoutes");function g$(e){let t=zO.deleteRoutesValidator(e);if(t)throw jO(t,t.message,eN.BAD_REQUEST,void 0,void 0,!0);let r=Ps.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,m=s.length;S<m;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!0;for(let m=0,R=n.length;m<R;m++){let w=n[m];if(E.host===w.host&&E.port===w.port){n.splice(m,1),_=!0,S=!1,i.push(E);break}}S&&o.push(E)}}return c&&(s=YE.isEmptyOrZeroLength(s)?null:s,Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=YE.isEmptyOrZeroLength(n)?null:n,Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:p$,deleted:i,skipped:o}}a(g$,"deleteRoutes")});var sN=h((T2,rN)=>{"use strict";var xi=require("alasql"),Bs=require("recursive-iterator"),Jt=g(),I$=b(),$i=T(),Vc=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,C$(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>$i.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!$i.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][$i.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=b$(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!$i.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new xi.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(Vc,"sql_statement_bucket");function b$(e){return e.filter(t=>t[$i.PERMS_CRUD_ENUM.READ])}a(b$,"filterReadRestrictedAttrs");function C$(e,t,r,s,n){w$(e,t,r,s,n)}a(C$,"interpretAST");function Yi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Yi,"addSchemaTableToMap");function w$(e,t,r,s,n){if(!e){Jt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof xi.yy.Insert?D$(e,t,r):e instanceof xi.yy.Select?L$(e,t,r,s,n):e instanceof xi.yy.Update?U$(e,t,r):e instanceof xi.yy.Delete?y$(e,t,r):Jt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(w$,"getRecordAttributesAST");function L$(e,t,r,s,n){if(!e){Jt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(I$.isEmptyOrZeroLength(i)){Jt.error("No schema specified");return}e.from.forEach(c=>{Yi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Yi(c.table,t,r,s,n)});let o=new Bs(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Jt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Bs(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Jt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Bs(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Jt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Bs(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Jt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(L$,"getSelectAttributes");function U$(e,t,r){if(!e){Jt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Bs(e.columns),n=e.table.databaseid;Yi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(U$,"getUpdateAttributes");function y$(e,t,r){if(!e){Jt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Bs(e.where),n=e.table.databaseid;Yi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(y$,"getDeleteAttributes");function D$(e,t,r){if(!e){Jt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Bs(e.columns),n=e.into.databaseid;Yi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.into.tableid,n,i.columnid,t,r)}a(D$,"getInsertAttributes");function QE(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(QE,"pushAttribute");rN.exports=Vc});var aN=h((m2,iN)=>{var M$=require("os"),nN=Y();iN.exports={checkPermission:P$};function P$(){if(M$.userInfo().username!==nN.get("install_user"))throw new Error(`Error: Must execute as ${nN.get("install_user")}`)}a(P$,"checkPermission")});var JE=h((R2,lN)=>{var xc=mn(),oN=require("chalk"),or=g(),cN=aN(),_N=require("prompt"),{promisify:B$}=require("util"),kc=T(),v$=require("fs-extra"),H$=require("path"),q$=b(),G$=DE(),uN=Y();uN.initSync();var F$=require("moment"),V$=B$(_N.get),k$=H$.join(uN.getHdbBasePath(),kc.LICENSE_KEY_DIR_NAME,kc.LICENSE_FILE_NAME,kc.LICENSE_FILE_NAME);lN.exports={getFingerprint:$$,setLicense:x$,parseLicense:WE,register:Y$,getRegistrationInfo:Q$};async function x$(e){if(e&&e.key&&e.company){try{or.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await WE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw or.error(r),or.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(x$,"setLicense");async function $$(){try{cN.checkPermission()}catch(t){throw or.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await xc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw or.error(r),or.error(t),new Error(r)}return e}a($$,"getFingerprint");async function WE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=xc.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{or.info("writing license to disk"),await v$.writeFile(k$,JSON.stringify({license_key:e,company:t}))}catch(s){throw or.error("Failed to write License"),s}return"Registration successful."}a(WE,"parseLicense");async function Y$(){let e=await K$();return WE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Y$,"register");async function K$(){try{cN.checkPermission()}catch(s){return console.error(s.message)}let e=await xc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:oN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:oN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{_N.start()}catch(s){or.error(s)}let r;try{r=await V$(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(K$,"promptForRegistration");async function Q$(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await xc.getLicense()}catch(r){throw or.error(`There was an error when searching licenses due to: ${r.message}`),r}if(q$.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=G$.version(),e.storage_type=kc.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=F$.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Q$,"getRegistrationInfo")});var dN=h((A2,EN)=>{"use strict";var W$=he(),$c=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,this.server_name=r+W$.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:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:S}},this.system_account="SYS"}};a($c,"HubConfigObject");EN.exports=$c});var fN=h((p2,SN)=>{"use strict";var hN=he(),Yc=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d){this.port=t,this.server_name=r+hN.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+hN.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:d},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:d},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:d},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(Yc,"LeafConfigObject");SN.exports=Yc});var mN=h((O2,TN)=>{"use strict";var Kc=class{constructor(t,r){this.user=t,this.password=r}};a(Kc,"HdbUserObject");TN.exports=Kc});var AN=h((N2,RN)=>{"use strict";var J$=he(),Qc=class{constructor(t,r){this.user=t+J$.SERVER_SUFFIX.ADMIN,this.password=r}};a(Qc,"SysUserObject");RN.exports=Qc});var zE=h((g2,NN)=>{"use strict";var Bn=require("path"),Xc=require("fs-extra"),Z$=dN(),X$=fN(),z$=mN(),j$=AN(),ZE=Ir(),Hn=b(),Pt=mr(),Zc=T(),Wc=he(),{CONFIG_PARAMS:Ce}=Zc,zc=g(),jc=Y(),pN=Yr(),XE=At(),vn="clustering",eY=1e4,ON=5;NN.exports={generateNatsConfig:tY,removeNatsConfig:rY};async function tY(e=!1,t=void 0){jc.initSync();let r=jc.get(Ce.ROOTPATH),s=Bn.join(r,vn,Wc.PID_FILES.HUB),n=Bn.join(r,vn,Wc.PID_FILES.LEAF),i=Bn.join(r,vn,"leaf"),o=Bn.join(r,vn,Wc.NATS_CONFIG_FILES.HUB_SERVER),c=Bn.join(r,vn,Wc.NATS_CONFIG_FILES.LEAF_SERVER),_=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_CERTIFICATE),u=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_PRIVATEKEY),l=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_CERT_AUTH),E=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_INSECURE),d=Pt.getConfigFromFile(Ce.CLUSTERING_NODENAME),S=Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await XE.checkNATSServerInstalled()||e_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await ZE.listUsers(),R=Pt.getConfigFromFile(Ce.CLUSTERING_USER),w=await ZE.getClusterUser();(Hn.isEmpty(w)||w.active!==!0)&&e_(`invalid cluster user '${R}'`),e||(await Jc(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Jc(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Jc(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),await Jc(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[ha,Br]of m.entries())Br.role.role===Zc.ROLE_TYPES_ENUM.CLUSTER_USER&&Br.active&&(L.push(new j$(Br.username,pN.decrypt(Br.hash))),B.push(new z$(Br.username,pN.decrypt(Br.hash))));let z=[],{hub_routes:V}=Pt.getClusteringRoutes();if(!Hn.isEmptyOrZeroLength(V))for(let ha of V)z.push(`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@${ha.host}:${ha.port}`);let W=new Z$(Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,S,Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NAME),Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),z,L,B);t=Hn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Zc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Xc.writeJson(o,W),zc.trace(`Hub server config written to ${o}`));let ke=`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,xe=`tls://${w.uri_encoded_name}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,da=new X$(Pt.getConfigFromFile(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[ke],[xe],L,B,_,u,l,E);(t===void 0||t===Zc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Xc.writeJson(c,da),zc.trace(`Leaf server config written to ${c}`))}a(tY,"generateNatsConfig");async function Jc(e){let t=jc.get(e);Hn.isEmpty(t)&&e_(`port undefined for '${e}'`),await Hn.isPortTaken(t)&&e_(`'${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.`)}a(Jc,"isPortAvailable");function e_(e){let t=`Error generating clustering config: ${e}`;zc.error(t),console.error(t),process.exit(1)}a(e_,"generateNatsConfigError");async function rY(e){let{port:t,config_file:r}=XE.getServerConfig(e),{username:s,decrypt_hash:n}=await ZE.getClusterUser(),i=0,o=500;for(;i<ON;){try{let u=await XE.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){zc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=ON)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await Hn.async_set_timeout(o*i)}let c="0".repeat(eY),_=Bn.join(jc.get(Ce.ROOTPATH),vn,r);await Xc.writeFile(_,c),await Xc.remove(_)}a(rY,"removeNatsConfig")});var r_=h((I2,UN)=>{"use strict";var ne=Y(),gN=mn(),C=T(),jE=he(),Ae=require("path"),{PACKAGE_ROOT:t_}=T(),le="/dev/null",qn=Ae.join(t_,"launchServiceScripts"),IN=Ae.join(t_,"utility/scripts"),sY=Ae.join(IN,C.HDB_RESTART_SCRIPT),bN=Ae.resolve(t_,"dependencies",`${process.platform}-${process.arch}`,jE.NATS_BINARY_NAME),He,qe;function cr(){(He===void 0||qe===void 0)&&(ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(cr,"initLogConfig");function CN(){cr();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.IPC),t={name:C.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:C.SERVICE_SERVERS_CWD.IPC};return He||(t.out_file=le,t.error_file=le),{...t,script:C.SERVICE_SERVERS.IPC}}a(CN,"generateIPCServerConfig");function wN(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.HDB),t=gN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.HDB,script:C.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:qn};return He||(s.out_file=le,s.error_file=le),s}a(wN,"generateHDBServerConfig");function LN(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=gN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:C.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:qn};return He||(s.out_file=le,s.error_file=le),s}a(LN,"generateCFServerConfig");function nY(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",jE.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:bN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a(nY,"generateNatsHubServerConfig");function iY(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",jE.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:bN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a(iY,"generateNatsLeafServerConfig");function aY(){cr(),ne.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:qn};return He||(t.out_file=le,t.error_file=le),t}a(aY,"generateNatsIngestServiceConfig");function oY(){cr(),ne.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:qn};return He||(t.out_file=le,t.error_file=le),t}a(oY,"generateNatsReplyServiceConfig");function cY(){cr(),ne.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:C.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:qn,autorestart:!1};return He||(t.out_file=le,t.error_file=le),t}a(cY,"generateClusteringUpgradeV4ServiceConfig");function _Y(){cr();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.PM2),t={name:C.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:IN};return He||(t.out_file=le,t.error_file=le),{...t,script:sY}}a(_Y,"generateRestart");function uY(e){cr();let t=Ae.join(qe,C.PROCESS_LOG_NAMES.JOBS),r=Ae.join(t_,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:qn,autorestart:!1};return He||(s.out_file=le,s.error_file=le),{...s,script:Ae.join(r,"jobProcess.js")}}a(uY,"generateJobConfig");function lY(){return{apps:[CN(),wN(),LN()]}}a(lY,"generateAllServiceConfigs");UN.exports={generateAllServiceConfigs:lY,generateIPCServerConfig:CN,generateHDBServerConfig:wN,generateCFServerConfig:LN,generateRestart:_Y,generateNatsHubServerConfig:nY,generateNatsLeafServerConfig:iY,generateNatsIngestServiceConfig:aY,generateNatsReplyServiceConfig:oY,generateClusteringUpgradeV4ServiceConfig:cY,generateJobConfig:uY}});var Qi=h((b2,VN)=>{"use strict";var P=T(),s_=b(),Ki=zE(),n_=At(),EY=he(),x=require("pm2"),dY=require("fs-extra"),Lr=r_(),ut=Y(),Ur=g(),hY=r_(),SY=Ds(),fY=require("util"),DN=fY.promisify(require("child_process").exec),MN=require("path");VN.exports={start:vs,stop:a_,reload:BN,restart:vN,list:td,describe:o_,connect:_r,kill:qN,startAllServices:bY,startService:i_,getUniqueServicesList:rd,restartAllServices:CY,stopAllServices:wY,isServiceRegistered:GN,reloadStopStart:ed,restartHdb:HN,deleteProcess:gY,configureLogRotate:yY,startClustering:FN,isHdbRestartRunning:IY,isClusteringRunning:MY,stopClustering:DY,reloadClustering:PY};var{PACKAGE_ROOT:TY}=T(),mY="2.7.0",PN=MN.join(TY,"node_modules/pm2/bin/pm2"),RY="Log rotate installed.",AY="Error installing log rotate.",pY="Log rotate updated.",OY="Error updating log rotate.",NY="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 _r(){return new Promise((e,t)=>{x.connect((r,s)=>{r&&t(r),e(s)})})}a(_r,"connect");function vs(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.start(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(vs,"start");function a_(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.stop(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.delete(e,(i,o)=>{i&&(x.disconnect(),r(s)),x.disconnect(),t(o)})})})}a(a_,"stop");function BN(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.reload(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(BN,"reload");function vN(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.restart(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(vN,"restart");function gY(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.delete(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(gY,"deleteProcess");async function HN(){await vs(hY.generateRestart())}a(HN,"restartHdb");async function IY(){let e=await td();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(IY,"isHdbRestartRunning");function td(){return new Promise(async(e,t)=>{try{await _r()}catch(r){t(r)}x.list((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(td,"list");function o_(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.describe(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(o_,"describe");function qN(){return new Promise(async(e,t)=>{try{await _r()}catch(r){t(r)}x.killDaemon((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(qN,"kill");async function bY(){try{await FN(),await vs(Lr.generateAllServiceConfigs())}catch(e){throw x.disconnect(),e}}a(bY,"startAllServices");async function i_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Lr.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Lr.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Lr.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Lr.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Lr.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Lr.generateNatsHubServerConfig(),await vs(t),await Ki.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Lr.generateNatsLeafServerConfig(),await vs(t),await Ki.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Lr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await vs(t)}catch(t){throw x.disconnect(),t}}a(i_,"startService");async function rd(){try{let e=await td(),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 x.disconnect(),e}}a(rd,"getUniqueServicesList");async function CY(e=[]){try{let t=!1,r=await rd();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await ed(o):await vN(o))}t&&await ed(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw x.disconnect(),t}}a(CY,"restartAllServices");async function wY(){try{let e=await rd();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await a_(s.name)}if(await qN(),ut.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await dY.readFile(MN.join(ut.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ur.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw x.disconnect(),e}}a(wY,"stopAllServices");async function GN(e){return!s_.isEmptyOrZeroLength(await o_(e))}a(GN,"isServiceRegistered");async function ed(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?ut.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ut.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await o_(e),s=s_.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?Ur.error(NY):(await a_(e),await i_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await HN():await BN(e)}a(ed,"reloadStopStart");function LY(){return new Promise(async(e,t)=>{try{await _r()}catch(r){t(r)}x.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(LY,"stopLogrotate");async function UY(){let{stdout:e,stderr:t}=await DN(`${process.platform==="win32"?"node":""} ${PN} install pm2-logrotate@${mY}`);if(Ur.debug(`loadLogRotate stdout: ${e}`),t)throw Ur.error(AY),t;Ur.info(RY)}a(UY,"installLogRotate");async function yN(){let e={max_size:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${PN} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await DN(t);if(Ur.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ur.error(OY),s;Ur.info(pY)}a(yN,"updateLogRotateConfig");async function yY(){ut.initSync();let e=s_.autoCastBoolean(ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await o_(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(s_.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await UY(),await yN();return}if(e&&s){await vs(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await yN();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await LY()}a(yY,"configureLogRotate");async function FN(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await i_(r)}await n_.createWorkQueueStream(EY.WORK_QUEUE_CONSUMER_NAMES),await n_.updateNodeNameLocalStreams();let e=await SY.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){Ur.info("Starting clustering upgrade 4.0.0 process"),await i_(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(FN,"startClustering");async function DY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await a_(t)}}a(DY,"stopClustering");async function MY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await GN(t)===!1)return!1}return!0}a(MY,"isClusteringRunning");async function PY(){await Ki.generateNatsConfig(!0),await n_.reloadNATSHub(),await n_.reloadNATSLeaf(),await Ki.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ki.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(PY,"reloadClustering")});var od=h((C2,KN)=>{"use strict";var y=T(),K=g(),c_=b(),BY=su(),sd=zE(),ad=At(),vY=he(),xN=require("minimist"),{handleHDBError:nd,hdb_errors:HY}=D(),Wi=mr(),{HTTP_STATUS_CODES:id}=HY,G,kN=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,Hs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",qY="Invalid service",GY="'service' is required",FY="Restarting all services",VY="Clustering is not enabled so cannot be restarted";KN.exports={stop:xY,restartProcesses:kY,restartService:$N};async function kY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Qi());let e=BY(Object.keys(y.CONFIG_PARAM_MAP),!0);c_.isEmptyOrZeroLength(Object.keys(e))||Wi.updateConfigValue(void 0,void 0,e,!0,!0);let t=Wi.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=Wi.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=xN(process.argv);if(!c_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await G.isHdbRestartRunning()===!0){K.notify(Hs),console.error(Hs);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await Gn(_);else if(await G.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await $N({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await G.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await G.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await G.isHdbRestartRunning()===!0)return K.notify(Hs),console.error(Hs),Hs;console.log(kN),t&&await YN();let n=await G.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await G.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await G.configureLogRotate(),K.notify(FY),await G.restartAllServices(i),kN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(kY,"restartProcesses");async function $N(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),G===void 0&&(G=Qi()),c_.isEmpty(e.service))throw nd(new Error,GY,id.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw nd(new Error,qY,id.BAD_REQUEST,void 0,void 0,!0);let r=Wi.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await G.isHdbRestartRunning()===!0)return K.notify(Hs),Hs;await G.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await Gn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await G.isServiceRegistered(s);if(r)i?(await G.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await G.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await G.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),nd(new Error,o,id.BAD_REQUEST,void 0,void 0,!0)}}else await G.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a($N,"restartService");async function xY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Qi());let e=xN(process.argv);if(c_.isEmpty(e.service))console.log("Stopping HarperDB."),await G.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await G.stopClustering():await G.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(xY,"stop");async function YN(){await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await ad.updateNodeNameLocalStreams(),await ad.closeConnection()}a(YN,"restartAllClusteringServices");async function Gn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=Wi.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await G.isServiceRegistered(e),i=r||s?await G.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(VY);break}await G.reloadClustering();break;case(r&&i&&!t):await G.stopClustering();break;case(r&&!i&&t):await G.startClustering();break;case(r&&i&&t):await YN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await G.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await sd.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await ad.createWorkQueueStream(vY.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await G.reload(e):(await sd.generateNatsConfig(!0,e),await G.restart(e),await sd.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(Gn,"restartClustering")});var sg=h((L2,rg)=>{"use strict";var w2=require("lodash"),Xe=T(),{handleHDBError:QN,hdb_errors:$Y}=D(),{HDB_ERROR_MSGS:YY,HTTP_STATUS_CODES:KY}=$Y,cd=g();rg.exports={getRolePermissions:WY};var qs=Object.create(null),QY=a(e=>({key:e,perms:{}}),"perms_template_obj"),XN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),zN=a((e=!1,t=!1,r=!1,s=!1)=>({[Xe.PERMS_CRUD_ENUM.READ]:e,[Xe.PERMS_CRUD_ENUM.INSERT]:t,[Xe.PERMS_CRUD_ENUM.UPDATE]:r,[Xe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),_d=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...zN(t,r,s,n)}),"table_perms_template"),WN=a((e,t=zN())=>({attribute_name:e,describe:tg(t),[Ji]:t[Ji],[ud]:t[ud],[ld]:t[ld]}),"attr_perms_template"),JN=a((e,t=!1)=>({attribute_name:e,describe:t,[Ji]:t}),"timestamp_attr_perms_template"),{READ:Ji,INSERT:ud,UPDATE:ld}=Xe.PERMS_CRUD_ENUM,jN=Object.values(Xe.PERMS_CRUD_ENUM),eg=[Ji,ud,ld];function WY(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Xe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(qs[t]&&qs[t].key===s)return qs[t].perms;let n=JY(e,r);return qs[t]?qs[t].key=s:qs[t]=QY(s),qs[t].perms=n,n}catch(r){if(!e[Xe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Xe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Xe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw cd.error(s),cd.debug(r),QN(new Error,YY.OUTDATED_PERMS_TRANSLATION_ERROR,KY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw cd.error(s),QN(new Error)}}}a(WY,"getRolePermissions");function JY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Xe.SYSTEM_SCHEMA_NAME]=s[Xe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=ZY(t[i]);return}r[i]=XN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=XY(c,_);r[i].describe||jN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=_d()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=_d()})}),r}a(JY,"translateRolePermissions");function ZY(e){let t=XN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=_d(!0,!0,!0,!0,!0)}),t}a(ZY,"createStructureUserPermissions");function XY(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Xe.TIME_STAMP_NAMES.includes(E)&&(d=JN(E,l[Ji])),u[E]=d,u},{}),o=t[Xe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=WN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=tg(l),n.attribute_permissions.push(l),c||zY(l,_)}else if(u!==o){let l;Xe.TIME_STAMP_NAMES.includes(u)?l=JN(u):l=WN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=ZN(n),n}else return e.describe=ZN(e),e}a(XY,"getTableAttrPerms");function ZN(e){return jN.filter(t=>e[t]).length>0}a(ZN,"getSchemaTableDescribePerm");function tg(e){return eg.filter(t=>e[t]).length>0}a(tg,"getAttributeDescribePerm");function zY(e,t){eg.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(zY,"checkForHashPerms")});var ug=h((U2,_g)=>{"use strict";var Te=require("joi"),ng=require("fs-extra"),ig=require("path"),Fn=Ee(),ag=Y(),og=T(),cg=g(),{hdb_errors:jY}=D(),{HDB_ERROR_MSGS:lt}=jY,ns=/^[a-zA-Z0-9-_]+$/;_g.exports={getDropCustomFunctionValidator:tK,setCustomFunctionValidator:rK,addCustomFunctionProjectValidator:sK,dropCustomFunctionProjectValidator:nK,packageCustomFunctionProjectValidator:iK,deployCustomFunctionProjectValidator:aK};function Zi(e,t,r){try{let s=ag.get(og.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=ig.join(s,t);return ng.existsSync(n)?e?t:r.message(lt.PROJECT_EXISTS):e?r.message(lt.NO_PROJECT):t}catch(s){return cg.error(s),r.message(lt.VALIDATION_ERR)}}a(Zi,"checkProjectExists");function eK(e,t,r,s){try{let n=ag.get(og.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=ig.join(n,e,t,r+".js");return ng.existsSync(i)?r:s.message(lt.NO_FILE)}catch(n){return cg.error(n),s.message(lt.VALIDATION_ERR)}}a(eK,"checkFileExists");function tK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(ns).custom(eK.bind(null,e.project,e.type)).required().messages({"string.pattern.base":lt.BAD_FILE_NAME})});return Fn.validateBySchema(e,t)}a(tK,"getDropCustomFunctionValidator");function rK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(ns).required().messages({"string.pattern.base":lt.BAD_FILE_NAME}),function_content:Te.string().required()});return Fn.validateBySchema(e,t)}a(rK,"setCustomFunctionValidator");function sK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!1)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Fn.validateBySchema(e,t)}a(sK,"addCustomFunctionProjectValidator");function nK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Fn.validateBySchema(e,t)}a(nK,"dropCustomFunctionProjectValidator");function iK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Fn.validateBySchema(e,t)}a(iK,"packageCustomFunctionProjectValidator");function aK(e){let t=Te.object({project:Te.string().pattern(ns).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":lt.BAD_PACKAGE})});return Fn.validateBySchema(e,t)}a(aK,"deployCustomFunctionProjectValidator")});var hd=h((y2,dg)=>{"use strict";var we=require("fs-extra"),__=require("fast-glob"),ie=require("path"),lg=require("tar-fs"),Eg=require("uuid").v4,Xi=require("normalize-path"),Gs=ug(),Le=g(),pt=T(),Ot=Y(),{PACKAGE_ROOT:oK}=T(),{handleHDBError:ze,hdb_errors:cK}=D(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:je}=cK,_K=ie.join(oK,"custom_function_template"),Ed=ie.join(Ot.get(pt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function dd(){let e=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ze(new Error,is.NOT_ENABLED,je.BAD_REQUEST,void 0,void 0,!0)}a(dd,"isCFEnabled");function uK(){Le.trace("getting custom api status");let e={};try{e={is_enabled:Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ze(new Error,is.FUNCTION_STATUS,je.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(uK,"customFunctionsStatus");function lK(){Le.trace("getting custom api endpoints");let e={},t=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{__.sync(Xi(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:__.sync(Xi(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:__.sync(Xi(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:we.existsSync(Xi(`${s}/static`))&&__.sync(Xi(`${s}/static/**/*`)).length}})}catch(r){throw ze(new Error,is.GET_FUNCTIONS,je.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(lK,"getCustomFunctions");function EK(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Gs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ie.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw ze(new Error,is.GET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(EK,"getCustomFunction");function dK(e){dd(),e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Gs.setCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("setting custom function file content");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ie.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ze(new Error,is.SET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(dK,"setCustomFunction");function hK(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Gs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function file");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ie.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ze(new Error,is.DROP_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(hK,"dropCustomFunction");function SK(e){dd(),e.project&&(e.project=ie.parse(e.project).name);let t=Gs.addCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("adding custom function project");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ie.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(_K,n),`Successfully created custom function project: ${s}`}catch(n){throw ze(new Error,is.ADD_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(SK,"addCustomFunctionProject");function fK(e){e.project&&(e.project=ie.parse(e.project).name);let t=Gs.dropCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function project");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ie.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw ze(new Error,is.DROP_FUNCTION_PROJECT,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(fK,"dropCustomFunctionProject");async function TK(e){e.project&&(e.project=ie.parse(e.project).name);let t=Gs.packageCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("packaging custom function project");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ie.join(r,s),i=Eg();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}we.ensureDirSync(Ed);let c=ie.join(Ed,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ie.join(n,"node_modules"))}),lg.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(TK,"packageCustomFunctionProject");async function mK(e){dd(),e.project&&(e.project=ie.parse(e.project).name);let t=Gs.deployCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("deploying custom function project");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ie.join(r,s);await we.ensureDir(o);let c,_;do c=ie.join(Ed,Eg()+".tar"),_=await we.pathExists(c);while(_);await we.outputFile(c,n,{encoding:"base64"});let u=we.createReadStream(c);return u.pipe(lg.extract(o)),await new Promise(l=>u.on("end",l)),await we.unlink(c),`Successfully deployed project: ${s}`}a(mK,"deployCustomFunctionProject");dg.exports={customFunctionsStatus:uK,getCustomFunctions:lK,getCustomFunction:EK,setCustomFunction:dK,dropCustomFunction:hK,addCustomFunctionProject:SK,dropCustomFunctionProject:fK,packageCustomFunctionProject:TK,deployCustomFunctionProject:mK}});var Sd=h((D2,Sg)=>{"use strict";var ur=require("joi"),hg=Ee();Sg.exports={readTransactionLogValidator:RK,deleteTransactionLogsBeforeValidator:AK};function RK(e){let t=ur.object({schema:ur.string().required(),table:ur.string().required(),from:ur.date().timestamp(),to:ur.date().timestamp(),limit:ur.number().min(1)});return hg.validateBySchema(e,t)}a(RK,"readTransactionLogValidator");function AK(e){let t=ur.object({schema:ur.string().required(),table:ur.string().required(),timestamp:ur.date().timestamp().required()});return hg.validateBySchema(e,t)}a(AK,"deleteTransactionLogsBeforeValidator")});var l_=h((M2,Ag)=>{"use strict";var fd=T(),u_=At(),fg=b(),Tg=Y(),mg=Yr(),{handleHDBError:Vn,hdb_errors:pK}=D(),{HTTP_STATUS_CODES:kn}=pK,{readTransactionLogValidator:OK,deleteTransactionLogsBeforeValidator:NK}=Sd(),Rg="This operation relies on clustering and cannot run with it disable.",gK="Logs successfully deleted from transaction log.",IK="All logs successfully deleted from transaction log.";Ag.exports={readTransactionLog:bK,deleteTransactionLogsBefore:CK};async function bK(e){let t=OK(e);if(t)throw Vn(t,t.message,kn.BAD_REQUEST,void 0,void 0,!0);if(!Tg.get(fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Vn(new Error,Rg,kn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=fg.checkSchemaTableExist(r,s);if(n)throw Vn(new Error,n,kn.NOT_FOUND,void 0,void 0,!0);let i=mg.createNatsTableStreamName(r,s),o=await u_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===fd.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(bK,"readTransactionLog");async function CK(e){let t=NK(e);if(t)throw Vn(t,t.message,kn.BAD_REQUEST,void 0,void 0,!0);if(!Tg.get(fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Vn(new Error,Rg,kn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=fg.checkSchemaTableExist(r,s);if(i)throw Vn(new Error,i,kn.NOT_FOUND,void 0,void 0,!0);let o=mg.createNatsTableStreamName(r,s),{jsm:c}=await u_.getNATSReferences(),_=await u_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=gK,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=IK):E=(await u_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(CK,"deleteTransactionLogsBefore")});var md=h((P2,Ug)=>{"use strict";var E_=require("joi"),d_=require("path"),pg=require("fs-extra"),{exec:wK}=require("child_process"),LK=require("util"),Og=LK.promisify(wK),UK=T(),{handleHDBError:xn,hdb_errors:yK}=D(),{HTTP_STATUS_CODES:$n}=yK,Ng=Y(),DK=Ee(),h_=g();Ng.initSync();var Td=Ng.get(UK.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),gg="npm install --omit=dev --json",MK=`${gg} --dry-run`;Ug.exports={installModules:PK,auditModules:BK};async function Ig(e,t=void 0){let{stdout:r,stderr:s}=await Og(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
|
+
`,"")}a(vA,"runCommand");async function KF(){try{await LF.access(Wl)}catch{return!1}let e=await vA(`${Wl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return UF.eq(t,xF)}a(KF,"checkNATSServerInstalled");async function Xl(e,t,r,s=!0,n="127.0.0.1"){return HF({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Or.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(Xl,"createConnection");async function WF(){Kt&&(await Kt.close(),Kt=void 0)}a(WF,"closeConnection");async function ac(){if(!Kt){let e=await yA.getClusterUser();if(Ns(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Or.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Kt=await Xl(t,e.username,e.decrypt_hash)}return Kt}a(ac,"getConnection");async function Rn(){if(Ci)return Ci;Ns(Kt)&&await ac();let{domain:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ns(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ci=await Kt.jetstreamManager({domain:e}),Ci}a(Rn,"getJetStreamManager");async function HA(){if(wi)return wi;Ns(Kt)&&await ac();let{domain:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ns(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wi=Kt.jetstream({domain:e}),wi}a(HA,"getJetStream");async function Dt(){let e=Kt||await ac(),t=Ci||await Rn(),r=wi||await HA();return{connection:e,jsm:t,js:r}}a(Dt,"getNATSReferences");async function QF(){let e=Or.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await yA.getClusterUser(),s=await Xl(e,t,r),n=Jl(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(BA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Ql.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(QF,"getServerList");async function Zl(e,t){let{jsm:r}=await Dt();await r.streams.add({name:e,storage:DA.File,retention:MA.Limits,subjects:t})}a(Zl,"createLocalStream");async function qA(){let{jsm:e}=await Dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(qA,"listStreams");async function JF(e){let{jsm:t}=await Dt();await t.streams.delete(e)}a(JF,"deleteLocalStream");async function XF(e){let{connection:t}=await Dt(),r=[],s=Jl(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(BA.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(XF,"listRemoteStreams");async function ZF(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Dt(),i=DF(),o=[],c={ack_policy:PA.None,durable_name:i,deliver_subject:i,deliver_policy:Kl.All};t&&(c.deliver_policy=Kl.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=FF(l),d=UA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),S.originators=m)}o.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(ZF,"viewStream");async function zF(e,t,r=[],s=[]){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Dt(),o=await oc(),c=`${e}.${o}`,_=GF();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{Nr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Yl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")Nr.trace(`publishToStream creating stream: ${t}`),await Zl(t,[c]),await i.publish(c,Yl(r[u]),{headers:_});else throw E}}a(zF,"publishToStream");function Ui(e){e=e.toLowerCase();let t=Li.join(Or.get(ie.CONFIG_PARAMS.ROOTPATH),kF);if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ns(xl)&&(xl={port:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Li.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),xl;if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ns(kl)&&(kl={port:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:Li.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),kl;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ui,"getServerConfig");async function jF(e){let{jsm:t}=await Dt(),r=await oc();try{await t.streams.add({name:e.stream_name,storage:DA.File,retention:MA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.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:PA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Kl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(jF,"createWorkQueueStream");async function GA(e,t,r){let{jsm:s}=await Dt(),n=await s.streams.info(t),i=FA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=ic.createNatsTableStreamName(c,_),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,w=n.config.sources.length;R<w;R++)if(E=n.config.sources[R],d=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===o)return;await $A(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(GA,"addSourceToWorkStream");function FA(e){return e.split(".")[1]}a(FA,"extractServerName");async function VA(e,t,r){let{schema:s,table:n}=r,i=ic.createNatsTableStreamName(s,n),{jsm:o}=await Dt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config),await $A(s,n,u,t)}a(VA,"removeSourceFromWorkStream");async function $A(e,t,r,s){let n=await Rn(),i;try{i=YA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Nr.error("Error purging source subject",i,"from work stream",s)}}a($A,"purgeSourceFromWorkStream");async function e0(e,t,r=2e3,s=Jl()){if(!Ql.isObject(t))throw new Error("data param must be an object");let n=Yl(t),{connection:i}=await Dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return UA(c.data)}a(e0,"request");function zl(e){return new Promise(async(t,r)=>{let s=PF(Wl,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(zl,"reloadNATS");async function t0(){let{pid_file_path:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await zl(e)}a(t0,"reloadNATSHub");async function r0(){let{pid_file_path:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await zl(e)}a(r0,"reloadNATSLeaf");function s0(e,t,r){let s;switch(e.code){case CA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case CA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(s0,"requestErrorHandler");async function n0(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await BF.writeTransaction(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await GA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await VA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(n0,"updateWorkStream");async function kA(e,t){let r=ic.createNatsTableStreamName(e,t),s=await oc(),n=YA(e,t,s);await Zl(r,[n])}a(kA,"createLocalTableStream");async function i0(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await kA(s,n)}}a(i0,"createTableStreams");async function xA(e,t){if(Or.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ic.createNatsTableStreamName(e,t),{jsm:s}=await Dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}a(xA,"purgeTableStream");async function a0(e,t){if(Or.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await xA(e,t[r])}a(a0,"purgeSchemaTableStreams");async function o0(e){return(await Rn()).streams.info(e)}a(o0,"getStreamInfo");function YA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(YA,"createSubjectName");async function oc(){if(bi)return bi;if(bi=(await Rn())?.nc?.info?.server_name,bi===void 0)throw new Error("Unable to get jetstream manager server name");return bi}a(oc,"getJsmServerName");async function c0(){let e=await Rn(),t=await oc(),r=await qA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");Nr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(c0,"updateNodeNameLocalStreams")});var jl=h((E3,WA)=>{"use strict";var cc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(cc,"ClusteringOriginObject");WA.exports=cc});var On=h((d3,XA)=>{"use strict";var QA=b(),Di=Y(),_e=T(),eE=he(),An=Rt(),Se=g(),JA=jl(),_0=Vr();Di.initSync();var pn=eE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,yi=eE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;XA.exports={sendAttributeTransaction:uc,postOperationHandler:l0};async function uc(e,t,r=[]){if(!!Di.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!QA.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==_e.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=Di.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new JA(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${pn}`,o),await An.publishToStream(yi,pn,[o],r)}}}a(uc,"sendAttributeTransaction");async function _c(e,t,r,s=[]){if(e.schema===_e.SYSTEM_SCHEMA_NAME)return;let n=u0(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await An.publishToStream(`${eE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,_0.createNatsTableStreamName(e.schema,e.table),[n],s))}a(_c,"sendOperationTransaction");function u0(e,t,r){if(QA.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_e.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(u0,"convertCRUDOperationToTransaction");async function l0(e,t,r=[]){if(!Di.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Se.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=Di.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new JA(t.txn_time,s,n);switch(e.operation){case _e.OPERATIONS_ENUM.INSERT:try{await _c(e,t.inserted_hashes,i,r),await uc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.DELETE:try{await _c(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPDATE:try{await _c(e,t.update_hashes,i,r),await uc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPSERT:try{await _c(e,t.upserted_hashes,i,r),await uc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:_e.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for csv_data_load."),Se.error(o)}break;default:break}return t}a(l0,"postOperationHandler")});var tp=h((h3,ep)=>{"use strict";var E0=Tt(),d0=kr(),ZA=g(),zA=Ut(),h0=nc(),S0=require("clone"),rE=require("alasql"),f0=yo(),jA=require("util"),T0=jA.promisify(d0.getTableSchema),m0=jA.promisify(E0.search),R0=T(),tE=b(),A0=On();f0(rE);ep.exports={update:O0};var p0="There was a problem performing this update. Please check the logs and try again.";async function O0({statement:e,hdb_user:t}){let r=await T0(e.table.databaseid,e.table.tableid),s=N0(e.columns);tE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=S0(n),c=tE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=rE.parse(_).statements[0],l=await h0.writeTransaction(r.schema,r.name,async()=>{let E=await m0(u),d=g0(s,E);return I0(o,d,t)});return await zA.flush({schema:r.schema,table:r.name}),l}a(O0,"update");function N0(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=rE.compile(`SELECT ${r.expression.toString()} AS [${R0.FUNC_VAL}] FROM ?`)}),t}catch(t){throw ZA.error(t),new Error(p0)}}a(N0,"createUpdateRecord");function g0(e,t){return tE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(g0,"buildUpdateRecords");async function I0(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await zA.update(s);await A0.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){ZA.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(I0,"updateRecords")});var sp=h((S3,rp)=>{var b0=require("alasql"),C0=Tt(),w0=g(),L0=Rr(),nE=require("util"),sE=b(),U0=T(),y0=kr(),D0=nc(),M0=On(),P0=Ut(),B0="record",v0="successfully deleted",H0=nE.callbackify(V0),q0=nE.promisify(C0.search),G0=nE.promisify(y0.getTableSchema);rp.exports={convertDelete:H0};function F0(e){return`${e.deleted_hashes.length} ${B0}${e.deleted_hashes.length===1?"":"s"} ${v0}`}a(F0,"generateReturnMessage");async function V0({statement:e,hdb_user:t}){let r=await G0(e.table.databaseid,e.table.tableid);sE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=sE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=b0.parse(o).statements[0],_={operation:U0.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await D0.writeTransaction(r.schema,r.name,async()=>(_.records=await q0(c),L0.deleteRecords(_)));return await P0.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await M0.postOperationHandler(_,u),sE.isEmptyOrZeroLength(u.message)&&(u.message=F0(u)),delete u.txn_time,u}catch(u){throw w0.error(u),u.hdb_code?u.message:u}}a(V0,"convertDelete")});var ap=h((f3,ip)=>{"use strict";var aE=Ts(),{hdb_errors:iE}=D();ip.exports={checkSchemaExists:np,checkSchemaTableExists:$0,schema_describe:aE};async function np(e){if(!global.hdb_schema[e])try{let t=await aE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(np,"checkSchemaExists");async function $0(e,t){let r=await np(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await aE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a($0,"checkSchemaTableExists")});var lc=h((m3,lp)=>{"use strict";var Nn=Qa(),gs=ap(),op=g(),k0=require("uuid").v4,T3=require("clone"),In=zs(),Is=T(),x0=require("util"),bs=Rr(),{handleHDBError:Pe,hdb_errors:Y0}=D(),{HDB_ERROR_MSGS:gn,HTTP_STATUS_CODES:Be}=Y0,{SchemaEventMsg:bn}=qr(),cp=Rt();lp.exports={createSchema:K0,createSchemaStructure:_p,createTable:W0,createTableStructure:up,createAttribute:z0,dropSchema:Q0,dropTable:J0,dropAttribute:X0};async function K0(e){try{let t=await _p(e);return In.signalSchemaChange(new bn(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(K0,"createSchema");async function _p(e){let t=Nn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);if(!await gs.checkSchemaExists(e.schema))throw Pe(new Error,gn.SCHEMA_EXISTS_ERR(e.schema),Be.BAD_REQUEST,Is.LOG_LEVELS.ERROR,gn.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await bs.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(_p,"createSchemaStructure");async function W0(e){try{let t=await up(e);return In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(W0,"createTable");async function up(e){let t=Nn.create_table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);Nn.validateTableResidence(e.residence);let r=await gs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(!await gs.checkSchemaTableExists(e.schema,e.table))throw Pe(new Error,gn.TABLE_EXISTS_ERR(e.schema,e.table),Be.BAD_REQUEST,Is.LOG_LEVELS.ERROR,gn.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:k0(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await bs.createTable(n,e);else throw Pe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Be.BAD_REQUEST);else await bs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(up,"createTableStructure");async function Q0(e){let t=Nn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);let s=await gs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await bs.dropSchema(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await cp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(Q0,"dropSchema");async function J0(e){let t=Nn.table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);return await bs.dropTable(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table)),await cp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(J0,"dropTable");async function X0(e){let t=Nn.attribute_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Pe(new Error,"You cannot drop a hash attribute",Be.BAD_REQUEST,void 0,void 0,!0);if(Is.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Pe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Be.BAD_REQUEST,void 0,void 0,!0);try{return await bs.dropAttribute(e),Z0(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw op.error(`Got an error deleting attribute ${x0.inspect(e)}.`),s}}a(X0,"dropAttribute");function Z0(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(Z0,"dropAttributeFromGlobal");async function z0(e){if(!global.hdb_schema[e.schema])throw Pe(new Error,gn.SCHEMA_NOT_FOUND(e.schema),Be.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw Pe(new Error,gn.TABLE_NOT_FOUND(e.schema,e.table),Be.NOT_FOUND,void 0,void 0,!0);try{return await bs.createAttribute(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw op.error(t),t}}a(z0,"createAttribute")});var dp=h((R3,Ep)=>{"use strict";var{OPERATIONS_ENUM:j0}=T(),Ec=class{constructor(t,r,s=void 0,n=void 0){this.operation=j0.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Ec,"ReadAuditLogObject");Ep.exports=Ec});var oE=h((p3,mp)=>{"use strict";var eV=Rr(),A3=dp(),dc=b(),hc=T(),tV=Y(),{handleHDBError:hp,hdb_errors:rV}=D(),{HDB_ERROR_MSGS:Sp,HTTP_STATUS_CODES:fp}=rV,sV=Object.values(hc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Tp="To use this operation audit log must be enabled in harperdb-config.yaml";mp.exports=nV;async function nV(e){if(dc.isEmpty(e.schema))throw new Error(Sp.SCHEMA_REQUIRED_ERR);if(dc.isEmpty(e.table))throw new Error(Sp.TABLE_REQUIRED_ERR);if(!tV.get(hc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hp(new Error,Tp,fp.BAD_REQUEST,hc.LOG_LEVELS.ERROR,Tp,!0);let t=dc.checkSchemaTableExist(e.schema,e.table);if(t)throw hp(new Error,t,fp.NOT_FOUND,hc.LOG_LEVELS.ERROR,t,!0);if(!dc.isEmpty(e.search_type)&&sV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await eV.readAuditLog(e)}a(nV,"readAuditLog")});var gp=h((O3,Np)=>{var Jr=require("validate.js"),Ap=Ee(),Cn=T(),{handleHDBError:iV,hdb_errors:aV}=D(),{HDB_ERROR_MSGS:ue,HTTP_STATUS_CODES:oV}=aV,cE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cV={STRUCTURE_USER:"structure_user"},Rp=Object.values(Cn.ROLE_TYPES_ENUM),_V="attribute_permissions",uV="attribute_name",{PERMS_CRUD_ENUM:wn}=Cn,lV=[_V,...Object.values(wn)],pp=[wn.READ,wn.INSERT,wn.UPDATE],EV=[uV,...pp];function dV(e){let t=cE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Op(e,t)}a(dV,"addRoleValidation");function hV(e){let t=cE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Op(e,t)}a(hV,"alterRoleValidation");function SV(e){let t=cE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ap.validateObject(e,t)}a(SV,"dropRoleValidation");var fV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Op(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)fV.includes(s[o])||n.push(s[o]);n.length>0&&fe(ue.INVALID_ROLE_JSON_KEYS(n),r);let i=Ap.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=TV(e);o&&fe(o,r),Rp.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&fe(ue.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Rp.indexOf(o)<0){if(o===cV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||fe(ue.SCHEMA_NOT_FOUND(E),r)}continue}fe(ue.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(ue.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(ue.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{lV.includes(l)||fe(ue.INVALID_PERM_KEY(l),r,o,_)}),Object.values(wn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||fe(ue.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(ue.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){fe(ue.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(ue.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(R=>{!EV.includes(R)&&R!==wn.DELETE&&fe(ue.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(S.attribute_name)){fe(ue.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=S.attribute_name;if(!l.includes(m)){fe(ue.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}pp.forEach(R=>{Jr.isDefined(S[R])?Jr.isBoolean(S[R])||fe(ue.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(ue.ATTR_PERM_MISSING(R,m),r,o,_)}),!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 d=`${o}.${_}`;fe(ue.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return mV(r)}a(Op,"customValidate");Np.exports={addRoleValidation:dV,alterRoleValidation:hV,dropRoleValidation:SV};function TV(e){let{operation:t,permission:r}=e;if(t===Cn.OPERATIONS_ENUM.ADD_ROLE||t===Cn.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 ue.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Cn.ROLE_TYPES_ENUM.SUPER_USER:Cn.ROLE_TYPES_ENUM.CLUSTER_USER;return ue.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(TV,"validateNoSUPerms");function mV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ue.ROLE_PERMS_ERROR,...e};return iV(new Error,s,oV.BAD_REQUEST)}else return null}a(mV,"generateRolePermResponse");function fe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(fe,"addPermError")});var fE=h((N3,Up)=>{"use strict";var Ip=Ut(),bp=Tt(),RV=As(),lE=gp(),EE=zs(),AV=require("uuid").v4,dE=require("util"),pV=Sn(),gr=T(),Cp=b(),hE=dE.promisify(bp.searchByValue),OV=dE.promisify(bp.searchByHash),NV=dE.promisify(RV.delete),gV=Yt(),IV=hs(),{hdb_errors:bV,handleHDBError:Mi}=D(),{HDB_ERROR_MSGS:wp,HTTP_STATUS_CODES:_E}=bV,{UserEventMsg:SE}=qr();Up.exports={addRole:CV,alterRole:LV,dropRole:UV,listRoles:Lp};function uE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(uE,"scrubRoleDetails");async function CV(e){let t=lE.addRoleValidation(e);if(t)throw t;if(!(await pV.getLicense()).enterprise){let o=await Lp();if(wV(e,o))throw new Error(`Your current license only supports ${gr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${gr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${gr.BASIC_LICENSE_MAX_NON_CU_ROLES+gr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${gr.SUPPORT_HELP_MSG}`)}e=uE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await hE(s)}catch(o){throw Mi(o)}if(n&&n.length>0)throw Mi(new Error,wp.ROLE_ALREADY_EXISTS(e.role),_E.CONFLICT,void 0,void 0,!0);e.id||(e.id=AV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ip.insert(i),EE.signalUserChange(new SE(process.pid)),e=uE(e),e}a(CV,"addRole");function wV(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(!Cp.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(wV,"checkClusterUserRole");async function LV(e){let t=lE.alterRoleValidation(e);if(t)throw t;e=uE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Ip.update(r)}catch(s){throw Mi(s)}return EE.signalUserChange(new SE(process.pid)),e}a(LV,"alterRole");async function UV(e){let t=lE.dropRoleValidation(e);if(t)throw Mi(new Error,t,_E.BAD_REQUEST,void 0,void 0,!0);let r=new IV(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await OV(r);if(s.length===0)throw Mi(new Error,wp.ROLE_NOT_FOUND,_E.NOT_FOUND,void 0,void 0,!0);let n=new gV(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await hE(n),o=!1;if(Cp.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await NV(c),EE.signalUserChange(new SE(process.pid)),`${s[0].role} successfully deleted`}a(UV,"dropRole");async function Lp(){return hE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Lp,"listRoles")});var Pp=h((g3,Mp)=>{"use strict";var yV=Y(),Xr=require("joi"),DV=Ee(),yp=require("moment"),MV=require("fs-extra"),TE=require("path"),PV=require("lodash"),Pi=T(),{LOG_LEVELS:Cs}=T(),BV="YYYY-MM-DD hh:mm:ss",vV=TE.resolve(__dirname,"../logs");Mp.exports=function(e){return DV.validateBySchema(e,HV)};var HV=Xr.object({from:Xr.custom(Dp),until:Xr.custom(Dp),level:Xr.valid(Cs.NOTIFY,Cs.FATAL,Cs.ERROR,Cs.WARN,Cs.INFO,Cs.DEBUG,Cs.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(qV)});function Dp(e,t){if(yp(e,yp.ISO_8601).format(BV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Dp,"validateDatetime");function qV(e,t){if(PV.invert(Pi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=yV.get(Pi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Pi.PROCESS_LOG_NAMES.HDB:e,i=n===Pi.PROCESS_LOG_NAMES.INSTALL?TE.join(vV,Pi.PROCESS_LOG_NAMES.INSTALL):TE.join(s,n);return MV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(qV,"validateReadLogPath")});var RE=h((I3,vp)=>{"use strict";var Sc=T(),Bp=g(),GV=Y(),FV=Pp(),mE=require("path"),VV=require("fs-extra"),$V=require("readline"),{once:kV}=require("events"),{handleHDBError:xV,hdb_errors:YV}=D(),{PACKAGE_ROOT:KV}=T(),WV=mE.join(KV,"logs"),QV=1e3;vp.exports=JV;async function JV(e){let t=FV(e);if(t)throw xV(t,t.message,YV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=GV.get(Sc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Sc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===Sc.PROCESS_LOG_NAMES.INSTALL?mE.join(WV,Sc.PROCESS_LOG_NAMES.INSTALL):mE.join(r,s),i=VV.createReadStream(n);i.on("error",z=>{Bp.error(z)});let o=$V.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,S=e.limit===void 0?QV:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,w=R+S,L=0,B=[];return o.on("line",z=>{let V,Q,$e,ke;try{V=JSON.parse(z)}catch(la){Bp.warn(la.message);return}switch(!0){case(c&&u&&E):Q=new Date(V.timestamp),$e=new Date(l),ke=new Date(d),V.level===_&&Q>=$e&&Q<=ke&&L<R?L++:V.level===_&&Q>=$e&&Q<=ke&&(zr(V,m,B),L++,L===w&&Zr(o));break;case(c&&u):Q=new Date(V.timestamp),$e=new Date(l),V.level===_&&Q>=$e&&L<R?L++:V.level===_&&Q>=$e&&(zr(V,m,B),L++,L===w&&Zr(o));break;case(c&&E):Q=new Date(V.timestamp),ke=new Date(d),V.level===_&&Q<=ke&&L<R?L++:V.level===_&&Q<=ke&&(zr(V,m,B),L++,L===w&&Zr(o));break;case(u&&E):Q=new Date(V.timestamp),$e=new Date(l),ke=new Date(d),Q>=$e&&Q<=ke&&L<R?L++:Q>=$e&&Q<=ke&&(zr(V,m,B),L++,L===w&&Zr(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(zr(V,m,B),L++,L===w&&Zr(o));break;case u:Q=new Date(V.timestamp),$e=new Date(l),Q>=$e&&L<R?L++:Q>=$e&&L>=R&&(zr(V,m,B),L++,L===w&&Zr(o));break;case E:Q=new Date(V.timestamp),ke=new Date(d),Q<=ke&&L<R?L++:Q<=ke&&L>=R&&(zr(V,m,B),L++,L===w&&Zr(o));break;default:L<R?L++:(zr(V,m,B),L++,L===w&&Zr(o))}}),await kV(o,"close"),B}a(JV,"readLog");function Zr(e){e.close(),e.removeAllListeners()}a(Zr,"endReadLine");function zr(e,t,r){t==="desc"?XV(e,r):t==="asc"?ZV(e,r):r.push(e)}a(zr,"pushLineToResult");function XV(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(XV,"insertDescending");function ZV(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(ZV,"insertAscending")});var Tc=h((w3,Gp)=>{"use strict";var AE=require("joi"),{string:fc,boolean:Hp,date:zV}=AE.types(),jV=Ee(),{validateSchemaExists:b3,validateTableExists:C3,validateSchemaName:e$}=Sr(),t$=T(),r$=he(),s$=Y(),n$=fc.invalid(s$.get(t$.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(r$.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),qp={operation:fc.valid("add_node","update_node"),node_name:n$,subscriptions:AE.array().items({table:fc.required(),schema:fc.custom(e$).required(),subscribe:Hp.required(),publish:Hp.required().custom(a$),start_time:zV.iso()}).min(1).required()};function i$(e){return jV.validateBySchema(e,AE.object(qp))}a(i$,"addUpdateNodeValidator");function a$(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(a$,"checkForFalsy");Gp.exports={addUpdateNodeValidator:i$,validation_schema:qp}});var Ln=h((L3,Fp)=>{"use strict";var mc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(mc,"Node");var Rc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Rc,"NodeSubscription");Fp.exports={Node:mc,NodeSubscription:Rc}});var $p=h((U3,Vp)=>{"use strict";var o$=T().OPERATIONS_ENUM,Ac=class{constructor(t,r,s,n=void 0){this.operation=o$.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ac,"UpsertObject");Vp.exports=Ac});var Bi=h((y3,kp)=>{"use strict";var pc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(pc,"RemotePayloadObject");var Oc=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Oc,"RemotePayloadSubscription");kp.exports={RemotePayloadObject:pc,RemotePayloadSubscription:Oc}});var Yp=h((D3,xp)=>{"use strict";var Nc=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(Nc,"TableSizeObject");xp.exports=Nc});var Jp=h((M3,Qp)=>{"use strict";var c$=Yp(),Kp=require("path"),Wp=te(),_$=Ye(),Un=X(),u$=g();Qp.exports=l$;async function l$(e){let t=new c$;try{let r=Kp.join(Wp.getBaseSchemaPath(),e.schema.toString()),s=await Un.openEnvironment(r,e.name),n=Un.statDBI(s,e.hash_attribute),i=Kp.join(Wp.getTransactionAuditStorePath(),e.schema.toString()),o=await Un.openEnvironment(i,e.name,!0),c=Un.statDBI(o,_$.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Un.environmentDataSize(r,e.name),u=await Un.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){u$.warn(`unable to stat table dbi due to ${r}`)}return t}a(l$,"lmdbGetTableSize")});var Zp=h((P3,Xp)=>{"use strict";var E$=T(),gc=class{constructor(t){this.operator=E$.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(gc,"SystemInformationOperation");Xp.exports=gc});var jp=h((B3,zp)=>{"use strict";var Ic=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(Ic,"SystemInformationObject");zp.exports=Ic});var Cc=h((H3,eO)=>{"use strict";var ve=require("systeminformation"),yn=g(),d$=T(),h$=Jp(),S$=Ts(),f$=Y();f$.initSync();var v3=Zp(),T$=jp(),bc;eO.exports={getHDBProcessInfo:gE,getNetworkInfo:bE,getDiskInfo:IE,getMemoryInfo:NE,getCPUInfo:OE,getTimeInfo:pE,getSystemInformation:CE,systemInformation:m$,getTableSize:wE};function pE(){return ve.time()}a(pE,"getTimeInfo");async function OE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:w,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(z=>{let{raw_load:V,raw_load_idle:Q,raw_load_irq:$e,raw_load_nice:ke,raw_load_system:la,raw_load_user:Ea,...yr}=z;B.cpus.push(yr)}),l.current_load=B,l}catch(e){return yn.error(`error in getCPUInfo: ${e}`),{}}}a(OE,"getCPUInfo");async function NE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return yn.error(`error in getMemoryInfo: ${e}`),{}}}a(NE,"getMemoryInfo");async function gE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(d$.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return yn.error(`error in getHDBProcessInfo: ${t}`),e}}a(gE,"getHDBProcessInfo");async function IE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return yn.error(`error in getDiskInfo: ${t}`),e}}a(IE,"getDiskInfo");async function bE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return yn.error(`error in getNetworkInfo: ${t}`),e}}a(bE,"getNetworkInfo");async function CE(){if(bc!==void 0)return bc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,bc=e,bc}catch(t){return yn.error(`error in getSystemInformation: ${t}`),e}}a(CE,"getSystemInformation");async function wE(){let e=[],t=await S$.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await h$(s));return e}a(wE,"getTableSize");async function m$(e){let t=new T$;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await CE(),t.time=pE(),t.cpu=await OE(),t.memory=await NE(),t.disk=await IE(),t.network=await bE(),t.harperdb_processes=await gE(),t.table_size=await wE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await CE();break;case"time":t.time=pE();break;case"cpu":t.cpu=await OE();break;case"memory":t.memory=await NE();break;case"disk":t.disk=await IE();break;case"network":t.network=await bE();break;case"harperdb_processes":t.harperdb_processes=await gE();break;case"table_size":t.table_size=await wE();break;default:break}return t}a(m$,"systemInformation")});var LE=h((F3,tO)=>{"use strict";var q3=require("fs-extra"),G3=g();tO.exports={version:R$,printVersion:p$,nodeVersion:A$};var jr=wa();function R$(){if(jr)return jr.version}a(R$,"version");function A$(){if(jr&&jr.engines&&jr.engines["preferred-node"])return jr.engines["preferred-node"]}a(A$,"nodeVersion");function p$(){jr&&console.log(`HarperDB Version ${jr.version}`)}a(p$,"printVersion")});var Ls=h((k3,iO)=>{"use strict";var O$=Ut(),UE=b(),yE=require("util"),ws=T(),rO=Y();rO.initSync();var N$=$l(),sO=Tt(),{Node:V3,NodeSubscription:$3}=Ln(),g$=hs(),I$=$p(),{RemotePayloadObject:b$,RemotePayloadSubscription:C$}=Bi(),{handleHDBError:w$,hdb_errors:L$}=D(),{HTTP_STATUS_CODES:U$,HDB_ERROR_MSGS:y$}=L$,D$=Yt(),M$=Cc(),P$=LE(),B$=yE.promisify(N$.authorize),v$=yE.promisify(sO.searchByHash),H$=yE.promisify(sO.searchByValue);iO.exports={authHeaderToUser:q$,isEmpty:G$,getNodeRecord:F$,upsertNodeRecord:V$,buildNodePayloads:$$,checkClusteringEnabled:k$,getAllNodeRecords:x$,getSystemInfo:Y$,reverseSubscription:nO};async function q$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await B$(t,null),e}a(q$,"authHeaderToUser");function G$(e){return e==null}a(G$,"isEmpty");async function F$(e){let t=new g$(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return v$(t)}a(F$,"getNodeRecord");async function V$(e){let t=new I$(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return O$.upsert(t)}a(V$,"upsertNodeRecord");function nO(e){if(UE.isEmpty(e.subscribe)||UE.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(nO,"reverseSubscription");function $$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=UE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=nO(c),S=new C$(_,u,l,d,E,c.start_time);n.push(S)}return new b$(r,t,n,s)}a($$,"buildNodePayloads");function k$(){if(!rO.get(ws.CONFIG_PARAMS.CLUSTERING_ENABLED))throw w$(new Error,y$.CLUSTERING_NOT_ENABLED,U$.BAD_REQUEST,void 0,void 0,!0)}a(k$,"checkClusteringEnabled");async function x$(){let e=new D$(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return H$(e)}a(x$,"getAllNodeRecords");async function Y$(){let e=await M$.getSystemInformation();return{hdb_version:P$.version(),node_version:e.node_version,platform:e.platform}}a(Y$,"getSystemInfo")});var ME=h((x3,lO)=>{"use strict";var DE=Rt(),aO=b(),oO=he(),K$=T(),wc=g(),cO=lc(),W$=el(),{RemotePayloadObject:Q$}=Bi(),{handleHDBError:_O,hdb_errors:J$}=D(),{HTTP_STATUS_CODES:uO}=J$,{NodeSubscription:X$}=Ln();lO.exports=Z$;async function Z$(e,t){let r;try{r=await DE.request(`${t}.${oO.REQUEST_SUFFIX}`,new Q$(K$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),wc.trace("Response from remote describe all request:",r)}catch(o){wc.error(`addNode received error from describe all request to remote node: ${o}`);let c=DE.requestErrorHandler(o,"add_node",t);throw _O(new Error,c,uO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw _O(new Error,o,uO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=aO.doesSchemaExist(c),l=s[c]!==void 0,E=aO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(wc.trace(`addNode creating schema: ${c}`),await cO.createSchema({operation:"create_schema",schema:c})),!E&&d){wc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new W$(c,_,s[c][_].hash_attribute);await cO.createTable(m)}await DE.createLocalTableStream(c,_);let S=new X$(c,_,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(Z$,"reviewSubscriptions")});var yc=h((Y3,hO)=>{"use strict";var{handleHDBError:Lc,hdb_errors:z$}=D(),{HTTP_STATUS_CODES:Uc}=z$,{addUpdateNodeValidator:j$}=Tc(),vi=g(),dO=T(),EO=he(),ek=b(),PE=Rt(),Hi=Ls(),tk=Y(),rk=ME(),{Node:sk,NodeSubscription:nk}=Ln(),ik="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",ak="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ok=tk.get(dO.CONFIG_PARAMS.CLUSTERING_NODENAME);hO.exports=ck;async function ck(e,t=!1){vi.trace("addNode called with:",e),Hi.checkClusteringEnabled();let r=j$(e);if(r)throw Lc(r,r.message,Uc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Hi.getNodeRecord(s);if(!ek.isEmptyOrZeroLength(E))throw Lc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Uc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await rk(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=ik,o;let c=Hi.buildNodePayloads(n,ok,dO.OPERATIONS_ENUM.ADD_NODE,await Hi.getSystemInfo());vi.trace("addNode sending remote payload:",c);let _;try{_=await PE.request(`${s}.${EO.REQUEST_SUFFIX}`,c)}catch(E){vi.error(`addNode received error from request: ${E}`);let d=PE.requestErrorHandler(E,"add_node",s);throw Lc(new Error,d,Uc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===EO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Lc(new Error,E,Uc.INTERNAL_SERVER_ERROR,"error",E)}vi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let S=n[E];vi.trace("Add node updating work stream for node:",s,"subscriptions:",S),await PE.updateWorkStream(S,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new nk(S.schema,S.table,S.publish,S.subscribe))}let l=new sk(s,u,_.system_info);return await Hi.upsertNodeRecord(l),i.length>0?o.message=ak:o.message=`Successfully added '${s}' to manifest`,o}a(ck,"addNode")});var vE=h((K3,TO)=>{"use strict";var{handleHDBError:Dc,hdb_errors:_k}=D(),{HTTP_STATUS_CODES:Mc}=_k,{addUpdateNodeValidator:uk}=Tc(),qi=g(),fO=T(),SO=he(),lk=b(),BE=Rt(),Gi=Ls(),Ek=Y(),{cloneDeep:dk}=require("lodash"),hk=ME(),{NodeSubscription:Sk}=Ln(),fk="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Tk="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mk=Ek.get(fO.CONFIG_PARAMS.CLUSTERING_NODENAME);TO.exports=Rk;async function Rk(e){qi.trace("updateNode called with:",e),Gi.checkClusteringEnabled();let t=uk(e);if(t)throw Dc(t,t.message,Mc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=dk(await Gi.getNodeRecord(r));if(lk.isEmptyOrZeroLength(s))throw Dc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Mc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await hk(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=fk,o;let c=Gi.buildNodePayloads(n,mk,fO.OPERATIONS_ENUM.UPDATE_NODE,await Gi.getSystemInfo());qi.trace("updateNode sending remote payload:",c);let _;try{_=await BE.request(`${r}.${SO.REQUEST_SUFFIX}`,c)}catch(u){qi.error(`updateNode received error from request: ${u}`);let l=BE.requestErrorHandler(u,"update_node",r);throw Dc(new Error,l,Mc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===SO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Dc(new Error,u,Mc.INTERNAL_SERVER_ERROR,"error",u)}qi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];qi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await BE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await Ak(s[0],n,_.system_info),i.length>0?o.message=Tk:o.message=`Successfully updated '${r}'`,o}a(Rk,"updateNode");async function Ak(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Sk(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Gi.upsertNodeRecord(s)}a(Ak,"updateNodeTable")});var OO=h((W3,pO)=>{"use strict";var AO=require("joi"),{string:mO}=AO.types(),pk=Ee(),RO=T(),Ok=Y(),Nk=he();pO.exports=gk;function gk(e){let t=mO.invalid(Ok.get(RO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Nk.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=AO.object({operation:mO.valid(RO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pk.validateBySchema(e,r)}a(gk,"removeNodeValidator")});var Bc=h((Q3,wO)=>{"use strict";var{handleHDBError:NO,hdb_errors:Ik}=D(),{HTTP_STATUS_CODES:gO}=Ik,bk=OO(),Fi=g(),IO=Ls(),Ck=b(),Pc=T(),bO=he(),CO=Rt(),wk=Y(),{RemotePayloadObject:Lk}=Bi(),{NodeSubscription:Uk}=Ln(),yk=di(),Dk=As(),Mk=wk.get(Pc.CONFIG_PARAMS.CLUSTERING_NODENAME);wO.exports=Pk;async function Pk(e){Fi.trace("removeNode called with:",e),IO.checkClusteringEnabled();let t=bk(e);if(t)throw NO(t,t.message,gO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await IO.getNodeRecord(r);if(Ck.isEmptyOrZeroLength(s))throw NO(new Error,`Node '${r}' was not found.`,gO.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Lk(Pc.OPERATIONS_ENUM.REMOVE_NODE,Mk,[]),i,o=!1;try{i=await CO.request(`${r}.${bO.REQUEST_SUFFIX}`,n),Fi.trace("Remove node reply from remote node:",r,i)}catch(_){Fi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Fi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new Uk(l.schema,l.table,!1,!1);await CO.updateWorkStream(E,r)}let c=new yk(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Dk.deleteRecord(c),i?.status===bO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Pk,"removeNode")});var yO=h((J3,UO)=>{"use strict";var LO=require("joi"),{string:Bk,array:vk}=LO.types(),Hk=Ee(),qk=Tc();UO.exports=Gk;function Gk(e){let t=LO.object({operation:Bk.valid("configure_cluster").required(),connections:vk.items(qk.validation_schema).required()});return Hk.validateBySchema(e,t)}a(Gk,"configureClusterValidator")});var HE=h((X3,vO)=>{"use strict";var Fk=T(),vc=g(),Vk=b(),$k=Bc(),kk=yc(),DO=Ls(),xk=yO(),{handleHDBError:MO,hdb_errors:Yk}=D(),{HTTP_STATUS_CODES:PO}=Yk,Kk="Configure cluster complete.",Wk="Failed to configure the cluster. Check the logs for more details.",Qk="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";vO.exports=Jk;async function Jk(e){vc.trace("configure cluster called with:",e),DO.checkClusteringEnabled();let t=xk(e);if(t)throw MO(t,t.message,PO.BAD_REQUEST,void 0,void 0,!0);let r=await DO.getAllNodeRecords(),s=[];for(let d=0,S=r.length;d<S;d++)s.push(BO($k,{operation:Fk.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);vc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let S=e.connections[d];i.push(BO(kk,S,S.node_name))}let c=await Promise.allSettled(i);vc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,S=E.length;d<S;d++){let m=E[d];m.status==="rejected"&&(vc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(Vk.isEmptyOrZeroLength(_))return{message:Kk,connections:u};if(l)return{message:Qk,failed_nodes:_,connections:u};throw MO(new Error,Wk,PO.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Jk,"configureCluster");async function BO(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(BO,"functionWrapper")});var FE=h((Z3,$O)=>{"use strict";var GE=Ls(),Xk=Rt(),GO=Y(),Hc=T(),Us=he(),Zk=b(),qE=g(),{RemotePayloadObject:zk}=Bi(),{ErrorCode:HO}=require("nats"),qO=GO.get(Hc.CONFIG_PARAMS.CLUSTERING_ENABLED),FO=GO.get(Hc.CONFIG_PARAMS.CLUSTERING_NODENAME);$O.exports={clusterStatus:jk,buildNodeStatus:VO};async function jk(){let e={node_name:FO,is_enabled:qO,connections:[]};if(!qO)return e;let t=await GE.getAllNodeRecords();if(Zk.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(VO(t[s],e.connections));return await Promise.allSettled(r),e}a(jk,"clusterStatus");async function VO(e,t){let r=e.name,s=new zk(Hc.OPERATIONS_ENUM.CLUSTER_STATUS,FO,void 0,await GE.getSystemInfo()),n,i,o=Us.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await Xk.request(Us.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Us.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Us.CLUSTER_STATUS_STATUSES.CLOSED,qE.error(`Error getting node status from ${r} `,n))}catch(_){qE.warn(`Error getting node status from ${r}`,_),_.code===HO.NoResponders?o=Us.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===HO.Timeout?o=Us.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Us.CLUSTER_STATUS_STATUSES.CLOSED}let c=new ex(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Hc.PRE_4_0_0_VERSION&&await GE.upsertNodeRecord(_)}catch(_){qE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(VO,"buildNodeStatus");function ex(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(ex,"NodeStatusObject")});var KO=h((z3,YO)=>{"use strict";var VE=require("joi"),kO=Ee(),{route_constraints:xO}=_u();YO.exports={setRoutesValidator:tx,deleteRoutesValidator:rx};function tx(e){let t=VE.object({server:VE.valid("hub","leaf").required(),routes:xO.required()});return kO.validateBySchema(e,t)}a(tx,"setRoutesValidator");function rx(e){let t=VE.object({routes:xO.required()});return kO.validateBySchema(e,t)}a(rx,"deleteRoutesValidator")});var kE=h((j3,XO)=>{"use strict";var ys=dr(),$E=b(),qc=T(),WO=KO(),{handleHDBError:QO,hdb_errors:sx}=D(),{HTTP_STATUS_CODES:JO}=sx,nx="cluster routes successfully set",ix="cluster routes successfully deleted";XO.exports={setRoutes:ax,getRoutes:ox,deleteRoutes:cx};function ax(e){let t=WO.setRoutesValidator(e);if(t)throw QO(t,t.message,JO.BAD_REQUEST,void 0,void 0,!0);let r=ys.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=$E.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:nx,set:o,skipped:i}}a(ax,"setRoutes");function ox(){let e=ys.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(ox,"getRoutes");function cx(e){let t=WO.deleteRoutesValidator(e);if(t)throw QO(t,t.message,JO.BAD_REQUEST,void 0,void 0,!0);let r=ys.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,m=s.length;S<m;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!0;for(let m=0,R=n.length;m<R;m++){let w=n[m];if(E.host===w.host&&E.port===w.port){n.splice(m,1),_=!0,S=!1,i.push(E);break}}S&&o.push(E)}}return c&&(s=$E.isEmptyOrZeroLength(s)?null:s,ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=$E.isEmptyOrZeroLength(n)?null:n,ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:ix,deleted:i,skipped:o}}a(cx,"deleteRoutes")});var zO=h((ez,ZO)=>{"use strict";var Vi=require("alasql"),Ds=require("recursive-iterator"),Wt=g(),_x=b(),$i=T(),Gc=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,lx(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>$i.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!$i.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][$i.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=ux(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!$i.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Vi.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(Gc,"sql_statement_bucket");function ux(e){return e.filter(t=>t[$i.PERMS_CRUD_ENUM.READ])}a(ux,"filterReadRestrictedAttrs");function lx(e,t,r,s,n){Ex(e,t,r,s,n)}a(lx,"interpretAST");function ki(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(ki,"addSchemaTableToMap");function Ex(e,t,r,s,n){if(!e){Wt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Vi.yy.Insert?fx(e,t,r):e instanceof Vi.yy.Select?dx(e,t,r,s,n):e instanceof Vi.yy.Update?hx(e,t,r):e instanceof Vi.yy.Delete?Sx(e,t,r):Wt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Ex,"getRecordAttributesAST");function dx(e,t,r,s,n){if(!e){Wt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(_x.isEmptyOrZeroLength(i)){Wt.error("No schema specified");return}e.from.forEach(c=>{ki(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ki(c.table,t,r,s,n)});let o=new Ds(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Wt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ds(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ds(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ds(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Wt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(dx,"getSelectAttributes");function hx(e,t,r){if(!e){Wt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.table.databaseid;ki(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(hx,"getUpdateAttributes");function Sx(e,t,r){if(!e){Wt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ds(e.where),n=e.table.databaseid;ki(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(Sx,"getDeleteAttributes");function fx(e,t,r){if(!e){Wt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.into.databaseid;ki(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.into.tableid,n,i.columnid,t,r)}a(fx,"getInsertAttributes");function xE(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(xE,"pushAttribute");ZO.exports=Gc});var tN=h((tz,eN)=>{var Tx=require("os"),jO=Y();eN.exports={checkPermission:mx};function mx(){if(Tx.userInfo().username!==jO.get("install_user"))throw new Error(`Error: Must execute as ${jO.get("install_user")}`)}a(mx,"checkPermission")});var KE=h((rz,aN)=>{var Vc=Sn(),rN=require("chalk"),nr=g(),sN=tN(),nN=require("prompt"),{promisify:Rx}=require("util"),Fc=T(),Ax=require("fs-extra"),px=require("path"),Ox=b(),Nx=LE(),iN=Y();iN.initSync();var gx=require("moment"),Ix=Rx(nN.get),bx=px.join(iN.getHdbBasePath(),Fc.LICENSE_KEY_DIR_NAME,Fc.LICENSE_FILE_NAME,Fc.LICENSE_FILE_NAME);aN.exports={getFingerprint:wx,setLicense:Cx,parseLicense:YE,register:Lx,getRegistrationInfo:yx};async function Cx(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await YE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Cx,"setLicense");async function wx(){try{sN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await Vc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(wx,"getFingerprint");async function YE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=Vc.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{nr.info("writing license to disk"),await Ax.writeFile(bx,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(YE,"parseLicense");async function Lx(){let e=await Ux();return YE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Lx,"register");async function Ux(){try{sN.checkPermission()}catch(s){return console.error(s.message)}let e=await Vc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:rN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:rN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{nN.start()}catch(s){nr.error(s)}let r;try{r=await Ix(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Ux,"promptForRegistration");async function yx(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Vc.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ox.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Nx.version(),e.storage_type=Fc.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=gx.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(yx,"getRegistrationInfo")});var cN=h((sz,oN)=>{"use strict";var Dx=he(),$c=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,o===null&&(o=void 0),this.server_name=r+Dx.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:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:S}},this.system_account="SYS"}};a($c,"HubConfigObject");oN.exports=$c});var lN=h((nz,uN)=>{"use strict";var _N=he(),kc=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+_N.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+_N.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:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(kc,"LeafConfigObject");uN.exports=kc});var dN=h((iz,EN)=>{"use strict";var xc=class{constructor(t,r){this.user=t,this.password=r}};a(xc,"HdbUserObject");EN.exports=xc});var SN=h((az,hN)=>{"use strict";var Mx=he(),Yc=class{constructor(t,r){this.user=t+Mx.SERVER_SUFFIX.ADMIN,this.password=r}};a(Yc,"SysUserObject");hN.exports=Yc});var JE=h((oz,mN)=>{"use strict";var Dn=require("path"),Jc=require("fs-extra"),Px=cN(),Bx=lN(),vx=dN(),Hx=SN(),WE=Ar(),Pn=b(),Mt=dr(),Qc=T(),Kc=he(),{CONFIG_PARAMS:Ce}=Qc,Xc=g(),Zc=Y(),fN=Vr(),QE=Rt(),Mn="clustering",qx=1e4,TN=5;mN.exports={generateNatsConfig:Gx,removeNatsConfig:Fx};async function Gx(e=!1,t=void 0){Zc.initSync();let r=Zc.get(Ce.ROOTPATH),s=Dn.join(r,Mn,Kc.PID_FILES.HUB),n=Dn.join(r,Mn,Kc.PID_FILES.LEAF),i=Dn.join(r,Mn,"leaf"),o=Dn.join(r,Mn,Kc.NATS_CONFIG_FILES.HUB_SERVER),c=Dn.join(r,Mn,Kc.NATS_CONFIG_FILES.LEAF_SERVER),_=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_CERTIFICATE),u=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_PRIVATEKEY),l=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_CERT_AUTH),E=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_INSECURE),d=Mt.getConfigFromFile(Ce.CLUSTERING_NODENAME),S=Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await QE.checkNATSServerInstalled()||zc("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await WE.listUsers(),R=Mt.getConfigFromFile(Ce.CLUSTERING_USER),w=await WE.getClusterUser();(Pn.isEmpty(w)||w.active!==!0)&&zc(`invalid cluster user '${R}'`),e||(await Wc(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Wc(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Wc(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),await Wc(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[Ea,yr]of m.entries())yr.role.role===Qc.ROLE_TYPES_ENUM.CLUSTER_USER&&yr.active&&(L.push(new Hx(yr.username,fN.decrypt(yr.hash))),B.push(new vx(yr.username,fN.decrypt(yr.hash))));let z=[],{hub_routes:V}=Mt.getClusteringRoutes();if(!Pn.isEmptyOrZeroLength(V))for(let Ea of V)z.push(`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@${Ea.host}:${Ea.port}`);let Q=new Px(Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,S,Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NAME),Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),z,L,B);t=Pn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Qc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Jc.writeJson(o,Q),Xc.trace(`Hub server config written to ${o}`));let $e=`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,ke=`tls://${w.uri_encoded_name}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,la=new Bx(Mt.getConfigFromFile(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[$e],[ke],L,B,_,u,l,E);(t===void 0||t===Qc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Jc.writeJson(c,la),Xc.trace(`Leaf server config written to ${c}`))}a(Gx,"generateNatsConfig");async function Wc(e){let t=Zc.get(e);Pn.isEmpty(t)&&zc(`port undefined for '${e}'`),await Pn.isPortTaken(t)&&zc(`'${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.`)}a(Wc,"isPortAvailable");function zc(e){let t=`Error generating clustering config: ${e}`;Xc.error(t),console.error(t),process.exit(1)}a(zc,"generateNatsConfigError");async function Fx(e){let{port:t,config_file:r}=QE.getServerConfig(e),{username:s,decrypt_hash:n}=await WE.getClusterUser(),i=0,o=500;for(;i<TN;){try{let u=await QE.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Xc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=TN)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 Pn.async_set_timeout(o*i)}let c="0".repeat(qx),_=Dn.join(Zc.get(Ce.ROOTPATH),Mn,r);await Jc.writeFile(_,c),await Jc.remove(_)}a(Fx,"removeNatsConfig")});var e_=h((cz,IN)=>{"use strict";var se=Y(),RN=Sn(),C=T(),XE=he(),Ae=require("path"),{PACKAGE_ROOT:jc}=T(),le="/dev/null",Bn=Ae.join(jc,"launchServiceScripts"),AN=Ae.join(jc,"utility/scripts"),Vx=Ae.join(AN,C.HDB_RESTART_SCRIPT),pN=Ae.resolve(jc,"dependencies",`${process.platform}-${process.arch}`,XE.NATS_BINARY_NAME),He,qe;function ir(){(He===void 0||qe===void 0)&&(se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ir,"initLogConfig");function ON(){ir();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.IPC),t={name:C.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:C.SERVICE_SERVERS_CWD.IPC};return He||(t.out_file=le,t.error_file=le),{...t,script:C.SERVICE_SERVERS.IPC}}a(ON,"generateIPCServerConfig");function NN(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.HDB),t=RN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.HDB,script:C.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:se.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Bn};return He||(s.out_file=le,s.error_file=le),s}a(NN,"generateHDBServerConfig");function gN(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=RN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:C.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:se.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Bn};return He||(s.out_file=le,s.error_file=le),s}a(gN,"generateCFServerConfig");function $x(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",XE.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:pN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a($x,"generateNatsHubServerConfig");function kx(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",XE.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:pN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a(kx,"generateNatsLeafServerConfig");function xx(){ir(),se.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bn};return He||(t.out_file=le,t.error_file=le),t}a(xx,"generateNatsIngestServiceConfig");function Yx(){ir(),se.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bn};return He||(t.out_file=le,t.error_file=le),t}a(Yx,"generateNatsReplyServiceConfig");function Kx(){ir(),se.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:C.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bn,autorestart:!1};return He||(t.out_file=le,t.error_file=le),t}a(Kx,"generateClusteringUpgradeV4ServiceConfig");function Wx(){ir();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.PM2),t={name:C.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:AN};return He||(t.out_file=le,t.error_file=le),{...t,script:Vx}}a(Wx,"generateRestart");function Qx(e){ir();let t=Ae.join(qe,C.PROCESS_LOG_NAMES.JOBS),r=Ae.join(jc,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Bn,autorestart:!1};return He||(s.out_file=le,s.error_file=le),{...s,script:Ae.join(r,"jobProcess.js")}}a(Qx,"generateJobConfig");function Jx(){return{apps:[ON(),NN(),gN()]}}a(Jx,"generateAllServiceConfigs");IN.exports={generateAllServiceConfigs:Jx,generateIPCServerConfig:ON,generateHDBServerConfig:NN,generateCFServerConfig:gN,generateRestart:Wx,generateNatsHubServerConfig:$x,generateNatsLeafServerConfig:kx,generateNatsIngestServiceConfig:xx,generateNatsReplyServiceConfig:Yx,generateClusteringUpgradeV4ServiceConfig:Kx,generateJobConfig:Qx}});var Yi=h((_z,vN)=>{"use strict";var P=T(),t_=b(),xi=JE(),r_=Rt(),Xx=he(),k=require("pm2"),Zx=require("fs-extra"),Ir=e_(),_t=Y(),br=g(),zx=e_(),jx=Ls(),eY=require("util"),CN=eY.promisify(require("child_process").exec),wN=require("path");vN.exports={start:Ms,stop:n_,reload:UN,restart:yN,list:zE,describe:i_,connect:ar,kill:MN,startAllServices:uY,startService:s_,getUniqueServicesList:jE,restartAllServices:lY,stopAllServices:EY,isServiceRegistered:PN,reloadStopStart:ZE,restartHdb:DN,deleteProcess:cY,configureLogRotate:SY,startClustering:BN,isHdbRestartRunning:_Y,isClusteringRunning:TY,stopClustering:fY,reloadClustering:mY};var{PACKAGE_ROOT:tY}=T(),rY="2.7.0",LN=wN.join(tY,"node_modules/pm2/bin/pm2"),sY="Log rotate installed.",nY="Error installing log rotate.",iY="Log rotate updated.",aY="Error updating log rotate.",oY="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 ar(){return new Promise((e,t)=>{k.connect((r,s)=>{r&&t(r),e(s)})})}a(ar,"connect");function Ms(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.start(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(Ms,"start");function n_(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.stop(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.delete(e,(i,o)=>{i&&(k.disconnect(),r(s)),k.disconnect(),t(o)})})})}a(n_,"stop");function UN(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.reload(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(UN,"reload");function yN(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.restart(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(yN,"restart");function cY(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.delete(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(cY,"deleteProcess");async function DN(){await Ms(zx.generateRestart())}a(DN,"restartHdb");async function _Y(){let e=await zE();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_Y,"isHdbRestartRunning");function zE(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}k.list((r,s)=>{r&&(k.disconnect(),t(r)),k.disconnect(),e(s)})})}a(zE,"list");function i_(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.describe(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(i_,"describe");function MN(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}k.killDaemon((r,s)=>{r&&(k.disconnect(),t(r)),k.disconnect(),e(s)})})}a(MN,"kill");async function uY(){try{await BN(),await Ms(Ir.generateAllServiceConfigs())}catch(e){throw k.disconnect(),e}}a(uY,"startAllServices");async function s_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Ir.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Ir.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Ir.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Ir.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Ir.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Ir.generateNatsHubServerConfig(),await Ms(t),await xi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Ir.generateNatsLeafServerConfig(),await Ms(t),await xi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Ir.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ms(t)}catch(t){throw k.disconnect(),t}}a(s_,"startService");async function jE(){try{let e=await zE(),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 k.disconnect(),e}}a(jE,"getUniqueServicesList");async function lY(e=[]){try{let t=!1,r=await jE();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await ZE(o):await yN(o))}t&&await ZE(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw k.disconnect(),t}}a(lY,"restartAllServices");async function EY(){try{let e=await jE();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await n_(s.name)}if(await MN(),_t.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Zx.readFile(wN.join(_t.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){br.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw k.disconnect(),e}}a(EY,"stopAllServices");async function PN(e){return!t_.isEmptyOrZeroLength(await i_(e))}a(PN,"isServiceRegistered");async function ZE(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?_t.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):_t.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await i_(e),s=t_.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?br.error(oY):(await n_(e),await s_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await DN():await UN(e)}a(ZE,"reloadStopStart");function dY(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}k.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(k.disconnect(),t(r)),k.disconnect(),e(s)})})}a(dY,"stopLogrotate");async function hY(){let{stdout:e,stderr:t}=await CN(`${process.platform==="win32"?"node":""} ${LN} install pm2-logrotate@${rY}`);if(br.debug(`loadLogRotate stdout: ${e}`),t)throw br.error(nY),t;br.info(sY)}a(hY,"installLogRotate");async function bN(){let e={max_size:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${LN} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await CN(t);if(br.debug(`updateLogRotateConfig stdout: ${r}`),s)throw br.error(aY),s;br.info(iY)}a(bN,"updateLogRotateConfig");async function SY(){_t.initSync();let e=t_.autoCastBoolean(_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await i_(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(t_.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await hY(),await bN();return}if(e&&s){await Ms(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await bN();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await dY()}a(SY,"configureLogRotate");async function BN(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await s_(r)}await r_.createWorkQueueStream(Xx.WORK_QUEUE_CONSUMER_NAMES),await r_.updateNodeNameLocalStreams();let e=await jx.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){br.info("Starting clustering upgrade 4.0.0 process"),await s_(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(BN,"startClustering");async function fY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await n_(t)}}a(fY,"stopClustering");async function TY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await PN(t)===!1)return!1}return!0}a(TY,"isClusteringRunning");async function mY(){await xi.generateNatsConfig(!0),await r_.reloadNATSHub(),await r_.reloadNATSLeaf(),await xi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await xi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(mY,"reloadClustering")});var nd=h((uz,VN)=>{"use strict";var y=T(),K=g(),a_=b(),RY=tu(),ed=JE(),sd=Rt(),AY=he(),qN=require("minimist"),{handleHDBError:td,hdb_errors:pY}=D(),Ki=dr(),{HTTP_STATUS_CODES:rd}=pY,G,HN=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,Ps="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",OY="Invalid service",NY="'service' is required",gY="Restarting all services",IY="Clustering is not enabled so cannot be restarted";VN.exports={stop:CY,restartProcesses:bY,restartService:GN};async function bY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Yi());let e=RY(Object.keys(y.CONFIG_PARAM_MAP),!0);a_.isEmptyOrZeroLength(Object.keys(e))||Ki.updateConfigValue(void 0,void 0,e,!0,!0);let t=Ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=Ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=qN(process.argv);if(!a_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await G.isHdbRestartRunning()===!0){K.notify(Ps),console.error(Ps);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await vn(_);else if(await G.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await GN({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await G.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await G.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await G.isHdbRestartRunning()===!0)return K.notify(Ps),console.error(Ps),Ps;console.log(HN),t&&await FN();let n=await G.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await G.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await G.configureLogRotate(),K.notify(gY),await G.restartAllServices(i),HN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(bY,"restartProcesses");async function GN(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),G===void 0&&(G=Yi()),a_.isEmpty(e.service))throw td(new Error,NY,rd.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw td(new Error,OY,rd.BAD_REQUEST,void 0,void 0,!0);let r=Ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await G.isHdbRestartRunning()===!0)return K.notify(Ps),Ps;await G.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await vn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await G.isServiceRegistered(s);if(r)i?(await G.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await G.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await G.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),td(new Error,o,rd.BAD_REQUEST,void 0,void 0,!0)}}else await G.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a(GN,"restartService");async function CY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Yi());let e=qN(process.argv);if(a_.isEmpty(e.service))console.log("Stopping HarperDB."),await G.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await G.stopClustering():await G.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(CY,"stop");async function FN(){await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await sd.updateNodeNameLocalStreams(),await sd.closeConnection()}a(FN,"restartAllClusteringServices");async function vn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=Ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await G.isServiceRegistered(e),i=r||s?await G.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(IY);break}await G.reloadClustering();break;case(r&&i&&!t):await G.stopClustering();break;case(r&&!i&&t):await G.startClustering();break;case(r&&i&&t):await FN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await G.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await ed.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await sd.createWorkQueueStream(AY.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await G.reload(e):(await ed.generateNatsConfig(!0,e),await G.restart(e),await ed.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(vn,"restartClustering")});var zN=h((Ez,ZN)=>{"use strict";var lz=require("lodash"),Ze=T(),{handleHDBError:$N,hdb_errors:wY}=D(),{HDB_ERROR_MSGS:LY,HTTP_STATUS_CODES:UY}=wY,id=g();ZN.exports={getRolePermissions:DY};var Bs=Object.create(null),yY=a(e=>({key:e,perms:{}}),"perms_template_obj"),KN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),WN=a((e=!1,t=!1,r=!1,s=!1)=>({[Ze.PERMS_CRUD_ENUM.READ]:e,[Ze.PERMS_CRUD_ENUM.INSERT]:t,[Ze.PERMS_CRUD_ENUM.UPDATE]:r,[Ze.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),ad=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...WN(t,r,s,n)}),"table_perms_template"),kN=a((e,t=WN())=>({attribute_name:e,describe:XN(t),[Wi]:t[Wi],[od]:t[od],[cd]:t[cd]}),"attr_perms_template"),xN=a((e,t=!1)=>({attribute_name:e,describe:t,[Wi]:t}),"timestamp_attr_perms_template"),{READ:Wi,INSERT:od,UPDATE:cd}=Ze.PERMS_CRUD_ENUM,QN=Object.values(Ze.PERMS_CRUD_ENUM),JN=[Wi,od,cd];function DY(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ze.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bs[t]&&Bs[t].key===s)return Bs[t].perms;let n=MY(e,r);return Bs[t]?Bs[t].key=s:Bs[t]=yY(s),Bs[t].perms=n,n}catch(r){if(!e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ze.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw id.error(s),id.debug(r),$N(new Error,LY.OUTDATED_PERMS_TRANSLATION_ERROR,UY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
+
${r.stack}`;throw id.error(s),$N(new Error)}}}a(DY,"getRolePermissions");function MY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ze.SYSTEM_SCHEMA_NAME]=s[Ze.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=PY(t[i]);return}r[i]=KN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=BY(c,_);r[i].describe||QN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=ad()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ad()})}),r}a(MY,"translateRolePermissions");function PY(e){let t=KN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ad(!0,!0,!0,!0,!0)}),t}a(PY,"createStructureUserPermissions");function BY(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Ze.TIME_STAMP_NAMES.includes(E)&&(d=xN(E,l[Wi])),u[E]=d,u},{}),o=t[Ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=kN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=XN(l),n.attribute_permissions.push(l),c||vY(l,_)}else if(u!==o){let l;Ze.TIME_STAMP_NAMES.includes(u)?l=xN(u):l=kN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=YN(n),n}else return e.describe=YN(e),e}a(BY,"getTableAttrPerms");function YN(e){return QN.filter(t=>e[t]).length>0}a(YN,"getSchemaTableDescribePerm");function XN(e){return JN.filter(t=>e[t]).length>0}a(XN,"getAttributeDescribePerm");function vY(e,t){JN.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(vY,"checkForHashPerms")});var ig=h((dz,ng)=>{"use strict";var Te=require("joi"),jN=require("fs-extra"),eg=require("path"),Hn=Ee(),tg=Y(),rg=T(),sg=g(),{hdb_errors:HY}=D(),{HDB_ERROR_MSGS:ut}=HY,es=/^[a-zA-Z0-9-_]+$/;ng.exports={getDropCustomFunctionValidator:GY,setCustomFunctionValidator:FY,addCustomFunctionProjectValidator:VY,dropCustomFunctionProjectValidator:$Y,packageCustomFunctionProjectValidator:kY,deployCustomFunctionProjectValidator:xY};function Qi(e,t,r){try{let s=tg.get(rg.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=eg.join(s,t);return jN.existsSync(n)?e?t:r.message(ut.PROJECT_EXISTS):e?r.message(ut.NO_PROJECT):t}catch(s){return sg.error(s),r.message(ut.VALIDATION_ERR)}}a(Qi,"checkProjectExists");function qY(e,t,r,s){try{let n=tg.get(rg.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=eg.join(n,e,t,r+".js");return jN.existsSync(i)?r:s.message(ut.NO_FILE)}catch(n){return sg.error(n),s.message(ut.VALIDATION_ERR)}}a(qY,"checkFileExists");function GY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(es).custom(qY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":ut.BAD_FILE_NAME})});return Hn.validateBySchema(e,t)}a(GY,"getDropCustomFunctionValidator");function FY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(es).required().messages({"string.pattern.base":ut.BAD_FILE_NAME}),function_content:Te.string().required()});return Hn.validateBySchema(e,t)}a(FY,"setCustomFunctionValidator");function VY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!1)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Hn.validateBySchema(e,t)}a(VY,"addCustomFunctionProjectValidator");function $Y(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Hn.validateBySchema(e,t)}a($Y,"dropCustomFunctionProjectValidator");function kY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Hn.validateBySchema(e,t)}a(kY,"packageCustomFunctionProjectValidator");function xY(e){let t=Te.object({project:Te.string().pattern(es).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":ut.BAD_PACKAGE})});return Hn.validateBySchema(e,t)}a(xY,"deployCustomFunctionProjectValidator")});var ld=h((hz,cg)=>{"use strict";var we=require("fs-extra"),o_=require("fast-glob"),ne=require("path"),ag=require("tar-fs"),og=require("uuid").v4,Ji=require("normalize-path"),vs=ig(),Le=g(),At=T(),pt=Y(),{PACKAGE_ROOT:YY}=T(),{handleHDBError:ze,hdb_errors:KY}=D(),{HDB_ERROR_MSGS:ts,HTTP_STATUS_CODES:je}=KY,WY=ne.join(YY,"custom_function_template"),_d=ne.join(pt.get(At.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ud(){let e=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ze(new Error,ts.NOT_ENABLED,je.BAD_REQUEST,void 0,void 0,!0)}a(ud,"isCFEnabled");function QY(){Le.trace("getting custom api status");let e={};try{e={is_enabled:pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ze(new Error,ts.FUNCTION_STATUS,je.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(QY,"customFunctionsStatus");function JY(){Le.trace("getting custom api endpoints");let e={},t=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{o_.sync(Ji(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:o_.sync(Ji(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:o_.sync(Ji(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:we.existsSync(Ji(`${s}/static`))&&o_.sync(Ji(`${s}/static/**/*`)).length}})}catch(r){throw ze(new Error,ts.GET_FUNCTIONS,je.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(JY,"getCustomFunctions");function XY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ne.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw ze(new Error,ts.GET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(XY,"getCustomFunction");function ZY(e){ud(),e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=vs.setCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("setting custom function file content");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ne.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ze(new Error,ts.SET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(ZY,"setCustomFunction");function zY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function file");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ne.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ze(new Error,ts.DROP_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(zY,"dropCustomFunction");function jY(e){ud(),e.project&&(e.project=ne.parse(e.project).name);let t=vs.addCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("adding custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(WY,n),`Successfully created custom function project: ${s}`}catch(n){throw ze(new Error,ts.ADD_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(jY,"addCustomFunctionProject");function eK(e){e.project&&(e.project=ne.parse(e.project).name);let t=vs.dropCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw ze(new Error,ts.DROP_FUNCTION_PROJECT,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(eK,"dropCustomFunctionProject");async function tK(e){e.project&&(e.project=ne.parse(e.project).name);let t=vs.packageCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("packaging custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ne.join(r,s),i=og();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}we.ensureDirSync(_d);let c=ne.join(_d,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ne.join(n,"node_modules"))}),ag.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(tK,"packageCustomFunctionProject");async function rK(e){ud(),e.project&&(e.project=ne.parse(e.project).name);let t=vs.deployCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("deploying custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ne.join(r,s);await we.ensureDir(o);let c,_;do c=ne.join(_d,og()+".tar"),_=await we.pathExists(c);while(_);await we.outputFile(c,n,{encoding:"base64"});let u=we.createReadStream(c);return u.pipe(ag.extract(o)),await new Promise(l=>u.on("end",l)),await we.unlink(c),`Successfully deployed project: ${s}`}a(rK,"deployCustomFunctionProject");cg.exports={customFunctionsStatus:QY,getCustomFunctions:JY,getCustomFunction:XY,setCustomFunction:ZY,dropCustomFunction:zY,addCustomFunctionProject:jY,dropCustomFunctionProject:eK,packageCustomFunctionProject:tK,deployCustomFunctionProject:rK}});var Ed=h((Sz,ug)=>{"use strict";var or=require("joi"),_g=Ee();ug.exports={readTransactionLogValidator:sK,deleteTransactionLogsBeforeValidator:nK};function sK(e){let t=or.object({schema:or.string().required(),table:or.string().required(),from:or.date().timestamp(),to:or.date().timestamp(),limit:or.number().min(1)});return _g.validateBySchema(e,t)}a(sK,"readTransactionLogValidator");function nK(e){let t=or.object({schema:or.string().required(),table:or.string().required(),timestamp:or.date().timestamp().required()});return _g.validateBySchema(e,t)}a(nK,"deleteTransactionLogsBeforeValidator")});var __=h((fz,Sg)=>{"use strict";var dd=T(),c_=Rt(),lg=b(),Eg=Y(),dg=Vr(),{handleHDBError:qn,hdb_errors:iK}=D(),{HTTP_STATUS_CODES:Gn}=iK,{readTransactionLogValidator:aK,deleteTransactionLogsBeforeValidator:oK}=Ed(),hg="This operation relies on clustering and cannot run with it disable.",cK="Logs successfully deleted from transaction log.",_K="All logs successfully deleted from transaction log.";Sg.exports={readTransactionLog:uK,deleteTransactionLogsBefore:lK};async function uK(e){let t=aK(e);if(t)throw qn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(!Eg.get(dd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw qn(new Error,hg,Gn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lg.checkSchemaTableExist(r,s);if(n)throw qn(new Error,n,Gn.NOT_FOUND,void 0,void 0,!0);let i=dg.createNatsTableStreamName(r,s),o=await c_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===dd.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(uK,"readTransactionLog");async function lK(e){let t=oK(e);if(t)throw qn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(!Eg.get(dd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw qn(new Error,hg,Gn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lg.checkSchemaTableExist(r,s);if(i)throw qn(new Error,i,Gn.NOT_FOUND,void 0,void 0,!0);let o=dg.createNatsTableStreamName(r,s),{jsm:c}=await c_.getNATSReferences(),_=await c_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=cK,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=_K):E=(await c_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(lK,"deleteTransactionLogsBefore")});var Sd=h((Tz,Ig)=>{"use strict";var u_=require("joi"),l_=require("path"),fg=require("fs-extra"),{exec:EK}=require("child_process"),dK=require("util"),Tg=dK.promisify(EK),hK=T(),{handleHDBError:Fn,hdb_errors:SK}=D(),{HTTP_STATUS_CODES:Vn}=SK,mg=Y(),fK=Ee(),E_=g();mg.initSync();var hd=mg.get(hK.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),Rg="npm install --omit=dev --json",TK=`${Rg} --dry-run`;Ig.exports={installModules:mK,auditModules:RK};async function Ag(e,t=void 0){let{stdout:r,stderr:s}=await Tg(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(Ag,"runCommand");async function mK(e){E_.info(`starting installModules for request: ${e}`);let t=gg(e);if(t)throw Fn(t,t.message,Vn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?TK:Rg;await Og(),await Ng(r);let i={};for(let o=0,c=r.length;o<c;o++){let _=r[o];i[_]={npm_output:null,npm_error:null};let u=l_.join(hd,_),l,E=null;try{let{stdout:d,stderr:S}=await Tg(n,{cwd:u});l=d?d.replace(`
|
|
11
11
|
`,""):null,E=S?S.replace(`
|
|
12
|
-
`,""):null}catch(d){d.stderr?i[_].npm_error=
|
|
13
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(bg,"parseNPMStdErr");async function BK(e){h_.info(`starting auditModules for request: ${e}`);let t=Lg(e);if(t)throw xn(t,t.message,$n.BAD_REQUEST);let{projects:r}=e;await Cg(),await wg(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=d_.join(Td,o);s[o]={npm_output:null,npm_error:null};try{let _=await Ig("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=bg(_.stderr)}}return h_.info(`finished auditModules with response ${s}`),s}a(BK,"auditModules");async function Cg(){try{return await Ig("npm -v"),!0}catch{throw xn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",$n.BAD_REQUEST,void 0,void 0,!0)}}a(Cg,"checkNPMInstalled");async function wg(e){if(!Array.isArray(e)||e.length===0)throw xn(new Error,"projects argument must be an array with at least 1 element",$n.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=d_.join(Td,i.toString());if(!await pg.pathExists(o)){t.push(i);continue}let _=d_.join(o,"package.json");await pg.pathExists(_)||r.push(i)}if(t.length>0)throw xn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,$n.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw xn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,$n.BAD_REQUEST,void 0,void 0,!0)}a(wg,"checkProjectPaths");function Lg(e){let t=E_.object({projects:E_.array().min(1).items(E_.string()).required(),dry_run:E_.boolean().default(!1)});return DK.validateBySchema(e,t)}a(Lg,"modulesValidator")});var Dg=h((B2,yg)=>{"use strict";var S_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(S_,"PermissionTableResponseObject");yg.exports=S_});var Pg=h((v2,Mg)=>{"use strict";var f_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(f_,"PermissionAttributeResponseObject");Mg.exports=f_});var Rd=h((H2,vg)=>{"use strict";var Bg=Dg(),vK=Pg(),{HDB_ERROR_MSGS:HK}=Ke(),T_=class{constructor(){this.error=HK.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new Bg(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new vK(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new Bg(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(T_,"PermissionResponseObject");vg.exports=T_});var p_=h((q2,Xg)=>{"use strict";var Ad=yt(),m_=mt(),vt=dc(),ea=As(),pd=Ns(),qK=uE(),ta=Ir(),R_=RE(),pe=g(),GK=OE(),FK=Mc(),VK=GE(),kK=Hc(),xK=FE(),$K=xE(),Od=KE(),yr=b(),YK=sN(),Nd=JE(),Gg=od(),Bt=T(),Fg=sg(),KK=Lc(),Vg=ic(),kg=mr(),Dr=hd(),QK=require("alasql"),xg=l_(),$g=md(),Yg=Rd(),{handleHDBError:Et,hdb_errors:Kg}=D(),{HDB_ERROR_MSGS:Ge,HTTP_STATUS_CODES:zi}=Kg,p=new Map,Qg="delete",as="insert",lr="read",Fs="update",ji="describe",Hg=ea.describeSchema.name,qg=ea.describeTable.name,Wg={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},WK="catchup",JK="handleGetJob",ZK="handleGetJobsByStartDate",A_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},XK=[vt.createTable.name,vt.createAttribute.name,vt.dropTable.name,vt.dropAttribute.name],Jg={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},O=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(O,"permission");p.set(Ad.insert.name,new O(!1,[as]));p.set(Ad.update.name,new O(!1,[Fs]));p.set(Ad.upsert.name,new O(!1,[as,Fs]));p.set(m_.searchByConditions.name,new O(!1,[lr]));p.set(m_.searchByHash.name,new O(!1,[lr]));p.set(m_.searchByValue.name,new O(!1,[lr]));p.set(m_.search.name,new O(!1,[lr]));p.set(vt.createSchema.name,new O(!0,[]));p.set(vt.createTable.name,new O(!0,[]));p.set(vt.createAttribute.name,new O(!1,[as]));p.set(vt.dropSchema.name,new O(!0,[]));p.set(vt.dropTable.name,new O(!0,[]));p.set(vt.dropAttribute.name,new O(!0,[]));p.set(ea.describeSchema.name,new O(!1,[lr]));p.set(ea.describeTable.name,new O(!1,[lr]));p.set(pd.deleteRecord.name,new O(!1,[Qg]));p.set(ta.addUser.name,new O(!0,[]));p.set(ta.alterUser.name,new O(!0,[]));p.set(ta.dropUser.name,new O(!0,[]));p.set(ta.listUsersExternal.name,new O(!0,[]));p.set(R_.listRoles.name,new O(!0,[]));p.set(R_.addRole.name,new O(!0,[]));p.set(R_.alterRole.name,new O(!0,[]));p.set(R_.dropRole.name,new O(!0,[]));p.set(GK.name,new O(!0,[]));p.set(FK.name,new O(!0,[]));p.set(VK.name,new O(!0,[]));p.set(kK.name,new O(!0,[]));p.set(xK.name,new O(!0,[]));p.set(Od.setRoutes.name,new O(!0,[]));p.set(Od.getRoutes.name,new O(!0,[]));p.set(Od.deleteRoutes.name,new O(!0,[]));p.set(kg.setConfiguration.name,new O(!0,[]));p.set($K.clusterStatus.name,new O(!0,[]));p.set(Nd.getFingerprint.name,new O(!0,[]));p.set(Nd.setLicense.name,new O(!0,[]));p.set(pd.deleteFilesBefore.name,new O(!0,[]));p.set(pd.deleteAuditLogsBefore.name,new O(!0,[]));p.set(Gg.restartProcesses.name,new O(!0,[]));p.set(Gg.restartService.name,new O(!0,[]));p.set(qK.name,new O(!0,[]));p.set(KK.systemInformation.name,new O(!0,[]));p.set(kg.getConfiguration.name,new O(!0,[]));p.set(xg.readTransactionLog.name,new O(!0,[]));p.set(xg.deleteTransactionLogsBefore.name,new O(!0,[]));p.set($g.installModules.name,new O(!0,[]));p.set($g.auditModules.name,new O(!0,[]));p.set(Vg.createTokens.name,new O(!1,[]));p.set(Vg.refreshOperationToken.name,new O(!1,[]));p.set(Dr.customFunctionsStatus.name,new O(!0,[]));p.set(Dr.getCustomFunctions.name,new O(!0,[]));p.set(Dr.getCustomFunction.name,new O(!0,[]));p.set(Dr.setCustomFunction.name,new O(!0,[]));p.set(Dr.dropCustomFunction.name,new O(!0,[]));p.set(Dr.addCustomFunctionProject.name,new O(!0,[]));p.set(Dr.dropCustomFunctionProject.name,new O(!0,[]));p.set(Dr.packageCustomFunctionProject.name,new O(!0,[]));p.set(Dr.deployCustomFunctionProject.name,new O(!0,[]));p.set(Nd.getRegistrationInfo.name,new O(!1,[]));p.set(ta.userInfo.name,new O(!1,[]));p.set(ea.describeAll.name,new O(!1,[]));p.set(JK,new O(!1,[]));p.set(ZK,new O(!0,[]));p.set(WK,new O(!0,[]));p.set(A_.CSV_DATA_LOAD,new O(!1,[as,Fs]));p.set(A_.CSV_URL_LOAD,new O(!1,[as,Fs]));p.set(A_.CSV_FILE_LOAD,new O(!1,[as,Fs]));p.set(A_.IMPORT_FROM_S3,new O(!1,[as,Fs]));p.set(Jg.EXPORT_TO_S3,new O(!1,[lr]));p.set(Jg.EXPORT_LOCAL,new O(!1,[lr]));p.set(Bt.VALID_SQL_OPS_ENUM.DELETE,new O(!1,[Qg]));p.set(Bt.VALID_SQL_OPS_ENUM.SELECT,new O(!1,[lr]));p.set(Bt.VALID_SQL_OPS_ENUM.INSERT,new O(!1,[as]));p.set(Bt.VALID_SQL_OPS_ENUM.UPDATE,new O(!1,[Fs]));Xg.exports={verifyPerms:jK,verifyPermsAst:zK,verifyBulkLoadAttributePerms:tQ};function zK(e,t,r){if(yr.isEmptyOrZeroLength(e))throw pe.info("verify_perms_ast has an empty user parameter"),Et(new Error);if(yr.isEmptyOrZeroLength(t))throw pe.info("verify_perms_ast has an empty user parameter"),Et(new Error);if(yr.isEmptyOrZeroLength(r))throw pe.info("verify_perms_ast has a null operation parameter"),Et(new Error);try{let s=new Yg,n=new YK(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw pe.info("No schemas defined in verifyPermsAst(), will not continue."),Et(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&Wg[r])throw Et(new Error,Ge.DROP_SYSTEM,zi.FORBIDDEN);if(c&&!_)return null;let u=Fg.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof QK.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=Zg(t,r,o,s);return l||(o.forEach((E,d)=>{for(let S=0;S<E.length;S++){let m=n.getAttributesBySchemaTableName(d,E[S]),R=Id(t.role.permission,d,E[S]);gd(m,R,r,E[S],d,s)}}),s.getPermsResponse())}catch(s){throw Et(s)}}a(zK,"verifyPermsAst");function jK(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw pe.info("null required parameter in verifyPerms"),Et(new Error,Ge.DEFAULT_INVALID_REQUEST,zi.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new Yg;if(yr.isEmptyOrZeroLength(e.hdb_user.role)||yr.isEmptyOrZeroLength(e.hdb_user.role.permission))return pe.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ge.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(Bt.SYSTEM_SCHEMA_NAME)||n===Bt.SYSTEM_SCHEMA_NAME;if(l&&Wg[r])throw Et(new Error,Ge.DROP_SYSTEM,zi.FORBIDDEN);if(_&&!l||u===!0&&(r===vt.createSchema.name||r===vt.dropSchema.name))return null;if(XK.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=Fg.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===Hg||r===qg){if(n===Bt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ge.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===Hg&&(!E[n]||!E[n][ji]))return c.handleInvalidItem(Ge.SCHEMA_NOT_FOUND(n));if(r===qg&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][ji]))return c.handleInvalidItem(Ge.TABLE_NOT_FOUND(n,i))}}let d=Zg(e.hdb_user,r,o,c,s);if(d)return d;if(p.get(r)&&p.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&Bt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],w=E[n].tables[i];w[Bt.PERMS_CRUD_ENUM.READ]&&(w.attribute_permissions.length>0?w.attribute_permissions.filter(B=>B[Bt.PERMS_CRUD_ENUM.READ]).forEach(B=>{R.push(B.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(L=>L.attribute),e.get_attributes=R)}let S=eQ(e),m=Id(e.hdb_user.role.permission,n,i);return gd(S,m,r,i,n,c,s),c.getPermsResponse()}a(jK,"verifyPerms");function Zg(e,t,r,s,n){if(yr.arrayHasEmptyValues([e,t,r]))throw pe.info("hasPermissions has an invalid parameter"),Et(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw pe.info(`operation ${t} not found.`),Et(new Error,Ge.OP_NOT_FOUND(t),zi.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return pe.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ge.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][ji]===!1){s.addInvalidItem(Ge.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ge.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[ji]===!1)s.addInvalidItem(Ge.TABLE_NOT_FOUND(_,l));else try{let d=[],S=p.get(t).perms;!yr.isEmpty(n)&&S.includes(n)&&(S=[n]);for(let m=0;m<S.length;m++){let R=S[m],w=E[R];(w==null||w===!1)&&(pe.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let S=Ge.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw pe.error(S),pe.error(d),Et(Kg.CHECK_LOGS_WRAPPER(S))}}}return r.size<2?s.getPermsResponse():null}a(Zg,"hasPermissions");function gd(e,t,r,s,n,i,o){if(!e||!t)throw pe.info("no attributes specified in checkAttributePerms."),Et(new Error);let c=p.get(r).perms;if(!c||c==="")throw pe.info(`no permissions found for ${r} in checkAttributePerms().`),Et(new Error);if(yr.isEmptyOrZeroLength(t))return pe.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[ji]===!1){i.addInvalidItem(Ge.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(Bt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==lr)throw Et(new Error,Ge.SYSTEM_TIMESTAMP_PERMS_ERR,zi.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ge.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(gd,"checkAttributePerms");function eQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===Bt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){pe.info(r)}return t}a(eQ,"getRecordAttributes");function Id(e,t,r){let s=new Map;if(yr.isEmpty(e))return pe.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{pe.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Id,"getAttributePermissions");function tQ(e,t,r,s,n,i,o){let c=new Set(i),_=Id(e,s,n);gd(c,_,t,n,s,o,r)}a(tQ,"verifyBulkLoadAttributePerms")});var N_=h((G2,rI)=>{"use strict";rI.exports={evaluateSQL:fQ,processAST:tI,convertSQLToAST:eI,checkASTPermissions:jg};var zg=yt(),wd=require("util"),rQ=wd.callbackify(zg.insert),sQ=mt().search,nQ=ap().update,iQ=wd.callbackify(nQ),aQ=cp().convertDelete,os=require("alasql"),oQ=p_(),sa=g(),cQ=Mo(),_Q=b(),ra=T(),{hdb_errors:uQ,handleHDBError:bd}=D(),{HTTP_STATUS_CODES:Cd}=uQ,lQ=In();function EQ(e,t,r){return Promise.all([lQ.postOperationHandler(e,t,r),zg.flush(e)])}a(EQ,"postWrite");var dQ=wd.callbackify(EQ);cQ(os);var hQ=403,SQ="There was a problem performing this insert. Please check the logs and try again.",O_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(O_,"ParsedSQLObject");function fQ(e,t){let r=e.parsed_sql_object;if(!r){r=eI(e.sql);let s,n=r.ast.statements[0];if(n instanceof os.yy.Insert?s=n.into.databaseid:n instanceof os.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof os.yy.Update||n instanceof os.yy.Delete?s=n.table.databaseid:sa.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof os.yy.Select)&&_Q.isEmptyOrZeroLength(s))return t("No schema specified",null)}tI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(fQ,"evaluateSQL");function jg(e,t){let r;try{r=oQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(jg,"checkASTPermissions");function eI(e){let t=new O_;if(!e)throw bd(new Error,"The 'sql' parameter is missing from the request body",Cd.BAD_REQUEST);try{let r=e.trim(),s=os.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
-
`);throw s[1]?bd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Cd.BAD_REQUEST):bd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Cd.BAD_REQUEST)}return t}a(eI,"convertSQLToAST");function tI(e,t,r){try{let s=TQ;if(!e.bypass_auth&&!t.permissions_checked){let i=jg(e,t);if(i&&i.length>0)return r(hQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ra.VALID_SQL_OPS_ENUM.SELECT:s=sQ,n=t.ast.statements[0];break;case ra.VALID_SQL_OPS_ENUM.INSERT:s=mQ;break;case ra.VALID_SQL_OPS_ENUM.UPDATE:s=iQ;break;case ra.VALID_SQL_OPS_ENUM.DELETE:s=aQ;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(tI,"processAST");function TQ(e,t){sa.info(e),t("unknown sql statement")}a(TQ,"nullFunction");function mQ({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=RQ(i,e.values)}catch(o){return r(o)}rQ(n,(o,c)=>{if(o)return r(o);dQ(n,c,_=>{_&&sa.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){sa.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(mQ,"convertInsert");function RQ(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=os.compile(`SELECT ${n.toString()} AS [${ra.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw sa.error(r),new Error(SQ)}}a(RQ,"createDataObjects")});var Ud=h((F2,oI)=>{var w_=require("clone"),L_=Ee(),AQ=b(),C_=T(),pQ=g(),g_=require("fs"),{hdb_errors:OQ,handleHDBError:na}=D(),{HDB_ERROR_MSGS:NQ,HTTP_STATUS_CODES:I_}=OQ,{common_validators:b_}=Ar(),sI=1e9,Ld=" is required",gQ=["insert","update","upsert"],U_={schema:{presence:!0,format:b_.schema_format,length:b_.schema_length},table:{presence:!0,format:b_.schema_format,length:b_.schema_length},action:{inclusion:{within:gQ,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{}},{AWS_ACCESS_KEY:IQ,AWS_SECRET:bQ,AWS_BUCKET:CQ,AWS_FILE_KEY:wQ}=C_.S3_BUCKET_AUTH_KEYS,LQ={s3:{presence:!0},[`s3.${IQ}`]:{presence:!0,type:"String"},[`s3.${bQ}`]:{presence:!0,type:"String"},[`s3.${CQ}`]:{presence:!0,type:"String"},[`s3.${wQ}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]}},nI=w_(U_);nI.data.presence={message:Ld};var iI=w_(U_);iI.file_path.presence={message:Ld};var UQ=Object.assign(w_(U_),LQ),aI=w_(U_);aI.csv_url.presence={message:Ld};function yQ(e){let t=L_.validateObject(e,nI);return y_(e,t)}a(yQ,"dataObject");function DQ(e){let t=L_.validateObject(e,aI);return y_(e,t)}a(DQ,"urlObject");function MQ(e){let t=L_.validateObject(e,iI);return y_(e,t)}a(MQ,"fileObject");function PQ(e){let t=L_.validateObject(e,UQ);return y_(e,t)}a(PQ,"s3FileObject");function y_(e,t){if(!t){let r=AQ.checkGlobalSchemaTable(e.schema,e.table);if(r)return na(new Error,r,I_.BAD_REQUEST);if(e.operation===C_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{g_.accessSync(e.file_path,g_.constants.R_OK|g_.constants.F_OK)}catch(s){return s.code===C_.NODE_ERROR_CODES.ENOENT?na(s,`No such file or directory ${s.path}`,I_.BAD_REQUEST):s.code===C_.NODE_ERROR_CODES.EACCES?na(s,`Permission denied ${s.path}`,I_.BAD_REQUEST):na(s)}try{let s=g_.statSync(e.file_path).size;if(s>sI)return na(new Error,NQ.MAX_FILE_SIZE_ERR(s,sI),I_.BAD_REQUEST)}catch(s){pQ.error(s),console.error(s)}}}return t}a(y_,"postValidateChecks");oI.exports={dataObject:yQ,urlObject:DQ,fileObject:MQ,s3FileObject:PQ}});var yd=h((V2,cI)=>{"use strict";var ia=g(),D_=T();async function BQ(e,t,r,s=[]){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===D_.OPERATIONS_ENUM.INSERT||t.operation===D_.OPERATIONS_ENUM.UPDATE||t.operation===D_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===D_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ia.info(i.message),i):i.http_resp_msg?(ia.error(`Error calling operation: ${e.name}`),ia.error(i.http_resp_msg),i):(ia.error(`Error calling operation: ${e.name}`),ia.error(i),i)}}a(BQ,"callOperationFunctionAsAwait");cI.exports={callOperationFunctionAsAwait:BQ}});var Dd=h((k2,uI)=>{"use strict";var vQ=require("aws-sdk/clients/s3");uI.exports={getFileStreamFromS3:HQ,getS3AuthObj:_I};function HQ(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return _I(t.aws_access_key_id,t.aws_secret_access_key).getObject(r).createReadStream()}a(HQ,"getFileStreamFromS3");function _I(e,t){return new vQ({accessKeyId:e,secretAccessKey:t})}a(_I,"getS3AuthObj")});var EI=h((x2,lI)=>{"use strict";var M_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(M_,"BulkLoadFileObject");var P_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(P_,"BulkLoadDataObject");lI.exports={BulkLoadFileObject:M_,BulkLoadDataObject:P_}});var Hd=h(($2,LI)=>{"use strict";var B_=yt(),q_=Ud(),qQ=require("needle"),Nt=T(),GQ=he(),aa=b(),{handleHDBError:ae,hdb_errors:pI}=D(),{HTTP_STATUS_CODES:Fe,HDB_ERROR_MSGS:Oe,CHECK_LOGS_WRAPPER:xs}=pI,ks=g(),v_=require("papaparse");aa.promisifyPapaParse();var Zt=require("fs-extra"),FQ=require("path"),{chain:dI}=require("stream-chain"),hI=require("stream-json/streamers/StreamArray"),SI=require("stream-json/utils/Batch"),fI=require("stream-chain/utils/comp"),{finished:TI}=require("stream"),Md=Y(),VQ=In(),OI=yd(),kQ=Dd(),{BulkLoadFileObject:Pd,BulkLoadDataObject:xQ}=EI(),Bd=Rd(),{verifyBulkLoadAttributePerms:NI}=p_(),$Q=rE(),YQ=At(),KQ=Yr(),mI="No records parsed from csv file.",Vs=`${Md.get("HDB_ROOT")}/tmp`,{schema_regex:QQ}=Ar(),RI=1024*1024*5,AI=5e3,WQ={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};LI.exports={csvDataLoad:JQ,csvURLLoad:ZQ,csvFileLoad:XQ,importFromS3:zQ};async function JQ(e,t=[]){let r=q_.dataObject(e);if(r)throw ae(r,r.message,Fe.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=v_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new Bd;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&NI(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ae(new Error,o,Fe.BAD_REQUEST,void 0,void 0,!0);let c=new xQ(e.action,e.schema,e.table,n.data);return s=await OI.callOperationFunctionAsAwait(bI,c,CI.bind(null,n.meta.fields),t),s.message===mI?mI:wI(s.records,s.number_written)}catch(n){throw $s(n)}}a(JQ,"csvDataLoad");async function ZQ(e){let t=q_.urlObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vs}/${r}`;try{await jQ(e.csv_url,r)}catch(n){throw ks.error(Oe.DOWNLOAD_FILE_ERR(r)+" - "+n),ae(n,xs(Oe.DOWNLOAD_FILE_ERR(r)))}try{let n=new Pd(this.job_operation_function.name,e.action,e.schema,e.table,s,Nt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await vd(n);return await H_(s),i}catch(n){throw await H_(s),$s(n)}}a(ZQ,"csvURLLoad");async function XQ(e){let t=q_.fileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=new Pd(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Nt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await vd(r)}catch(s){throw $s(s)}}a(XQ,"csvFileLoad");async function zQ(e){let t=q_.s3FileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=FQ.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vs}/${n}`;let i=new Pd(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await eW(n,e);let o=await vd(i);return await H_(r),o}catch(s){throw await H_(r),$s(s)}}a(zQ,"importFromS3");async function jQ(e,t){let r;try{r=await qQ("get",e)}catch(s){let n=`Error downloading CSV file from ${e}, status code: ${s.statusCode}. Check the log for more information.`;throw ae(s,n,s.statusCode,Nt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}rW(r,e),await tW(t,r.raw)}a(jQ,"downloadCSVFile");async function eW(e,t){try{let r=`${Vs}/${e}`;await Zt.mkdirp(Vs),await Zt.writeFile(`${Vs}/${e}`,"",{flag:"a+"});let s=await Zt.createWriteStream(r),n=kQ.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){ks.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ks.error(Oe.S3_DOWNLOAD_ERR+" - "+r),ae(r,xs(Oe.S3_DOWNLOAD_ERR))}}a(eW,"downloadFileFromS3");async function tW(e,t){try{await Zt.mkdirp(Vs),await Zt.writeFile(`${Vs}/${e}`,t)}catch(r){throw ks.error(Oe.WRITE_TEMP_FILE_ERR),ae(r,xs(Oe.DEFAULT_BULK_LOAD_ERR))}}a(tW,"writeFileToTempFolder");async function H_(e){if(e)try{await Zt.access(e),await Zt.unlink(e)}catch{ks.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(H_,"deleteTempFile");function rW(e,t){if(e.statusCode!==pI.HTTP_STATUS_CODES.OK)throw ae(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Fe.BAD_REQUEST);if(!WQ[e.headers["content-type"]])throw ae(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Fe.BAD_REQUEST);if(!e.raw)throw ae(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Fe.BAD_REQUEST)}a(rW,"validateURLResponse");async function vd(e){try{let t;switch(e.file_type){case Nt.VALID_S3_FILE_TYPES.CSV:t=await sW(e);break;case Nt.VALID_S3_FILE_TYPES.JSON:t=await nW(e);break;default:throw ae(new Error,Oe.DEFAULT_BULK_LOAD_ERR,Fe.BAD_REQUEST,Nt.LOG_LEVELS.ERROR,Oe.INVALID_FILE_EXT_ERR(e))}return wI(t.records,t.number_written)}catch(t){throw $s(t)}}a(vd,"fileLoad");async function gI(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await B_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&NI(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ae(c);r(_)}}a(gI,"validateChunk");async function II(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;aa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!aa.isEmpty(c)&&!aa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await OI.callOperationFunctionAsAwait(bI,c,CI.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ae(c,xs(Oe.INSERT_CSV_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Oe.INSERT_CSV_ERR+" - "+c);r(_)}}a(II,"insertChunk");async function sW(e){let t={records:0,number_written:0};try{let r=new Bd,s=Zt.createReadStream(e.file_path,{highWaterMark:RI});s.setEncoding("utf8"),await v_.parsePromise(s,gI.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ae(new Error,n,Fe.BAD_REQUEST);return s=Zt.createReadStream(e.file_path,{highWaterMark:RI}),s.setEncoding("utf8"),await v_.parsePromise(s,II.bind(null,e,t)),s.destroy(),t}catch(r){throw ae(r,xs(Oe.PAPA_PARSE_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Oe.PAPA_PARSE_ERR+r)}}a(sW,"callPapaParse");async function nW(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Bd,n=dI([Zt.createReadStream(e.file_path,{encoding:"utf-8"}),hI.withParser(),c=>c.value,new SI({batchSize:AI}),fI(async c=>{await gI(e,s,r,c)})]);await new Promise((c,_)=>{TI(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ae(new Error,i,Fe.BAD_REQUEST);let o=dI([Zt.createReadStream(e.file_path,{encoding:"utf-8"}),hI.withParser(),c=>c.value,new SI({batchSize:AI}),fI(async c=>{await II(e,t,r,c)})]);return await new Promise((c,_)=>{TI(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ae(s,xs(Oe.INSERT_JSON_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Oe.INSERT_JSON_ERR+s)}}a(nW,"insertJson");async function bI(e){let t={};try{e.data&&e.data.length>0&&iW(e.data[0])?t=await aW(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ks.info(t.message))}catch(r){throw $s(r)}return t}a(bI,"callBulkFileLoad");function iW(e){let t=Object.keys(e);for(let r of t)if(!QQ.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(iW,"validateColumnNames");async function aW(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=B_.insert;break;case"update":i=B_.update;break;case"upsert":i=B_.upsert;break;default:throw ae(new Error,Oe.INVALID_ACTION_PARAM_ERR(s),Fe.BAD_REQUEST,Nt.LOG_LEVELS.ERROR,Oe.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=aa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw $s(o)}}a(aW,"bulkFileLoad");async function CI(e,t,r,s=[]){try{if(t.data.length===0||!Md.get(Nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=v_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new $Q(r.txn_time,i,Md.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await YQ.publishToStream(`${GQ.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,KQ.createNatsTableStreamName(t.schema,t.table),[o],s),await VQ.sendAttributeTransaction(r,t,s),delete r.new_attributes}catch(n){ks.error(n)}}a(CI,"postCSVLoadFunction");function wI(e,t){return`successfully loaded ${t} of ${e} records`}a(wI,"buildResponseMsg");function $s(e){return ae(e,xs(Oe.DEFAULT_BULK_LOAD_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Oe.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($s,"buildTopLevelErrMsg")});var Gd=h((Y2,HI)=>{"use strict";var DI=mt(),oW=N_(),cW=Dd(),{AsyncParser:_W,Transform:uW}=require("json2csv"),oa=require("stream"),lW=require("events"),Ht=b(),qd=require("fs-extra"),EW=require("path"),et=g(),{promisify:G_}=require("util"),ca=b(),{handleHDBError:Ne,hdb_errors:dW}=D(),{HDB_ERROR_MSGS:gt,HTTP_STATUS_CODES:ge}=dW,UI=["search_by_value","search_by_hash","sql"],yI=["json","csv"],MI="json",PI="csv",hW="Successfully exported JSON locally.",SW="Successfully exported CSV locally.",fW=1e3,TW=1e3,mW=G_(DI.searchByHash),RW=G_(DI.searchByValue),AW=G_(oW.evaluateSQL),pW=G_(oa.finished);HI.exports={export_to_s3:IW,export_local:OW};async function OW(e){et.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=BI(e);if(!Ht.isEmpty(t))throw et.error(t),Ne(new Error,t,ge.BAD_REQUEST,void 0,void 0,!0);if(Ht.isEmpty(e.path))throw et.error(gt.MISSING_VALUE("path")),Ne(new Error,gt.MISSING_VALUE("path"),ge.BAD_REQUEST,void 0,void 0,!0);let r=(Ht.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(EW.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ht.buildFolderPath(e.path,r);try{await NW(e.path);let n=await vI(e);return await gW(s,e.format,n)}catch(n){throw et.error(n),new Error(n)}}a(OW,"export_local");async function NW(e){if(et.trace("in confirmPath"),Ht.isEmptyOrZeroLength(e))throw Ne(new Error,`Invalid path: ${e}`,ge.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await qd.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,et.error(s),Ne(new Error,s,ge.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw et.error(r),Ne(new Error,r,ge.BAD_REQUEST,void 0,void 0,!0)}return!0}a(NW,"confirmPath");async function gW(e,t,r){if(et.trace("in saveToLocal"),ca.isEmptyOrZeroLength(e))throw Ne(new Error,gt.INVALID_VALUE("file_path"),ge.BAD_REQUEST,void 0,void 0,!0);if(ca.isEmptyOrZeroLength(t))throw Ne(new Error,gt.INVALID_VALUE("Source format"),ge.BAD_REQUEST,void 0,void 0,!0);if(ca.isEmpty(r))throw Ne(new Error,gt.NOT_FOUND("Data"),ge.BAD_REQUEST,void 0,void 0,!0);if(t===MI){let s=qd.createWriteStream(e),n=r.length;s.write("[");let i="";for await(let[o,c]of r.entries())i+=o===n-1?JSON.stringify(c):JSON.stringify(c)+",",o!==0&&o%TW===0&&(s.write(i)||await lW.once(s,"drain"),i="");return i.length!==0&&s.write(i),s.write("]"),s.end(),await pW(s),hW}else if(t===PI){let s=qd.createWriteStream(e),n=oa.Readable.from(r),i={},o={objectMode:!0};return await new _W(i,o).fromInput(n).toOutput(s).promise(!1),SW}throw Ne(new Error,gt.INVALID_VALUE("format"),ge.BAD_REQUEST)}a(gW,"saveToLocal");async function IW(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ne(new Error,gt.MISSING_VALUE("S3 object"),ge.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ne(new Error,gt.MISSING_VALUE("aws_access_key_id"),ge.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ne(new Error,gt.MISSING_VALUE("aws_secret_access_key"),ge.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.bucket))throw Ne(new Error,gt.MISSING_VALUE("bucket"),ge.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.key))throw Ne(new Error,gt.MISSING_VALUE("key"),ge.BAD_REQUEST);let t=BI(e);if(!Ht.isEmpty(t))throw Ne(new Error,t,ge.BAD_REQUEST);et.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vI(e)}catch(c){throw et.error(c),c}let s,n=cW.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key),i,o=new oa.PassThrough;if(e.format===PI){i=e.s3.key+".csv";let c=oa.Readable.from(r),_={},u={objectMode:!0},l=new uW(_,u);l.on("error",E=>{throw E}),c.pipe(l).pipe(o)}else if(e.format===MI){i=e.s3.key+".json";let c=new oa.Readable;c.pipe(o),c.on("error",l=>{throw l}),c.push("[");let _=r.length,u="";for(let[l,E]of r.entries())u+=l===_-1?JSON.stringify(E):JSON.stringify(E)+",",l!==0&&l%fW===0&&(c.push(u),u="");u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ne(new Error,gt.INVALID_VALUE("format"),ge.BAD_REQUEST);try{s=await n.upload({Bucket:e.s3.bucket,Key:i,Body:o}).promise()}catch(c){throw et.error(c),c}return s}a(IW,"export_to_s3");function BI(e){if(et.trace("in exportCoreValidation"),Ht.isEmpty(e.format))return"format missing";if(yI.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yI.join(", ")}`;let t=e.search_operation.operation;if(Ht.isEmpty(t))return"search_operation.operation missing";if(UI.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${UI.join(", ")}`}a(BI,"exportCoreValidation");async function vI(e){et.trace("in getRecords");let t,r;if(ca.isEmpty(e.search_operation)||ca.isEmptyOrZeroLength(e.search_operation.operation))throw Ne(new Error,gt.INVALID_VALUE("Search operation"),ge.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=RW;break;case"search_by_hash":t=mW;break;case"sql":t=AW;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,et.error(r),Ne(new Error,r,ge.BAD_REQUEST)}e.search_operation.hdb_user=e.hdb_user;try{return t(e.search_operation)}catch(s){throw et.error(s),s}}a(vI,"getRecords")});var GI=h((K2,qI)=>{"use strict";var F_=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(F_,"SqlSearchObject");qI.exports=F_});var kI=h((Q2,VI)=>{"use strict";var bW=T(),FI=require("moment"),CW=require("uuid").v4,V_=class{constructor(){this.id=CW(),this.type=void 0,this.start_datetime=FI().valueOf(),this.created_datetime=FI().valueOf(),this.end_datetime=void 0,this.status=bW.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(V_,"JobObject");VI.exports=V_});var Vd=h((W2,WI)=>{"use strict";var wW=require("uuid").v4,YI=yt(),KI=mt(),LW=Qt(),UW=Ts(),yW=GI(),oe=T(),DW=kI(),MW=Gl(),qt=g(),PW=ni(),Yn=b(),{promisify:Fd}=require("util"),Ys=require("moment"),BW=N_(),k_=Ud(),xI=pl(),{deleteTransactionLogsBeforeValidator:vW}=Sd(),{handleHDBError:HW,hdb_errors:qW}=D(),{HTTP_STATUS_CODES:GW}=qW,$I=Fd(KI.searchByValue),FW=Fd(KI.searchByHash),VW=YI.insert,kW=Fd(BW.evaluateSQL),xW=YI.update;WI.exports={addJob:KW,updateJob:WW,handleGetJob:$W,handleGetJobsByStartDate:YW,getJobById:QI};async function $W(e){try{let t=await QI(e.id);return Yn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw qt.error(r),new Error(r)}}a($W,"handleGetJob");async function YW(e){try{let t=await QW(e);if(qt.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ys(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ys(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw qt.error(r),new Error(r)}}a(YW,"handleGetJobsByStartDate");async function KW(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Yn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return qt.info(l),t.error=l,t}if(!oe.JOB_TYPE_ENUM[e.operation])return qt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case oe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=k_.fileObject(e);break;case oe.OPERATIONS_ENUM.CSV_URL_LOAD:s=k_.urlObject(e);break;case oe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=k_.dataObject(e);break;case oe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=k_.s3FileObject(e);break;case oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xI(e,"date");break;case oe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xI(e,"timestamp");break;case oe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=vW(e);break;default:break}if(s)throw HW(s,s.message,GW.BAD_REQUEST,void 0,void 0,!0);let n=new DW;n.type=e.operation===oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new LW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await $I(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return qt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=wW();try{o=await $I(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return qt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return qt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new PW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await VW(_)}catch(l){return qt.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,qt.trace(l)}return t}a(KW,"addJob");async function QW(e){let t=Ys(e.from_date,Ys.ISO_8601),r=Ys(e.to_date,Ys.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new yW(s,e.hdb_user);try{return await kW(n)}catch(i){throw qt.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(QW,"getJobsInDateRange");async function QI(e){if(Yn.isEmptyOrZeroLength(e))return Yn.errorizeMessage("Invalid job ID specified.");let t=new UW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await FW(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return qt.error(s),Yn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(QI,"getJobById");async function WW(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Yn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===oe.JOB_STATUS_ENUM.COMPLETE||e.status===oe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ys().valueOf());let t=new MW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await xW(t)}catch(s){throw new Error(s)}return r}a(WW,"updateJob")});var eb=h((J2,jI)=>{"use strict";var JI=b(),It=T(),JW=require("moment"),x_=Hd(),$_=g(),ZI=Vd(),XI=Gd(),zI=Ns(),ZW=r_(),XW=Qi(),zW=l_(),Y_=class{constructor(t,r){this.job=t,this.json=r}};a(Y_,"RunnerMessage");async function jW(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(JI.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(JI.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case It.JOB_TYPE_ENUM.csv_file_load:await Mr(e,x_.csvFileLoad);break;case It.JOB_TYPE_ENUM.csv_url_load:await Mr(e,x_.csvURLLoad);break;case It.JOB_TYPE_ENUM.csv_data_load:await Mr(e,x_.csvDataLoad);break;case It.JOB_TYPE_ENUM.import_from_s3:await Mr(e,x_.importFromS3);break;case It.JOB_TYPE_ENUM.empty_trash:break;case It.JOB_TYPE_ENUM.export_local:await Mr(e,XI.export_local);break;case It.JOB_TYPE_ENUM.export_to_s3:await Mr(e,XI.export_to_s3);break;case It.JOB_TYPE_ENUM.delete_files_before:case It.JOB_TYPE_ENUM.delete_records_before:await Mr(e,zI.deleteFilesBefore);break;case It.JOB_TYPE_ENUM.delete_audit_logs_before:await Mr(e,zI.deleteAuditLogsBefore);break;case It.JOB_TYPE_ENUM.delete_transaction_logs_before:await Mr(e,zW.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(jW,"parseMessage");async function Mr(e,t){try{e.job.status=It.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=JW().valueOf(),await ZI.updateJob(e.job),await e1(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):$_.error(`There was an error running ${t.name} job with id ${e.job.id}`),$_.error(s),e.job.message=s,e.job.status=It.JOB_STATUS_ENUM.ERROR;try{await ZI.updateJob(e.job)}catch(n){throw $_.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Mr,"runJob");async function e1(e){let t=ZW.generateJobConfig(e);$_.trace("launching job process:",e),await XW.start(t)}a(e1,"launchJobProcess");jI.exports={parseMessage:jW,RunnerMessage:Y_}});var rb=h((Z2,tb)=>{"use strict";var K_=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(K_,"OperationFunctionObject");tb.exports=K_});var Sb=h((X2,hb)=>{"use strict";var J_=mt(),Yd=N_(),Q_=Hd(),Kn=dc(),kd=As(),ua=Ns(),t1=uE(),_a=Ir(),W_=RE(),Pr=hd(),Ve=g(),r1=OE(),s1=Mc(),n1=GE(),i1=Hc(),a1=FE(),o1=xE(),xd=KE(),sb=Gd(),c1=p_(),Kd=Vd(),A=T(),{hdb_errors:Ea,handleHDBError:la}=D(),{HTTP_STATUS_CODES:nb}=Ea,$d=JE(),ib=od(),Z_=require("util"),Ks=yt(),_1=Qr(),u1=Lc(),Eb=In(),ab=eb(),ob=ic(),cb=mr(),_b=l_(),ub=md(),l1=yd(),E1=Z_.promisify(J_.searchByHash),d1=Z_.promisify(J_.searchByValue),h1=Z_.promisify(J_.search),S1=Z_.promisify(Yd.evaluateSQL),f1={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},N=rb();function T1(e,t,r){return Promise.all([Eb.postOperationHandler(e,t,r),e.table?Ks.flush(e):null])}a(T1,"postWrite");async function m1(e,t){try{if(e.body.operation!=="read_log"&&(Ve.log_level===A.LOG_LEVELS.INFO||Ve.log_level===A.LOG_LEVELS.DEBUG||Ve.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ve.info(o)}}catch(s){Ve.error(s)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:T1;try{let s=await l1.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return f1[e.body.operation]&&_1.setSchemaDataToGlobal(n=>{n&&Ve.error(n)}),s}catch(s){throw Ve.info(s),s}}a(m1,"processLocalTransaction");var lb=p1();hb.exports={chooseOperation:R1,getOperationFunction:db,processLocalTransaction:m1};function R1(e){let t;try{t=db(e)}catch(n){throw Ve.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Yd.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Yd.checkASTPermissions(e,i);if(o)throw Ve.error(`${nb.FORBIDDEN} from operation ${e.search_operation}`),la(new Error,o,Ea.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=c1.verifyPerms(i,n);if(o)throw Ve.error(`${nb.FORBIDDEN} from operation ${e.operation}`),la(new Error,o,Ea.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw la(n,"There was an error when trying to choose an operation path")}return r}a(R1,"chooseOperation");function db(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),lb.has(e.operation))return lb.get(e.operation);throw la(new Error,Ea.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ea.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(db,"getOperationFunction");async function A1(e){Ve.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await Ks.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Ks.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Ks.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await ua.deleteRecord(i);break;default:Ve.warn("invalid operation in catchup");break}await Eb.postOperationHandler(i,o,e)}catch(o){Ve.info("Invalid operation in transaction"),Ve.error(o)}}a(A1,"catchup");async function Er(e){let t,r;try{r=await Kd.addJob(e),t=r.createdJob;let s=new ab.RunnerMessage(t,e);return await ab.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ve.error(n),la(s,n)}}a(Er,"executeJob");function p1(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new N(Ks.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new N(Ks.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new N(Ks.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new N(J_.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new N(E1)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new N(d1)),e.set(A.OPERATIONS_ENUM.SEARCH,new N(h1)),e.set(A.OPERATIONS_ENUM.SQL,new N(S1)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new N(Er,Q_.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(Er,Q_.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(Er,Q_.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(Er,Q_.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new N(Kn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new N(Kn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new N(Kn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new N(Kn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new N(Kn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new N(Kn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new N(kd.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new N(kd.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new N(kd.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new N(ua.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new N(_a.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new N(_a.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new N(_a.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new N(_a.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new N(W_.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(W_.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(W_.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(W_.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new N(_a.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new N(r1)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new N(s1)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new N(n1)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new N(i1)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new N(a1)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new N(cb.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new N(o1.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new N(xd.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new N(xd.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new N(xd.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new N(Er,sb.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new N(Er,ua.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new N(Er,ua.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new N(Er,sb.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new N(Kd.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new N(Kd.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new N($d.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new N($d.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new N($d.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new N(ib.restartProcesses)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(ib.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new N(A1)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new N(u1.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new N(Er,ua.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new N(t1)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new N(ob.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(ob.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(cb.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new N(Pr.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new N(Pr.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new N(Pr.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new N(Pr.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new N(Pr.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new N(Pr.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new N(Pr.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new N(Pr.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new N(Pr.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new N(_b.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(Er,_b.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(ub.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(ub.auditModules)),e}a(p1,"initializeOperationFunctionMap")});var Rb=h((z2,mb)=>{"use strict";var O1=T(),N1=b(),dr=g(),{handleHDBError:Qd,hdb_errors:X_}=D(),fb=require("os"),g1=require("util"),I1=Yl(),b1=g1.promisify(I1.authorize),Tb=Sb();function C1(e){let t=`Found an uncaught exception with message: ${e.message}. ${fb.EOL}Stack: ${e.stack} ${fb.EOL}Terminating HDB.`;console.error(t),dr.fatal(t),process.exit(1)}a(C1,"handleServerUncaughtException");function w1(){dr.info("beforeExit caught"),process.exit(0)}a(w1,"handleBeforeExit");function L1(){dr.info("exit caught"),process.exit(0)}a(L1,"handleExit");function U1(){dr.info("SIGINT caught"),process.exit(0)}a(U1,"handleSigint");function y1(){dr.info("SIGQUIT caught"),process.exit(0)}a(y1,"handleSigquit");function D1(){dr.info("SIGTERM caught"),process.exit(0)}a(D1,"handleSigterm");function M1(e,t,r){if(dr.error(e),e.http_resp_code)return typeof e.http_resp_msg=="string"?r.code(e.http_resp_code).send({error:e.http_resp_msg}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:X_.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(M1,"serverErrorHandler");function P1(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Qd(new Error,"Invalid JSON.",X_.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(N1.isEmpty(e.body.operation)){let s=Qd(new Error,"Request body must include an 'operation' property.",X_.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(P1,"reqBodyValidationHandler");function B1(e,t,r){let s;e.body.operation!==O1.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS?b1(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{dr.warn(n),dr.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Qd(n,i,X_.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,r())}a(B1,"authHandler");async function v1(e,t=!1){let r;try{return t&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=t),r=Tb.chooseOperation(e.body),Tb.processLocalTransaction(e,r)}catch(s){throw dr.error(s),s}}a(v1,"handlePostRequest");mb.exports={authHandler:B1,handlePostRequest:v1,handleServerUncaughtException:C1,serverErrorHandler:M1,reqBodyValidationHandler:P1,handleBeforeExit:w1,handleExit:L1,handleSigint:U1,handleSigquit:y1,handleSigterm:D1}});var Nb=h(()=>{"use strict";var H1=require("cluster"),Xt=Y();Xt.initSync();var pb=T(),q1=require("util"),dt=g(),Ab=require("fs"),G1=require("fastify"),F1=Ua(),V1=require("@fastify/cors"),k1=require("@fastify/compress"),x1=require("@fastify/static"),$1=require("@fastify/accepts-serializer"),{pack:Y1,unpack:K1}=require("msgpackr"),Q1=_S(),W1=require("path"),{PACKAGE_ROOT:J1}=T(),Z1=Qr(),X1=b(),z1=Ir(),j1=mn(),eJ=hA(),tJ=mA(),rJ=q1.promisify(Z1.setSchemaDataToGlobal),{authHandler:sJ,handlePostRequest:nJ,handleServerUncaughtException:iJ,serverErrorHandler:aJ,reqBodyValidationHandler:oJ,handleBeforeExit:cJ,handleExit:_J,handleSigint:uJ,handleSigquit:lJ,handleSigterm:EJ}=Rb(),dJ=1024*1024*1024,Ob="TRUE",{HDB_SETTINGS_NAMES:cs}=pb,hJ=cs.CORS_ENABLED_KEY,SJ="CORS_ACCESSLIST",fJ=cs.SERVER_TIMEOUT_KEY,TJ=cs.SERVER_KEEP_ALIVE_TIMEOUT_KEY,mJ=cs.SERVER_HEADERS_TIMEOUT_KEY,RJ=cs.PRIVATE_KEY_KEY,AJ=cs.CERT_KEY,pJ=cs.HTTP_SECURE_ENABLED_KEY,OJ=cs.SERVER_PORT_KEY,z_;async function NJ(){try{dt.info("In Fastify server"+process.cwd()),dt.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),dt.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=H1.isMaster;try{global.hdb_ipc=new tJ(process.pid,eJ)}catch(n){throw dt.error("Error instantiating new instance of IPC client in HDB server"),dt.error(n),n}process.on("uncaughtException",iJ),process.on("beforeExit",cJ),process.on("exit",_J),process.on("SIGINT",uJ),process.on("SIGQUIT",lJ),process.on("SIGTERM",EJ),await gJ();let e=Xt.get(pJ),t=Xt.get(OJ),r=e&&(e===!0||e.toUpperCase()===Ob);z_=IJ(r),await z_.ready();let s=r?"HTTPS":"HTTP";try{await z_.listen({port:t,host:"::"}),dt.info(`HarperDB ${F1.version} ${s} Server running on port ${t}`)}catch(n){throw z_.close(),dt.error(n),dt.error(`Error configuring ${s} server`),n}}catch(e){dt.error(`Failed to build server on ${process.pid}`),dt.fatal(e),process.exit(1)}}a(NJ,"hdbServer");async function gJ(){try{dt.trace("Configuring HarperDB process."),await rJ(),await z1.setUsersToGlobal(),await j1.getLicense()}catch(e){dt.error(e)}}a(gJ,"setUp");function IJ(e){dt.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=bJ(e),r=G1(t);r.server.headersTimeout=wJ(),r.setErrorHandler(aJ);let s=CJ();s&&r.register(V1,s),r.register(function(i,o,c){i.setNotFoundHandler(function(_,u){u.code(404).send({error:"Not Found",statusCode:404})}),c()}),r.register(Q1),r.register(k1),r.register(x1,{root:W1.join(J1,"docs")}),r.register($1),r.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(i,o,c)=>{try{c(null,K1(o))}catch(_){_.statusCode=400,c(_)}});let n=Xt.get(pb.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!X1.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[oJ,sJ],config:{serializers:[{regex:/^application\/(x-)?msgpack$/,serializer:Y1}]}},async function(i,o){return nJ(i)}),dt.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(IJ,"buildServer");function bJ(e){let t=Xt.get(fJ),r=Xt.get(TJ),s={bodyLimit:dJ,connectionTimeout:t,keepAliveTimeout:r};if(e){let n=Xt.get(RJ),i=Xt.get(AJ),o={key:Ab.readFileSync(`${n}`),cert:Ab.readFileSync(`${i}`)};s.https=o}return s}a(bJ,"getServerOptions");function CJ(){let e=Xt.get(hJ),t=Xt.get(SJ),r;if(e&&(e===!0||e.toUpperCase()===Ob)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization"],credentials:!1},t&&t.length>0&&t[0]!==null)){let s=t.split(",");r.origin=(n,i)=>s.indexOf(n)!==-1?i(null,!0):i(new Error(`domain ${n} is not on access list`))}return r}a(CJ,"getCORSOpts");function wJ(){return Xt.get(mJ)}a(wJ,"getHeaderTimeoutConfig");(async()=>await NJ())()});Nb();
|
|
12
|
+
`,""):null}catch(d){d.stderr?i[_].npm_error=pg(d.stderr):i[_].npm_error=d.message;continue}try{i[_].npm_output=JSON.parse(l)}catch{i[_].npm_output=l}try{i[_].npm_error=JSON.parse(E)}catch{i[_].npm_error=E}}return E_.info(`finished installModules with response ${i}`),i}a(mK,"installModules");function pg(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
13
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(pg,"parseNPMStdErr");async function RK(e){E_.info(`starting auditModules for request: ${e}`);let t=gg(e);if(t)throw Fn(t,t.message,Vn.BAD_REQUEST);let{projects:r}=e;await Og(),await Ng(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=l_.join(hd,o);s[o]={npm_output:null,npm_error:null};try{let _=await Ag("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=pg(_.stderr)}}return E_.info(`finished auditModules with response ${s}`),s}a(RK,"auditModules");async function Og(){try{return await Ag("npm -v"),!0}catch{throw Fn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Vn.BAD_REQUEST,void 0,void 0,!0)}}a(Og,"checkNPMInstalled");async function Ng(e){if(!Array.isArray(e)||e.length===0)throw Fn(new Error,"projects argument must be an array with at least 1 element",Vn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=l_.join(hd,i.toString());if(!await fg.pathExists(o)){t.push(i);continue}let _=l_.join(o,"package.json");await fg.pathExists(_)||r.push(i)}if(t.length>0)throw Fn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Vn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Fn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Vn.BAD_REQUEST,void 0,void 0,!0)}a(Ng,"checkProjectPaths");function gg(e){let t=u_.object({projects:u_.array().min(1).items(u_.string()).required(),dry_run:u_.boolean().default(!1)});return fK.validateBySchema(e,t)}a(gg,"modulesValidator")});var Cg=h((mz,bg)=>{"use strict";var d_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(d_,"PermissionTableResponseObject");bg.exports=d_});var Lg=h((Rz,wg)=>{"use strict";var h_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(h_,"PermissionAttributeResponseObject");wg.exports=h_});var fd=h((Az,yg)=>{"use strict";var Ug=Cg(),AK=Lg(),{HDB_ERROR_MSGS:pK}=Ke(),S_=class{constructor(){this.error=pK.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new Ug(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new AK(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new Ug(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(S_,"PermissionResponseObject");yg.exports=S_});var R_=h((pz,Kg)=>{"use strict";var Td=Ut(),f_=Tt(),Bt=lc(),zi=Ts(),md=As(),OK=oE(),ji=Ar(),T_=fE(),pe=g(),NK=RE(),gK=yc(),IK=vE(),bK=Bc(),CK=HE(),wK=FE(),Rd=kE(),Cr=b(),LK=zO(),Ad=KE(),Pg=nd(),Pt=T(),Bg=zN(),UK=Cc(),vg=sc(),Hg=dr(),wr=ld(),yK=require("alasql"),qg=__(),Gg=Sd(),Fg=fd(),{handleHDBError:lt,hdb_errors:Vg}=D(),{HDB_ERROR_MSGS:Ge,HTTP_STATUS_CODES:Xi}=Vg,p=new Map,$g="delete",rs="insert",cr="read",Hs="update",Zi="describe",Dg=zi.describeSchema.name,Mg=zi.describeTable.name,kg={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},DK="catchup",MK="handleGetJob",PK="handleGetJobsByStartDate",m_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},BK=[Bt.createTable.name,Bt.createAttribute.name,Bt.dropTable.name,Bt.dropAttribute.name],xg={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},O=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(O,"permission");p.set(Td.insert.name,new O(!1,[rs]));p.set(Td.update.name,new O(!1,[Hs]));p.set(Td.upsert.name,new O(!1,[rs,Hs]));p.set(f_.searchByConditions.name,new O(!1,[cr]));p.set(f_.searchByHash.name,new O(!1,[cr]));p.set(f_.searchByValue.name,new O(!1,[cr]));p.set(f_.search.name,new O(!1,[cr]));p.set(Bt.createSchema.name,new O(!0,[]));p.set(Bt.createTable.name,new O(!0,[]));p.set(Bt.createAttribute.name,new O(!1,[rs]));p.set(Bt.dropSchema.name,new O(!0,[]));p.set(Bt.dropTable.name,new O(!0,[]));p.set(Bt.dropAttribute.name,new O(!0,[]));p.set(zi.describeSchema.name,new O(!1,[cr]));p.set(zi.describeTable.name,new O(!1,[cr]));p.set(md.deleteRecord.name,new O(!1,[$g]));p.set(ji.addUser.name,new O(!0,[]));p.set(ji.alterUser.name,new O(!0,[]));p.set(ji.dropUser.name,new O(!0,[]));p.set(ji.listUsersExternal.name,new O(!0,[]));p.set(T_.listRoles.name,new O(!0,[]));p.set(T_.addRole.name,new O(!0,[]));p.set(T_.alterRole.name,new O(!0,[]));p.set(T_.dropRole.name,new O(!0,[]));p.set(NK.name,new O(!0,[]));p.set(gK.name,new O(!0,[]));p.set(IK.name,new O(!0,[]));p.set(bK.name,new O(!0,[]));p.set(CK.name,new O(!0,[]));p.set(Rd.setRoutes.name,new O(!0,[]));p.set(Rd.getRoutes.name,new O(!0,[]));p.set(Rd.deleteRoutes.name,new O(!0,[]));p.set(Hg.setConfiguration.name,new O(!0,[]));p.set(wK.clusterStatus.name,new O(!0,[]));p.set(Ad.getFingerprint.name,new O(!0,[]));p.set(Ad.setLicense.name,new O(!0,[]));p.set(md.deleteFilesBefore.name,new O(!0,[]));p.set(md.deleteAuditLogsBefore.name,new O(!0,[]));p.set(Pg.restartProcesses.name,new O(!0,[]));p.set(Pg.restartService.name,new O(!0,[]));p.set(OK.name,new O(!0,[]));p.set(UK.systemInformation.name,new O(!0,[]));p.set(Hg.getConfiguration.name,new O(!0,[]));p.set(qg.readTransactionLog.name,new O(!0,[]));p.set(qg.deleteTransactionLogsBefore.name,new O(!0,[]));p.set(Gg.installModules.name,new O(!0,[]));p.set(Gg.auditModules.name,new O(!0,[]));p.set(vg.createTokens.name,new O(!1,[]));p.set(vg.refreshOperationToken.name,new O(!1,[]));p.set(wr.customFunctionsStatus.name,new O(!0,[]));p.set(wr.getCustomFunctions.name,new O(!0,[]));p.set(wr.getCustomFunction.name,new O(!0,[]));p.set(wr.setCustomFunction.name,new O(!0,[]));p.set(wr.dropCustomFunction.name,new O(!0,[]));p.set(wr.addCustomFunctionProject.name,new O(!0,[]));p.set(wr.dropCustomFunctionProject.name,new O(!0,[]));p.set(wr.packageCustomFunctionProject.name,new O(!0,[]));p.set(wr.deployCustomFunctionProject.name,new O(!0,[]));p.set(Ad.getRegistrationInfo.name,new O(!1,[]));p.set(ji.userInfo.name,new O(!1,[]));p.set(zi.describeAll.name,new O(!1,[]));p.set(MK,new O(!1,[]));p.set(PK,new O(!0,[]));p.set(DK,new O(!0,[]));p.set(m_.CSV_DATA_LOAD,new O(!1,[rs,Hs]));p.set(m_.CSV_URL_LOAD,new O(!1,[rs,Hs]));p.set(m_.CSV_FILE_LOAD,new O(!1,[rs,Hs]));p.set(m_.IMPORT_FROM_S3,new O(!1,[rs,Hs]));p.set(xg.EXPORT_TO_S3,new O(!1,[cr]));p.set(xg.EXPORT_LOCAL,new O(!1,[cr]));p.set(Pt.VALID_SQL_OPS_ENUM.DELETE,new O(!1,[$g]));p.set(Pt.VALID_SQL_OPS_ENUM.SELECT,new O(!1,[cr]));p.set(Pt.VALID_SQL_OPS_ENUM.INSERT,new O(!1,[rs]));p.set(Pt.VALID_SQL_OPS_ENUM.UPDATE,new O(!1,[Hs]));Kg.exports={verifyPerms:HK,verifyPermsAst:vK,verifyBulkLoadAttributePerms:GK};function vK(e,t,r){if(Cr.isEmptyOrZeroLength(e))throw pe.info("verify_perms_ast has an empty user parameter"),lt(new Error);if(Cr.isEmptyOrZeroLength(t))throw pe.info("verify_perms_ast has an empty user parameter"),lt(new Error);if(Cr.isEmptyOrZeroLength(r))throw pe.info("verify_perms_ast has a null operation parameter"),lt(new Error);try{let s=new Fg,n=new LK(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw pe.info("No schemas defined in verifyPermsAst(), will not continue."),lt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&kg[r])throw lt(new Error,Ge.DROP_SYSTEM,Xi.FORBIDDEN);if(c&&!_)return null;let u=Bg.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof yK.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=Yg(t,r,o,s);return l||(o.forEach((E,d)=>{for(let S=0;S<E.length;S++){let m=n.getAttributesBySchemaTableName(d,E[S]),R=Od(t.role.permission,d,E[S]);pd(m,R,r,E[S],d,s)}}),s.getPermsResponse())}catch(s){throw lt(s)}}a(vK,"verifyPermsAst");function HK(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw pe.info("null required parameter in verifyPerms"),lt(new Error,Ge.DEFAULT_INVALID_REQUEST,Xi.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new Fg;if(Cr.isEmptyOrZeroLength(e.hdb_user.role)||Cr.isEmptyOrZeroLength(e.hdb_user.role.permission))return pe.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ge.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(Pt.SYSTEM_SCHEMA_NAME)||n===Pt.SYSTEM_SCHEMA_NAME;if(l&&kg[r])throw lt(new Error,Ge.DROP_SYSTEM,Xi.FORBIDDEN);if(_&&!l||u===!0&&(r===Bt.createSchema.name||r===Bt.dropSchema.name))return null;if(BK.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=Bg.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===Dg||r===Mg){if(n===Pt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ge.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===Dg&&(!E[n]||!E[n][Zi]))return c.handleInvalidItem(Ge.SCHEMA_NOT_FOUND(n));if(r===Mg&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][Zi]))return c.handleInvalidItem(Ge.TABLE_NOT_FOUND(n,i))}}let d=Yg(e.hdb_user,r,o,c,s);if(d)return d;if(p.get(r)&&p.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&Pt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],w=E[n].tables[i];w[Pt.PERMS_CRUD_ENUM.READ]&&(w.attribute_permissions.length>0?w.attribute_permissions.filter(B=>B[Pt.PERMS_CRUD_ENUM.READ]).forEach(B=>{R.push(B.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(L=>L.attribute),e.get_attributes=R)}let S=qK(e),m=Od(e.hdb_user.role.permission,n,i);return pd(S,m,r,i,n,c,s),c.getPermsResponse()}a(HK,"verifyPerms");function Yg(e,t,r,s,n){if(Cr.arrayHasEmptyValues([e,t,r]))throw pe.info("hasPermissions has an invalid parameter"),lt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw pe.info(`operation ${t} not found.`),lt(new Error,Ge.OP_NOT_FOUND(t),Xi.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return pe.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ge.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][Zi]===!1){s.addInvalidItem(Ge.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ge.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[Zi]===!1)s.addInvalidItem(Ge.TABLE_NOT_FOUND(_,l));else try{let d=[],S=p.get(t).perms;!Cr.isEmpty(n)&&S.includes(n)&&(S=[n]);for(let m=0;m<S.length;m++){let R=S[m],w=E[R];(w==null||w===!1)&&(pe.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let S=Ge.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw pe.error(S),pe.error(d),lt(Vg.CHECK_LOGS_WRAPPER(S))}}}return r.size<2?s.getPermsResponse():null}a(Yg,"hasPermissions");function pd(e,t,r,s,n,i,o){if(!e||!t)throw pe.info("no attributes specified in checkAttributePerms."),lt(new Error);let c=p.get(r).perms;if(!c||c==="")throw pe.info(`no permissions found for ${r} in checkAttributePerms().`),lt(new Error);if(Cr.isEmptyOrZeroLength(t))return pe.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[Zi]===!1){i.addInvalidItem(Ge.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(Pt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==cr)throw lt(new Error,Ge.SYSTEM_TIMESTAMP_PERMS_ERR,Xi.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ge.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(pd,"checkAttributePerms");function qK(e){let t=new Set;try{if(e.action)return t;if(e.operation===Pt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){pe.info(r)}return t}a(qK,"getRecordAttributes");function Od(e,t,r){let s=new Map;if(Cr.isEmpty(e))return pe.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{pe.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Od,"getAttributePermissions");function GK(e,t,r,s,n,i,o){let c=new Set(i),_=Od(e,s,n);pd(c,_,t,n,s,o,r)}a(GK,"verifyBulkLoadAttributePerms")});var p_=h((Oz,Zg)=>{"use strict";Zg.exports={evaluateSQL:eW,processAST:Xg,convertSQLToAST:Jg,checkASTPermissions:Qg};var Wg=Ut(),Id=require("util"),FK=Id.callbackify(Wg.insert),VK=Tt().search,$K=tp().update,kK=Id.callbackify($K),xK=sp().convertDelete,ss=require("alasql"),YK=R_(),ta=g(),KK=yo(),WK=b(),ea=T(),{hdb_errors:QK,handleHDBError:Nd}=D(),{HTTP_STATUS_CODES:gd}=QK,JK=On();function XK(e,t,r){return Promise.all([JK.postOperationHandler(e,t,r),Wg.flush(e)])}a(XK,"postWrite");var ZK=Id.callbackify(XK);KK(ss);var zK=403,jK="There was a problem performing this insert. Please check the logs and try again.",A_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(A_,"ParsedSQLObject");function eW(e,t){let r=e.parsed_sql_object;if(!r){r=Jg(e.sql);let s,n=r.ast.statements[0];if(n instanceof ss.yy.Insert?s=n.into.databaseid:n instanceof ss.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ss.yy.Update||n instanceof ss.yy.Delete?s=n.table.databaseid:ta.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ss.yy.Select)&&WK.isEmptyOrZeroLength(s))return t("No schema specified",null)}Xg(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(eW,"evaluateSQL");function Qg(e,t){let r;try{r=YK.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Qg,"checkASTPermissions");function Jg(e){let t=new A_;if(!e)throw Nd(new Error,"The 'sql' parameter is missing from the request body",gd.BAD_REQUEST);try{let r=e.trim(),s=ss.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
+
`);throw s[1]?Nd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,gd.BAD_REQUEST):Nd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",gd.BAD_REQUEST)}return t}a(Jg,"convertSQLToAST");function Xg(e,t,r){try{let s=tW;if(!e.bypass_auth&&!t.permissions_checked){let i=Qg(e,t);if(i&&i.length>0)return r(zK,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ea.VALID_SQL_OPS_ENUM.SELECT:s=VK,n=t.ast.statements[0];break;case ea.VALID_SQL_OPS_ENUM.INSERT:s=rW;break;case ea.VALID_SQL_OPS_ENUM.UPDATE:s=kK;break;case ea.VALID_SQL_OPS_ENUM.DELETE:s=xK;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(Xg,"processAST");function tW(e,t){ta.info(e),t("unknown sql statement")}a(tW,"nullFunction");function rW({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=sW(i,e.values)}catch(o){return r(o)}FK(n,(o,c)=>{if(o)return r(o);ZK(n,c,_=>{_&&ta.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){ta.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(rW,"convertInsert");function sW(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ss.compile(`SELECT ${n.toString()} AS [${ea.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw ta.error(r),new Error(jK)}}a(sW,"createDataObjects")});var Cd=h((Nz,rI)=>{var b_=require("clone"),C_=Ee(),nW=b(),I_=T(),iW=g(),O_=require("fs"),{hdb_errors:aW,handleHDBError:ra}=D(),{HDB_ERROR_MSGS:oW,HTTP_STATUS_CODES:N_}=aW,{common_validators:g_}=Sr(),zg=1e9,bd=" is required",cW=["insert","update","upsert"],w_={schema:{presence:!0,format:g_.schema_format,length:g_.schema_length},table:{presence:!0,format:g_.schema_format,length:g_.schema_length},action:{inclusion:{within:cW,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{}},{AWS_ACCESS_KEY:_W,AWS_SECRET:uW,AWS_BUCKET:lW,AWS_FILE_KEY:EW}=I_.S3_BUCKET_AUTH_KEYS,dW={s3:{presence:!0},[`s3.${_W}`]:{presence:!0,type:"String"},[`s3.${uW}`]:{presence:!0,type:"String"},[`s3.${lW}`]:{presence:!0,type:"String"},[`s3.${EW}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]}},jg=b_(w_);jg.data.presence={message:bd};var eI=b_(w_);eI.file_path.presence={message:bd};var hW=Object.assign(b_(w_),dW),tI=b_(w_);tI.csv_url.presence={message:bd};function SW(e){let t=C_.validateObject(e,jg);return L_(e,t)}a(SW,"dataObject");function fW(e){let t=C_.validateObject(e,tI);return L_(e,t)}a(fW,"urlObject");function TW(e){let t=C_.validateObject(e,eI);return L_(e,t)}a(TW,"fileObject");function mW(e){let t=C_.validateObject(e,hW);return L_(e,t)}a(mW,"s3FileObject");function L_(e,t){if(!t){let r=nW.checkGlobalSchemaTable(e.schema,e.table);if(r)return ra(new Error,r,N_.BAD_REQUEST);if(e.operation===I_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{O_.accessSync(e.file_path,O_.constants.R_OK|O_.constants.F_OK)}catch(s){return s.code===I_.NODE_ERROR_CODES.ENOENT?ra(s,`No such file or directory ${s.path}`,N_.BAD_REQUEST):s.code===I_.NODE_ERROR_CODES.EACCES?ra(s,`Permission denied ${s.path}`,N_.BAD_REQUEST):ra(s)}try{let s=O_.statSync(e.file_path).size;if(s>zg)return ra(new Error,oW.MAX_FILE_SIZE_ERR(s,zg),N_.BAD_REQUEST)}catch(s){iW.error(s),console.error(s)}}}return t}a(L_,"postValidateChecks");rI.exports={dataObject:SW,urlObject:fW,fileObject:TW,s3FileObject:mW}});var wd=h((gz,sI)=>{"use strict";var sa=g(),U_=T();async function RW(e,t,r,s=[]){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===U_.OPERATIONS_ENUM.INSERT||t.operation===U_.OPERATIONS_ENUM.UPDATE||t.operation===U_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===U_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sa.info(i.message),i):i.http_resp_msg?(sa.error(`Error calling operation: ${e.name}`),sa.error(i.http_resp_msg),i):(sa.error(`Error calling operation: ${e.name}`),sa.error(i),i)}}a(RW,"callOperationFunctionAsAwait");sI.exports={callOperationFunctionAsAwait:RW}});var Ld=h((Iz,iI)=>{"use strict";var AW=require("aws-sdk/clients/s3");iI.exports={getFileStreamFromS3:pW,getS3AuthObj:nI};function pW(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return nI(t.aws_access_key_id,t.aws_secret_access_key).getObject(r).createReadStream()}a(pW,"getFileStreamFromS3");function nI(e,t){return new AW({accessKeyId:e,secretAccessKey:t})}a(nI,"getS3AuthObj")});var oI=h((bz,aI)=>{"use strict";var y_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(y_,"BulkLoadFileObject");var D_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(D_,"BulkLoadDataObject");aI.exports={BulkLoadFileObject:y_,BulkLoadDataObject:D_}});var Pd=h((Cz,gI)=>{"use strict";var M_=Ut(),v_=Cd(),OW=require("needle"),Ot=T(),NW=he(),na=b(),{handleHDBError:ae,hdb_errors:fI}=D(),{HTTP_STATUS_CODES:Fe,HDB_ERROR_MSGS:Oe,CHECK_LOGS_WRAPPER:Fs}=fI,Gs=g(),P_=require("papaparse");na.promisifyPapaParse();var Qt=require("fs-extra"),gW=require("path"),{chain:cI}=require("stream-chain"),_I=require("stream-json/streamers/StreamArray"),uI=require("stream-json/utils/Batch"),lI=require("stream-chain/utils/comp"),{finished:EI}=require("stream"),Ud=Y(),IW=On(),TI=wd(),bW=Ld(),{BulkLoadFileObject:yd,BulkLoadDataObject:CW}=oI(),Dd=fd(),{verifyBulkLoadAttributePerms:mI}=R_(),wW=jl(),LW=Rt(),UW=Vr(),dI="No records parsed from csv file.",qs=`${Ud.get("HDB_ROOT")}/tmp`,{schema_regex:yW}=Sr(),hI=1024*1024*5,SI=5e3,DW={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};gI.exports={csvDataLoad:MW,csvURLLoad:PW,csvFileLoad:BW,importFromS3:vW};async function MW(e,t=[]){let r=v_.dataObject(e);if(r)throw ae(r,r.message,Fe.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=P_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new Dd;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&mI(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ae(new Error,o,Fe.BAD_REQUEST,void 0,void 0,!0);let c=new CW(e.action,e.schema,e.table,n.data);return s=await TI.callOperationFunctionAsAwait(pI,c,OI.bind(null,n.meta.fields),t),s.message===dI?dI:NI(s.records,s.number_written)}catch(n){throw Vs(n)}}a(MW,"csvDataLoad");async function PW(e){let t=v_.urlObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${qs}/${r}`;try{await HW(e.csv_url,r)}catch(n){throw Gs.error(Oe.DOWNLOAD_FILE_ERR(r)+" - "+n),ae(n,Fs(Oe.DOWNLOAD_FILE_ERR(r)))}try{let n=new yd(this.job_operation_function.name,e.action,e.schema,e.table,s,Ot.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Md(n);return await B_(s),i}catch(n){throw await B_(s),Vs(n)}}a(PW,"csvURLLoad");async function BW(e){let t=v_.fileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=new yd(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ot.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Md(r)}catch(s){throw Vs(s)}}a(BW,"csvFileLoad");async function vW(e){let t=v_.s3FileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=gW.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${qs}/${n}`;let i=new yd(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await qW(n,e);let o=await Md(i);return await B_(r),o}catch(s){throw await B_(r),Vs(s)}}a(vW,"importFromS3");async function HW(e,t){let r;try{r=await OW("get",e)}catch(s){let n=`Error downloading CSV file from ${e}, status code: ${s.statusCode}. Check the log for more information.`;throw ae(s,n,s.statusCode,Ot.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}FW(r,e),await GW(t,r.raw)}a(HW,"downloadCSVFile");async function qW(e,t){try{let r=`${qs}/${e}`;await Qt.mkdirp(qs),await Qt.writeFile(`${qs}/${e}`,"",{flag:"a+"});let s=await Qt.createWriteStream(r),n=bW.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Gs.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Gs.error(Oe.S3_DOWNLOAD_ERR+" - "+r),ae(r,Fs(Oe.S3_DOWNLOAD_ERR))}}a(qW,"downloadFileFromS3");async function GW(e,t){try{await Qt.mkdirp(qs),await Qt.writeFile(`${qs}/${e}`,t)}catch(r){throw Gs.error(Oe.WRITE_TEMP_FILE_ERR),ae(r,Fs(Oe.DEFAULT_BULK_LOAD_ERR))}}a(GW,"writeFileToTempFolder");async function B_(e){if(e)try{await Qt.access(e),await Qt.unlink(e)}catch{Gs.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(B_,"deleteTempFile");function FW(e,t){if(e.statusCode!==fI.HTTP_STATUS_CODES.OK)throw ae(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Fe.BAD_REQUEST);if(!DW[e.headers["content-type"]])throw ae(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Fe.BAD_REQUEST);if(!e.raw)throw ae(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Fe.BAD_REQUEST)}a(FW,"validateURLResponse");async function Md(e){try{let t;switch(e.file_type){case Ot.VALID_S3_FILE_TYPES.CSV:t=await VW(e);break;case Ot.VALID_S3_FILE_TYPES.JSON:t=await $W(e);break;default:throw ae(new Error,Oe.DEFAULT_BULK_LOAD_ERR,Fe.BAD_REQUEST,Ot.LOG_LEVELS.ERROR,Oe.INVALID_FILE_EXT_ERR(e))}return NI(t.records,t.number_written)}catch(t){throw Vs(t)}}a(Md,"fileLoad");async function RI(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await M_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&mI(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ae(c);r(_)}}a(RI,"validateChunk");async function AI(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;na.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!na.isEmpty(c)&&!na.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await TI.callOperationFunctionAsAwait(pI,c,OI.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ae(c,Fs(Oe.INSERT_CSV_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,Oe.INSERT_CSV_ERR+" - "+c);r(_)}}a(AI,"insertChunk");async function VW(e){let t={records:0,number_written:0};try{let r=new Dd,s=Qt.createReadStream(e.file_path,{highWaterMark:hI});s.setEncoding("utf8"),await P_.parsePromise(s,RI.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ae(new Error,n,Fe.BAD_REQUEST);return s=Qt.createReadStream(e.file_path,{highWaterMark:hI}),s.setEncoding("utf8"),await P_.parsePromise(s,AI.bind(null,e,t)),s.destroy(),t}catch(r){throw ae(r,Fs(Oe.PAPA_PARSE_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,Oe.PAPA_PARSE_ERR+r)}}a(VW,"callPapaParse");async function $W(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Dd,n=cI([Qt.createReadStream(e.file_path,{encoding:"utf-8"}),_I.withParser(),c=>c.value,new uI({batchSize:SI}),lI(async c=>{await RI(e,s,r,c)})]);await new Promise((c,_)=>{EI(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ae(new Error,i,Fe.BAD_REQUEST);let o=cI([Qt.createReadStream(e.file_path,{encoding:"utf-8"}),_I.withParser(),c=>c.value,new uI({batchSize:SI}),lI(async c=>{await AI(e,t,r,c)})]);return await new Promise((c,_)=>{EI(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ae(s,Fs(Oe.INSERT_JSON_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,Oe.INSERT_JSON_ERR+s)}}a($W,"insertJson");async function pI(e){let t={};try{e.data&&e.data.length>0&&kW(e.data[0])?t=await xW(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Gs.info(t.message))}catch(r){throw Vs(r)}return t}a(pI,"callBulkFileLoad");function kW(e){let t=Object.keys(e);for(let r of t)if(!yW.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(kW,"validateColumnNames");async function xW(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=M_.insert;break;case"update":i=M_.update;break;case"upsert":i=M_.upsert;break;default:throw ae(new Error,Oe.INVALID_ACTION_PARAM_ERR(s),Fe.BAD_REQUEST,Ot.LOG_LEVELS.ERROR,Oe.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=na.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Vs(o)}}a(xW,"bulkFileLoad");async function OI(e,t,r,s=[]){try{if(t.data.length===0||!Ud.get(Ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=P_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new wW(r.txn_time,i,Ud.get(Ot.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await LW.publishToStream(`${NW.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,UW.createNatsTableStreamName(t.schema,t.table),[o],s),await IW.sendAttributeTransaction(r,t,s),delete r.new_attributes}catch(n){Gs.error(n)}}a(OI,"postCSVLoadFunction");function NI(e,t){return`successfully loaded ${t} of ${e} records`}a(NI,"buildResponseMsg");function Vs(e){return ae(e,Fs(Oe.DEFAULT_BULK_LOAD_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,Oe.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Vs,"buildTopLevelErrMsg")});var vd=h((wz,DI)=>{"use strict";var CI=Tt(),YW=p_(),KW=Ld(),{AsyncParser:WW,Transform:QW}=require("json2csv"),ia=require("stream"),JW=require("events"),vt=b(),Bd=require("fs-extra"),XW=require("path"),et=g(),{promisify:H_}=require("util"),aa=b(),{handleHDBError:Ne,hdb_errors:ZW}=D(),{HDB_ERROR_MSGS:Nt,HTTP_STATUS_CODES:ge}=ZW,II=["search_by_value","search_by_hash","sql"],bI=["json","csv"],wI="json",LI="csv",zW="Successfully exported JSON locally.",jW="Successfully exported CSV locally.",eQ=1e3,tQ=1e3,rQ=H_(CI.searchByHash),sQ=H_(CI.searchByValue),nQ=H_(YW.evaluateSQL),iQ=H_(ia.finished);DI.exports={export_to_s3:_Q,export_local:aQ};async function aQ(e){et.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=UI(e);if(!vt.isEmpty(t))throw et.error(t),Ne(new Error,t,ge.BAD_REQUEST,void 0,void 0,!0);if(vt.isEmpty(e.path))throw et.error(Nt.MISSING_VALUE("path")),Ne(new Error,Nt.MISSING_VALUE("path"),ge.BAD_REQUEST,void 0,void 0,!0);let r=(vt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(XW.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=vt.buildFolderPath(e.path,r);try{await oQ(e.path);let n=await yI(e);return await cQ(s,e.format,n)}catch(n){throw et.error(n),new Error(n)}}a(aQ,"export_local");async function oQ(e){if(et.trace("in confirmPath"),vt.isEmptyOrZeroLength(e))throw Ne(new Error,`Invalid path: ${e}`,ge.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Bd.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,et.error(s),Ne(new Error,s,ge.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw et.error(r),Ne(new Error,r,ge.BAD_REQUEST,void 0,void 0,!0)}return!0}a(oQ,"confirmPath");async function cQ(e,t,r){if(et.trace("in saveToLocal"),aa.isEmptyOrZeroLength(e))throw Ne(new Error,Nt.INVALID_VALUE("file_path"),ge.BAD_REQUEST,void 0,void 0,!0);if(aa.isEmptyOrZeroLength(t))throw Ne(new Error,Nt.INVALID_VALUE("Source format"),ge.BAD_REQUEST,void 0,void 0,!0);if(aa.isEmpty(r))throw Ne(new Error,Nt.NOT_FOUND("Data"),ge.BAD_REQUEST,void 0,void 0,!0);if(t===wI){let s=Bd.createWriteStream(e),n=r.length;s.write("[");let i="";for await(let[o,c]of r.entries())i+=o===n-1?JSON.stringify(c):JSON.stringify(c)+",",o!==0&&o%tQ===0&&(s.write(i)||await JW.once(s,"drain"),i="");return i.length!==0&&s.write(i),s.write("]"),s.end(),await iQ(s),zW}else if(t===LI){let s=Bd.createWriteStream(e),n=ia.Readable.from(r),i={},o={objectMode:!0};return await new WW(i,o).fromInput(n).toOutput(s).promise(!1),jW}throw Ne(new Error,Nt.INVALID_VALUE("format"),ge.BAD_REQUEST)}a(cQ,"saveToLocal");async function _Q(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ne(new Error,Nt.MISSING_VALUE("S3 object"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ne(new Error,Nt.MISSING_VALUE("aws_access_key_id"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ne(new Error,Nt.MISSING_VALUE("aws_secret_access_key"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.bucket))throw Ne(new Error,Nt.MISSING_VALUE("bucket"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.key))throw Ne(new Error,Nt.MISSING_VALUE("key"),ge.BAD_REQUEST);let t=UI(e);if(!vt.isEmpty(t))throw Ne(new Error,t,ge.BAD_REQUEST);et.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await yI(e)}catch(c){throw et.error(c),c}let s,n=KW.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key),i,o=new ia.PassThrough;if(e.format===LI){i=e.s3.key+".csv";let c=ia.Readable.from(r),_={},u={objectMode:!0},l=new QW(_,u);l.on("error",E=>{throw E}),c.pipe(l).pipe(o)}else if(e.format===wI){i=e.s3.key+".json";let c=new ia.Readable;c.pipe(o),c.on("error",l=>{throw l}),c.push("[");let _=r.length,u="";for(let[l,E]of r.entries())u+=l===_-1?JSON.stringify(E):JSON.stringify(E)+",",l!==0&&l%eQ===0&&(c.push(u),u="");u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ne(new Error,Nt.INVALID_VALUE("format"),ge.BAD_REQUEST);try{s=await n.upload({Bucket:e.s3.bucket,Key:i,Body:o}).promise()}catch(c){throw et.error(c),c}return s}a(_Q,"export_to_s3");function UI(e){if(et.trace("in exportCoreValidation"),vt.isEmpty(e.format))return"format missing";if(bI.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${bI.join(", ")}`;let t=e.search_operation.operation;if(vt.isEmpty(t))return"search_operation.operation missing";if(II.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${II.join(", ")}`}a(UI,"exportCoreValidation");async function yI(e){et.trace("in getRecords");let t,r;if(aa.isEmpty(e.search_operation)||aa.isEmptyOrZeroLength(e.search_operation.operation))throw Ne(new Error,Nt.INVALID_VALUE("Search operation"),ge.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=sQ;break;case"search_by_hash":t=rQ;break;case"sql":t=nQ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,et.error(r),Ne(new Error,r,ge.BAD_REQUEST)}e.search_operation.hdb_user=e.hdb_user;try{return t(e.search_operation)}catch(s){throw et.error(s),s}}a(yI,"getRecords")});var PI=h((Lz,MI)=>{"use strict";var q_=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(q_,"SqlSearchObject");MI.exports=q_});var HI=h((Uz,vI)=>{"use strict";var uQ=T(),BI=require("moment"),lQ=require("uuid").v4,G_=class{constructor(){this.id=lQ(),this.type=void 0,this.start_datetime=BI().valueOf(),this.created_datetime=BI().valueOf(),this.end_datetime=void 0,this.status=uQ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(G_,"JobObject");vI.exports=G_});var qd=h((yz,kI)=>{"use strict";var EQ=require("uuid").v4,FI=Ut(),VI=Tt(),dQ=Yt(),hQ=hs(),SQ=PI(),oe=T(),fQ=HI(),TQ=vl(),Ht=g(),mQ=ri(),$n=b(),{promisify:Hd}=require("util"),$s=require("moment"),RQ=p_(),F_=Cd(),qI=ml(),{deleteTransactionLogsBeforeValidator:AQ}=Ed(),{handleHDBError:pQ,hdb_errors:OQ}=D(),{HTTP_STATUS_CODES:NQ}=OQ,GI=Hd(VI.searchByValue),gQ=Hd(VI.searchByHash),IQ=FI.insert,bQ=Hd(RQ.evaluateSQL),CQ=FI.update;kI.exports={addJob:UQ,updateJob:DQ,handleGetJob:wQ,handleGetJobsByStartDate:LQ,getJobById:$I};async function wQ(e){try{let t=await $I(e.id);return $n.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ht.error(r),new Error(r)}}a(wQ,"handleGetJob");async function LQ(e){try{let t=await yQ(e);if(Ht.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=$s(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=$s(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ht.error(r),new Error(r)}}a(LQ,"handleGetJobsByStartDate");async function UQ(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||$n.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ht.info(l),t.error=l,t}if(!oe.JOB_TYPE_ENUM[e.operation])return Ht.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case oe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=F_.fileObject(e);break;case oe.OPERATIONS_ENUM.CSV_URL_LOAD:s=F_.urlObject(e);break;case oe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=F_.dataObject(e);break;case oe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=F_.s3FileObject(e);break;case oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=qI(e,"date");break;case oe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=qI(e,"timestamp");break;case oe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=AQ(e);break;default:break}if(s)throw pQ(s,s.message,NQ.BAD_REQUEST,void 0,void 0,!0);let n=new fQ;n.type=e.operation===oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new dQ(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await GI(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Ht.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=EQ();try{o=await GI(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Ht.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ht.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new mQ(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await IQ(_)}catch(l){return Ht.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ht.trace(l)}return t}a(UQ,"addJob");async function yQ(e){let t=$s(e.from_date,$s.ISO_8601),r=$s(e.to_date,$s.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new SQ(s,e.hdb_user);try{return await bQ(n)}catch(i){throw Ht.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(yQ,"getJobsInDateRange");async function $I(e){if($n.isEmptyOrZeroLength(e))return $n.errorizeMessage("Invalid job ID specified.");let t=new hQ(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await gQ(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ht.error(s),$n.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a($I,"getJobById");async function DQ(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if($n.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===oe.JOB_STATUS_ENUM.COMPLETE||e.status===oe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=$s().valueOf());let t=new TQ(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await CQ(t)}catch(s){throw new Error(s)}return r}a(DQ,"updateJob")});var JI=h((Dz,QI)=>{"use strict";var xI=b(),gt=T(),MQ=require("moment"),V_=Pd(),$_=g(),YI=qd(),KI=vd(),WI=As(),PQ=e_(),BQ=Yi(),vQ=__(),k_=class{constructor(t,r){this.job=t,this.json=r}};a(k_,"RunnerMessage");async function HQ(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(xI.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(xI.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gt.JOB_TYPE_ENUM.csv_file_load:await Lr(e,V_.csvFileLoad);break;case gt.JOB_TYPE_ENUM.csv_url_load:await Lr(e,V_.csvURLLoad);break;case gt.JOB_TYPE_ENUM.csv_data_load:await Lr(e,V_.csvDataLoad);break;case gt.JOB_TYPE_ENUM.import_from_s3:await Lr(e,V_.importFromS3);break;case gt.JOB_TYPE_ENUM.empty_trash:break;case gt.JOB_TYPE_ENUM.export_local:await Lr(e,KI.export_local);break;case gt.JOB_TYPE_ENUM.export_to_s3:await Lr(e,KI.export_to_s3);break;case gt.JOB_TYPE_ENUM.delete_files_before:case gt.JOB_TYPE_ENUM.delete_records_before:await Lr(e,WI.deleteFilesBefore);break;case gt.JOB_TYPE_ENUM.delete_audit_logs_before:await Lr(e,WI.deleteAuditLogsBefore);break;case gt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Lr(e,vQ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(HQ,"parseMessage");async function Lr(e,t){try{e.job.status=gt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=MQ().valueOf(),await YI.updateJob(e.job),await qQ(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):$_.error(`There was an error running ${t.name} job with id ${e.job.id}`),$_.error(s),e.job.message=s,e.job.status=gt.JOB_STATUS_ENUM.ERROR;try{await YI.updateJob(e.job)}catch(n){throw $_.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Lr,"runJob");async function qQ(e){let t=PQ.generateJobConfig(e);$_.trace("launching job process:",e),await BQ.start(t)}a(qQ,"launchJobProcess");QI.exports={parseMessage:HQ,RunnerMessage:k_}});var ZI=h((Mz,XI)=>{"use strict";var x_=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(x_,"OperationFunctionObject");XI.exports=x_});var ub=h((Pz,_b)=>{"use strict";var W_=Tt(),$d=p_(),Y_=Pd(),kn=lc(),Gd=Ts(),ca=As(),GQ=oE(),oa=Ar(),K_=fE(),Ur=ld(),Ve=g(),FQ=RE(),VQ=yc(),$Q=vE(),kQ=Bc(),xQ=HE(),YQ=FE(),Fd=kE(),zI=vd(),KQ=R_(),kd=qd(),A=T(),{hdb_errors:ua,handleHDBError:_a}=D(),{HTTP_STATUS_CODES:jI}=ua,Vd=KE(),eb=nd(),Q_=require("util"),ks=Ut(),WQ=kr(),QQ=Cc(),ob=On(),tb=JI(),rb=sc(),sb=dr(),nb=__(),ib=Sd(),JQ=wd(),XQ=Q_.promisify(W_.searchByHash),ZQ=Q_.promisify(W_.searchByValue),zQ=Q_.promisify(W_.search),jQ=Q_.promisify($d.evaluateSQL),e1={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},N=ZI();function t1(e,t,r){return Promise.all([ob.postOperationHandler(e,t,r),e.table?ks.flush(e):null])}a(t1,"postWrite");async function r1(e,t){try{if(e.body.operation!=="read_log"&&(Ve.log_level===A.LOG_LEVELS.INFO||Ve.log_level===A.LOG_LEVELS.DEBUG||Ve.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ve.info(o)}}catch(s){Ve.error(s)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:t1;try{let s=await JQ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return e1[e.body.operation]&&WQ.setSchemaDataToGlobal(n=>{n&&Ve.error(n)}),s}catch(s){throw Ve.info(s),s}}a(r1,"processLocalTransaction");var ab=i1();_b.exports={chooseOperation:s1,getOperationFunction:cb,processLocalTransaction:r1};function s1(e){let t;try{t=cb(e)}catch(n){throw Ve.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=$d.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$d.checkASTPermissions(e,i);if(o)throw Ve.error(`${jI.FORBIDDEN} from operation ${e.search_operation}`),_a(new Error,o,ua.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=KQ.verifyPerms(i,n);if(o)throw Ve.error(`${jI.FORBIDDEN} from operation ${e.operation}`),_a(new Error,o,ua.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw _a(n,"There was an error when trying to choose an operation path")}return r}a(s1,"chooseOperation");function cb(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),ab.has(e.operation))return ab.get(e.operation);throw _a(new Error,ua.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ua.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(cb,"getOperationFunction");async function n1(e){Ve.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await ks.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await ks.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await ks.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await ca.deleteRecord(i);break;default:Ve.warn("invalid operation in catchup");break}await ob.postOperationHandler(i,o,e)}catch(o){Ve.info("Invalid operation in transaction"),Ve.error(o)}}a(n1,"catchup");async function _r(e){let t,r;try{r=await kd.addJob(e),t=r.createdJob;let s=new tb.RunnerMessage(t,e);return await tb.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ve.error(n),_a(s,n)}}a(_r,"executeJob");function i1(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new N(ks.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new N(ks.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new N(ks.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new N(W_.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new N(XQ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new N(ZQ)),e.set(A.OPERATIONS_ENUM.SEARCH,new N(zQ)),e.set(A.OPERATIONS_ENUM.SQL,new N(jQ)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new N(_r,Y_.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(_r,Y_.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(_r,Y_.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(_r,Y_.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new N(kn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new N(kn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new N(kn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new N(kn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new N(kn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new N(kn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new N(Gd.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new N(Gd.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new N(Gd.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new N(ca.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new N(oa.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new N(oa.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new N(oa.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new N(oa.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new N(K_.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(K_.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(K_.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(K_.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new N(oa.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new N(FQ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new N(VQ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new N($Q)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new N(kQ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new N(xQ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new N(sb.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new N(YQ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new N(Fd.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new N(Fd.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new N(Fd.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new N(_r,zI.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new N(_r,ca.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new N(_r,ca.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new N(_r,zI.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new N(kd.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new N(kd.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new N(Vd.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new N(Vd.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new N(Vd.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new N(eb.restartProcesses)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(eb.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new N(n1)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new N(QQ.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new N(_r,ca.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new N(GQ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new N(rb.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(rb.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(sb.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new N(Ur.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new N(Ur.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new N(Ur.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new N(Ur.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new N(Ur.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new N(Ur.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new N(Ur.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new N(Ur.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new N(Ur.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new N(nb.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(_r,nb.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(ib.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(ib.auditModules)),e}a(i1,"initializeOperationFunctionMap")});var hb=h((Bz,db)=>{"use strict";var a1=T(),o1=b(),ur=g(),{handleHDBError:xd,hdb_errors:J_}=D(),lb=require("os"),c1=require("util"),_1=$l(),u1=c1.promisify(_1.authorize),Eb=ub();function l1(e){let t=`Found an uncaught exception with message: ${e.message}. ${lb.EOL}Stack: ${e.stack} ${lb.EOL}Terminating HDB.`;console.error(t),ur.fatal(t),process.exit(1)}a(l1,"handleServerUncaughtException");function E1(){ur.info("beforeExit caught"),process.exit(0)}a(E1,"handleBeforeExit");function d1(){ur.info("exit caught"),process.exit(0)}a(d1,"handleExit");function h1(){ur.info("SIGINT caught"),process.exit(0)}a(h1,"handleSigint");function S1(){ur.info("SIGQUIT caught"),process.exit(0)}a(S1,"handleSigquit");function f1(){ur.info("SIGTERM caught"),process.exit(0)}a(f1,"handleSigterm");function T1(e,t,r){if(ur.error(e),e.http_resp_code)return typeof e.http_resp_msg=="string"?r.code(e.http_resp_code).send({error:e.http_resp_msg}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:J_.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(T1,"serverErrorHandler");function m1(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=xd(new Error,"Invalid JSON.",J_.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(o1.isEmpty(e.body.operation)){let s=xd(new Error,"Request body must include an 'operation' property.",J_.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(m1,"reqBodyValidationHandler");function R1(e,t,r){let s;e.body.operation!==a1.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS?u1(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{ur.warn(n),ur.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(xd(n,i,J_.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,r())}a(R1,"authHandler");async function A1(e,t=!1){let r;try{return t&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=t),r=Eb.chooseOperation(e.body),Eb.processLocalTransaction(e,r)}catch(s){throw ur.error(s),s}}a(A1,"handlePostRequest");db.exports={authHandler:R1,handlePostRequest:A1,handleServerUncaughtException:l1,serverErrorHandler:T1,reqBodyValidationHandler:m1,handleBeforeExit:E1,handleExit:d1,handleSigint:h1,handleSigquit:S1,handleSigterm:f1}});var mb=h(()=>{"use strict";var p1=require("cluster"),Jt=Y();Jt.initSync();var fb=T(),O1=require("util"),Et=g(),Sb=require("fs"),N1=require("fastify"),g1=wa(),I1=require("@fastify/cors"),b1=require("@fastify/compress"),C1=require("@fastify/static"),w1=require("@fastify/accepts-serializer"),{pack:L1,unpack:U1}=require("msgpackr"),y1=nS(),D1=require("path"),{PACKAGE_ROOT:M1}=T(),P1=kr(),B1=b(),v1=Ar(),H1=Sn(),q1=_A(),G1=dA(),F1=O1.promisify(P1.setSchemaDataToGlobal),{authHandler:V1,handlePostRequest:$1,handleServerUncaughtException:k1,serverErrorHandler:x1,reqBodyValidationHandler:Y1,handleBeforeExit:K1,handleExit:W1,handleSigint:Q1,handleSigquit:J1,handleSigterm:X1}=hb(),Z1=1024*1024*1024,Tb="TRUE",{HDB_SETTINGS_NAMES:ns}=fb,z1=ns.CORS_ENABLED_KEY,j1="CORS_ACCESSLIST",eJ=ns.SERVER_TIMEOUT_KEY,tJ=ns.SERVER_KEEP_ALIVE_TIMEOUT_KEY,rJ=ns.SERVER_HEADERS_TIMEOUT_KEY,sJ=ns.PRIVATE_KEY_KEY,nJ=ns.CERT_KEY,iJ=ns.HTTP_SECURE_ENABLED_KEY,aJ=ns.SERVER_PORT_KEY,X_;async function oJ(){try{Et.info("In Fastify server"+process.cwd()),Et.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Et.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=p1.isMaster;try{global.hdb_ipc=new G1(process.pid,q1)}catch(n){throw Et.error("Error instantiating new instance of IPC client in HDB server"),Et.error(n),n}process.on("uncaughtException",k1),process.on("beforeExit",K1),process.on("exit",W1),process.on("SIGINT",Q1),process.on("SIGQUIT",J1),process.on("SIGTERM",X1),await cJ();let e=Jt.get(iJ),t=Jt.get(aJ),r=e&&(e===!0||e.toUpperCase()===Tb);X_=_J(r),await X_.ready();let s=r?"HTTPS":"HTTP";try{await X_.listen({port:t,host:"::"}),Et.info(`HarperDB ${g1.version} ${s} Server running on port ${t}`)}catch(n){throw X_.close(),Et.error(n),Et.error(`Error configuring ${s} server`),n}}catch(e){Et.error(`Failed to build server on ${process.pid}`),Et.fatal(e),process.exit(1)}}a(oJ,"hdbServer");async function cJ(){try{Et.trace("Configuring HarperDB process."),await F1(),await v1.setUsersToGlobal(),await H1.getLicense()}catch(e){Et.error(e)}}a(cJ,"setUp");function _J(e){Et.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=uJ(e),r=N1(t);r.server.headersTimeout=EJ(),r.setErrorHandler(x1);let s=lJ();s&&r.register(I1,s),r.register(function(i,o,c){i.setNotFoundHandler(function(_,u){u.code(404).send({error:"Not Found",statusCode:404})}),c()}),r.register(y1),r.register(b1),r.register(C1,{root:D1.join(M1,"docs")}),r.register(w1),r.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(i,o,c)=>{try{c(null,U1(o))}catch(_){_.statusCode=400,c(_)}});let n=Jt.get(fb.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!B1.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[Y1,V1],config:{serializers:[{regex:/^application\/(x-)?msgpack$/,serializer:L1}]}},async function(i,o){return $1(i)}),Et.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(_J,"buildServer");function uJ(e){let t=Jt.get(eJ),r=Jt.get(tJ),s={bodyLimit:Z1,connectionTimeout:t,keepAliveTimeout:r};if(e){let n=Jt.get(sJ),i=Jt.get(nJ),o={key:Sb.readFileSync(`${n}`),cert:Sb.readFileSync(`${i}`)};s.https=o}return s}a(uJ,"getServerOptions");function lJ(){let e=Jt.get(z1),t=Jt.get(j1),r;if(e&&(e===!0||e.toUpperCase()===Tb)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization"],credentials:!1},t&&t.length>0&&t[0]!==null)){let s=t.split(",");r.origin=(n,i)=>s.indexOf(n)!==-1?i(null,!0):i(new Error(`domain ${n} is not on access list`))}return r}a(lJ,"getCORSOpts");function EJ(){return Jt.get(rJ)}a(EJ,"getHeaderTimeoutConfig");(async()=>await oJ())()});mb();
|