harperdb 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/launchServiceScripts/launchCustomFunctions.js +11 -11
- package/launchServiceScripts/launchHarperDB.js +11 -11
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/package.json +3 -3
- package/server/ipc/hdbIpcServer.js +1 -1
- package/server/jobs/jobProcess.js +11 -11
- package/utility/scripts/restartHdb.js +2 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var Nb=Object.defineProperty;var a=(e,t)=>Nb(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=h((LJ,ah)=>{"use strict";var $e=require("path"),gb=require("fs");function Ib(){let e=__dirname;for(;!gb.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(Ib,"getHDBPackageRoot");var Gt=Ib(),Wd="js",Qn=Wd,bb="harperdb-config.yaml",Cb="defaultConfig.yaml",wb="hdb",Jd=`hdbServer.${Qn}`,Zd=`customFunctionsServer.${Qn}`,Xd=`hdbIpcServer.${Qn}`,Lb=`restartHdb.${Qn}`,tu="HarperDB",fa="Custom Functions",Ta="Clustering Hub",ma="Clustering Leaf",ru="Clustering Ingest Service",su="Clustering Reply Service",Ub="foreground.pid",eu={HDB:tu,IPC:"IPC",CLUSTERING_HUB:Ta,CLUSTERING_LEAF:ma,CLUSTERING_INGEST_SERVICE:ru,CLUSTERING_REPLY_SERVICE:su,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"},yb={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"},Db={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Mb={harperdb:tu,ipc:"IPC","clustering hub":Ta,"clustering leaf":ma,"clustering ingest service":ru,"clustering reply service":su,"custom functions":fa,custom_functions:fa,"pm2-logrotate":eu.PM2_LOGROTATE,logrotate:eu.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Pb={CLUSTERING_HUB_PROC_DESCRIPTOR:Ta,CLUSTERING_LEAF_PROC_DESCRIPTOR:ma,CLUSTERING_INGEST_PROC_DESCRIPTOR:ru,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:su},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")},Bb={HDB:$e.join(Sa.HDB,Jd),IPC:$e.join(Sa.IPC,Xd),CUSTOM_FUNCTIONS:$e.join(Sa.CUSTOM_FUNCTIONS,Zd)},vb={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")},Hb={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},zd="support@harperdb.io",qb="customer-success@harperdb.io",jd=1,Gb=4141,eh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Fb="https://www.harperdb.io/product",Vb=`For support, please submit a request at ${eh} or contact ${zd}`,th=`For license support, please contact ${qb}`,kb="None of the specified records were found.",xb="hash attribute not found",$b=`Your current license only supports ${jd} role. ${th}`,Yb="Your current license only supports 3 connections to a node.",Kb="127.0.0.1",Qb=1,Wb=/^\.$/,Jb=/^\.\.$/,Zb="U+002E",Xb=/\//g,zb="U+002F",jb=/U\+002F/g,eC=/^U\+002E$/,tC=/^U\+002EU\+002E$/,rC="d",sC=999999,nC="*",iC="--max-old-space-size=",aC="system",oC="__hdb_hash",cC=".harperdb",_C=".hdb",uC="keys",lC="hdb_boot_properties.file",EC=".updateConfig.json",dC="SIGTSTP",hC=24,SC=6e4,fC=448,TC="blob",mC="trash",RC="schema",AC="transactions",pC=".count",OC="id",NC="install_log.log",gC="run_log.log",IC="PROCESS_NAME",bC={SETTINGS_PATH_KEY:"settings_path"},rh=require("lodash"),CC={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"},wC={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},LC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},UC={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"},yC={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:",DC={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"},MC={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"},PC="060493.ks",BC=".license",vC={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"},HC={CSV:".csv",JSON:".json"},qC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},GC={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 FC={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},VC={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"},kC=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"},xC={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},$C={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"},YC={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"},KC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},QC={FILE_SYSTEM:"fs",LMDB:"lmdb"},WC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},JC={DEVELOPMENT:8192,DEFAULT:512},ZC={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"},XC={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"},zC={ENOENT:"ENOENT",EACCES:"EACCES"},nh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},jC="__clustering__",ew=Object.values(nh),tw=15984864e5,ih={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},rw=rh.invert(ih),sw={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"},nw=111,iw=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(ls,"createLogRecord");function hh(e){Qs===void 0&&(
|
|
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:Mw.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(Hw,"findPs")});var Ye=h((MJ,Ah)=>{"use strict";var qw="__dbis__",Gw="__environment_name__",Fw="__dbi_defintion__",Vw={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"},kw=["__createdtime__","__updatedtime__"],xw="\uFFFF",Rh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$w=Object.values(Rh);Ah.exports={INTERNAL_DBIS_NAME:qw,DBI_DEFINITION_NAME:Fw,SEARCH_TYPES:Vw,TIMESTAMP_NAMES:kw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Gw,TRANSACTIONS_DBI_NAMES_ENUM:Rh,TRANSACTIONS_DBIS:$w,OVERFLOW_MARKER:xw}});var Ke=h((PJ,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"},Yw=Ih[Nh.INTERNAL_SERVER_ERROR],Kw={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.`},Qw={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Ww={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"},Jw={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"},Zw={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"},Xw={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."},zw={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"},eL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},tL={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}`},rL={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."},sL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},nL={...bh,...Ww,...Kw,...Xw,...zw,...jw,...eL,...tL,...Zw,...Ch,...wh,...rL,...sL,...Qw};Lh.exports={CHECK_LOGS_WRAPPER:gh,HDB_ERROR_MSGS:nL,DEFAULT_ERROR_MSGS:Ih,DEFAULT_ERROR_RESP:Yw,HTTP_STATUS_CODES:Nh,LMDB_ERRORS_ENUM:Jw,AUTHENTICATION_ERROR_MSGS:bh,VALIDATION_ERROR_MSGS:Ch,IPC_ERRORS:wh}});var D=h((BJ,Dh)=>{"use strict";var Js=Ke(),iL=g(),aL=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&&iL[n](i)}};a(Wn,"HdbError");function Uh(e,t,r,s=aL.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((HJ,Qh)=>{"use strict";var uu=require("path"),oL=require("fs-extra"),be=g(),Mh=require("fs-extra"),cL=require("truncate-utf8-bytes"),Jn=require("os"),_L=require("net"),uL=require("recursive-iterator"),Ue=T(),qh=mh(),Ph=require("papaparse"),pa=require("moment"),{inspect:lL}=require("util"),Bh=require("is-number"),vJ=require("lodash"),{hdb_errors:Oa}=D(),Gh=require("util").promisify(setTimeout),EL=100,dL=5,hL="",SL=4,vh=255,Hh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qh.exports={isEmpty:St,isEmptyOrZeroLength:jt,arrayHasEmptyValues:mL,arrayHasEmptyOrZeroLengthValues:RL,buildFolderPath:AL,isBoolean:Fh,errorizeMessage:fL,stripFileExtension:OL,autoCast:NL,autoCastJSONDeep:lu,removeDir:IL,compareVersions:bL,isCompatibleDataVersion:CL,escapeRawValue:kh,unescapeValue:wL,stringifyProps:LL,valueConverter:UL,timeoutPromise:DL,isClusterOperation:PL,getClusterUser:HL,sendTransactionToSocketCluster:BL,checkGlobalSchemaTable:vL,getHomeDir:xh,getPropsFilePath:yL,promisifyPapaParse:qL,removeBOM:$h,createEventPromise:GL,checkProcessRunning:FL,checkSchemaTableExist:VL,checkSchemaExists:Yh,checkTableExists:Kh,getStartOfTomorrowInSeconds:kL,getLimitKey:xL,isObject:pL,isNotEmptyAndHasValue:TL,autoCasterIsNumberCheck:Vh,backtickASTSchemaItems:$L,isPortTaken:ML,stopProcess:YL,createForkArgs:KL,autoCastBoolean:QL,async_set_timeout:Gh,getTableHashAttribute:WL,doesSchemaExist:JL,doesTableExist:ZL,stringifyObj:XL,ms_to_time:zL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function fL(e){return e instanceof Error?e:new Error(e)}a(fL,"errorizeMessage");function St(e){return e==null}a(St,"isEmpty");function TL(e){return!St(e)&&(e||e===0||e===""||Fh(e))}a(TL,"isNotEmptyAndHasValue");function jt(e){return St(e)||e.length===0||e.size===0}a(jt,"isEmptyOrZeroLength");function mL(e){if(St(e))return!0;for(let t=0;t<e.length;t++)if(St(e[t]))return!0;return!1}a(mL,"arrayHasEmptyValues");function RL(e){if(jt(e))return!0;for(let t=0;t<e.length;t++)if(jt(e[t]))return!0;return!1}a(RL,"arrayHasEmptyOrZeroLengthValues");function AL(...e){try{return e.join(uu.sep)}catch{console.error(e)}}a(AL,"buildFolderPath");function Fh(e){return St(e)?!1:e===!0||e===!1}a(Fh,"isBoolean");function pL(e){return St(e)?!1:typeof e=="object"}a(pL,"isObject");function OL(e){return jt(e)?hL:e.slice(0,-SL)}a(OL,"stripFileExtension");function NL(e){return St(e)||e===""||typeof e!="string"?e:Hh[e]!==void 0?Hh[e]:Vh(e)===!0?Number(e):e}a(NL,"autoCast");function gL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gL,"autoCastJSON");function lu(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=lu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=lu(r);s!==r&&(e[t]=s)}return e}else return gL(e)}a(lu,"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 IL(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 be.error(`Error removing files in ${e} -- ${t}`),t}}a(IL,"removeDir");function bL(e,t){if(jt(e)){be.info("Invalid current version sent as parameter.");return}if(jt(t)){be.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(bL,"compareVersions");function CL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(CL,"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 wL(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(wL,"unescapeValue");function LL(e,t){if(St(e))return be.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{be.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(LL,"stringifyProps");function UL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){be.error(n),t=e}let r=String(kh(t)),s=Buffer.byteLength(r)>vh?cL(r,vh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(UL,"valueConverter");function xh(){let e;try{e=Jn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xh,"getHomeDir");function yL(){let e=uu.join(xh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return oL.existsSync(e)||(e=uu.join(__dirname,"../","hdb_boot_properties.file")),e}a(yL,"getPropsFilePath");function DL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(DL,"timeoutPromise");async function ML(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=_L.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(ML,"isPortTaken");function PL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){be.error(`Error checking operation against cluster ops ${t}`)}return!1}a(PL,"isClusterOperation");function BL(e,t,r){if(global.hdb_socket_client!==void 0){be.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(BL,"sendTransactionToSocketCluster");function vL(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(vL,"checkGlobalSchemaTable");function HL(e,t){if(St(t)){be.warn("No CLUSTERING_USER defined, clustering disabled");return}if(St(e)||jt(e)){be.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){be.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){be.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(HL,"getClusterUser");function qL(){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(qL,"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 GL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;be.info(`Got cluster status event response: ${lL(n)}`);try{i.cancel()}catch{be.error("Error trying to cancel timeout.")}s(n)})})}a(GL,"createEventPromise");async function FL(e){let t=!0,r=0;do await Gh(EL*r++),(await qh.findPs(e)).length>0&&(t=!1);while(t&&r<dL);if(t)throw new Error(`process ${e} was not started`)}a(FL,"checkProcessRunning");function VL(e,t){let r=Yh(e);if(r)return r;let s=Kh(e,t);if(s)return s}a(VL,"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 kL(){let e=pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=pa().utc().unix();return e-t}a(kL,"getStartOfTomorrowInSeconds");function xL(){return pa().utc().format("DD-MM-YYYY")}a(xL,"getLimitKey");function $L(e){try{let t=new uL(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){be.error("Got an error back ticking items."),be.error(t)}}a($L,"backtickASTSchemaItems");async function YL(e){let t=Jn.userInfo();(await qh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),be.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(YL,"stopProcess");function KL(e){return[e]}a(KL,"createForkArgs");function QL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(QL,"autoCastBoolean");function WL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(WL,"getTableHashAttribute");function JL(e){return global?.hdb_schema?.[e]!==void 0}a(JL,"doesSchemaExist");function ZL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(ZL,"doesTableExist");function XL(e){try{return JSON.stringify(e)}catch{return e}}a(XL,"stringifyObj");function zL(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(zL,"ms_to_time")});var Jh=h((qJ,Wh)=>{"use strict";var jL={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))},eU="certificate.pem",tU="privateKey.pem",rU="ca.pem";Wh.exports={CERTIFICATE_VALUES:jL,CERTIFICATE_PEM_NAME:eU,PRIVATEKEY_PEM_NAME:tU,CA_PEM_NAME:rU}});var de=h((GJ,Zh)=>{"use strict";var nt=require("validate.js");nt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||nt.validators.type.checks[t](e)?null:` must be a '${t}' value`};nt.validators.type.checks={Object:function(e){return nt.isObject(e)&&!nt.isArray(e)},Array:nt.isArray,Integer:nt.isInteger,Number:nt.isNumber,String:nt.isString,Date:nt.isDate,Boolean:function(e){return typeof e=="boolean"}};nt.validators.hasValidFileExt=function(e,t){return!nt.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:sU,validateObjectAsync:nU,validateBySchema:iU};function sU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=nt(e,t,{format:"flat"});return r?new Error(r):null}a(sU,"validateObject");async function nU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await nt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(nU,"validateObjectAsync");function iU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(iU,"validateBySchema")});var du=h((FJ,zh)=>{"use strict";var aU=require("fs-extra"),F=require("joi"),oU=require("os"),{boolean:ye,string:fr,number:er,array:Eu}=F.types(),Ft=require("path"),cU=g(),Na=b(),Tr=Jh(),_U=de(),Sr="keys",uU=Tr.CERTIFICATE_PEM_NAME,lU=Tr.PRIVATEKEY_PEM_NAME,EU=Tr.CA_PEM_NAME,dU=Tr.CERTIFICATE_PEM_NAME,hU=Tr.PRIVATEKEY_PEM_NAME,SU=Tr.CA_PEM_NAME,fU=Tr.CERTIFICATE_PEM_NAME,TU=Tr.PRIVATEKEY_PEM_NAME,mU=Tr.CA_PEM_NAME,RU="log",AU="custom_functions",pU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",OU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",NU="rootPath config parameter is undefined",gU="clustering.enabled config parameter is undefined",qr=er.min(0).required(),ga=Eu.items({host:fr.required(),port:qr}).empty(null),it;zh.exports={configValidator:IU,routesValidator:UU,route_constraints:ga};function IU(e){if(it=e.rootPath,Na.isEmpty(it))throw NU;let t=ye.required(),r=F.valid("production","development").required(),s=er.min(1).max(1e3).empty(null).default(LU),n=fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xh),i=F.custom(CU).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 gU;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:Eu.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(wU).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:Eu.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(IU,"configValidator");function bU(e){return aU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(bU,"doesPathExist");function CU(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=bU(e);if(r)return t.message(r)}a(CU,"validatePemFile");function wU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(pU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(OU)}a(wU,"validateRotationMaxSize");function LU(e,t){let r=t.state.path.join("."),s=oU.cpus().length,n=s-1;return n===1&&s===2&&(n=s),cU.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(LU,"setDefaultThreads");function Xh(e,t){if(!Na.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Na.isEmpty(it))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ft.join(it,AU);case"logging.root":return Ft.join(it,RU);case"operationsApi.tls.certificate":return Ft.join(it,Sr,uU);case"operationsApi.tls.privateKey":return Ft.join(it,Sr,lU);case"operationsApi.tls.certificateAuthority":return Ft.join(it,Sr,EU);case"customFunctions.tls.certificate":return Ft.join(it,Sr,dU);case"customFunctions.tls.privateKey":return Ft.join(it,Sr,hU);case"customFunctions.tls.certificateAuthority":return Ft.join(it,Sr,SU);case"clustering.tls.certificate":return Ft.join(it,Sr,fU);case"clustering.tls.privateKey":return Ft.join(it,Sr,TU);case"clustering.tls.certificateAuthority":return Ft.join(it,Sr,mU);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xh,"setDefaultRoot");function UU(e){let t=F.object({routes:ga});return _U.validateBySchema({routes:e},t)}a(UU,"routesValidator")});var mr=h((VJ,iS)=>{"use strict";var re=T(),bt=b(),Qe=g(),{configValidator:yU,routesValidator:jh}=du(),Vt=require("fs-extra"),DU=require("yaml"),Zs=require("path"),MU=require("is-number"),Ca=require("properties-reader"),PU=require("lodash"),{handleHDBError:BU}=D(),{HTTP_STATUS_CODES:vU,HDB_ERROR_MSGS:Ia}=Ke(),{PACKAGE_ROOT:HU}=T(),qU="Unable to get config value because config is uninitialized",GU="Config successfully initialized",FU="Error backing up config file",VU="Empty parameter sent to getConfigValue",eS=Zs.join(HU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),kU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ba,at;iS.exports={createConfigFile:xU,getDefaultConfig:$U,getConfigValue:tS,initConfig:rS,flattenConfig:Es,updateConfigValue:sS,updateConfigObject:YU,getConfiguration:KU,setConfiguration:QU,readConfigFile:fu,getClusteringRoutes:WU,initOldConfig:nS,getConfigFromFile:JU};function xU(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("_"),_=hu(o,e[i]);try{t.setIn([...c],_)}catch(u){Qe.error(u)}}}Su(t);let r=t.toJSON();at=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(xU,"createConfigFile");function $U(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($U,"getDefaultConfig");function tS(e){if(bt.isEmpty(e)){Qe.error(VU);return}if(at===void 0){Qe.trace(qU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return at[t.toLowerCase()]}a(tS,"getConfigValue");function rS(e=!1){if(at===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}`)}Su(n);let i=n.toJSON();at=Es(i),Qe.trace(GU)}}a(rS,"initConfig");function Su(e){let t=e.toJSON(),r=yU(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(Su,"validateConfig");function YU(e,t){at===void 0&&(at={});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}at[r.toLowerCase()]=t}a(YU,"updateConfigObject");function sS(e,t,r=void 0,s=!1,n=!1){at===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=hu(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=hu(E,r[l]);try{c.setIn([...d],S)}catch(m){Qe.error(m)}}}Su(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(FU),Qe.error(l)}Vt.writeFileSync(u,String(c)),n&&(at=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 hu(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)||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(hu,"castConfigValue");function KU(){let e=bt.getPropsFilePath(),r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(KU,"getConfiguration");async function QU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sS(void 0,void 0,n,!0),kU}catch(i){throw typeof i=="string"||i instanceof String?BU(i,i,vU.BAD_REQUEST,void 0,void 0,!0):i}}a(QU,"setConfiguration");function fu(){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(fu,"readConfigFile");function Xs(e){return DU.parseDocument(Vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xs,"parseYamlDoc");function WU(){let e=fu(),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(WU,"getClusteringRoutes");function nS(e){let t=Ca(e);at={};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?at[n]=Zs.dirname(s):at[n]=s}return at}a(nS,"initOldConfig");function JU(e){let t=fu();return PU.get(t,e.replaceAll("_","."))}a(JU,"getConfigFromFile")});var Y=h((kJ,oS)=>{"use strict";var Tu=require("fs-extra"),tr=require("path"),ZU=require("os"),XU=require("properties-reader"),Zn=g(),zs=b(),M=T(),wa=mr(),zU="Error initializing environment manager",La="BOOT_PROPS_FILE_PATH",aS=!1,jU={[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:ey,setHdbBasePath:ty,get:ry,initSync:ny,setProperty:$,initTestEnvironment:iy};function ey(){return Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ey,"getHdbBasePath");function ty(e){Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ty,"setHdbBasePath");function ry(e){let t=wa.getConfigValue(e);return t===void 0?Rr[e]:t}a(ry,"get");function $(e,t){jU[e]&&(Rr[e]=t),wa.updateConfigObject(e,t)}a($,"setProperty");function sy(){let e;try{e=zs.getPropsFilePath(),Tu.accessSync(e,Tu.constants.F_OK|Tu.constants.R_OK),aS=!0;let t=XU(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(sy,"doesPropFileExist");function ny(e=!1){try{(aS||sy())&&(wa.initConfig(e),Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wa.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zn.error(zU),Zn.error(t),console.error(t),process.exit(1)}}a(ny,"initSync");function iy(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,ZU.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(iy,"initTestEnvironment")});var Ua=h((xJ,ay)=>{ay.exports={name:"harperdb",version:"4.0.0",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.3",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.7.0",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(($J,cS)=>{var oy=require("fastify-plugin");cS.exports=oy(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((YJ,cy)=>{cy.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((QJ,pS)=>{"use strict";var mu=require("recursive-iterator"),_y=require("alasql"),Ru=require("clone"),uS=b(),{handleHDBError:lS,hdb_errors:uy}=D(),{HDB_ERROR_MSGS:ES,HTTP_STATUS_CODES:dS}=uy,ly=["DISTINCT_ARRAY"],hS=Symbol("validateTables"),Au=Symbol("validateTable"),KJ=Symbol("getAllColumns"),SS=Symbol("validateAllColumns"),ya=Symbol("findColumn"),fS=Symbol("validateOrderBy"),Xn=Symbol("validateSegment"),pu=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[Au](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Au](t.table)})}}[AS](){let t=!1,r=new mu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Au](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=Ru(s);n.table=Ru(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 mu(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 _y.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 mu(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[pu](i)));return n}[RS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ly.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Ru(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[pu](t)}[pu](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 Ou=h((WJ,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((XJ,CS)=>{"use strict";var gS=Ke().LMDB_ERRORS_ENUM,JJ=require("lmdb"),Ey=Ye(),ZJ=require("buffer").Buffer,dy=require("microtime"),{OVERFLOW_MARKER:IS,MAX_SEARCH_KEY_LENGTH:Pa}=Ey,bS=["number","string","symbol","boolean","bigint"];function hy(e){if(!e)throw new Error(gS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(gS.INVALID_ENVIRONMENT)}a(hy,"validateEnv");function Sy(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(Sy,"stringifyData");function fy(e){return e instanceof Date?e.valueOf():e}a(fy,"convertKeyValueToWrite");function Ty(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(Ty,"getIndexedValues");function my(){let e=dy.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(my,"getMicroTime");CS.exports={validateEnv:hy,stringifyData:Sy,convertKeyValueToWrite:fy,getMicroTime:my,getIndexedValues:Ty}});var LS=h((zJ,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((jJ,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((eZ,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((rZ,YS)=>{"use strict";var Nu=require("lmdb"),Ct=require("fs-extra"),kt=require("path"),Ga=hs(),PS=g(),De=Ke().LMDB_ERRORS_ENUM,Fa=LS(),gu=yS(),BS=MS(),Gr=Ye(),tZ=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,Ry="data.mdb",Ay="lock.mdb",jn=".mdb",py="-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 Nu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(qa,"TransactionCursor");function Iu(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(Iu,"pathEnvNameValidation");async function bu(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,Ry),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(bu,"validateEnvironmentPath");function Va(e,t){if(Ga.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Va,"validateEnvDBIName");async function Oy(e,t,r=!1,s=!1){Iu(e,t),t=t.toString();try{return await bu(e,t,s),Cu(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=Nu.open(o);c.dbis=Object.create(null);let _=new gu(!1);c.openDB(xt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=wu(e,t,r);return c[Gr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(Oy,"createEnvironment");async function Ny(e,t,r,s=!0){let n=await Cu(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(Ny,"copyEnvironment");async function Cu(e,t,r=!1){Iu(e,t),t=t.toString();let s=wu(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 bu(e,t),i=kt.join(e,t+jn),o=n!=i,c=new BS(n,qS,GS,FS,o,vS,HS),_=Nu.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(Cu,"openEnvironment");async function gy(e,t,r=!1){Iu(e,t),t=t.toString();let s=kt.join(e,t+jn),n=await bu(e,t);if(global.lmdb_map!==void 0){let i=wu(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+py:kt.join(kt.dirname(n),Ay))}a(gy,"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 wu(e,t,r=!1){let n=`${kt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(wu,"getCachedEnvironmentName");function Iy(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(Iy,"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 by(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(by,"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 gu(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=by(e,t):r=new Fa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new gu(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 Cy(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(Cy,"statDBI");async function wy(e,t){try{let r=kt.join(e,t+jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(wy,"environmentDataSize");function Ly(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(Ly,"dropDBI");function Uy(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(Uy,"initializeDBIs");YS.exports={openDBI:wt,openEnvironment:Cu,createEnvironment:Oy,listDBIs:xS,listDBIDefinitions:Iy,createDBI:$S,dropDBI:Ly,statDBI:Cy,deleteEnvironment:gy,initializeDBIs:Uy,TransactionCursor:qa,environmentDataSize:wy,copyEnvironment:Ny,closeEnvironment:kS}});var QS=h((sZ,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((nZ,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((iZ,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((_Z,jS)=>{"use strict";var yy=Z(),Dy=QS(),My=JS(),Py=XS(),ti=hs(),ei=Ke().LMDB_ERRORS_ENUM,By=Ye(),Fr=T(),vy=b(),Hy=require("uuid"),aZ=require("lmdb"),{handleHDBError:qy,hdb_errors:Gy}=D(),{OVERFLOW_MARKER:oZ,MAX_SEARCH_KEY_LENGTH:cZ}=By,Lu=Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ss=Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Fy(e,t,r,s,n=!0){Mu(e,t,r,s),Uu(e,t,r);let i=new Dy,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];zS(u,!0,n);let l=Vy(e,t,r,u),E=u[t];o.push(l),c.push(E)}return yu(o,c,s,i)}a(Fy,"insertRecords");function Vy(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(Vy,"insertRecord");function ky(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ky,"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[Lu]))&&(e[Lu]=s):delete e[Lu]}a(zS,"setTimestamps");function Uu(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),yy.initializeDBIs(e,t,r)}a(Uu,"initializeTransaction");async function xy(e,t,r,s,n=!0){Mu(e,t,r,s),Uu(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=Du(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return yu(c,_,s,i,o)}a(xy,"updateRecords");async function $y(e,t,r,s,n=!0){try{Mu(e,t,r,s)}catch(_){throw qy(_,_.message,Gy.HTTP_STATUS_CODES.BAD_REQUEST)}Uu(e,t,r);let i=new Py,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;vy.isEmpty(u[t])?(l=Hy.v4(),u[t]=l):l=u[t];let E=Du(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return yu(o,c,s,i)}a($y,"upsertRecords");async function yu(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(),ky(r,n),s}a(yu,"finalizeWrite");function Du(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:Du(e,t,r,s,n,i,o))}a(Du,"updateUpsertRecord");function Yy(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(Yy,"validateBasic");function Mu(e,t,r,s){if(Yy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ei.RECORDS_REQUIRED):new Error(ei.RECORDS_MUST_BE_ARRAY)}a(Mu,"validateWrite");jS.exports={insertRecords:Fy,updateRecords:xy,upsertRecords:$y}});var te=h((uZ,tf)=>{"use strict";var Pu=T(),en=Y(),Bu=require("path");en.initSync();var Ya,Ka,Qa;function ef(){if(Ya!==void 0)return Ya;if(en.getHdbBasePath()!==void 0)return Ya=Bu.join(en.getHdbBasePath(),Pu.SCHEMA_DIR_NAME),Ya}a(ef,"getBaseSchemaPath");function Ky(){if(Ka!==void 0)return Ka;if(en.getHdbBasePath()!==void 0)return Ka=Bu.join(ef(),Pu.SYSTEM_SCHEMA_NAME),Ka}a(Ky,"getSystemSchemaPath");function Qy(){if(Qa!==void 0)return Qa;if(en.getHdbBasePath()!==void 0)return Qa=Bu.join(en.getHdbBasePath(),Pu.TRANSACTIONS_DIR_NAME),Qa}a(Qy,"getTransactionAuditStorePath");tf.exports={getBaseSchemaPath:ef,getSystemSchemaPath:Ky,getTransactionAuditStorePath:Qy}});var Ar=h((lZ,nf)=>{"use strict";var sf=b(),rf=T(),Ja=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,vu=require("joi"),Wa={schema_format:{pattern:Ja,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Wy=vu.alternatives(vu.string().min(1).max(Wa.schema_length.maximum).pattern(Ja).messages({"string.pattern.base":"{:#label} "+Wa.schema_format.message}),vu.number()).required();function Jy(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(Jy,"checkValidTable");function Zy(e,t){return sf.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Zy,"validateSchemaExists");function Xy(e,t){let r=t.state.ancestors[0].schema;return sf.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Xy,"validateTableExists");function zy(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(zy,"validateSchemaName");nf.exports={common_validators:Wa,schema_regex:Ja,hdb_schema_table:Wy,validateSchemaExists:Zy,validateTableExists:Xy,validateSchemaName:zy,checkValidTable:Jy}});var Za=h((EZ,af)=>{var{common_validators:Vr}=Ar(),ri=de(),$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 jy(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(jy,"schema_object");function eD(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(eD,"table_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={message:$t},ri.validateObject(e,X)}a(tD,"create_table_object");function rD(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(rD,"attribute_object");function sD(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(sD,"describe_table");function nD(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(nD,"validateTableResidence");af.exports={schema_object:jy,create_table_object:tD,table_object:eD,attribute_object:rD,describe_table:sD,validateTableResidence:nD}});var cf=h((dZ,of)=>{"use strict";var iD=require("uuid"),Xa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||iD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Xa,"CreateAttributeObject");of.exports=Xa});var ja=h((hZ,_f)=>{"use strict";var aD=cf(),za=class extends aD{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((SZ,uf)=>{"use strict";uf.exports=cD;var oD="inserted";function cD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===oD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(cD,"returnObject")});var eo=h((fZ,df)=>{"use strict";var _D=T(),Hu=Z(),uD=js(),{getSystemSchemaPath:lD,getBaseSchemaPath:ED}=te(),dD=require("path"),hD=ds(),SD=Za(),fD=ja(),TD=lf(),{handleHDBError:mD,hdb_errors:RD}=D(),AD=b(),qu=hD.hdb_attribute,Ef=[];for(let e=0;e<qu.attributes.length;e++)Ef.push(qu.attributes[e].attribute);var pD="inserted";df.exports=OD;async function OD(e){let t=SD.attribute_object(e);if(t)throw mD(new Error,t.message,RD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=AD.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 fD(e.schema,e.table,e.attribute,e.id);try{let n=await Hu.openEnvironment(dD.join(ED(),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}`);Hu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Hu.openEnvironment(lD(),_D.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await uD.insertRecords(i,qu.hash_attribute,Ef,[s]);return TD(pD,o,{records:[s]},c)}catch(n){throw n}}a(OD,"lmdbCreateAttribute")});var Fu=h((TZ,Sf)=>{var{hdb_schema_table:hf}=Ar(),ND=de(),Gu=require("joi"),gD={undefined:"undefined",null:"null"},ID=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||gD[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"),bD=Gu.object({schema:hf,table:hf,records:Gu.array().items(Gu.object().custom(ID)).required()});Sf.exports=function(e){return ND.validateBySchema(e,bD)}});var to=h((RZ,Tf)=>{"use strict";var pr=b(),ff=g(),mZ=Fu();Tf.exports=CD;function CD(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(CD,"insertUpdateValidate")});var ni=h((AZ,mf)=>{"use strict";var wD=T().OPERATIONS_ENUM,ro=class{constructor(t,r,s,n,i=void 0){this.operation=wD.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((OZ,Rf)=>{"use strict";var pZ=ni(),so=T(),ku=b(),Vu=g(),LD=require("uuid"),{handleHDBError:ii,hdb_errors:UD}=D(),{HDB_ERROR_MSGS:ai,HTTP_STATUS_CODES:oi}=UD;Rf.exports=yD;function yD(e,t,r){for(let n=0;n<t.length;n++)DD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];MD(i,r,e.operation)}}a(yD,"processRows");function DD(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(ku.isEmptyOrZeroLength(e)||ku.isEmpty(e.trim()))throw ii(new Error,ai.ATTR_NAME_NULLISH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(DD,"validateAttribute");function MD(e,t,r){if(!e.hasOwnProperty(t)||ku.isEmptyOrZeroLength(e[t])){if(r===so.OPERATIONS_ENUM.INSERT||r===so.OPERATIONS_ENUM.UPSERT){e[t]=LD.v4();return}throw Vu.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 Vu.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 Vu.error(e),ii(new Error,ai.INVALID_FORWARD_SLASH_IN_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateHash")});var pf=h((NZ,Af)=>{"use strict";var io=class{constructor(t,r){this.type=t,this.message=r}};a(io,"IPCEventObject");Af.exports=io});var kr=h((gZ,Of)=>{"use strict";var PD=g(),xu=b(),BD=T(),{IPC_ERRORS:ci}=Ke();Of.exports={sendIpcEvent:vD,validateEvent:HD,SchemaEventMsg:qD,UserEventMsg:GD};function vD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):PD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(vD,"sendIpcEvent");function HD(e){if(typeof e!="object")return ci.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||xu.isEmpty(e.type))return ci.MISSING_TYPE;if(!e.hasOwnProperty("message")||xu.isEmpty(e.message))return ci.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||xu.isEmpty(e.message.originator))return ci.MISSING_ORIGIN;if(BD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ci.INVALID_EVENT(e.type)}a(HD,"validateEvent");function qD(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(qD,"SchemaEventMsg");function GD(e){this.originator=e}a(GD,"UserEventMsg")});var tn=h((bZ,bf)=>{"use strict";var Nf=T(),IZ=b(),ao=g(),gf=pf(),{sendIpcEvent:If}=kr();function FD(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(FD,"signalSchemaChange");function VD(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(VD,"signalUserChange");bf.exports={signalSchemaChange:FD,signalUserChange:VD}});var oo=h((CZ,wf)=>{"use strict";var Cf=b(),kD=T(),xD=g(),$D=eo(),YD=ja(),KD=tn(),{SchemaEventMsg:QD}=kr(),WD="already exists in";wf.exports=JD;async function JD(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 ZD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(JD,"lmdbCheckForNewAttributes");async function ZD(e,t,r,s){let n=new YD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await XD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(WD))xD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ZD,"createNewAttribute");async function XD(e){let t;try{return t=await $D(e),KD.signalSchemaChange(new QD(process.pid,kD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(XD,"createAttribute")});var rn=h((wZ,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((LZ,Uf)=>{"use strict";var zD=rn(),jD=T().OPERATIONS_ENUM,_o=class extends zD{constructor(t,r,s,n,i=void 0){super(jD.INSERT,r,s,n,i),this.records=t}};a(_o,"LMDBInsertTransactionObject");Uf.exports=_o});var Mf=h((UZ,Df)=>{"use strict";var eM=rn(),tM=T().OPERATIONS_ENUM,uo=class extends eM{constructor(t,r,s,n,i,o=void 0){super(tM.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(uo,"LMDBUpdateTransactionObject");Df.exports=uo});var Bf=h((yZ,Pf)=>{"use strict";var rM=rn(),sM=T().OPERATIONS_ENUM,lo=class extends rM{constructor(t,r,s,n,i,o=void 0){super(sM.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(lo,"LMDBUpsertTransactionObject");Pf.exports=lo});var Hf=h((DZ,vf)=>{"use strict";var nM=rn(),iM=T().OPERATIONS_ENUM,Eo=class extends nM{constructor(t,r,s,n,i=void 0){super(iM.DELETE,s,n,t,i),this.original_records=r}};a(Eo,"LMDBDeleteTransactionObject");vf.exports=Eo});var _i=h((MZ,Vf)=>{"use strict";var aM=require("path"),qf=Z(),oM=yf(),cM=Mf(),_M=Bf(),uM=Hf(),sn=Ye(),Gf=b(),{CONFIG_PARAMS:lM}=T(),Ff=Y();Ff.initSync();var ho=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:EM}=te();Vf.exports=dM;async function dM(e,t){if(Ff.get(lM.LOGGING_AUDITLOG)===!1)return;let r=aM.join(EM(),e.schema.toString()),s=await qf.openEnvironment(r,e.table,!0),n=hM(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(dM,"writeTransaction");function hM(e,t){let r=Gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ho.INSERT)return new oM(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPDATE)return new cM(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPSERT)return new _M(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.DELETE)return new uM(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(hM,"createTransactionObject")});var $u=h((BZ,kf)=>{"use strict";var SM=to(),PZ=ni(),nn=T(),fM=no(),TM=js().insertRecords,mM=Z(),RM=require("path"),AM=g(),pM=oo(),{getBaseSchemaPath:OM}=te(),NM=_i();kf.exports=gM;async function gM(e){try{let{schema_table:t,attributes:r}=SM(e);fM(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 pM(e.hdb_auth_header,t,r),n=RM.join(OM(),e.schema.toString()),i=await mM.openEnvironment(n,e.table),o=await TM(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await NM(e,o)}catch(c){AM.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(gM,"lmdbCreateRecords")});var Yf=h((vZ,$f)=>{"use strict";var xf=T(),IM=$u(),bM=ni(),CM=require("fs-extra"),wM=require("path"),{getBaseSchemaPath:LM}=te();$f.exports=UM;async function UM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new bM(xf.SYSTEM_SCHEMA_NAME,xf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await IM(r),await CM.mkdirp(wM.join(LM(),e.schema.toString()))}a(UM,"lmdbCreateSchema")});var Qf=h((HZ,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 Qu=h((VZ,Zf)=>{"use strict";var Wf=Z(),Yu=hs(),Ku=Ke().LMDB_ERRORS_ENUM,yM=Ye(),Jf=g(),qZ=b(),DM=require("lmdb"),MM=Qf(),{OVERFLOW_MARKER:GZ,MAX_SEARCH_KEY_LENGTH:FZ}=yM;async function PM(e,t,r){if(Yu.validateEnv(e),t===void 0)throw new Error(Ku.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ku.IDS_REQUIRED):new Error(Ku.IDS_MUST_BE_ARRAY);try{let s=Wf.listDBIs(e);Wf.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,DM.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=Yu.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=Yu.getMicroTime(),n}catch(s){throw s}}a(PM,"deleteRecords");Zf.exports={deleteRecords:PM}});var ui=h((kZ,zf)=>{"use strict";var an=b(),BM=Qu(),vM=Z(),HM=require("path"),{getBaseSchemaPath:qM}=te(),GM=_i(),FM=g();zf.exports=VM;async function VM(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=HM.join(qM(),e.schema.toString()),i=await vM.openEnvironment(n,e.table),o=await BM.deleteRecords(i,s,e.hash_values);try{t===!0&&await GM(e,o)}catch(c){FM.error(`unable to write transaction due to ${c.message}`)}return Xf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(VM,"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 Ju=h(($Z,jf)=>{"use strict";var kM=T(),xZ=hs();function Wu(e,t){let r=Object.create(null);if(t.length===1&&kM.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(Wu,"parseRow");function xM(e,t,r,s){let n=Wu(r,e);s.push(n)}a(xM,"searchAll");function $M(e,t,r,s){let n=Wu(r,e);s[t]=n}a($M,"searchAllToMap");function YM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(YM,"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 KM(e,t,r,s,n,i){t.toString().endsWith(e)&&fs(t,r,s,n,i)}a(KM,"endsWith");function QM(e,t,r,s,n,i){t.toString().includes(e)&&fs(t,r,s,n,i)}a(QM,"contains");function WM(e,t,r,s,n,i){t>e&&fs(t,r,s,n,i)}a(WM,"greaterThanCompare");function JM(e,t,r,s,n,i){t>=e&&fs(t,r,s,n,i)}a(JM,"greaterThanEqualCompare");function ZM(e,t,r,s,n,i){t<e&&fs(t,r,s,n,i)}a(ZM,"lessThanCompare");function XM(e,t,r,s,n,i){t<=e&&fs(t,r,s,n,i)}a(XM,"lessThanEqualCompare");jf.exports={parseRow:Wu,searchAll:xM,searchAllToMap:$M,iterateDBI:YM,endsWith:KM,contains:QM,greaterThanCompare:WM,greaterThanEqualCompare:JM,lessThanCompare:ZM,lessThanEqualCompare:XM,pushResults:fs}});var on=h((QZ,iT)=>{"use strict";var Lt=Z(),zM=g(),ft=hs(),xr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,YZ=b(),jM=T(),Yt=Ju(),KZ=require("lmdb"),{OVERFLOW_MARKER:eT,MAX_SEARCH_KEY_LENGTH:eP}=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=Zu(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=Zu(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 Zu(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(Zu,"getOverflowCheck");function tP(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(tP,"searchAll");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);return fo(r),r=di(e,r),tT(e,t,t,Yt.searchAllToMap.bind(null,r),s,n,i)}a(rP,"searchAllToMap");function sP(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(sP,"iterateDBI");function nP(e,t){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(nP,"countAll");function iP(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(iP,"equals");function aP(e,t,r){return $r(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(aP,"count");function oP(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(oP,"startsWith");function cP(e,t,r,s,n=!1,i=void 0,o=void 0){return rT(e,t,r,s,n,i,o,!0)}a(cP,"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=Zu(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 _P(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(_P,"greaterThan");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,!1,!1)}a(uP,"greaterThanEqual");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"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!0)}a(lP,"lessThan");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,!1)}a(EP,"lessThanEqual");function dP(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(dP,"between");function hP(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(hP,"searchByHash");function SP(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(SP,"checkHashExists");function fP(e,t,r,s,n=[]){nT(e,t,r,s,n);let i=sT(e,t,r,s,n);return Object.values(i)}a(fP,"batchSearchByHash");function TP(e,t,r,s,n=[]){return nT(e,t,r,s,n),sT(e,t,r,s,n)}a(TP,"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 zM.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>eP)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a($r,"validateComparisonFunctions");function di(e,t){return t.length===1&&jM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(di,"setGetWholeRowAttributes");iT.exports={searchAll:tP,searchAllToMap:rP,count:aP,countAll:nP,equals:iP,startsWith:oP,endsWith:cP,contains:rT,searchByHash:hP,setGetWholeRowAttributes:di,batchSearchByHash:fP,batchSearchByHashToMap:TP,checkHashExists:SP,iterateDBI:sP,greaterThan:_P,greaterThanEqual:uP,lessThan:lP,lessThanEqual:EP,between:dP}});var hi=h((JZ,_T)=>{var aT=require("lodash"),oT=de(),Q=require("joi"),mP=b(),{hdb_schema_table:Kt,checkValidTable:cT}=Ar(),{handleHDBError:RP,hdb_errors:AP}=D(),{HTTP_STATUS_CODES:pP}=AP,WZ=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()}),OP=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)}),NP=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,OP);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,NP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=mP.checkGlobalSchemaTable(e.schema,e.table);if(n)return RP(new Error,n,pP.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 Xu=h((ZZ,uT)=>{"use strict";var gP=Z(),IP=hi(),bP=require("path"),{getBaseSchemaPath:CP}=te();uT.exports=wP;function wP(e){let t=IP(e,"hashes");if(t)throw t;let r=bP.join(CP(),e.schema.toString());return gP.openEnvironment(r,e.table)}a(wP,"initialize")});var zu=h((XZ,lT)=>{"use strict";var LP=on(),UP=Xu();lT.exports=yP;async function yP(e){try{let t=await UP(e),r=global.hdb_schema[e.schema][e.table];return LP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(yP,"lmdbGetDataByHash")});var Ts=h((zZ,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((eX,dT)=>{"use strict";var jZ=Ts(),DP=on(),MP=Xu();dT.exports=PP;async function PP(e){try{let t=await MP(e),r=global.hdb_schema[e.schema][e.table];return DP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(PP,"lmdbSearchByHash")});var Qt=h((tX,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((rX,AT)=>{"use strict";var We=on(),BP=Z(),vP=require("path"),HP=b(),U=Ye(),ms=T(),{getBaseSchemaPath:qP}=te(),GP=ds(),fT=Ke().LMDB_ERRORS_ENUM,{compareKeys:cn}=require("ordered-binary"),Or=ms.SEARCH_WILDCARDS;async function FP(e,t,r){let s;e.schema===ms.SYSTEM_SCHEMA_NAME?s=GP[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(FP,"prepSearch");async function TT(e,t,r,s){let n=vP.join(qP(),e.schema.toString()),i=await BP.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(xP(e,r)===!1)return s===!0?kP(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 VP(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(VP,"filterByType");function kP(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(kP,"createMapFromArrays");function xP(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(xP,"checkToFetchMore");function RT(e,t,r,s){if(HP.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:FP,searchByType:mT,filterByType:VP}});var OT=h((nX,pT)=>{"use strict";var sX=Qt(),$P=hi(),YP=b(),KP=T(),QP=Ro();pT.exports=WP;async function WP(e,t){if(!YP.isEmpty(t)&&KP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=$P(e,"value");if(s)throw s;let n=!0;try{return await QP.prepSearch(e,t,n)}catch(i){throw i}}a(WP,"lmdbGetDataByValue")});var _n=h((aX,NT)=>{"use strict";var iX=Qt(),JP=hi(),ZP=b(),XP=T(),zP=Ro();NT.exports=jP;async function jP(e,t){if(!ZP.isEmpty(t)&&XP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=JP(e,"value");if(s)throw s;let n=!1;try{return await zP.prepSearch(e,t,n)}catch(i){throw i}}a(jP,"lmdbSearchByValue")});var IT=h((cX,gT)=>{"use strict";var oX=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((uX,UT)=>{"use strict";var _X=IT().SearchByConditionsObject,eB=Qt(),tB=hi(),ju=on(),No=Ye(),LT=Ro(),rB=Ju(),bT=require("lodash"),{getBaseSchemaPath:sB}=te(),nB=require("path"),iB=Z(),{handleHDBError:CT,hdb_errors:aB}=D(),{HTTP_STATUS_CODES:oB}=aB,cB=1e8,_B={lazy:!0};UT.exports=uB;async function uB(e){try{let t=tB(e,"conditions");if(t)throw CT(t,t.message,oB.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=nB.join(sB(),e.schema.toString()),s=await iB.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=ju.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=cB}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=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,_B);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(rB.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 ju.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw CT(t)}}a(uB,"lmdbSearchByConditions");async function wT(e,t,r,s){let n=new eB(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((lX,DT)=>{"use strict";var lB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=lB.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(go,"DeleteObject");DT.exports=go});var el=h((EX,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 rl=h((hX,PT)=>{"use strict";var EB=Qt(),dB=Si(),dX=el(),rr=T(),hB=b(),tl=Z(),SB=ds(),fB=_n(),TB=ui(),{getBaseSchemaPath:mB}=te(),RB=require("path");PT.exports=AB;async function AB(e,t=!0){let r;e.schema===rr.SYSTEM_SCHEMA_NAME?r=SB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await OB(e),n=RB.join(mB(),e.schema.toString()),i=await tl.openEnvironment(n,e.table);return t===!0&&await pB(e,i,r.hash_attribute),tl.dropDBI(i,e.attribute),s}a(AB,"lmdbDropAttribute");async function pB(e,t,r){let s=tl.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(pB,"removeAttributeFromAllObjects");async function OB(e){let t=new EB(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 fB(t)).filter(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(hB.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 dB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return TB(i)}a(OB,"dropAttributeFromSystem")});var qT=h((SX,HT)=>{"use strict";var NB=rl(),gB=el(),BT=b(),vT=g(),IB=Ke().LMDB_ERRORS_ENUM;HT.exports=bB;async function bB(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 gB(e.schema,e.table,r);try{await NB(n,!1)}catch(i){i.message!==IB.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(bB,"lmdbDropAllAttributes")});var sl=h((TX,QT)=>{"use strict";var xT=Qt(),$T=Si(),YT=_n(),KT=ui(),fX=qT(),ot=T(),GT=b(),FT=Z(),{getBaseSchemaPath:CB,getTransactionAuditStorePath:wB}=te(),VT=require("path"),kT=g();QT.exports=LB;async function LB(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 UB(e),await yB(e);let t=VT.join(CB(),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(wB(),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(LB,"lmdbDropTable");async function UB(e){let t=new xT(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ot.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(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await KT(n)}a(UB,"deleteAttributesFromSystem");async function yB(e){let t=new xT(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ot.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ot.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(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await KT(n)}catch(i){throw i}}a(yB,"dropTableFromSystem")});var JT=h((RX,WT)=>{"use strict";var DB=require("fs-extra"),MB=Qt(),PB=Ts(),BB=Si(),vB=sl(),HB=ui(),qB=zu(),GB=_n(),Nr=T(),mX=b(),FB=require("path"),{getBaseSchemaPath:VB}=te(),{handleHDBError:kB,hdb_errors:xB}=D(),{HDB_ERROR_MSGS:$B,HTTP_STATUS_CODES:YB}=xB;WT.exports=KB;async function KB(e){let t;try{t=await QB(e.schema);let r=new MB(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 GB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await vB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new BB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await HB(n);let i=FB.join(VB(),t.toString());await DB.remove(i)}catch(r){throw r}}a(KB,"lmdbDropSchema");async function QB(e){let t=new PB(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 qB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw kB(new Error,$B.SCHEMA_NOT_FOUND(e),YB.NOT_FOUND,void 0,void 0,!0);return s}a(QB,"validateDropSchema")});var nl=h((AX,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((OX,XT)=>{"use strict";var WB=require("path"),JB=require("fs-extra"),Co=Z(),{getTransactionAuditStorePath:ZB}=te(),il=Ye(),pX=nl();XT.exports=XB;async function XB(e){let t;try{let r=WB.join(ZB(),e.schema.toString());await JB.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,il.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Co.createDBI(t,il.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Co.createDBI(t,il.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(XB,"createTransactionsAuditEnvironment")});var rm=h((NX,tm)=>{"use strict";var al=T(),jT=Z(),zB=js(),jB=require("path"),{getSystemSchemaPath:ev,getBaseSchemaPath:tv}=te(),rv=ds(),sv=eo(),ol=ja(),nv=g(),iv=zT(),_l=rv.hdb_table,em=[];for(let e=0;e<_l.attributes.length;e++)em.push(_l.attributes[e].attribute);tm.exports=av;async function av(e,t){let r=jB.join(tv(),t.schema.toString()),s=new ol(t.schema,t.table,al.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new ol(t.schema,t.table,al.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ol(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(ev(),al.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await zB.insertRecords(o,_l.hash_attribute,em,[e]),await cl(s),await cl(n),await cl(i)}await iv(t)}catch(o){throw o}}a(av,"lmdbCreateTable");async function cl(e){try{await sv(e)}catch(t){nv.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(cl,"createAttribute")});var nm=h((gX,sm)=>{"use strict";var ov=to(),cv=no(),_v=oo(),un=T(),uv=js().updateRecords,lv=Z(),Ev=require("path"),{getBaseSchemaPath:dv}=te(),hv=_i(),Sv=g();sm.exports=fv;async function fv(e){try{let{schema_table:t,attributes:r}=ov(e);cv(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 _v(e.hdb_auth_header,t,r),n=Ev.join(dv(),e.schema.toString()),i=await lv.openEnvironment(n,e.table),o=await uv(i,t.hash_attribute,r,e.records,e[un.CLUSTERING_FLAG]!==!0);try{await hv(e,o)}catch(c){Sv.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(fv,"lmdbUpdateRecords")});var am=h((IX,im)=>{"use strict";var Tv=T().OPERATIONS_ENUM,wo=class{constructor(t,r,s,n=void 0){this.operation=Tv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(wo,"UpsertObject");im.exports=wo});var cm=h((CX,om)=>{"use strict";var bX=am(),mv=to(),Rv=no(),Av=oo(),ln=T(),pv=js().upsertRecords,Ov=Z(),Nv=require("path"),{getBaseSchemaPath:gv}=te(),Iv=_i(),bv=g(),{handleHDBError:Cv,hdb_errors:wv}=D();om.exports=Lv;async function Lv(e){let t;try{t=mv(e)}catch(_){throw Cv(_,_.message,wv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Rv(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 Av(e.hdb_auth_header,r,s),i=Nv.join(gv(),e.schema.toString()),o=await Ov.openEnvironment(i,e.table),c=await pv(o,r.hash_attribute,s,e.records,e[ln.CLUSTERING_FLAG]!==!0);try{await Iv(e,c)}catch(_){bv.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(Lv,"lmdbUpsertRecords")});var hm=h((wX,dm)=>{"use strict";var Uv=Qt(),_m=b(),um=g(),yv=_n(),lm=T(),Dv=Qu().deleteRecords,Mv=Z(),Pv=require("path"),{getBaseSchemaPath:Bv}=te(),{promisify:vv}=require("util"),Hv=vv(setTimeout),Em=1e4,qv=10;dm.exports=Gv;async function Gv(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 Uv(e.schema,e.table,lm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await yv(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 Fv(e,s,t)}a(Gv,"lmdbDeleteRecordsBefore");async function Fv(e,t,r){let s=Pv.join(Bv(),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+=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 Dv(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 Hv(qv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Fv,"chunkDeletes")});var fm=h((LX,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((UX,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((DX,Am)=>{"use strict";var ul=Z(),{getTransactionAuditStorePath:Vv}=te(),yX=fm(),kv=require("path"),fi=Ye(),xv=b(),Rm=mm(),$v=require("util").promisify,Yv=$v(setTimeout),Kv=1e4,Qv=100;Am.exports=Wv;async function Wv(e){let t=kv.join(Vv(),e.schema),r=await ul.openEnvironment(t,e.table,!0),s=ul.listDBIs(r);ul.initializeDBIs(r,fi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Rm;do n=await Jv(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 Yv(Qv);while(n.transactions_deleted>0);return i}a(Wv,"deleteAuditLogsBefore");async function Jv(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];xv.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>Kv)break}return await n,r}catch(s){throw s}}a(Jv,"deleteTransactions")});var wm=h((MX,Cm)=>{"use strict";var ll=Z(),En=Ye(),Om=hs(),El=T(),Nm=b(),{getTransactionAuditStorePath:Zv}=te(),Xv=require("path"),zv=on(),yo=rn(),jv=g();Cm.exports=eH;async function eH(e){let t=Xv.join(Zv(),e.schema),r=await ll.openEnvironment(t,e.table,!0),s=ll.listDBIs(r);ll.initializeDBIs(r,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case El.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gm(r,e.search_values);case El.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,rH(r,e.search_values,n);case El.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return tH(r,e.search_values);default:return gm(r)}}a(eH,"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 tH(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(tH,"searchTransactionsByUsername");function rH(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=zv.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(rH,"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){jv.warn(i)}return r}catch(s){throw s}}a(bm,"batchSearchTransactions")});var Um=h((PX,Lm)=>{"use strict";var sH=require("path"),{getBaseSchemaPath:nH}=te(),iH=Z();Lm.exports={writeTransaction:aH};async function aH(e,t,r){let s=sH.join(nH(),e);return(await iH.openEnvironment(s,t)).transaction(r)}a(aH,"writeTransaction")});var Dm=h((BX,ym)=>{"use strict";var oH=require("path"),{getBaseSchemaPath:cH}=te(),_H=Z();ym.exports={flush:uH};async function uH(e,t){let r=oH.join(cH(),e.toString());return(await _H.openEnvironment(r,t.toString())).flushed}a(uH,"flush")});var Pm=h((vX,Mm)=>{"use strict";var Ae=g(),{handleHDBError:lH}=D(),EH=Ou(),dH=eo(),hH=$u(),SH=Yf(),fH=ui(),TH=zu(),mH=hT(),RH=OT(),AH=_n(),pH=yT(),OH=JT(),NH=rm(),gH=nm(),IH=cm(),bH=hm(),CH=pm(),wH=sl(),LH=rl(),UH=wm(),yH=Um(),DH=Dm(),Do=class extends EH{async searchByConditions(t){try{return pH(t)}catch(r){throw Ae.error(r),r}}async getDataByHash(t){try{return await TH(t)}catch(r){throw Ae.error(r),r}}async searchByHash(t){try{return await mH(t)}catch(r){throw Ae.error(r),r}}async getDataByValue(t,r){try{return await RH(t,r)}catch(s){throw Ae.error(s),s}}async searchByValue(t){try{return await AH(t)}catch(r){throw Ae.error(r),r}}async createSchema(t){try{return await SH(t)}catch(r){throw Ae.error(r),r}}async dropSchema(t){try{return await OH(t)}catch(r){throw Ae.error(r),r}}async createTable(t,r){try{return await NH(t,r)}catch(s){throw Ae.error(s),s}}async dropTable(t){try{return await wH(t)}catch(r){throw Ae.error(r),r}}async createAttribute(t){try{return await dH(t)}catch(r){throw Ae.error(r),r}}async createRecords(t){try{return await hH(t)}catch(r){throw Ae.error(r),r}}async updateRecords(t){try{return await gH(t)}catch(r){throw Ae.error(r),r}}async upsertRecords(t){try{return await IH(t)}catch(r){throw lH(r,null,null,Ae.ERR,r)}}async deleteRecords(t){try{return await fH(t)}catch(r){throw Ae.error(r),r}}async deleteRecordsBefore(t){try{return await bH(t)}catch(r){throw Ae.error(r),r}}async dropAttribute(t){try{return await LH(t)}catch(r){throw Ae.error(r),r}}async deleteAuditLogsBefore(t){try{return await CH(t)}catch(r){throw Ae.error(r),r}}async readAuditLog(t){try{return await UH(t)}catch(r){throw Ae.error(r),r}}writeTransaction(t,r,s){return yH.writeTransaction(t,r,s)}flush(t,r){return DH.flush(t,r)}};a(Do,"LMDBBridge");Mm.exports=Do});var gr=h((HX,vm)=>{"use strict";var MH=Pm(),PH=Ou(),BH=Y();BH.initSync();var Bm;function vH(){return Bm instanceof PH?Bm:new MH}a(vH,"getBridge");vm.exports=vH()});var Fm=h((qX,Gm)=>{"use strict";var Hm=require("lodash"),Ti=require("mathjs"),HH=require("jsonata"),qm=b();Gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hm.uniqWith(e,Hm.isEqual):e,searchJSON:qH,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 qH(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=HH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(qH,"searchJSON")});var km=h((GX,Vm)=>{"use strict";var he=require("moment"),dl="YYYY-MM-DDTHH:mm:ss.SSSZZ";he.suppressDeprecationWarnings=!0;Vm.exports={current_date:()=>he().utc().format("YYYY-MM-DD"),current_time:()=>he().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return he(e).utc().format("YYYY");case"month":return he(e).utc().format("MM");case"day":return he(e).utc().format("DD");case"hour":return he(e).utc().format("HH");case"minute":return he(e).utc().format("mm");case"second":return he(e).utc().format("ss");case"millisecond":return he(e).utc().format("SSS");default:break}},date:e=>he(e).utc().format(dl),date_format:(e,t)=>he(e).utc().format(t),date_add:(e,t,r)=>he(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>he(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=he(e).utc(),n=he(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>he().utc().valueOf(),get_server_time:()=>he().format(dl),offset_utc:(e,t)=>he(e).utc().utcOffset(t).format(dl)}});var Km=h((FX,Ym)=>{"use strict";var GH=require("@turf/area"),FH=require("@turf/length"),VH=require("@turf/circle"),kH=require("@turf/difference"),xH=require("@turf/distance"),$H=require("@turf/boolean-contains"),YH=require("@turf/boolean-equal"),KH=require("@turf/boolean-disjoint"),QH=require("@turf/helpers"),xm=T(),k=b();Ym.exports={geoArea:WH,geoLength:JH,geoCircle:ZH,geoDifference:XH,geoDistance:$m,geoNear:zH,geoContains:jH,geoEqual:eq,geoCrosses:tq,geoConvert:rq};var hl="geo1 is required",Sl="geo2 is required";function WH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),GH.default(e)}a(WH,"geoArea");function JH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),FH.default(e,{units:t||"kilometers"})}a(JH,"geoLength");function ZH(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)),VH.default(e,t,{units:r||"kilometers"})}a(ZH,"geoCircle");function XH(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)),kH(e,t)}a(XH,"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)),xH.default(e,t,{units:r||"kilometers"})}a($m,"geoDistance");function zH(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(zH,"geoNear");function jH(e,t){if(k.isEmpty(e))throw new Error(hl);if(k.isEmpty(e))throw new Error(Sl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),$H.default(e,t)}a(jH,"geoContains");function eq(e,t){if(k.isEmpty(e))throw new Error(hl);if(k.isEmpty(e))throw new Error(Sl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),YH.default(e,t)}a(eq,"geoEqual");function tq(e,t){if(k.isEmpty(e))throw new Error(hl);if(k.isEmpty(e))throw new Error(Sl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!KH.default(e,t)}a(tq,"geoCrosses");function rq(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 QH[t](e,r)}a(rq,"geoConvert")});var Mo=h((VX,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((kX,Jm)=>{"use strict";var Ri=require("lodash"),Me=require("alasql");Me.options.cache=!1;var sq=Mo(),Wm=require("clone"),Po=require("recursive-iterator"),v=g(),q=b(),dn=gr(),nq=T(),{hdb_errors:iq}=D(),aq="IS NULL",Ai="There was a problem performing this search. Please check the logs and try again.";sq(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(nq.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(aq)>-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(iq.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((xX,zm)=>{"use strict";var oq=OS();zm.exports={searchByConditions:lq,searchByHash:Eq,searchByValue:dq,search:hq};var fl=gr(),Xm=require("util"),cq=Xm.callbackify(fl.searchByHash),_q=Xm.callbackify(fl.searchByValue),uq=Zm();async function lq(e){return fl.searchByConditions(e)}a(lq,"searchByConditions");function Eq(e,t){try{cq(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Eq,"searchByHash");function dq(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),_q(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(dq,"searchByValue");function hq(e,t){try{let r=new oq(e);r.validate(),new uq(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(hq,"search")});var Yr=h(($X,rR)=>{"use strict";var pi=require("crypto"),eR="aes-256-cbc",Sq=32,fq=16,Tl=64,tR=32,Tq=Tl+tR,jm=new Map;rR.exports={encrypt:mq,decrypt:Rq,createNatsTableStreamName:Aq};function mq(e){let t=pi.randomBytes(Sq),r=pi.randomBytes(fq),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(mq,"encrypt");function Rq(e){let t=e.substr(0,Tl),r=e.substr(Tl,tR),s=e.substr(Tq,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(Rq,"decrypt");function Aq(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(Aq,"createNatsTableStreamName")});var As=h((YX,_R)=>{"use strict";var nR=mt(),Kr=g(),iR=Za(),pq=require("lodash"),Oq=require("path"),Nq=Yr(),ml=b(),{promisify:aR}=require("util"),j=T(),{handleHDBError:vo,hdb_errors:gq}=D(),{HDB_ERROR_MSGS:Ho,HTTP_STATUS_CODES:oR}=gq,Iq=Y();Iq.initSync();var sR=Z(),bq=te(),Oi=aR(nR.searchByValue),Cq=aR(nR.searchByHash),hn="name",cR="hash_attribute",Rl="schema",wq="schema_table",Lq="attribute";_R.exports={describeAll:Uq,describeTable:qo,describeSchema:Dq};async function Uq(e){try{let t=ml.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(ml.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,Rl]},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(Uq,"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:wq,search_value:r+"."+s,get_attributes:[Lq]},E=await Oi(l);E=pq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=yq(n)),i.attributes=E,i.clustering_stream_name=Nq.createNatsTableStreamName(u.schema,u.name);try{let d=Oq.join(bq.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 yq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(yq,"getAttrsByPerms");async function Dq(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:Rl,search_value:s,hash_values:[],get_attributes:[cR,j.ID_ATTRIBUTE_STRING,hn,Rl]},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 Cq(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]),ml.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(Dq,"describeSchema")});var Qr=h((WX,hR)=>{var KX=require("async"),Sn=ds(),QX=g(),{callbackify:ER,promisify:Mq}=require("util");hR.exports={setSchemaDataToGlobal:uR,getTableSchema:vq,getSystemSchema:qq,setSchemaDataToGlobalAsync:Mq(uR)};var dR=As(),Pq=ER(dR.describeAll),Bq=ER(dR.describeTable);function uR(e){Pq(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 vq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Hq(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(vq,"getTableSchema");function Hq(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}Bq(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(Hq,"setTableDataToGlobal");function qq(){return Sn}a(qq,"getSystemSchema")});var yt=h((JX,TR)=>{"use strict";var Fo=Fu(),Ut=b(),Gq=require("util"),Vo=gr(),Fq=Qr(),Al=g(),{handleHDBError:Wr,hdb_errors:Vq}=D(),{HTTP_STATUS_CODES:ps}=Vq,kq=Gq.promisify(Fq.getTableSchema),xq="updated",SR="inserted",fR="upserted";TR.exports={insert:Yq,update:Kq,upsert:Qq,validation:$q,flush:Wq};async function $q(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 kq(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 Al.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 Al.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($q,"validation");async function Yq(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(Yq,"insertData");async function Kq(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(xq,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(Kq,"updateData");async function Qq(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,Al.ERR,n)}}a(Qq,"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 Wq(e){return Vo.flush(e.schema,e.table)}a(Wq,"flush")});var Ol=h((ZX,AR)=>{var Jq=de(),pl=require("joi"),{hdb_schema_table:mR}=Ar(),RR={schema:mR,table:mR},Zq={date:pl.date().iso().required()},Xq={timestamp:pl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AR.exports=function(e,t){let r=t==="timestamp"?{...RR,...Xq}:{...RR,...Zq},s=pl.object(r);return Jq.validateBySchema(e,s)}});var gR=h((XX,NR)=>{var zq=de(),pR=require("joi"),{hdb_schema_table:OR}=Ar(),jq=pR.object({schema:OR,table:OR,hash_values:pR.array().required()});NR.exports=function(e){return zq.validateBySchema(e,jq)}});var bR=h((zX,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((jX,yR)=>{"use strict";var wR=Ol(),eG=gR(),Yo=b(),CR=require("moment"),LR=g(),{promisify:tG,callbackify:rG}=require("util"),Os=T(),sG=Qr(),Nl=tG(sG.getTableSchema),gl=gr(),{DeleteResponseObject:nG}=bR(),{handleHDBError:Jr,hdb_errors:iG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:Zr}=iG,aG="records successfully deleted",oG=rG(UR);yR.exports={delete:oG,deleteRecord:UR,deleteFilesBefore:cG,deleteAuditLogsBefore:_G};async function cG(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 gl.deleteRecordsBefore(e);if(await Nl(e.schema,e.table),LR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(cG,"deleteFilesBefore");async function _G(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 gl.deleteAuditLogsBefore(e);return await Nl(e.schema,e.table),LR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(_G,"deleteAuditLogsBefore");async function UR(e){let t=eG(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 Nl(e.schema,e.table);let s=await gl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${aG}`),s}catch(s){if(s.message===Os.SEARCH_NOT_FOUND_MESSAGE){let n=new nG;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((e3,PR)=>{var uG=require("crypto"),DR=9;function lG(e){let t=dG(DR),r=MR(e+t);return t+r}a(lG,"createHash");function EG(e,t){let r=e.substr(0,DR),s=r+MR(t+r);return e===s}a(EG,"validateHash");function dG(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(dG,"generateSalt");function MR(e){return uG.createHash("md5").update(e).digest("hex")}a(MR,"md5");PR.exports={hash:lG,validate:EG}});var vR=h((t3,BR)=>{var Il=de(),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 hG(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,Il.validateObject(e,Je)}a(hG,"addUserValidation");function SG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,Il.validateObject(e,Je)}a(SG,"alterUserValidation");function fG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,Il.validateObject(e,Je)}a(fG,"dropUserValidation");BR.exports={addUserValidation:hG,alterUserValidation:SG,dropUserValidation:fG}});var Se=h((s3,qR)=>{"use strict";var{platform:r3}=require("os"),TG="nats-server.zip",bl="nats-server",mG=process.platform==="win32"?`${bl}.exe`:bl,Cl="HDB",RG=/^[^\s.,*>]+$/,HR="__request__",AG=a(e=>`${e}.${HR}`,"REQUEST_SUBJECT"),pG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},OG={HUB:"hub.pid",LEAF:"leaf.pid"},NG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Cl,deliver_subject:"__HDB__.WORKQUEUE"},IG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Cl,deliver_subject:"HDB.SCHEMAQUEUE"},bG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Cl,deliver_subject:"HDB.USERQUEUE"},CG={SUCCESS:"success",ERROR:"error"},wG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},LG={TXN:"txn",MSGID:"msgid"};qR.exports={NATS_SERVER_ZIP:TG,NATS_SERVER_NAME:bl,NATS_BINARY_NAME:mG,PID_FILES:OG,NATS_CONFIG_FILES:pG,SERVER_SUFFIX:NG,WORK_QUEUE_CONSUMER_NAMES:gG,SCHEMA_QUEUE_CONSUMER_NAMES:IG,USER_QUEUE_CONSUMER_NAMES:bG,NATS_TERM_CONSTRAINTS_RX:RG,REQUEST_SUFFIX:HR,UPDATE_REMOTE_RESPONSE_STATUSES:CG,CLUSTER_STATUS_STATUSES:wG,REQUEST_SUBJECT:AG,SUBJECT_PREFIXES:LG}});var FR=h((n3,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((i3,KR)=>{"use strict";var Tn=require("fs-extra"),VR=Qo(),kR=require("crypto"),UG=require("moment"),yG=require("uuid").v4,Ze=g(),Ll=require("path"),DG=b(),Rt=T(),MG=FR().ExtendedLicense,fn="invalid license key format",PG="061183",BG="mofi25",vG="aes-256-cbc",HG=16,qG=32,xR=Y();xR.initSync();var wl;KR.exports={validateLicense:$R,generateFingerPrint:FG,licenseSearch:YR,getLicense:xG};function Ul(){return Ll.join(xR.getHdbBasePath(),Rt.LICENSE_KEY_DIR_NAME,Rt.LICENSE_FILE_NAME)}a(Ul,"getLicenseDirPath");function GG(){let e=Ul();return Ll.join(e,Rt.LICENSE_FILE_NAME)}a(GG,"getLicenseFilePath");function yl(){let e=Ul();return Ll.join(e,Rt.REG_KEY_FILE_NAME)}a(yl,"getFingerPrintFilePath");async function FG(){let e=yl();try{return await Tn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await VG();throw Ze.error(`Error writing fingerprint file to ${e}`),Ze.error(t),new Error("There was an error generating the fingerprint")}}a(FG,"generateFingerPrint");async function VG(){let e=yG(),t=VR.hash(e),r=yl();try{await Tn.mkdirp(Ul()),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(VG,"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=yl(),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(BG),c=o[1];c=Buffer.concat([Buffer.from(c)],HG);let _=Buffer.concat([Buffer.from(i)],qG),u=kR.createDecipheriv(vG,_,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=kG(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<UG().valueOf()&&(r.valid_date=!1),VR.validate(o[1],`${PG}${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 kG(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(kG,"checkOldLicense");function YR(){let e=new MG;e.api_call=0;let t=[];try{t=Tn.readFileSync(GG(),"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(DG.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),wl=e,e}a(YR,"licenseSearch");async function xG(){return wl||await YR(),wl}a(xG,"getLicense")});var Ir=h((a3,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:XG,alterUser:zG,dropUser:eF,userInfo:tF,listUsers:Zo,listUsersExternal:rF,setUsersToGlobal:gi,findAndValidateUser:iF,getClusterUser:aF,USERNAME_REQUIRED:ZR,ALTERUSER_NOTHING_TO_UPDATE:XR,EMPTY_PASSWORD:zR,EMPTY_ROLE:jR,ACTIVE_BOOLEAN:eA};var tA=yt(),$G=Ns(),Ml=Qo(),rA=vR(),sA=mt(),Pl=tn(),Ce=b(),nA=require("validate.js"),H=g(),{promisify:Bl}=require("util"),vl=Yr(),gs=T(),QR=Se(),YG=mr(),Hl=Y(),KG=mn(),QG=ds(),{handleHDBError:nr,hdb_errors:WG}=D(),{HTTP_STATUS_CODES:ir,AUTHENTICATION_ERROR_MSGS:Dl,HDB_ERROR_MSGS:Rn}=WG,{UserEventMsg:ql}=kr(),WR=require("lodash"),iA={username:!0,active:!0,role:!0,password:!0},JR=new Map,Jo=Bl(sA.searchByValue),JG=Bl(sA.searchByHash),ZG=Bl($G.delete);async function XG(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=vl.encrypt(t.password)),t.password=Ml.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,Ce.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.ADD_USER,_,Hl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Pl.signalUserChange(new ql(process.pid)),`${c.username} successfully added`}a(XG,"addUser");async function zG(e){let t=nA.cleanAttributes(e,iA);if(Ce.isEmptyOrZeroLength(t.username))throw new Error(ZR);if(Ce.isEmptyOrZeroLength(t.password)&&Ce.isEmptyOrZeroLength(t.role)&&Ce.isEmptyOrZeroLength(t.active))throw new Error(XR);if(!Ce.isEmpty(t.password)&&Ce.isEmptyOrZeroLength(t.password.trim()))throw new Error(zR);if(!Ce.isEmpty(t.active)&&!Ce.isBoolean(t.active))throw new Error(eA);let r=jG(t.username);if(!Ce.isEmpty(t.password)&&!Ce.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=vl.encrypt(t.password)),t.password=Ml.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,Ce.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.ALTER_USER,i,Hl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Pl.signalUserChange(new ql(process.pid)),n}a(zG,"alterUser");function jG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(jG,"isClusterUser");async function eF(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(Ce.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 ZG(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,Ce.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.DROP_USER,n,Hl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Pl.signalUserChange(new ql(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(eF,"dropUser");async function tF(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 JG(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(tF,"userInfo");async function rF(){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(rF,"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(!Ce.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],sF(c.role),i.set(c.username,c)}return(await KG.getLicense()).enterprise?i:nF(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),Ce.errorizeMessage(e)}return null}a(Zo,"listUsers");function sF(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(QG)){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(sF,"appendSystemTablesToRole");function nF(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(nF,"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 iF(e,t,r=!0){global.hdb_users||await gi();let s=global.hdb_users.get(e);if(!s)throw nr(new Error,Dl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nr(new Error,Dl.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(Ml.validate(s.password,t))JR.set(t,s.password);else throw nr(new Error,Dl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0)}return n}a(iF,"findAndValidateUser");async function aF(){let e=await Zo(),t=YG.getConfigFromFile(gs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Ce.isEmpty(r))return r.decrypt_hash=vl.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(aF,"getClusterUser")});var _A=h((o3,cA)=>{"use strict";var Gl=Z(),oF=g(),oA=Ke().LMDB_ERRORS_ENUM;cA.exports=cF;async function cF(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 Gl.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 Gl.closeEnvironment(global.lmdb_map[s]),await Gl.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){oF.error(t)}}a(cF,"cleanLMDBMap")});var hA=h((c3,dA)=>{"use strict";var Is=g(),Xo=T(),_F=_A(),uA=Qr(),uF=As(),lF=Ir(),{validateEvent:EA}=kr(),EF={[Xo.IPC_EVENT_TYPES.SCHEMA]:dF,[Xo.IPC_EVENT_TYPES.USER]:SF};async function dF(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 _F(e.message),await hF(e.message)}a(dF,"schemaHandler");async function hF(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 uF.describeTable({schema:e.schema,table:e.table});break;default:uA.setSchemaDataToGlobal(lA);break}else uA.setSchemaDataToGlobal(lA)}catch(t){Is.error(t)}}a(hF,"syncSchemaMetadata");function lA(e){e&&Is.error(e)}a(lA,"handleErrorCallback");async function SF(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 lF.setUsersToGlobal()}catch(t){Is.error(t)}}a(SF,"userHandler");dA.exports=EF});var mA=h((_3,TA)=>{"use strict";var fF=require("node-ipc").IPC,SA=b(),fA=T(),br=g(),{IPC_ERRORS:An}=Ke(),TF=require("os"),zo=class{constructor(t,r){this.ipc=new fF,this.server_name=fA.HDB_IPC_SERVER,this.ipc.config.retry=TF.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((u3,RA)=>{var mF=de(),RF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RA.exports=function(e){return mF.validateObject(e,RF)}});var Fl=h((l3,pA)=>{"use strict";var AF=T().OPERATIONS_ENUM,jo=class{constructor(t,r,s,n=void 0){this.operation=AF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(jo,"UpdateObject");pA.exports=jo});var NA=h((E3,OA)=>{"use strict";var pF={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:pF,JWTRSAKeys:tc}});var ic=h((d3,CA)=>{"use strict";var bi=require("jsonwebtoken"),Vl=require("fs-extra"),kl=b(),Dt=T(),{handleHDBError:ct,hdb_errors:OF}=D(),{HTTP_STATUS_CODES:_t,AUTHENTICATION_ERROR_MSGS:ut}=OF,Ii=g(),gA=Qo(),Yl=Ir(),NF=yt().update,gF=Fl(),IF=tn(),{UserEventMsg:bF}=kr(),zr=Y();zr.initSync();var xl=require("path"),{JWTTokens:CF,JWTRSAKeys:wF,TOKEN_TYPE_ENUM:rc}=NA(),LF=zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UF=zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sc="RS256",$l;CA.exports={createTokens:yF,validateOperationToken:MF,refreshOperationToken:DF,validateRefreshToken:bA};async function yF(e){if(kl.isEmpty(e)||typeof e!="object")throw ct(new Error,ut.INVALID_AUTH_OBJECT,_t.BAD_REQUEST,void 0,void 0,!0);if(kl.isEmpty(e.username))throw ct(new Error,ut.USERNAME_REQUIRED,_t.BAD_REQUEST,void 0,void 0,!0);if(kl.isEmpty(e.password))throw ct(new Error,ut.PASSWORD_REQUIRED,_t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Yl.findAndValidateUser(e.username,e.password),!t)throw ct(new Error,ut.INVALID_CREDENTIALS,_t.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ii.error(d),ct(new Error,ut.INVALID_CREDENTIALS,_t.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:UF,algorithm:sc,subject:rc.REFRESH}),_=gA.hash(c),u=new gF(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await NF(u)}catch(d){Ii.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ct(new Error,ut.REFRESH_TOKEN_SAVE_FAILED,_t.INTERNAL_SERVER_ERROR);return IF.signalUserChange(new bF(process.pid)),new CF(o,c)}a(yF,"createTokens");async function IA(e,t,r){return await bi.sign(e,{key:t,passphrase:r},{expiresIn:LF,algorithm:sc,subject:rc.OPERATION})}a(IA,"signOperationToken");async function nc(){if($l===void 0)try{let e=xl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=xl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=xl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Vl.readFile(e)).toString(),n=(await Vl.readFile(t)).toString(),i=(await Vl.readFile(r)).toString();$l=new wF(i,n,s)}catch(e){throw Ii.error(e),ct(new Error,ut.NO_ENCRYPTION_KEYS,_t.INTERNAL_SERVER_ERROR)}return $l}a(nc,"getJWTRSAKeys");async function DF(e){if(!e)throw ct(new Error,ut.INVALID_BODY,_t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ct(new Error,ut.REFRESH_TOKEN_REQUIRED,_t.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(DF,"refreshOperationToken");async function MF(e){try{let t=await nc(),r=await bi.verify(e,t.public_key,{algorithms:sc,subject:rc.OPERATION});return await Yl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ii.warn(t),t.name&&t.name==="TokenExpiredError"?ct(new Error,ut.TOKEN_EXPIRED,_t.FORBIDDEN):ct(new Error,ut.INVALID_TOKEN,_t.UNAUTHORIZED)}}a(MF,"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 Yl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ii.warn(r),r.name&&r.name==="TokenExpiredError"?ct(new Error,ut.TOKEN_EXPIRED,_t.FORBIDDEN):ct(new Error,ut.INVALID_TOKEN,_t.UNAUTHORIZED)}if(!gA.validate(t.refresh_token,e))throw ct(new Error,ut.INVALID_TOKEN,_t.UNAUTHORIZED);return t}a(bA,"validateRefreshToken")});var Kl=h((S3,UA)=>{"use strict";var PF=AA(),pn=require("passport"),BF=require("passport-local").Strategy,vF=require("passport-http").BasicStrategy,HF=require("util"),qF=Ir(),LA=HF.callbackify(qF.findAndValidateUser),h3=Ke(),GF=T(),wA=ic();pn.use(new BF(function(e,t,r){LA(e,t,r)}));pn.use(new vF(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 FF(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===GF.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(FF,"authorize");function VF(e,t){let r=PF(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(VF,"checkPermissions");UA.exports={authorize:FF,checkPermissions:VF}});var ac=h((f3,yA)=>{"use strict";var kF=gr();yA.exports={writeTransaction:xF};function xF(e,t,r){return kF.writeTransaction(e,t,r)}a(xF,"writeTransaction")});var At=h((C3,XA)=>{"use strict";var ar=Y();ar.initSync();var $F=require("fs-extra"),YF=require("semver"),yi=require("path"),{monotonicFactory:KF}=require("ulidx"),QF=KF(),MA=require("util"),PA=require("child_process"),WF=MA.promisify(PA.exec),JF=PA.spawn,ee=Se(),se=T(),zl=b(),Cr=g(),oc=Yr(),ZF=ac(),Ci=mr(),{encode:Jl,decode:BA}=require("msgpackr"),{isEmpty:bs}=zl,vA=Ir(),T3=Ts(),XF=mt(),m3=MA.promisify(XF.searchByHash),{connect:zF,StorageType:HA,RetentionPolicy:qA,AckPolicy:GA,DeliverPolicy:Zl,NatsConnection:R3,JetStreamManager:A3,JetStreamClient:p3,StringCodec:O3,JSONCodec:jF,createInbox:jl,StreamSource:N3,headers:e0,toJsMsg:t0,nuid:g3,JetStreamOptions:I3,ErrorCode:DA,nanos:b3}=require("nats"),{PACKAGE_ROOT:r0}=T(),s0=Ua(),FA=jF(),n0="clustering",i0=s0.engines[ee.NATS_SERVER_NAME],a0=yi.join(r0,"dependencies"),Xl=yi.join(a0,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ql,Wl,wi,Li,Ui,Wt;XA.exports={runCommand:VA,checkNATSServerInstalled:o0,createConnection:eE,getConnection:cc,getJetStreamManager:On,getJetStream:kA,getNATSReferences:Mt,getServerList:_0,createLocalStream:tE,listStreams:xA,deleteLocalStream:u0,getServerConfig:Di,listRemoteStreams:l0,viewStream:E0,publishToStream:d0,createWorkQueueStream:h0,addSourceToWorkStream:$A,request:S0,removeSourceFromWorkStream:KA,reloadNATS:rE,reloadNATSHub:f0,reloadNATSLeaf:T0,extractServerName:YA,requestErrorHandler:m0,updateWorkStream:R0,createLocalTableStream:WA,createTableStreams:A0,purgeTableStream:JA,purgeSchemaTableStreams:p0,getStreamInfo:O0,updateNodeNameLocalStreams:N0,closeConnection:c0};async function VA(e,t=void 0){let{stdout:r,stderr:s}=await WF(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
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
|
+
`,ow={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cw=["*","%"],_w="unauthorized_access",uw="func_val",lw={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Ew={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dw="hdb_ipc_server",hw="hdb_ipc_client_",Sw={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"},fw={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Tw={STOPPED:"stopped",ONLINE:"online"},mw="3.x.x";ah.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:zd,HDB_SUPPORT_URL:eh,HDB_PRICING_URL:Vb,SUPPORT_HELP_MSG:kb,LICENSE_HELP_MSG:th,HDB_PROC_NAME:Jd,HDB_PROC_DESCRIPTOR:eu,CLUSTERING_LEAF_PROC_DESCRIPTOR:ma,CLUSTERING_HUB_PROC_DESCRIPTOR:Ta,SYSTEM_SCHEMA_NAME:oC,HASH_FOLDER_NAME:cC,HDB_HOME_DIR_NAME:_C,UPDATE_FILE_NAME:dC,LICENSE_KEY_DIR_NAME:lC,BOOT_PROPS_FILE_NAME:EC,JOB_TYPE_ENUM:YC,JOB_STATUS_ENUM:HC,SYSTEM_TABLE_NAMES:yC,SYSTEM_TABLE_HASH_ATTRIBUTES:DC,OPERATIONS_ENUM:I,VALID_S3_FILE_TYPES:qC,S3_BUCKET_AUTH_KEYS:GC,VALID_SQL_OPS_ENUM:FC,GEO_CONVERSION_ENUM:kC,HDB_SETTINGS_NAMES:sh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:xC,SERVICE_ACTIONS_ENUM:VC,CLUSTER_MESSAGE_TYPE_ENUM:KC,CLUSTER_CONNECTION_DIRECTION_ENUM:QC,CLUSTER_EVENTS_DEFS_ENUM:XC,PERIOD_REGEX:Jb,DOUBLE_PERIOD_REGEX:Zb,UNICODE_PERIOD:Xb,FORWARD_SLASH_REGEX:zb,UNICODE_FORWARD_SLASH:jb,ESCAPED_FORWARD_SLASH_REGEX:eC,ESCAPED_PERIOD_REGEX:tC,ESCAPED_DOUBLE_PERIOD_REGEX:rC,REG_KEY_FILE_NAME:BC,RESTART_TIMEOUT_MS:fC,HDB_FILE_PERMISSIONS:TC,SCHEMA_DIR_NAME:AC,TRANSACTIONS_DIR_NAME:pC,LIMIT_COUNT_NAME:OC,ID_ATTRIBUTE_STRING:NC,INSERT_MODULE_ENUM:LC,UPGRADE_JSON_FIELD_NAMES_ENUM:UC,RESTART_CODE:hC,RESTART_CODE_NUM:SC,CLUSTER_OPERATIONS:vr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:PC,HDB_INTERNAL_SC_CHANNEL_PREFIX:ht,INTERNAL_SC_CHANNELS:MC,CLUSTERING_MESSAGE_TYPES:nw,HDB_FILE_SUFFIX:uC,BLOB_FOLDER_NAME:mC,HDB_TRASH_DIR:RC,ORIGINATOR_SET_VALUE:iw,LICENSE_VALUES:JC,RAM_ALLOCATION_ENUM:ZC,STORAGE_TYPES_ENUM:WC,TIME_STAMP_NAMES_ENUM:nh,TIME_STAMP_NAMES:tw,PERMS_UPDATE_RELEASE_TIMESTAMP:rw,SEARCH_NOT_FOUND_MESSAGE:xb,SEARCH_ATTRIBUTE_NOT_FOUND:$b,LICENSE_ROLE_DENIED_RESPONSE:Yb,LICENSE_MAX_CONNS_REACHED:Kb,BASIC_LICENSE_MAX_NON_CU_ROLES:jd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Fb,VALUE_SEARCH_COMPARATORS:ih,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sw,LICENSE_FILE_NAME:vC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:zC,NEW_LINE:aw,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Wb,MOMENT_DAYS_TAG:sC,API_TURNOVER_SEC:nC,LOOPBACK:Qb,CODE_EXTENSION:Qn,WILDCARD_SEARCH_VALUE:iC,NODE_ERROR_CODES:jC,JAVASCRIPT_EXTENSION:Wd,PERMS_CRUD_ENUM:ow,UNAUTHORIZED_PERMISSION_NAME:_w,SEARCH_WILDCARDS:cw,FUNC_VAL:uw,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:lw,JWT_ENUM:Ew,CLUSTERING_FLAG:ew,RUN_LOG:IC,INSTALL_LOG:gC,IPC_SERVER_MODULE:Xd,HDB_IPC_SERVER:dw,IPC_EVENT_TYPES:Sw,HDB_IPC_CLIENT_PREFIX:hw,CUSTOM_FUNCTION_PROC_NAME:Zd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:fa,SERVICES:fw,MEM_SETTING_KEY:aC,HDB_RESTART_SCRIPT:Ub,PROCESS_DESCRIPTORS:j_,SERVICE_SERVERS:vb,SERVICE_SERVERS_CWD:Sa,PROCESS_DESCRIPTORS_VALIDATE:Pb,LAUNCH_SERVICE_SCRIPTS:Hb,LOG_LEVELS:Mb,PROCESS_NAME_ENV_PROP:bC,PROCESS_LOG_NAMES:Db,PM2_PROCESS_STATUSES:Tw,CONFIG_PARAM_MAP:$C,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Cb,HDB_DEFAULT_CONFIG_FILE:wb,ROLE_TYPES_ENUM:qb,BOOT_PROP_PARAMS:CC,INSTALL_PROMPTS:wC,HDB_ROOT_DIR_NAME:Lb,CLUSTERING_PROCESSES:Bb,FOREGROUND_PID_FILE:yb,PACKAGE_ROOT:Gt,PRE_4_0_0_VERSION:mw}});var su=h((yJ,_h)=>{"use strict";var oh=require("minimist");_h.exports=Rw;function Rw(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ch(process.env),s=ch(oh(process.argv))):(r=process.env,s=oh(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(Rw,"assignCMDENVVariables");function ch(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ch,"objKeysToLowerCase")});var g=h((DJ,fh)=>{"use strict";var _s=require("fs-extra"),us=require("path"),lh=require("yaml"),Eh=require("properties-reader"),me=T(),Aw=su(),pw=require("os"),{PACKAGE_ROOT:au}=T(),rt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ra=us.join(au,"logs"),Hr=process.env.pm_id===void 0,Ow=us.join(au,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),ou=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Qs,zt,hr,tt,nu,Ws;Ws===void 0&&dh();fh.exports={createLogFile:Nw,notify:bw,fatal:Cw,error:iu,warn:ww,info:gw,debug:Iw,trace:Sh,setLogLevel:Uw,log_level:tt};function dh(){try{if(Ws===void 0){let e=Lw();Ws=Eh(e),{level:tt,config_log_path:nu,to_file:zt,to_stream:hr}=yw(Ws.get("settings_path"))}}catch(e){if(Ws=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=Aw(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){hr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(zt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Dw();zt=zt===void 0?s:zt,zt=uh(zt),hr=hr===void 0?n:hr,hr=uh(hr),tt=tt===void 0?r:tt,nu=Ra;return}throw iu("Error initializing log settings"),iu(e),e}}a(dh,"initLogSettings");function Nw(e,t){if(!Hr){Sh("createLogFile should only be used if the process is not being managed by pm2");return}Ws===void 0&&dh(),ou=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=Ra:r=nu,zt&&(Qs=us.join(r,e),_s.ensureFileSync(Qs))}a(Nw,"createLogFile");function ls(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": "${ou}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
|
+
`}a(ls,"createLogRecord");function hh(e){Qs===void 0&&(ou=me.PROCESS_DESCRIPTORS.INSTALL,_s.ensureDirSync(Ra),Qs=us.join(Ra,me.PROCESS_LOG_NAMES.INSTALL),_s.ensureFileSync(Qs)),_s.appendFileSync(Qs,e)}a(hh,"writeToLogFile");function Aa(e){zt&&hh(e),hr&&process.stdout.write(e)}a(Aa,"nonPm2LogStdOut");function cu(e){zt&&hh(e),hr&&process.stderr.write(e)}a(cu,"nonPm2LogStdErr");function gw(...e){if(rt[tt]<=rt.info){let t=ls("info",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(gw,"info");function Sh(...e){if(rt[tt]<=rt.trace){let t=ls("trace",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(Sh,"trace");function iu(...e){if(rt[tt]<=rt.error){let t=ls("error",e);if(Hr){cu(t);return}process.stderr.write(t)}}a(iu,"error");function Iw(...e){if(rt[tt]<=rt.debug){let t=ls("debug",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(Iw,"debug");function bw(...e){if(rt[tt]<=rt.notify){let t=ls("notify",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(bw,"notify");function Cw(...e){if(rt[tt]<=rt.fatal){let t=ls("fatal",e);if(Hr){cu(t);return}process.stderr.write(t)}}a(Cw,"fatal");function ww(...e){if(rt[tt]<=rt.warn){let t=ls("warn",e);if(Hr){cu(t);return}process.stderr.write(t)}}a(ww,"warn");function Lw(){let e;try{e=pw.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=us.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return _s.existsSync(t)||(t=us.join(au,"utility/hdb_boot_properties.file")),t}a(Lw,"getPropsFilePath");function Uw(e){tt=e}a(Uw,"setLogLevel");function uh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(uh,"autoCastBoolean");function yw(e){try{if(e.includes("config/settings.js")){let o=Eh(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:us.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=lh.parseDocument(_s.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(yw,"getLogConfig");function Dw(){try{let e=lh.parseDocument(_s.readFileSync(Ow,"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(Dw,"getDefaultConfig")});var mh=h((MJ,Th)=>{"use strict";var Mw=require("util"),Pw=require("path"),Bw=require("child_process"),vw=Mw.promisify(Bw.execFile),Hw=1e3*1e3*10;Th.exports={findPs:qw};async function qw(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await vw("ps",["wwxo",`pid,${r}`],{maxBuffer:Hw});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: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.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{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(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(VA,"runCommand");async function o0(){try{await $F.access(Xl)}catch{return!1}let e=await VA(`${Xl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return YF.eq(t,i0)}a(o0,"checkNATSServerInstalled");async function eE(e,t,r,s=!0,n="127.0.0.1"){return zF({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(eE,"createConnection");async function c0(){Wt&&(await Wt.close(),Wt=void 0)}a(c0,"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 eE(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 _0(){let e=ar.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await vA.getClusterUser(),s=await eE(e,t,r),n=jl(),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 zl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(_0,"getServerList");async function tE(e,t){let{jsm:r}=await Mt();await r.streams.add({name:e,storage:HA.File,retention:qA.Limits,subjects:t})}a(tE,"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 u0(e){let{jsm:t}=await Mt();await t.streams.delete(e)}a(u0,"deleteLocalStream");async function l0(e){let{connection:t}=await Mt(),r=[],s=jl(),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(l0,"listRemoteStreams");async function E0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Mt(),i=QF(),o=[],c={ack_policy:GA.None,durable_name:i,deliver_subject:i,deliver_policy:Zl.All};t&&(c.deliver_policy=Zl.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=t0(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(E0,"viewStream");async function d0(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}`,_=e0();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,Jl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")Cr.trace(`publishToStream creating stream: ${t}`),await tE(t,[c]),await i.publish(c,Jl(r[u]),{headers:_});else throw E}}a(d0,"publishToStream");function Di(e){e=e.toLowerCase();let t=yi.join(ar.get(se.CONFIG_PARAMS.ROOTPATH),n0);if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bs(Wl)&&(Wl={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}),Wl;if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bs(Ql)&&(Ql={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}),Ql;Cr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Di,"getServerConfig");async function h0(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:Zl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(h0,"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 S0(e,t,r=2e3,s=jl()){if(!zl.isObject(t))throw new Error("data param must be an object");let n=Jl(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(S0,"request");function rE(e){return new Promise(async(t,r)=>{let s=JF(Xl,["--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(rE,"reloadNATS");async function f0(){let{pid_file_path:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await rE(e)}a(f0,"reloadNATSHub");async function T0(){let{pid_file_path:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await rE(e)}a(T0,"reloadNATSLeaf");function m0(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(m0,"requestErrorHandler");async function R0(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await ZF.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(R0,"updateWorkStream");async function WA(e,t){let r=oc.createNatsTableStreamName(e,t),s=await _c(),n=ZA(e,t,s);await tE(r,[n])}a(WA,"createLocalTableStream");async function A0(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(A0,"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 p0(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(p0,"purgeSchemaTableStreams");async function O0(e){return(await On()).streams.info(e)}a(O0,"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 N0(){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(N0,"updateNodeNameLocalStreams")});var sE=h((w3,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((L3,tp)=>{"use strict";var jA=b(),Pi=Y(),_e=T(),nE=Se(),Nn=At(),fe=g(),ep=sE(),g0=Yr();Pi.initSync();var gn=nE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Mi=nE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;tp.exports={sendAttributeTransaction:Ec,postOperationHandler:b0};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)};fe.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=I0(e,t,r);n&&(fe.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await Nn.publishToStream(`${nE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,g0.createNatsTableStreamName(e.schema,e.table),[n],s))}a(lc,"sendOperationTransaction");function I0(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(I0,"convertCRUDOperationToTransaction");async function b0(e,t,r=[]){if(!Pi.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;fe.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){fe.error("There was an error calling clustering postOperationHandler for insert."),fe.error(o)}break;case _e.OPERATIONS_ENUM.DELETE:try{await lc(e,t.deleted_hashes,i,r)}catch(o){fe.error("There was an error calling clustering postOperationHandler for delete."),fe.error(o)}break;case _e.OPERATIONS_ENUM.UPDATE:try{await lc(e,t.update_hashes,i,r),await Ec(t,e,r)}catch(o){fe.error("There was an error calling clustering postOperationHandler for update."),fe.error(o)}break;case _e.OPERATIONS_ENUM.UPSERT:try{await lc(e,t.upserted_hashes,i,r),await Ec(t,e,r)}catch(o){fe.error("There was an error calling clustering postOperationHandler for upsert."),fe.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){fe.error("There was an error calling clustering postOperationHandler for create_schema."),fe.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){fe.error("There was an error calling clustering postOperationHandler for create_table."),fe.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){fe.error("There was an error calling clustering postOperationHandler for create_attribute."),fe.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){fe.error("There was an error calling clustering postOperationHandler for csv_data_load."),fe.error(o)}break;default:break}return t}a(b0,"postOperationHandler")});var ap=h((U3,ip)=>{"use strict";var C0=mt(),w0=Qr(),rp=g(),sp=yt(),L0=ac(),U0=require("clone"),aE=require("alasql"),y0=Mo(),np=require("util"),D0=np.promisify(w0.getTableSchema),M0=np.promisify(C0.search),P0=T(),iE=b(),B0=In();y0(aE);ip.exports={update:H0};var v0="There was a problem performing this update. Please check the logs and try again.";async function H0({statement:e,hdb_user:t}){let r=await D0(e.table.databaseid,e.table.tableid),s=q0(e.columns);iE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=U0(n),c=iE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=aE.parse(_).statements[0],l=await L0.writeTransaction(r.schema,r.name,async()=>{let E=await M0(u),d=G0(s,E);return F0(o,d,t)});return await sp.flush({schema:r.schema,table:r.name}),l}a(H0,"update");function q0(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=aE.compile(`SELECT ${r.expression.toString()} AS [${P0.FUNC_VAL}] FROM ?`)}),t}catch(t){throw rp.error(t),new Error(v0)}}a(q0,"createUpdateRecord");function G0(e,t){return iE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(G0,"buildUpdateRecords");async function F0(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 B0.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(F0,"updateRecords")});var cp=h((y3,op)=>{var V0=require("alasql"),k0=mt(),x0=g(),$0=gr(),cE=require("util"),oE=b(),Y0=T(),K0=Qr(),Q0=ac(),W0=In(),J0=yt(),Z0="record",X0="successfully deleted",z0=cE.callbackify(rV),j0=cE.promisify(k0.search),eV=cE.promisify(K0.getTableSchema);op.exports={convertDelete:z0};function tV(e){return`${e.deleted_hashes.length} ${Z0}${e.deleted_hashes.length===1?"":"s"} ${X0}`}a(tV,"generateReturnMessage");async function rV({statement:e,hdb_user:t}){let r=await eV(e.table.databaseid,e.table.tableid);oE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=oE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=V0.parse(o).statements[0],_={operation:Y0.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Q0.writeTransaction(r.schema,r.name,async()=>(_.records=await j0(c),$0.deleteRecords(_)));return await J0.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await W0.postOperationHandler(_,u),oE.isEmptyOrZeroLength(u.message)&&(u.message=tV(u)),delete u.txn_time,u}catch(u){throw x0.error(u),u.hdb_code?u.message:u}}a(rV,"convertDelete")});var lp=h((D3,up)=>{"use strict";var uE=As(),{hdb_errors:_E}=D();up.exports={checkSchemaExists:_p,checkSchemaTableExists:sV,schema_describe:uE};async function _p(e){if(!global.hdb_schema[e])try{let t=await uE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return _E.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(_p,"checkSchemaExists");async function sV(e,t){let r=await _p(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await uE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return _E.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return _E.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(sV,"checkSchemaTableExists")});var dc=h((P3,fp)=>{"use strict";var bn=Za(),Cs=lp(),Ep=g(),nV=require("uuid").v4,M3=require("clone"),wn=tn(),ws=T(),iV=require("util"),Ls=gr(),{handleHDBError:Pe,hdb_errors:aV}=D(),{HDB_ERROR_MSGS:Cn,HTTP_STATUS_CODES:Be}=aV,{SchemaEventMsg:Ln}=kr(),dp=At();fp.exports={createSchema:oV,createSchemaStructure:hp,createTable:cV,createTableStructure:Sp,createAttribute:dV,dropSchema:_V,dropTable:uV,dropAttribute:lV};async function oV(e){try{let t=await hp(e);return wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(oV,"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 cV(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(cV,"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:nV(),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 _V(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(_V,"dropSchema");async function uV(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(uV,"dropTable");async function lV(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),EV(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 ${iV.inspect(e)}.`),s}}a(lV,"dropAttribute");function EV(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(EV,"dropAttributeFromGlobal");async function dV(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(dV,"createAttribute")});var mp=h((B3,Tp)=>{"use strict";var{OPERATIONS_ENUM:hV}=T(),hc=class{constructor(t,r,s=void 0,n=void 0){this.operation=hV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(hc,"ReadAuditLogObject");Tp.exports=hc});var lE=h((H3,Np)=>{"use strict";var SV=gr(),v3=mp(),Sc=b(),fc=T(),fV=Y(),{handleHDBError:Rp,hdb_errors:TV}=D(),{HDB_ERROR_MSGS:Ap,HTTP_STATUS_CODES:pp}=TV,mV=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=RV;async function RV(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(!fV.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)&&mV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await SV.readAuditLog(e)}a(RV,"readAuditLog")});var Lp=h((q3,wp)=>{var jr=require("validate.js"),Ip=de(),Un=T(),{handleHDBError:AV,hdb_errors:pV}=D(),{HDB_ERROR_MSGS:ue,HTTP_STATUS_CODES:OV}=pV,EE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),NV={STRUCTURE_USER:"structure_user"},gp=Object.values(Un.ROLE_TYPES_ENUM),gV="attribute_permissions",IV="attribute_name",{PERMS_CRUD_ENUM:yn}=Un,bV=[gV,...Object.values(yn)],bp=[yn.READ,yn.INSERT,yn.UPDATE],CV=[IV,...bp];function wV(e){let t=EE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Cp(e,t)}a(wV,"addRoleValidation");function LV(e){let t=EE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Cp(e,t)}a(LV,"alterRoleValidation");function UV(e){let t=EE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ip.validateObject(e,t)}a(UV,"dropRoleValidation");var yV=["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++)yV.includes(s[o])||n.push(s[o]);n.length>0&&Te(ue.INVALID_ROLE_JSON_KEYS(n),r);let i=Ip.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Te(o,r)}),e.permission){let o=DV(e);o&&Te(o,r),gp.forEach(c=>{e.permission[c]&&!jr.isBoolean(e.permission[c])&&Te(ue.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(gp.indexOf(o)<0){if(o===NV.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]||Te(ue.SCHEMA_NOT_FOUND(E),r)}continue}Te(ue.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Te(ue.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Te(ue.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{bV.includes(l)||Te(ue.INVALID_PERM_KEY(l),r,o,_)}),Object.values(yn).forEach(l=>{jr.isDefined(u[l])?jr.isBoolean(u[l])||Te(ue.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Te(ue.TABLE_PERM_MISSING(l),r,o,_)}),jr.isDefined(u.attribute_permissions)){if(!jr.isArray(u.attribute_permissions)){Te(ue.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Te(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=>{!CV.includes(R)&&R!==yn.DELETE&&Te(ue.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!jr.isDefined(S.attribute_name)){Te(ue.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=S.attribute_name;if(!l.includes(m)){Te(ue.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}bp.forEach(R=>{jr.isDefined(S[R])?jr.isBoolean(S[R])||Te(ue.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):Te(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}.${_}`;Te(ue.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return MV(r)}a(Cp,"customValidate");wp.exports={addRoleValidation:wV,alterRoleValidation:LV,dropRoleValidation:UV};function DV(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(DV,"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 AV(new Error,s,OV.BAD_REQUEST)}else return null}a(MV,"generateRolePermResponse");function Te(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(Te,"addPermError")});var AE=h((G3,Bp)=>{"use strict";var Up=yt(),yp=mt(),PV=Ns(),SE=Lp(),fE=tn(),BV=require("uuid").v4,TE=require("util"),vV=mn(),wr=T(),Dp=b(),mE=TE.promisify(yp.searchByValue),HV=TE.promisify(yp.searchByHash),qV=TE.promisify(PV.delete),GV=Qt(),FV=Ts(),{hdb_errors:VV,handleHDBError:Bi}=D(),{HDB_ERROR_MSGS:Mp,HTTP_STATUS_CODES:dE}=VV,{UserEventMsg:RE}=kr();Bp.exports={addRole:kV,alterRole:$V,dropRole:YV,listRoles:Pp};function hE(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(hE,"scrubRoleDetails");async function kV(e){let t=SE.addRoleValidation(e);if(t)throw t;if(!(await vV.getLicense()).enterprise){let o=await Pp();if(xV(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=hE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await mE(s)}catch(o){throw Bi(o)}if(n&&n.length>0)throw Bi(new Error,Mp.ROLE_ALREADY_EXISTS(e.role),dE.CONFLICT,void 0,void 0,!0);e.id||(e.id=BV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Up.insert(i),fE.signalUserChange(new RE(process.pid)),e=hE(e),e}a(kV,"addRole");function xV(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(xV,"checkClusterUserRole");async function $V(e){let t=SE.alterRoleValidation(e);if(t)throw t;e=hE(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 fE.signalUserChange(new RE(process.pid)),e}a($V,"alterRole");async function YV(e){let t=SE.dropRoleValidation(e);if(t)throw Bi(new Error,t,dE.BAD_REQUEST,void 0,void 0,!0);let r=new FV(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await HV(r);if(s.length===0)throw Bi(new Error,Mp.ROLE_NOT_FOUND,dE.NOT_FOUND,void 0,void 0,!0);let n=new GV(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await mE(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 qV(c),fE.signalUserChange(new RE(process.pid)),`${s[0].role} successfully deleted`}a(YV,"dropRole");async function Pp(){return mE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Pp,"listRoles")});var Gp=h((F3,qp)=>{"use strict";var KV=Y(),es=require("joi"),QV=de(),vp=require("moment"),WV=require("fs-extra"),pE=require("path"),JV=require("lodash"),vi=T(),{LOG_LEVELS:Us}=T(),ZV="YYYY-MM-DD hh:mm:ss",XV=pE.resolve(__dirname,"../logs");qp.exports=function(e){return QV.validateBySchema(e,zV)};var zV=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(jV)});function Hp(e,t){if(vp(e,vp.ISO_8601).format(ZV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Hp,"validateDatetime");function jV(e,t){if(JV.invert(vi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=KV.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?pE.join(XV,vi.PROCESS_LOG_NAMES.INSTALL):pE.join(s,n);return WV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(jV,"validateReadLogPath")});var NE=h((V3,Vp)=>{"use strict";var Tc=T(),Fp=g(),ek=Y(),tk=Gp(),OE=require("path"),rk=require("fs-extra"),sk=require("readline"),{once:nk}=require("events"),{handleHDBError:ik,hdb_errors:ak}=D(),{PACKAGE_ROOT:ok}=T(),ck=OE.join(ok,"logs"),_k=1e3;Vp.exports=uk;async function uk(e){let t=tk(e);if(t)throw ik(t,t.message,ak.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ek.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?OE.join(ck,Tc.PROCESS_LOG_NAMES.INSTALL):OE.join(r,s),i=rk.createReadStream(n);i.on("error",z=>{Fp.error(z)});let o=sk.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?_k: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 nk(o,"close"),B}a(uk,"readLog");function ts(e){e.close(),e.removeAllListeners()}a(ts,"endReadLine");function rs(e,t,r){t==="desc"?lk(e,r):t==="asc"?Ek(e,r):r.push(e)}a(rs,"pushLineToResult");function lk(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(lk,"insertDescending");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,"insertAscending")});var Rc=h(($3,$p)=>{"use strict";var gE=require("joi"),{string:mc,boolean:kp,date:dk}=gE.types(),hk=de(),{validateSchemaExists:k3,validateTableExists:x3,validateSchemaName:Sk}=Ar(),fk=T(),Tk=Se(),mk=Y(),Rk=mc.invalid(mk.get(fk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Tk.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:Rk,subscriptions:gE.array().items({table:mc.required(),schema:mc.custom(Sk).required(),subscribe:kp.required(),publish:kp.required().custom(pk),start_time:dk.iso()}).min(1).required()};function Ak(e){return hk.validateBySchema(e,gE.object(xp))}a(Ak,"addUpdateNodeValidator");function pk(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(pk,"checkForFalsy");$p.exports={addUpdateNodeValidator:Ak,validation_schema:xp}});var Dn=h((Y3,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((K3,Kp)=>{"use strict";var Ok=T().OPERATIONS_ENUM,Oc=class{constructor(t,r,s,n=void 0){this.operation=Ok.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Oc,"UpsertObject");Kp.exports=Oc});var Hi=h((Q3,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((W3,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((J3,jp)=>{"use strict";var Nk=Zp(),Xp=require("path"),zp=te(),gk=Ye(),Mn=Z(),Ik=g();jp.exports=bk;async function bk(e){let t=new Nk;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,gk.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){Ik.warn(`unable to stat table dbi due to ${r}`)}return t}a(bk,"lmdbGetTableSize")});var rO=h((Z3,tO)=>{"use strict";var Ck=T(),bc=class{constructor(t){this.operator=Ck.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(bc,"SystemInformationOperation");tO.exports=bc});var nO=h((X3,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((j3,iO)=>{"use strict";var ve=require("systeminformation"),Pn=g(),wk=T(),Lk=eO(),Uk=As(),yk=Y();yk.initSync();var z3=rO(),Dk=nO(),wc;iO.exports={getHDBProcessInfo:wE,getNetworkInfo:UE,getDiskInfo:LE,getMemoryInfo:CE,getCPUInfo:bE,getTimeInfo:IE,getSystemInformation:yE,systemInformation:Mk,getTableSize:DE};function IE(){return ve.time()}a(IE,"getTimeInfo");async function bE(){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(bE,"getCPUInfo");async function CE(){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(CE,"getMemoryInfo");async function wE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(wk.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(wE,"getHDBProcessInfo");async function LE(){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(LE,"getDiskInfo");async function UE(){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(UE,"getNetworkInfo");async function yE(){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(yE,"getSystemInformation");async function DE(){let e=[],t=await Uk.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Lk(s));return e}a(DE,"getTableSize");async function Mk(e){let t=new Dk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await yE(),t.time=IE(),t.cpu=await bE(),t.memory=await CE(),t.disk=await LE(),t.network=await UE(),t.harperdb_processes=await wE(),t.table_size=await DE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await yE();break;case"time":t.time=IE();break;case"cpu":t.cpu=await bE();break;case"memory":t.memory=await CE();break;case"disk":t.disk=await LE();break;case"network":t.network=await UE();break;case"harperdb_processes":t.harperdb_processes=await wE();break;case"table_size":t.table_size=await DE();break;default:break}return t}a(Mk,"systemInformation")});var ME=h((r2,aO)=>{"use strict";var e2=require("fs-extra"),t2=g();aO.exports={version:Pk,printVersion:vk,nodeVersion:Bk};var ss=Ua();function Pk(){if(ss)return ss.version}a(Pk,"version");function Bk(){if(ss&&ss.engines&&ss.engines["preferred-node"])return ss.engines["preferred-node"]}a(Bk,"nodeVersion");function vk(){ss&&console.log(`HarperDB Version ${ss.version}`)}a(vk,"printVersion")});var Ds=h((i2,uO)=>{"use strict";var Hk=yt(),PE=b(),BE=require("util"),ys=T(),oO=Y();oO.initSync();var qk=Kl(),cO=mt(),{Node:s2,NodeSubscription:n2}=Dn(),Gk=Ts(),Fk=Qp(),{RemotePayloadObject:Vk,RemotePayloadSubscription:kk}=Hi(),{handleHDBError:xk,hdb_errors:$k}=D(),{HTTP_STATUS_CODES:Yk,HDB_ERROR_MSGS:Kk}=$k,Qk=Qt(),Wk=Lc(),Jk=ME(),Zk=BE.promisify(qk.authorize),Xk=BE.promisify(cO.searchByHash),zk=BE.promisify(cO.searchByValue);uO.exports={authHeaderToUser:jk,isEmpty:ex,getNodeRecord:tx,upsertNodeRecord:rx,buildNodePayloads:sx,checkClusteringEnabled:nx,getAllNodeRecords:ix,getSystemInfo:ax,reverseSubscription:_O};async function jk(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Zk(t,null),e}a(jk,"authHeaderToUser");function ex(e){return e==null}a(ex,"isEmpty");async function tx(e){let t=new Gk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Xk(t)}a(tx,"getNodeRecord");async function rx(e){let t=new Fk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Hk.upsert(t)}a(rx,"upsertNodeRecord");function _O(e){if(PE.isEmpty(e.subscribe)||PE.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 sx(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=PE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=_O(c),S=new kk(_,u,l,d,E,c.start_time);n.push(S)}return new Vk(r,t,n,s)}a(sx,"buildNodePayloads");function nx(){if(!oO.get(ys.CONFIG_PARAMS.CLUSTERING_ENABLED))throw xk(new Error,Kk.CLUSTERING_NOT_ENABLED,Yk.BAD_REQUEST,void 0,void 0,!0)}a(nx,"checkClusteringEnabled");async function ix(){let e=new Qk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return zk(e)}a(ix,"getAllNodeRecords");async function ax(){let e=await Wk.getSystemInformation();return{hdb_version:Jk.version(),node_version:e.node_version,platform:e.platform}}a(ax,"getSystemInfo")});var HE=h((a2,fO)=>{"use strict";var vE=At(),lO=b(),EO=Se(),ox=T(),Uc=g(),dO=dc(),cx=nl(),{RemotePayloadObject:_x}=Hi(),{handleHDBError:hO,hdb_errors:ux}=D(),{HTTP_STATUS_CODES:SO}=ux,{NodeSubscription:lx}=Dn();fO.exports=Ex;async function Ex(e,t){let r;try{r=await vE.request(`${t}.${EO.REQUEST_SUFFIX}`,new _x(ox.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=vE.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 cx(c,_,s[c][_].hash_attribute);await dO.createTable(m)}await vE.createLocalTableStream(c,_);let S=new lx(c,_,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(Ex,"reviewSubscriptions")});var Mc=h((o2,RO)=>{"use strict";var{handleHDBError:yc,hdb_errors:dx}=D(),{HTTP_STATUS_CODES:Dc}=dx,{addUpdateNodeValidator:hx}=Rc(),qi=g(),mO=T(),TO=Se(),Sx=b(),qE=At(),Gi=Ds(),fx=Y(),Tx=HE(),{Node:mx,NodeSubscription:Rx}=Dn(),Ax="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",px="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ox=fx.get(mO.CONFIG_PARAMS.CLUSTERING_NODENAME);RO.exports=Nx;async function Nx(e,t=!1){qi.trace("addNode called with:",e),Gi.checkClusteringEnabled();let r=hx(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(!Sx.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 Tx(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Ax,o;let c=Gi.buildNodePayloads(n,Ox,mO.OPERATIONS_ENUM.ADD_NODE,await Gi.getSystemInfo());qi.trace("addNode sending remote payload:",c);let _;try{_=await qE.request(`${s}.${TO.REQUEST_SUFFIX}`,c)}catch(E){qi.error(`addNode received error from request: ${E}`);let d=qE.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 qE.updateWorkStream(S,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new Rx(S.schema,S.table,S.publish,S.subscribe))}let l=new mx(s,u,_.system_info);return await Gi.upsertNodeRecord(l),i.length>0?o.message=px:o.message=`Successfully added '${s}' to manifest`,o}a(Nx,"addNode")});var FE=h((c2,OO)=>{"use strict";var{handleHDBError:Pc,hdb_errors:gx}=D(),{HTTP_STATUS_CODES:Bc}=gx,{addUpdateNodeValidator:Ix}=Rc(),Fi=g(),pO=T(),AO=Se(),bx=b(),GE=At(),Vi=Ds(),Cx=Y(),{cloneDeep:wx}=require("lodash"),Lx=HE(),{NodeSubscription:Ux}=Dn(),yx="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Dx="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mx=Cx.get(pO.CONFIG_PARAMS.CLUSTERING_NODENAME);OO.exports=Px;async function Px(e){Fi.trace("updateNode called with:",e),Vi.checkClusteringEnabled();let t=Ix(e);if(t)throw Pc(t,t.message,Bc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=wx(await Vi.getNodeRecord(r));if(bx.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 Lx(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=yx,o;let c=Vi.buildNodePayloads(n,Mx,pO.OPERATIONS_ENUM.UPDATE_NODE,await Vi.getSystemInfo());Fi.trace("updateNode sending remote payload:",c);let _;try{_=await GE.request(`${r}.${AO.REQUEST_SUFFIX}`,c)}catch(u){Fi.error(`updateNode received error from request: ${u}`);let l=GE.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 GE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await Bx(s[0],n,_.system_info),i.length>0?o.message=Dx:o.message=`Successfully updated '${r}'`,o}a(Px,"updateNode");async function Bx(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 Ux(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Vi.upsertNodeRecord(s)}a(Bx,"updateNodeTable")});var CO=h((_2,bO)=>{"use strict";var IO=require("joi"),{string:NO}=IO.types(),vx=de(),gO=T(),Hx=Y(),qx=Se();bO.exports=Gx;function Gx(e){let t=NO.invalid(Hx.get(gO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(qx.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 vx.validateBySchema(e,r)}a(Gx,"removeNodeValidator")});var Hc=h((u2,MO)=>{"use strict";var{handleHDBError:wO,hdb_errors:Fx}=D(),{HTTP_STATUS_CODES:LO}=Fx,Vx=CO(),ki=g(),UO=Ds(),kx=b(),vc=T(),yO=Se(),DO=At(),xx=Y(),{RemotePayloadObject:$x}=Hi(),{NodeSubscription:Yx}=Dn(),Kx=Si(),Qx=Ns(),Wx=xx.get(vc.CONFIG_PARAMS.CLUSTERING_NODENAME);MO.exports=Jx;async function Jx(e){ki.trace("removeNode called with:",e),UO.checkClusteringEnabled();let t=Vx(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(kx.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 $x(vc.OPERATIONS_ENUM.REMOVE_NODE,Wx,[]),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 Yx(l.schema,l.table,!1,!1);await DO.updateWorkStream(E,r)}let c=new Kx(vc.SYSTEM_SCHEMA_NAME,vc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Qx.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(Jx,"removeNode")});var vO=h((l2,BO)=>{"use strict";var PO=require("joi"),{string:Zx,array:Xx}=PO.types(),zx=de(),jx=Rc();BO.exports=e$;function e$(e){let t=PO.object({operation:Zx.valid("configure_cluster").required(),connections:Xx.items(jx.validation_schema).required()});return zx.validateBySchema(e,t)}a(e$,"configureClusterValidator")});var VE=h((E2,VO)=>{"use strict";var t$=T(),qc=g(),r$=b(),s$=Hc(),n$=Mc(),HO=Ds(),i$=vO(),{handleHDBError:qO,hdb_errors:a$}=D(),{HTTP_STATUS_CODES:GO}=a$,o$="Configure cluster complete.",c$="Failed to configure the cluster. Check the logs for more details.",_$="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";VO.exports=u$;async function u$(e){qc.trace("configure cluster called with:",e),HO.checkClusteringEnabled();let t=i$(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(s$,{operation:t$.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(n$,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(r$.isEmptyOrZeroLength(_))return{message:o$,connections:u};if(l)return{message:_$,failed_nodes:_,connections:u};throw qO(new Error,c$,GO.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(u$,"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 $E=h((d2,QO)=>{"use strict";var xE=Ds(),l$=At(),$O=Y(),Gc=T(),Ms=Se(),E$=b(),kE=g(),{RemotePayloadObject:d$}=Hi(),{ErrorCode:kO}=require("nats"),xO=$O.get(Gc.CONFIG_PARAMS.CLUSTERING_ENABLED),YO=$O.get(Gc.CONFIG_PARAMS.CLUSTERING_NODENAME);QO.exports={clusterStatus:h$,buildNodeStatus:KO};async function h$(){let e={node_name:YO,is_enabled:xO,connections:[]};if(!xO)return e;let t=await xE.getAllNodeRecords();if(E$.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(h$,"clusterStatus");async function KO(e,t){let r=e.name,s=new d$(Gc.OPERATIONS_ENUM.CLUSTER_STATUS,YO,void 0,await xE.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await l$.request(Ms.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Ms.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ms.CLUSTER_STATUS_STATUSES.CLOSED,kE.error(`Error getting node status from ${r} `,n))}catch(_){kE.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 S$(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 xE.upsertNodeRecord(_)}catch(_){kE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(KO,"buildNodeStatus");function S$(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(S$,"NodeStatusObject")});var XO=h((h2,ZO)=>{"use strict";var YE=require("joi"),WO=de(),{route_constraints:JO}=du();ZO.exports={setRoutesValidator:f$,deleteRoutesValidator:T$};function f$(e){let t=YE.object({server:YE.valid("hub","leaf").required(),routes:JO.required()});return WO.validateBySchema(e,t)}a(f$,"setRoutesValidator");function T$(e){let t=YE.object({routes:JO.required()});return WO.validateBySchema(e,t)}a(T$,"deleteRoutesValidator")});var QE=h((S2,tN)=>{"use strict";var Ps=mr(),KE=b(),Fc=T(),zO=XO(),{handleHDBError:jO,hdb_errors:m$}=D(),{HTTP_STATUS_CODES:eN}=m$,R$="cluster routes successfully set",A$="cluster routes successfully deleted";tN.exports={setRoutes:p$,getRoutes:O$,deleteRoutes:N$};function p$(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=KE.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:R$,set:o,skipped:i}}a(p$,"setRoutes");function O$(){let e=Ps.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(O$,"getRoutes");function N$(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=KE.isEmptyOrZeroLength(s)?null:s,Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=KE.isEmptyOrZeroLength(n)?null:n,Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:A$,deleted:i,skipped:o}}a(N$,"deleteRoutes")});var sN=h((f2,rN)=>{"use strict";var xi=require("alasql"),Bs=require("recursive-iterator"),Jt=g(),g$=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,b$(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=I$(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 I$(e){return e.filter(t=>t[$i.PERMS_CRUD_ENUM.READ])}a(I$,"filterReadRestrictedAttrs");function b$(e,t,r,s,n){C$(e,t,r,s,n)}a(b$,"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 C$(e,t,r,s,n){if(!e){Jt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof xi.yy.Insert?y$(e,t,r):e instanceof xi.yy.Select?w$(e,t,r,s,n):e instanceof xi.yy.Update?L$(e,t,r):e instanceof xi.yy.Delete?U$(e,t,r):Jt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(C$,"getRecordAttributesAST");function w$(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(g$.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(w$,"getSelectAttributes");function L$(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&&WE(e.table.tableid,n,i.columnid,t,r)}a(L$,"getUpdateAttributes");function U$(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&&WE(e.table.tableid,n,i.columnid,t,r)}a(U$,"getDeleteAttributes");function y$(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&&WE(e.into.tableid,n,i.columnid,t,r)}a(y$,"getInsertAttributes");function WE(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(WE,"pushAttribute");rN.exports=Vc});var aN=h((T2,iN)=>{var D$=require("os"),nN=Y();iN.exports={checkPermission:M$};function M$(){if(D$.userInfo().username!==nN.get("install_user"))throw new Error(`Error: Must execute as ${nN.get("install_user")}`)}a(M$,"checkPermission")});var ZE=h((m2,lN)=>{var xc=mn(),oN=require("chalk"),or=g(),cN=aN(),_N=require("prompt"),{promisify:P$}=require("util"),kc=T(),B$=require("fs-extra"),v$=require("path"),H$=b(),q$=ME(),uN=Y();uN.initSync();var G$=require("moment"),F$=P$(_N.get),V$=v$.join(uN.getHdbBasePath(),kc.LICENSE_KEY_DIR_NAME,kc.LICENSE_FILE_NAME,kc.LICENSE_FILE_NAME);lN.exports={getFingerprint:x$,setLicense:k$,parseLicense:JE,register:$$,getRegistrationInfo:K$};async function k$(e){if(e&&e.key&&e.company){try{or.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JE(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(k$,"setLicense");async function x$(){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(x$,"getFingerprint");async function JE(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 B$.writeFile(V$,JSON.stringify({license_key:e,company:t}))}catch(s){throw or.error("Failed to write License"),s}return"Registration successful."}a(JE,"parseLicense");async function $$(){let e=await Y$();return JE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a($$,"register");async function Y$(){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 F$(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Y$,"promptForRegistration");async function K$(){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(H$.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=q$.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=G$.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(K$,"getRegistrationInfo")});var dN=h((R2,EN)=>{"use strict";var Q$=Se(),$c=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,this.server_name=r+Q$.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((A2,SN)=>{"use strict";var hN=Se(),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((p2,TN)=>{"use strict";var Kc=class{constructor(t,r){this.user=t,this.password=r}};a(Kc,"HdbUserObject");TN.exports=Kc});var AN=h((O2,RN)=>{"use strict";var W$=Se(),Qc=class{constructor(t,r){this.user=t+W$.SERVER_SUFFIX.ADMIN,this.password=r}};a(Qc,"SysUserObject");RN.exports=Qc});var jE=h((N2,NN)=>{"use strict";var Bn=require("path"),Xc=require("fs-extra"),J$=dN(),Z$=fN(),X$=mN(),z$=AN(),XE=Ir(),Hn=b(),Pt=mr(),Zc=T(),Wc=Se(),{CONFIG_PARAMS:we}=Zc,zc=g(),jc=Y(),pN=Yr(),zE=At(),vn="clustering",j$=1e4,ON=5;NN.exports={generateNatsConfig:eY,removeNatsConfig:tY};async function eY(e=!1,t=void 0){jc.initSync();let r=jc.get(we.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(we.CLUSTERING_TLS_CERTIFICATE),u=Pt.getConfigFromFile(we.CLUSTERING_TLS_PRIVATEKEY),l=Pt.getConfigFromFile(we.CLUSTERING_TLS_CERT_AUTH),E=Pt.getConfigFromFile(we.CLUSTERING_TLS_INSECURE),d=Pt.getConfigFromFile(we.CLUSTERING_NODENAME),S=Pt.getConfigFromFile(we.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await zE.checkNATSServerInstalled()||e_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await XE.listUsers(),R=Pt.getConfigFromFile(we.CLUSTERING_USER),w=await XE.getClusterUser();(Hn.isEmpty(w)||w.active!==!0)&&e_(`invalid cluster user '${R}'`),e||(await Jc(we.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Jc(we.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Jc(we.CLUSTERING_HUBSERVER_NETWORK_PORT),await Jc(we.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 z$(Br.username,pN.decrypt(Br.hash))),B.push(new X$(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 J$(Pt.getConfigFromFile(we.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,S,Pt.getConfigFromFile(we.CLUSTERING_HUBSERVER_CLUSTER_NAME),Pt.getConfigFromFile(we.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 Z$(Pt.getConfigFromFile(we.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(eY,"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 unavailable`)}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 tY(e){let{port:t,config_file:r}=zE.getServerConfig(e),{username:s,decrypt_hash:n}=await XE.getClusterUser(),i=0,o=500;for(;i<ON;){try{let u=await zE.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(j$),_=Bn.join(jc.get(we.ROOTPATH),vn,r);await Xc.writeFile(_,c),await Xc.remove(_)}a(tY,"removeNatsConfig")});var r_=h((g2,UN)=>{"use strict";var ne=Y(),gN=mn(),C=T(),ed=Se(),pe=require("path"),{PACKAGE_ROOT:t_}=T(),le="/dev/null",qn=pe.join(t_,"launchServiceScripts"),IN=pe.join(t_,"utility/scripts"),rY=pe.join(IN,C.HDB_RESTART_SCRIPT),bN=pe.resolve(t_,"dependencies",`${process.platform}-${process.arch}`,ed.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=pe.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=pe.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=pe.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 sY(){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=pe.join(e,"clustering",ed.NATS_CONFIG_FILES.HUB_SERVER),r=pe.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(sY,"generateNatsHubServerConfig");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=pe.join(e,"clustering",ed.NATS_CONFIG_FILES.LEAF_SERVER),r=pe.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(nY,"generateNatsLeafServerConfig");function iY(){cr(),ne.initSync();let e=pe.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(iY,"generateNatsIngestServiceConfig");function aY(){cr(),ne.initSync();let e=pe.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(aY,"generateNatsReplyServiceConfig");function oY(){cr(),ne.initSync();let e=pe.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(oY,"generateClusteringUpgradeV4ServiceConfig");function cY(){cr();let e=pe.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:rY}}a(cY,"generateRestart");function _Y(e){cr();let t=pe.join(qe,C.PROCESS_LOG_NAMES.JOBS),r=pe.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:pe.join(r,"jobProcess.js")}}a(_Y,"generateJobConfig");function uY(){return{apps:[CN(),wN(),LN()]}}a(uY,"generateAllServiceConfigs");UN.exports={generateAllServiceConfigs:uY,generateIPCServerConfig:CN,generateHDBServerConfig:wN,generateCFServerConfig:LN,generateRestart:cY,generateNatsHubServerConfig:sY,generateNatsLeafServerConfig:nY,generateNatsIngestServiceConfig:iY,generateNatsReplyServiceConfig:aY,generateClusteringUpgradeV4ServiceConfig:oY,generateJobConfig:_Y}});var Qi=h((I2,VN)=>{"use strict";var P=T(),s_=b(),Ki=jE(),n_=At(),lY=Se(),x=require("pm2"),EY=require("fs-extra"),Lr=r_(),lt=Y(),Ur=g(),dY=r_(),hY=Ds(),SY=require("util"),DN=SY.promisify(require("child_process").exec),MN=require("path");VN.exports={start:vs,stop:a_,reload:BN,restart:vN,list:rd,describe:o_,connect:_r,kill:qN,startAllServices:IY,startService:i_,getUniqueServicesList:sd,restartAllServices:bY,stopAllServices:CY,isServiceRegistered:GN,reloadStopStart:td,restartHdb:HN,deleteProcess:NY,configureLogRotate:UY,startClustering:FN,isHdbRestartRunning:gY,isClusteringRunning:DY,stopClustering:yY,reloadClustering:MY};var{PACKAGE_ROOT:fY}=T(),TY="2.7.0",PN=MN.join(fY,"node_modules/pm2/bin/pm2"),mY="Log rotate installed.",RY="Error installing log rotate.",AY="Log rotate updated.",pY="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 _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 NY(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(NY,"deleteProcess");async function HN(){await vs(dY.generateRestart())}a(HN,"restartHdb");async function gY(){let e=await rd();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(gY,"isHdbRestartRunning");function rd(){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(rd,"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 IY(){try{await FN(),await vs(Lr.generateAllServiceConfigs())}catch(e){throw x.disconnect(),e}}a(IY,"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 sd(){try{let e=await rd(),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(sd,"getUniqueServicesList");async function bY(e=[]){try{let t=!1,r=await sd();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 td(o):await vN(o))}t&&await td(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw x.disconnect(),t}}a(bY,"restartAllServices");async function CY(){try{let e=await sd();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(),lt.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await EY.readFile(MN.join(lt.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(CY,"stopAllServices");async function GN(e){return!s_.isEmptyOrZeroLength(await o_(e))}a(GN,"isServiceRegistered");async function td(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?lt.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):lt.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(OY):(await a_(e),await i_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await HN():await BN(e)}a(td,"reloadStopStart");function wY(){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(wY,"stopLogrotate");async function LY(){let{stdout:e,stderr:t}=await DN(`${process.platform==="win32"?"node":""} ${PN} install pm2-logrotate@${TY}`);if(Ur.debug(`loadLogRotate stdout: ${e}`),t)throw Ur.error(RY),t;Ur.info(mY)}a(LY,"installLogRotate");async function yN(){let e={max_size:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:lt.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:lt.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(pY),s;Ur.info(AY)}a(yN,"updateLogRotateConfig");async function UY(){lt.initSync();let e=s_.autoCastBoolean(lt.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 LY(),await yN();return}if(e&&s){await vs(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await yN();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await wY()}a(UY,"configureLogRotate");async function FN(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await i_(r)}await n_.createWorkQueueStream(lY.WORK_QUEUE_CONSUMER_NAMES),await n_.updateNodeNameLocalStreams();let e=await hY.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 yY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await a_(t)}}a(yY,"stopClustering");async function DY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await GN(t)===!1)return!1}return!0}a(DY,"isClusteringRunning");async function MY(){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(MY,"reloadClustering")});var cd=h((b2,KN)=>{"use strict";var y=T(),K=g(),c_=b(),PY=nu(),nd=jE(),od=At(),BY=Se(),xN=require("minimist"),{handleHDBError:id,hdb_errors:vY}=D(),Wi=mr(),{HTTP_STATUS_CODES:ad}=vY,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.",HY="Invalid service",qY="'service' is required",GY="Restarting all services",FY="Clustering is not enabled so cannot be restarted";KN.exports={stop:kY,restartProcesses:VY,restartService:$N};async function VY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Qi());let e=PY(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(GY),await G.restartAllServices(i),kN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(VY,"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 id(new Error,qY,ad.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw id(new Error,HY,ad.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),id(new Error,o,ad.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 kY(){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(kY,"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 od.updateNodeNameLocalStreams(),await od.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(FY);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 nd.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await od.createWorkQueueStream(BY.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 nd.generateNatsConfig(!0,e),await G.restart(e),await nd.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(Gn,"restartClustering")});var sg=h((w2,rg)=>{"use strict";var C2=require("lodash"),Xe=T(),{handleHDBError:QN,hdb_errors:xY}=D(),{HDB_ERROR_MSGS:$Y,HTTP_STATUS_CODES:YY}=xY,_d=g();rg.exports={getRolePermissions:QY};var qs=Object.create(null),KY=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"),ud=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],[ld]:t[ld],[Ed]:t[Ed]}),"attr_perms_template"),JN=a((e,t=!1)=>({attribute_name:e,describe:t,[Ji]:t}),"timestamp_attr_perms_template"),{READ:Ji,INSERT:ld,UPDATE:Ed}=Xe.PERMS_CRUD_ENUM,jN=Object.values(Xe.PERMS_CRUD_ENUM),eg=[Ji,ld,Ed];function QY(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=WY(e,r);return qs[t]?qs[t].key=s:qs[t]=KY(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 _d.error(s),_d.debug(r),QN(new Error,$Y.OUTDATED_PERMS_TRANSLATION_ERROR,YY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw _d.error(s),QN(new Error)}}}a(QY,"getRolePermissions");function WY(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]=JY(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=ZY(c,_);r[i].describe||jN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=ud()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ud()})}),r}a(WY,"translateRolePermissions");function JY(e){let t=XN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ud(!0,!0,!0,!0,!0)}),t}a(JY,"createStructureUserPermissions");function ZY(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||XY(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(ZY,"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 XY(e,t){eg.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(XY,"checkForHashPerms")});var ug=h((L2,_g)=>{"use strict";var Ee=require("joi"),ng=require("fs-extra"),ig=require("path"),Fn=de(),ag=Y(),og=T(),cg=g(),{hdb_errors:zY}=D(),{HDB_ERROR_MSGS:ze}=zY,ns=/^[a-zA-Z0-9-_]+$/;_g.exports={getDropCustomFunctionValidator:eK,setCustomFunctionValidator:tK,addCustomFunctionProjectValidator:rK,dropCustomFunctionProjectValidator:sK,packageCustomFunctionProjectValidator:nK,deployCustomFunctionProjectValidator:iK};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(ze.PROJECT_EXISTS):e?r.message(ze.NO_PROJECT):t}catch(s){return cg.error(s),r.message(ze.VALIDATION_ERR)}}a(Zi,"checkProjectExists");function jY(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(ze.NO_FILE)}catch(n){return cg.error(n),s.message(ze.VALIDATION_ERR)}}a(jY,"checkFileExists");function eK(e){let t=Ee.object({project:Ee.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":ze.BAD_PROJECT_NAME}),type:Ee.string().valid("helpers","routes").required(),file:Ee.string().pattern(ns).custom(jY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":ze.BAD_FILE_NAME})});return Fn.validateBySchema(e,t)}a(eK,"getDropCustomFunctionValidator");function tK(e){let t=Ee.object({project:Ee.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":ze.BAD_PROJECT_NAME}),type:Ee.string().valid("helpers","routes").required(),file:Ee.string().pattern(ns).required().messages({"string.pattern.base":ze.BAD_FILE_NAME}),function_content:Ee.string().required()});return Fn.validateBySchema(e,t)}a(tK,"setCustomFunctionValidator");function rK(e){let t=Ee.object({project:Ee.string().pattern(ns).custom(Zi.bind(null,!1)).required().messages({"string.pattern.base":ze.BAD_PROJECT_NAME})});return Fn.validateBySchema(e,t)}a(rK,"addCustomFunctionProjectValidator");function sK(e){let t=Ee.object({project:Ee.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":ze.BAD_PROJECT_NAME})});return Fn.validateBySchema(e,t)}a(sK,"dropCustomFunctionProjectValidator");function nK(e){let t=Ee.object({project:Ee.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":ze.BAD_PROJECT_NAME}),skip_node_modules:Ee.boolean()});return Fn.validateBySchema(e,t)}a(nK,"packageCustomFunctionProjectValidator");function iK(e){let t=Ee.object({project:Ee.string().pattern(ns).required().messages({"string.pattern.base":ze.BAD_PROJECT_NAME}),payload:Ee.string().required().messages({"string.pattern.base":ze.BAD_PACKAGE}),file:Ee.string().required().messages({"string.pattern.base":ze.BAD_FILE_PATH})});return Fn.validateBySchema(e,t)}a(iK,"deployCustomFunctionProjectValidator")});var hd=h((U2,Eg)=>{"use strict";var me=require("fs-extra"),__=require("fast-glob"),ie=require("path"),lg=require("tar-fs"),aK=require("uuid").v4,Xi=require("normalize-path"),Gs=ug(),Le=g(),pt=T(),Ot=Y(),{PACKAGE_ROOT:oK}=T(),{handleHDBError:je,hdb_errors:cK}=D(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:et}=cK,_K=ie.join(oK,"custom_function_template"),u_=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 je(new Error,is.NOT_ENABLED,et.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 je(new Error,is.FUNCTION_STATUS,et.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:me.existsSync(Xi(`${s}/static`))&&__.sync(Xi(`${s}/static/**/*`)).length}})}catch(r){throw je(new Error,is.GET_FUNCTIONS,et.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 je(t,t.message,et.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 me.readFileSync(o,{encoding:"utf8"})}catch(c){throw je(new Error,is.GET_FUNCTION,et.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 je(t,t.message,et.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 me.outputFileSync(ie.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw je(new Error,is.SET_FUNCTION,et.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 je(t,t.message,et.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 me.unlinkSync(ie.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw je(new Error,is.DROP_FUNCTION,et.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 je(t,t.message,et.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 me.mkdirSync(n,{recursive:!0}),me.copySync(_K,n),`Successfully created custom function project: ${s}`}catch(n){throw je(new Error,is.ADD_FUNCTION,et.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 je(t,t.message,et.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 me.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw je(new Error,is.DROP_FUNCTION_PROJECT,et.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 je(t,t.message,et.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=aK();if(!me.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}me.ensureDirSync(u_);let c=ie.join(u_,`${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(me.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=me.readFileSync(c,{encoding:"base64"});return me.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 je(t,t.message,et.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);return me.existsSync(o)||me.mkdirSync(o,{recursive:!0}),me.existsSync(u_)||me.mkdirSync(u_),me.writeFileSync(i,n,{encoding:"base64"}),await new Promise(_=>setTimeout(_,2e3)),me.createReadStream(i).pipe(lg.extract(o)),me.unlinkSync(i),`Successfully deployed project: ${s}`}a(mK,"deployCustomFunctionProject");Eg.exports={customFunctionsStatus:uK,getCustomFunctions:lK,getCustomFunction:EK,setCustomFunction:dK,dropCustomFunction:hK,addCustomFunctionProject:SK,dropCustomFunctionProject:fK,packageCustomFunctionProject:TK,deployCustomFunctionProject:mK}});var Sd=h((y2,hg)=>{"use strict";var ur=require("joi"),dg=de();hg.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 dg.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 dg.validateBySchema(e,t)}a(AK,"deleteTransactionLogsBeforeValidator")});var E_=h((D2,Rg)=>{"use strict";var fd=T(),l_=At(),Sg=b(),fg=Y(),Tg=Yr(),{handleHDBError:Vn,hdb_errors:pK}=D(),{HTTP_STATUS_CODES:kn}=pK,{readTransactionLogValidator:OK,deleteTransactionLogsBeforeValidator:NK}=Sd(),mg="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.";Rg.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(!fg.get(fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Vn(new Error,mg,kn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=Sg.checkSchemaTableExist(r,s);if(n)throw Vn(new Error,n,kn.NOT_FOUND,void 0,void 0,!0);let i=Tg.createNatsTableStreamName(r,s),o=await l_.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(!fg.get(fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Vn(new Error,mg,kn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=Sg.checkSchemaTableExist(r,s);if(i)throw Vn(new Error,i,kn.NOT_FOUND,void 0,void 0,!0);let o=Tg.createNatsTableStreamName(r,s),{jsm:c}=await l_.getNATSReferences(),_=await l_.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 l_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(CK,"deleteTransactionLogsBefore")});var md=h((M2,Lg)=>{"use strict";var d_=require("joi"),h_=require("path"),Ag=require("fs-extra"),{exec:wK}=require("child_process"),LK=require("util"),pg=LK.promisify(wK),UK=T(),{handleHDBError:xn,hdb_errors:yK}=D(),{HTTP_STATUS_CODES:$n}=yK,Og=Y(),DK=de(),S_=g();Og.initSync();var Td=Og.get(UK.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),Ng="npm install --omit=dev --json",MK=`${Ng} --dry-run`;Lg.exports={installModules:PK,auditModules:BK};async function gg(e,t=void 0){let{stdout:r,stderr:s}=await pg(e,{cwd:t});if(s)throw new Error(s.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 unavailable`)}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(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(Ig,"runCommand");async function PK(e){h_.info(`starting installModules for request: ${e}`);let t=Lg(e);if(t)throw xn(t,t.message,$n.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?MK:gg;await Cg(),await wg(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=d_.join(Td,_),l,E=null;try{let{stdout:d,stderr:S}=await Og(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(Ig,"parseNPMStdErr");async function BK(e){S_.info(`starting auditModules for request: ${e}`);let t=wg(e);if(t)throw xn(t,t.message,$n.BAD_REQUEST);let{projects:r}=e;await bg(),await Cg(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=h_.join(Td,o);s[o]={npm_output:null,npm_error:null};try{let _=await gg("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=Ig(_.stderr)}}return S_.info(`finished auditModules with response ${s}`),s}a(BK,"auditModules");async function bg(){try{return await gg("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(bg,"checkNPMInstalled");async function Cg(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=h_.join(Td,i.toString());if(!await Ag.pathExists(o)){t.push(i);continue}let _=h_.join(o,"package.json");await Ag.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(Cg,"checkProjectPaths");function wg(e){let t=d_.object({projects:d_.array().min(1).items(d_.string()).required(),dry_run:d_.boolean().default(!1)});return DK.validateBySchema(e,t)}a(wg,"modulesValidator")});var yg=h((P2,Ug)=>{"use strict";var f_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(f_,"PermissionTableResponseObject");Ug.exports=f_});var Mg=h((B2,Dg)=>{"use strict";var T_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(T_,"PermissionAttributeResponseObject");Dg.exports=T_});var Rd=h((v2,Bg)=>{"use strict";var Pg=yg(),vK=Mg(),{HDB_ERROR_MSGS:HK}=Ke(),m_=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 Pg(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 Pg(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(m_,"PermissionResponseObject");Bg.exports=m_});var O_=h((H2,Zg)=>{"use strict";var Ad=yt(),R_=mt(),vt=dc(),ea=As(),pd=Ns(),qK=lE(),ta=Ir(),A_=AE(),Oe=g(),GK=NE(),FK=Mc(),VK=FE(),kK=Hc(),xK=VE(),$K=$E(),Od=QE(),yr=b(),YK=sN(),Nd=ZE(),qg=cd(),Bt=T(),Gg=sg(),KK=Lc(),Fg=ic(),Vg=mr(),Dr=hd(),QK=require("alasql"),kg=E_(),xg=md(),$g=Rd(),{handleHDBError:Et,hdb_errors:Yg}=D(),{HDB_ERROR_MSGS:Ge,HTTP_STATUS_CODES:zi}=Yg,p=new Map,Kg="delete",as="insert",lr="read",Fs="update",ji="describe",vg=ea.describeSchema.name,Hg=ea.describeTable.name,Qg={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},WK="catchup",JK="handleGetJob",ZK="handleGetJobsByStartDate",p_={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],Wg={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(R_.searchByConditions.name,new O(!1,[lr]));p.set(R_.searchByHash.name,new O(!1,[lr]));p.set(R_.searchByValue.name,new O(!1,[lr]));p.set(R_.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,[Kg]));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(A_.listRoles.name,new O(!0,[]));p.set(A_.addRole.name,new O(!0,[]));p.set(A_.alterRole.name,new O(!0,[]));p.set(A_.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(Vg.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(qg.restartProcesses.name,new O(!0,[]));p.set(qg.restartService.name,new O(!0,[]));p.set(qK.name,new O(!0,[]));p.set(KK.systemInformation.name,new O(!0,[]));p.set(Vg.getConfiguration.name,new O(!0,[]));p.set(kg.readTransactionLog.name,new O(!0,[]));p.set(kg.deleteTransactionLogsBefore.name,new O(!0,[]));p.set(xg.installModules.name,new O(!0,[]));p.set(xg.auditModules.name,new O(!0,[]));p.set(Fg.createTokens.name,new O(!1,[]));p.set(Fg.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(p_.CSV_DATA_LOAD,new O(!1,[as,Fs]));p.set(p_.CSV_URL_LOAD,new O(!1,[as,Fs]));p.set(p_.CSV_FILE_LOAD,new O(!1,[as,Fs]));p.set(p_.IMPORT_FROM_S3,new O(!1,[as,Fs]));p.set(Wg.EXPORT_TO_S3,new O(!1,[lr]));p.set(Wg.EXPORT_LOCAL,new O(!1,[lr]));p.set(Bt.VALID_SQL_OPS_ENUM.DELETE,new O(!1,[Kg]));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]));Zg.exports={verifyPerms:jK,verifyPermsAst:zK,verifyBulkLoadAttributePerms:tQ};function zK(e,t,r){if(yr.isEmptyOrZeroLength(e))throw Oe.info("verify_perms_ast has an empty user parameter"),Et(new Error);if(yr.isEmptyOrZeroLength(t))throw Oe.info("verify_perms_ast has an empty user parameter"),Et(new Error);if(yr.isEmptyOrZeroLength(r))throw Oe.info("verify_perms_ast has a null operation parameter"),Et(new Error);try{let s=new $g,n=new YK(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Oe.info("No schemas defined in verifyPermsAst(), will not continue."),Et(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&Qg[r])throw Et(new Error,Ge.DROP_SYSTEM,zi.FORBIDDEN);if(c&&!_)return null;let u=Gg.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=Jg(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 Oe.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 $g;if(yr.isEmptyOrZeroLength(e.hdb_user.role)||yr.isEmptyOrZeroLength(e.hdb_user.role.permission))return Oe.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&&Qg[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=Gg.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===vg||r===Hg){if(n===Bt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ge.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===vg&&(!E[n]||!E[n][ji]))return c.handleInvalidItem(Ge.SCHEMA_NOT_FOUND(n));if(r===Hg&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][ji]))return c.handleInvalidItem(Ge.TABLE_NOT_FOUND(n,i))}}let d=Jg(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 Jg(e,t,r,s,n){if(yr.arrayHasEmptyValues([e,t,r]))throw Oe.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 Oe.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 Oe.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)&&(Oe.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 Oe.error(S),Oe.error(d),Et(Yg.CHECK_LOGS_WRAPPER(S))}}}return r.size<2?s.getPermsResponse():null}a(Jg,"hasPermissions");function gd(e,t,r,s,n,i,o){if(!e||!t)throw Oe.info("no attributes specified in checkAttributePerms."),Et(new Error);let c=p.get(r).perms;if(!c||c==="")throw Oe.info(`no permissions found for ${r} in checkAttributePerms().`),Et(new Error);if(yr.isEmptyOrZeroLength(t))return Oe.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){Oe.info(r)}return t}a(eQ,"getRecordAttributes");function Id(e,t,r){let s=new Map;if(yr.isEmpty(e))return Oe.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{Oe.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 g_=h((q2,tI)=>{"use strict";tI.exports={evaluateSQL:fQ,processAST:eI,convertSQLToAST:jg,checkASTPermissions:zg};var Xg=yt(),wd=require("util"),rQ=wd.callbackify(Xg.insert),sQ=mt().search,nQ=ap().update,iQ=wd.callbackify(nQ),aQ=cp().convertDelete,os=require("alasql"),oQ=O_(),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),Xg.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.",N_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(N_,"ParsedSQLObject");function fQ(e,t){let r=e.parsed_sql_object;if(!r){r=jg(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)}eI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(fQ,"evaluateSQL");function zg(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(zg,"checkASTPermissions");function jg(e){let t=new N_;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(jg,"convertSQLToAST");function eI(e,t,r){try{let s=TQ;if(!e.bypass_auth&&!t.permissions_checked){let i=zg(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(eI,"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((G2,aI)=>{var L_=require("clone"),U_=de(),AQ=b(),w_=T(),pQ=g(),I_=require("fs"),{hdb_errors:OQ,handleHDBError:na}=D(),{HDB_ERROR_MSGS:NQ,HTTP_STATUS_CODES:b_}=OQ,{common_validators:C_}=Ar(),rI=1e9,Ld=" is required",gQ=["insert","update","upsert"],y_={schema:{presence:!0,format:C_.schema_format,length:C_.schema_length},table:{presence:!0,format:C_.schema_format,length:C_.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}=w_.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"]}},sI=L_(y_);sI.data.presence={message:Ld};var nI=L_(y_);nI.file_path.presence={message:Ld};var UQ=Object.assign(L_(y_),LQ),iI=L_(y_);iI.csv_url.presence={message:Ld};function yQ(e){let t=U_.validateObject(e,sI);return D_(e,t)}a(yQ,"dataObject");function DQ(e){let t=U_.validateObject(e,iI);return D_(e,t)}a(DQ,"urlObject");function MQ(e){let t=U_.validateObject(e,nI);return D_(e,t)}a(MQ,"fileObject");function PQ(e){let t=U_.validateObject(e,UQ);return D_(e,t)}a(PQ,"s3FileObject");function D_(e,t){if(!t){let r=AQ.checkGlobalSchemaTable(e.schema,e.table);if(r)return na(new Error,r,b_.BAD_REQUEST);if(e.operation===w_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{I_.accessSync(e.file_path,I_.constants.R_OK|I_.constants.F_OK)}catch(s){return s.code===w_.NODE_ERROR_CODES.ENOENT?na(s,`No such file or directory ${s.path}`,b_.BAD_REQUEST):s.code===w_.NODE_ERROR_CODES.EACCES?na(s,`Permission denied ${s.path}`,b_.BAD_REQUEST):na(s)}try{let s=I_.statSync(e.file_path).size;if(s>rI)return na(new Error,NQ.MAX_FILE_SIZE_ERR(s,rI),b_.BAD_REQUEST)}catch(s){pQ.error(s),console.error(s)}}}return t}a(D_,"postValidateChecks");aI.exports={dataObject:yQ,urlObject:DQ,fileObject:MQ,s3FileObject:PQ}});var yd=h((F2,oI)=>{"use strict";var ia=g(),M_=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===M_.OPERATIONS_ENUM.INSERT||t.operation===M_.OPERATIONS_ENUM.UPDATE||t.operation===M_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===M_.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");oI.exports={callOperationFunctionAsAwait:BQ}});var Dd=h((V2,_I)=>{"use strict";var vQ=require("aws-sdk/clients/s3");_I.exports={getFileStreamFromS3:HQ,getS3AuthObj:cI};function HQ(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return cI(t.aws_access_key_id,t.aws_secret_access_key).getObject(r).createReadStream()}a(HQ,"getFileStreamFromS3");function cI(e,t){return new vQ({accessKeyId:e,secretAccessKey:t})}a(cI,"getS3AuthObj")});var lI=h((k2,uI)=>{"use strict";var P_=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(P_,"BulkLoadFileObject");var B_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(B_,"BulkLoadDataObject");uI.exports={BulkLoadFileObject:P_,BulkLoadDataObject:B_}});var Hd=h((x2,wI)=>{"use strict";var v_=yt(),G_=Ud(),qQ=require("needle"),Nt=T(),GQ=Se(),aa=b(),{handleHDBError:ae,hdb_errors:AI}=D(),{HTTP_STATUS_CODES:Fe,HDB_ERROR_MSGS:Ne,CHECK_LOGS_WRAPPER:xs}=AI,ks=g(),H_=require("papaparse");aa.promisifyPapaParse();var Zt=require("fs-extra"),FQ=require("path"),{chain:EI}=require("stream-chain"),dI=require("stream-json/streamers/StreamArray"),hI=require("stream-json/utils/Batch"),SI=require("stream-chain/utils/comp"),{finished:fI}=require("stream"),Md=Y(),VQ=In(),pI=yd(),kQ=Dd(),{BulkLoadFileObject:Pd,BulkLoadDataObject:xQ}=lI(),Bd=Rd(),{verifyBulkLoadAttributePerms:OI}=O_(),$Q=sE(),YQ=At(),KQ=Yr(),TI="No records parsed from csv file.",Vs=`${Md.get("HDB_ROOT")}/tmp`,{schema_regex:QQ}=Ar(),mI=1024*1024*5,RI=5e3,WQ={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};wI.exports={csvDataLoad:JQ,csvURLLoad:ZQ,csvFileLoad:XQ,importFromS3:zQ};async function JQ(e,t=[]){let r=G_.dataObject(e);if(r)throw ae(r,r.message,Fe.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=H_.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&&OI(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 pI.callOperationFunctionAsAwait(II,c,bI.bind(null,n.meta.fields),t),s.message===TI?TI:CI(s.records,s.number_written)}catch(n){throw $s(n)}}a(JQ,"csvDataLoad");async function ZQ(e){let t=G_.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(Ne.DOWNLOAD_FILE_ERR(r)+" - "+n),ae(n,xs(Ne.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 q_(s),i}catch(n){throw await q_(s),$s(n)}}a(ZQ,"csvURLLoad");async function XQ(e){let t=G_.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=G_.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 q_(r),o}catch(s){throw await q_(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(Ne.S3_DOWNLOAD_ERR+" - "+r),ae(r,xs(Ne.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(Ne.WRITE_TEMP_FILE_ERR),ae(r,xs(Ne.DEFAULT_BULK_LOAD_ERR))}}a(tW,"writeFileToTempFolder");async function q_(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(q_,"deleteTempFile");function rW(e,t){if(e.statusCode!==AI.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,Ne.DEFAULT_BULK_LOAD_ERR,Fe.BAD_REQUEST,Nt.LOG_LEVELS.ERROR,Ne.INVALID_FILE_EXT_ERR(e))}return CI(t.records,t.number_written)}catch(t){throw $s(t)}}a(vd,"fileLoad");async function NI(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 v_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&OI(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ae(c);r(_)}}a(NI,"validateChunk");async function gI(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 pI.callOperationFunctionAsAwait(II,c,bI.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ae(c,xs(Ne.INSERT_CSV_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Ne.INSERT_CSV_ERR+" - "+c);r(_)}}a(gI,"insertChunk");async function sW(e){let t={records:0,number_written:0};try{let r=new Bd,s=Zt.createReadStream(e.file_path,{highWaterMark:mI});s.setEncoding("utf8"),await H_.parsePromise(s,NI.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:mI}),s.setEncoding("utf8"),await H_.parsePromise(s,gI.bind(null,e,t)),s.destroy(),t}catch(r){throw ae(r,xs(Ne.PAPA_PARSE_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Ne.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=EI([Zt.createReadStream(e.file_path,{encoding:"utf-8"}),dI.withParser(),c=>c.value,new hI({batchSize:RI}),SI(async c=>{await NI(e,s,r,c)})]);await new Promise((c,_)=>{fI(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ae(new Error,i,Fe.BAD_REQUEST);let o=EI([Zt.createReadStream(e.file_path,{encoding:"utf-8"}),dI.withParser(),c=>c.value,new hI({batchSize:RI}),SI(async c=>{await gI(e,t,r,c)})]);return await new Promise((c,_)=>{fI(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ae(s,xs(Ne.INSERT_JSON_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Ne.INSERT_JSON_ERR+s)}}a(nW,"insertJson");async function II(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(II,"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=v_.insert;break;case"update":i=v_.update;break;case"upsert":i=v_.upsert;break;default:throw ae(new Error,Ne.INVALID_ACTION_PARAM_ERR(s),Fe.BAD_REQUEST,Nt.LOG_LEVELS.ERROR,Ne.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 bI(e,t,r,s=[]){try{if(t.data.length===0||!Md.get(Nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=H_.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(bI,"postCSVLoadFunction");function CI(e,t){return`successfully loaded ${t} of ${e} records`}a(CI,"buildResponseMsg");function $s(e){return ae(e,xs(Ne.DEFAULT_BULK_LOAD_ERR),Fe.INTERNAL_SERVER_ERROR,Nt.LOG_LEVELS.ERROR,Ne.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($s,"buildTopLevelErrMsg")});var Gd=h(($2,vI)=>{"use strict";var yI=mt(),oW=g_(),cW=Dd(),{AsyncParser:_W,Transform:uW}=require("json2csv"),oa=require("stream"),lW=require("events"),Ht=b(),qd=require("fs-extra"),EW=require("path"),tt=g(),{promisify:F_}=require("util"),ca=b(),{handleHDBError:ge,hdb_errors:dW}=D(),{HDB_ERROR_MSGS:gt,HTTP_STATUS_CODES:Ie}=dW,LI=["search_by_value","search_by_hash","sql"],UI=["json","csv"],DI="json",MI="csv",hW="Successfully exported JSON locally.",SW="Successfully exported CSV locally.",fW=1e3,TW=1e3,mW=F_(yI.searchByHash),RW=F_(yI.searchByValue),AW=F_(oW.evaluateSQL),pW=F_(oa.finished);vI.exports={export_to_s3:IW,export_local:OW};async function OW(e){tt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=PI(e);if(!Ht.isEmpty(t))throw tt.error(t),ge(new Error,t,Ie.BAD_REQUEST,void 0,void 0,!0);if(Ht.isEmpty(e.path))throw tt.error(gt.MISSING_VALUE("path")),ge(new Error,gt.MISSING_VALUE("path"),Ie.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 BI(e);return await gW(s,e.format,n)}catch(n){throw tt.error(n),new Error(n)}}a(OW,"export_local");async function NW(e){if(tt.trace("in confirmPath"),Ht.isEmptyOrZeroLength(e))throw ge(new Error,`Invalid path: ${e}`,Ie.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,tt.error(s),ge(new Error,s,Ie.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 tt.error(r),ge(new Error,r,Ie.BAD_REQUEST,void 0,void 0,!0)}return!0}a(NW,"confirmPath");async function gW(e,t,r){if(tt.trace("in saveToLocal"),ca.isEmptyOrZeroLength(e))throw ge(new Error,gt.INVALID_VALUE("file_path"),Ie.BAD_REQUEST,void 0,void 0,!0);if(ca.isEmptyOrZeroLength(t))throw ge(new Error,gt.INVALID_VALUE("Source format"),Ie.BAD_REQUEST,void 0,void 0,!0);if(ca.isEmpty(r))throw ge(new Error,gt.NOT_FOUND("Data"),Ie.BAD_REQUEST,void 0,void 0,!0);if(t===DI){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===MI){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 ge(new Error,gt.INVALID_VALUE("format"),Ie.BAD_REQUEST)}a(gW,"saveToLocal");async function IW(e){if(!e.s3||Object.keys(e.s3).length===0)throw ge(new Error,gt.MISSING_VALUE("S3 object"),Ie.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ge(new Error,gt.MISSING_VALUE("aws_access_key_id"),Ie.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ge(new Error,gt.MISSING_VALUE("aws_secret_access_key"),Ie.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.bucket))throw ge(new Error,gt.MISSING_VALUE("bucket"),Ie.BAD_REQUEST);if(Ht.isEmptyOrZeroLength(e.s3.key))throw ge(new Error,gt.MISSING_VALUE("key"),Ie.BAD_REQUEST);let t=PI(e);if(!Ht.isEmpty(t))throw ge(new Error,t,Ie.BAD_REQUEST);tt.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await BI(e)}catch(c){throw tt.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===MI){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===DI){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 ge(new Error,gt.INVALID_VALUE("format"),Ie.BAD_REQUEST);try{s=await n.upload({Bucket:e.s3.bucket,Key:i,Body:o}).promise()}catch(c){throw tt.error(c),c}return s}a(IW,"export_to_s3");function PI(e){if(tt.trace("in exportCoreValidation"),Ht.isEmpty(e.format))return"format missing";if(UI.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${UI.join(", ")}`;let t=e.search_operation.operation;if(Ht.isEmpty(t))return"search_operation.operation missing";if(LI.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${LI.join(", ")}`}a(PI,"exportCoreValidation");async function BI(e){tt.trace("in getRecords");let t,r;if(ca.isEmpty(e.search_operation)||ca.isEmptyOrZeroLength(e.search_operation.operation))throw ge(new Error,gt.INVALID_VALUE("Search operation"),Ie.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.`,tt.error(r),ge(new Error,r,Ie.BAD_REQUEST)}e.search_operation.hdb_user=e.hdb_user;try{return t(e.search_operation)}catch(s){throw tt.error(s),s}}a(BI,"getRecords")});var qI=h((Y2,HI)=>{"use strict";var V_=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(V_,"SqlSearchObject");HI.exports=V_});var VI=h((K2,FI)=>{"use strict";var bW=T(),GI=require("moment"),CW=require("uuid").v4,k_=class{constructor(){this.id=CW(),this.type=void 0,this.start_datetime=GI().valueOf(),this.created_datetime=GI().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(k_,"JobObject");FI.exports=k_});var Vd=h((Q2,QI)=>{"use strict";var wW=require("uuid").v4,$I=yt(),YI=mt(),LW=Qt(),UW=Ts(),yW=qI(),oe=T(),DW=VI(),MW=Fl(),qt=g(),PW=ni(),Yn=b(),{promisify:Fd}=require("util"),Ys=require("moment"),BW=g_(),x_=Ud(),kI=Ol(),{deleteTransactionLogsBeforeValidator:vW}=Sd(),{handleHDBError:HW,hdb_errors:qW}=D(),{HTTP_STATUS_CODES:GW}=qW,xI=Fd(YI.searchByValue),FW=Fd(YI.searchByHash),VW=$I.insert,kW=Fd(BW.evaluateSQL),xW=$I.update;QI.exports={addJob:KW,updateJob:WW,handleGetJob:$W,handleGetJobsByStartDate:YW,getJobById:KI};async function $W(e){try{let t=await KI(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=x_.fileObject(e);break;case oe.OPERATIONS_ENUM.CSV_URL_LOAD:s=x_.urlObject(e);break;case oe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=x_.dataObject(e);break;case oe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=x_.s3FileObject(e);break;case oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=kI(e,"date");break;case oe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=kI(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 xI(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 xI(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 KI(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(KI,"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 jI=h((W2,zI)=>{"use strict";var WI=b(),It=T(),JW=require("moment"),$_=Hd(),Y_=g(),JI=Vd(),ZI=Gd(),XI=Ns(),ZW=r_(),XW=Qi(),zW=E_(),K_=class{constructor(t,r){this.job=t,this.json=r}};a(K_,"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(WI.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(WI.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,$_.csvFileLoad);break;case It.JOB_TYPE_ENUM.csv_url_load:await Mr(e,$_.csvURLLoad);break;case It.JOB_TYPE_ENUM.csv_data_load:await Mr(e,$_.csvDataLoad);break;case It.JOB_TYPE_ENUM.import_from_s3:await Mr(e,$_.importFromS3);break;case It.JOB_TYPE_ENUM.empty_trash:break;case It.JOB_TYPE_ENUM.export_local:await Mr(e,ZI.export_local);break;case It.JOB_TYPE_ENUM.export_to_s3:await Mr(e,ZI.export_to_s3);break;case It.JOB_TYPE_ENUM.delete_files_before:case It.JOB_TYPE_ENUM.delete_records_before:await Mr(e,XI.deleteFilesBefore);break;case It.JOB_TYPE_ENUM.delete_audit_logs_before:await Mr(e,XI.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 JI.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):Y_.error(`There was an error running ${t.name} job with id ${e.job.id}`),Y_.error(s),e.job.message=s,e.job.status=It.JOB_STATUS_ENUM.ERROR;try{await JI.updateJob(e.job)}catch(n){throw Y_.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);Y_.trace("launching job process:",e),await XW.start(t)}a(e1,"launchJobProcess");zI.exports={parseMessage:jW,RunnerMessage:K_}});var tb=h((J2,eb)=>{"use strict";var Q_=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(Q_,"OperationFunctionObject");eb.exports=Q_});var hb=h((Z2,db)=>{"use strict";var Z_=mt(),Yd=g_(),W_=Hd(),Kn=dc(),kd=As(),ua=Ns(),t1=lE(),_a=Ir(),J_=AE(),Pr=hd(),Ve=g(),r1=NE(),s1=Mc(),n1=FE(),i1=Hc(),a1=VE(),o1=$E(),xd=QE(),rb=Gd(),c1=O_(),Kd=Vd(),A=T(),{hdb_errors:Ea,handleHDBError:la}=D(),{HTTP_STATUS_CODES:sb}=Ea,$d=ZE(),nb=cd(),X_=require("util"),Ks=yt(),_1=Qr(),u1=Lc(),lb=In(),ib=jI(),ab=ic(),ob=mr(),cb=E_(),_b=md(),l1=yd(),E1=X_.promisify(Z_.searchByHash),d1=X_.promisify(Z_.searchByValue),h1=X_.promisify(Z_.search),S1=X_.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=tb();function T1(e,t,r){return Promise.all([lb.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 ub=p1();db.exports={chooseOperation:R1,getOperationFunction:Eb,processLocalTransaction:m1};function R1(e){let t;try{t=Eb(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(`${sb.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(`${sb.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 Eb(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),ub.has(e.operation))return ub.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(Eb,"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 lb.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 ib.RunnerMessage(t,e);return await ib.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(Z_.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,W_.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(Er,W_.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(Er,W_.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(Er,W_.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(J_.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(J_.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(J_.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(J_.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(ob.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,rb.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,rb.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(nb.restartProcesses)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(nb.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(ab.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(ab.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(ob.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(cb.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(Er,cb.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(_b.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(_b.auditModules)),e}a(p1,"initializeOperationFunctionMap")});var mb=h((X2,Tb)=>{"use strict";var O1=T(),N1=b(),dr=g(),{handleHDBError:Qd,hdb_errors:z_}=D(),Sb=require("os"),g1=require("util"),I1=Kl(),b1=g1.promisify(I1.authorize),fb=hb();function C1(e){let t=`Found an uncaught exception with message: ${e.message}. ${Sb.EOL}Stack: ${e.stack} ${Sb.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:z_.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.",z_.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.",z_.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,z_.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=fb.chooseOperation(e.body),fb.processLocalTransaction(e,r)}catch(s){throw dr.error(s),s}}a(v1,"handlePostRequest");Tb.exports={authHandler:B1,handlePostRequest:v1,handleServerUncaughtException:C1,serverErrorHandler:M1,reqBodyValidationHandler:P1,handleBeforeExit:w1,handleExit:L1,handleSigint:U1,handleSigquit:y1,handleSigterm:D1}});var Ob=h(()=>{"use strict";var H1=require("cluster"),Xt=Y();Xt.initSync();var Ab=T(),q1=require("util"),dt=g(),Rb=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:z2}=T(),J1=Qr(),Z1=b(),X1=Ir(),z1=mn(),j1=hA(),eJ=mA(),tJ=q1.promisify(J1.setSchemaDataToGlobal),{authHandler:rJ,handlePostRequest:sJ,handleServerUncaughtException:nJ,serverErrorHandler:iJ,reqBodyValidationHandler:aJ,handleBeforeExit:oJ,handleExit:cJ,handleSigint:_J,handleSigquit:uJ,handleSigterm:lJ}=mb(),EJ=1024*1024*1024,pb="TRUE",{HDB_SETTINGS_NAMES:cs}=Ab,dJ=cs.CORS_ENABLED_KEY,hJ="CORS_ACCESSLIST",SJ=cs.SERVER_TIMEOUT_KEY,fJ=cs.SERVER_KEEP_ALIVE_TIMEOUT_KEY,TJ=cs.SERVER_HEADERS_TIMEOUT_KEY,mJ=cs.PRIVATE_KEY_KEY,RJ=cs.CERT_KEY,AJ=cs.HTTP_SECURE_ENABLED_KEY,pJ=cs.SERVER_PORT_KEY,j_;async function OJ(){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 eJ(process.pid,j1)}catch(n){throw dt.error("Error instantiating new instance of IPC client in HDB server"),dt.error(n),n}process.on("uncaughtException",nJ),process.on("beforeExit",oJ),process.on("exit",cJ),process.on("SIGINT",_J),process.on("SIGQUIT",uJ),process.on("SIGTERM",lJ),await NJ();let e=Xt.get(AJ),t=Xt.get(pJ),r=e&&(e===!0||e.toUpperCase()===pb);j_=gJ(r),await j_.ready();let s=r?"HTTPS":"HTTP";try{await j_.listen({port:t,host:"::"}),dt.info(`HarperDB ${F1.version} ${s} Server running on port ${t}`)}catch(n){throw j_.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(OJ,"hdbServer");async function NJ(){try{dt.trace("Configuring HarperDB process."),await tJ(),await X1.setUsersToGlobal(),await z1.getLicense()}catch(e){dt.error(e)}}a(NJ,"setUp");function gJ(e){dt.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=IJ(e),r=G1(t);r.server.headersTimeout=CJ(),r.setErrorHandler(iJ);let s=bJ();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(__dirname,"../../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(Ab.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Z1.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[aJ,rJ],config:{serializers:[{regex:/^application\/(x-)?msgpack$/,serializer:Y1}]}},async function(i,o){return sJ(i)}),dt.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(gJ,"buildServer");function IJ(e){let t=Xt.get(SJ),r=Xt.get(fJ),s={bodyLimit:EJ,connectionTimeout:t,keepAliveTimeout:r};if(e){let n=Xt.get(mJ),i=Xt.get(RJ),o={key:Rb.readFileSync(`${n}`),cert:Rb.readFileSync(`${i}`)};s.https=o}return s}a(IJ,"getServerOptions");function bJ(){let e=Xt.get(dJ),t=Xt.get(hJ),r;if(e&&(e===!0||e.toUpperCase()===pb)&&(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(bJ,"getCORSOpts");function CJ(){return Xt.get(TJ)}a(CJ,"getHeaderTimeoutConfig");(async()=>await OJ())()});Ob();
|
|
12
|
+
`,""):null}catch(d){d.stderr?i[_].npm_error=bg(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 h_.info(`finished installModules with response ${i}`),i}a(PK,"installModules");function bg(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(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();
|